내 시스템에서 LZMA 압축 커널 모듈을 사용하고 싶습니다. 불행하게도 Canoncial은 커널과 사용자 공간 도구 모두에서 이 기능을 비활성화합니다. 지금까지 내가 한 일은 다음과 같습니다.
현재 컴파일 및 설치14.04.05-LTS 커널(v4.4.19):
CONFIG_MODULE_COMPRESS=y CONFIG_MODULE_COMPRESS_XZ=y
설치 후에는 이제 여러
.ko.xz
파일을 볼 수 있습니다/lib/modules/4.4.19-37.56+/kernel/
.kmod_22
--with-xz
이 옵션이 구성된 Xenial(16.04)에서 Trusty(14.04)로 패키지를 백포트합니다 . 이것도 효과가 있는 것 같습니다.달리기
update-initrams -u -k 4.4.19-37.56+
.
지금까지 작동하는 것:
압축되지 않은 모듈(예: DKMS로 구축된 모듈)에서 임의 작업을 수행합니다.
$ modinfo nvidia_370 filename: /lib/modules/4.4.19-37.56+/updates/dkms/nvidia_370.ko […]
전체 경로로 압축된 모듈을 표시합니다:
modinfo /lib/modules/4.4.19-37.56+/kernel/fs/jfs/jfs.ko.xz
전체 경로를 통해 종속성이 없는(누락된) 압축 모듈을 로드합니다.
insmod /lib/modules/4.4.19-37.56+/kernel/fs/jfs/jfs.ko.xz
해당 모듈을 제거합니다.
rmmod jfs
작동하지 않는 것:
제거할 때 사용됩니다
modprobe -r
.패키지 이름만 포함하고 경로는 포함하지 않는 기타 작업. 예:
# insmod jfs insmod: ERROR: could not load module jfs: No such file or directory # modprobe jfs modprobe: FATAL: Module jfs not found in directory /lib/modules/4.4.19-37.56+
예를 들어 종속성이 없는 모듈의 경우 jfs
전체 모듈 파일 경로를 지정할 수 있는 해결 방법이 있지만 insmod
이는 성가시고 종속성 해결을 수행하지 않습니다 modprobe
.
내 생각엔 커널 모듈 디렉토리가 어떻게든 압축된 모듈 파일을 선택하지 못하는 것 같습니다.압축된 커널 모듈을 이름으로 로드하는 방법은 무엇입니까 modprobe
?
답변1
당신은 실행해야합니다 depmod
.
depmod
(기본값) 아래의 모듈을 읽고 /lib/modules/$(uname -r)
, 내보낸 기호와 필요한 기호를 찾은 다음 이 정보를 사용하여 모듈 간의 기호(모듈) 종속성을 생성하고 이를 파일에 저장하고 /lib/modules/$(uname -r)/modules.dep
바이너리 ha hope를 생성합니다 /lib/modules/$(uname -r)/modules.dep.bin
.
또한 두 개의 다른 파일도 생성됩니다.
/lib/modules/$(uname -r)/modules.symbols
(그리고 바이너리 해시입니다/lib/modules/$(uname -r)/modules.dep.bin
): 각 모듈에서 내보낸 기호를 포함합니다./lib/modules/$(uname -r)/modules.devname
: 모듈 이름, 항목 이름, 메이저 및 마이너 번호/dev
등 필요한 모듈에 대해 생성해야 하는 항목이 포함되어 있습니다./dev
depmod
특정 커널 버전이나 특정 모듈에 대해서도 실행할 수 있습니다. 를 확인 하세요 man depmod
.
답변2
너필요ㅏ데프모드그리고리즈마매핑 및 허용 지원.xz 압축 커널 모듈 로드
일부Depmod 선박아니요따라서 사용자 정의 빌드 플래그로 만든 바이너리가 필요할 수 있습니다.--with-xz