Ubuntu에서 압축된 커널 모듈을 로드하는 방법은 무엇입니까?

Ubuntu에서 압축된 커널 모듈을 로드하는 방법은 무엇입니까?

내 시스템에서 LZMA 압축 커널 모듈을 사용하고 싶습니다. 불행하게도 Canoncial은 커널과 사용자 공간 도구 모두에서 이 기능을 비활성화합니다. 지금까지 내가 한 일은 다음과 같습니다.

  1. 현재 컴파일 및 설치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/.

  2. kmod_22--with-xz이 옵션이 구성된 Xenial(16.04)에서 Trusty(14.04)로 패키지를 백포트합니다 . 이것도 효과가 있는 것 같습니다.

  3. 달리기 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

관련 정보