커널 컴파일: module.dep 생성 및 파일 매핑

커널 컴파일: module.dep 생성 및 파일 매핑

Debian Stretch에서 Linux 커널을 컴파일하고 있습니다.

cd linux-4.9.59/
make menuconfig
make

여태까지는 그런대로 잘됐다.

일반적으로 를 발행 make modules_install하고 모듈을 /lib/modules/.

하지만 이 커널은 다른 컴퓨터용이므로 모듈을 로컬로 복사하고 싶지 않습니다. 또한 루트로 컴파일하지 않기 때문에 /lib/modules/어쨌든 쓰기가 작동하지 않습니다.

export INSTALL_MOD_PATH="../MY_NEW_KERNEL"
mkdir -vp "${INSTALL_MOD_PATH}

make modules_install

위의 내용은 새로 컴파일된 모듈을 디렉토리에 복사합니다 ../MY_NEW_KERNEL/lib/modules/. 하지만 module.dep 및 맵 파일은 생성되지 않습니다.../MY_NEW_KERNEL/lib/modules/

일반적으로 커널이 현재 실행 중이면 을(를) 실행할 수 있습니다 depmod. 하지만 /lib/modules/현재 시스템에서는 이 커널이 실행되고 있지 않습니다.

bzImage와 모듈을 대상 머신에 복사할 때에도 먼저 새 커널로 재부팅한 후 를 실행해야 합니다 depmod.

하지만 문제는 내가 실행 중이 아니기 때문에 모듈을 찾을 수 없기 때문에 커널이 시작되지 않는다는 것입니다 depmod.

depmod커널이 현재 실행되고 있지 않을 때 커널 모듈을 어떻게 실행합니까?

답변1

귀하의 질문에 대답하려면 이것이 효과가 있을 것입니다. System.map은 방금 빌드한 소스 디렉터리에 생성되며 필수입니다.

$ depmod -b "$INSTALL_MOD_PATH" -F System.map 4.9.59

그중 4.9.59는 실행되지 않는 새로운 커널 버전입니다.

이제는 일반 Linux 커널 소스 코드에서도 데비안 패키지를 빌드할 수 있습니다.

$ make help|grep deb
  deb-pkg             - Build both source and binary deb kernel packages
  bindeb-pkg          - Build only the binary kernel deb package

make예, g: and 대신 make modules_install(일반 사용자에게는 루트가 필요하지 않습니다):

stretch-amd64:~/linux-source-4.13.10$ make bindeb-pkg -j4

[……오랜 시간 후……]

stretch-amd64:~/linux-source-4.13.10$ $ ls -1 ../*4.13.10*deb
../linux-headers-4.13.10_4.13.10-1_amd64.deb
../linux-image-4.13.10_4.13.10-1_amd64.deb
../linux-libc-dev_4.13.10-1_amd64.deb

물론 여기에는 일부 관련 패키지 dpkg-dev와 같은 추가 데비안 패키지가 필요할 수 있지만 fakeroot대상도 데비안인 경우 거기에 설치하는 것이 더 쉬울 수 있습니다.

관련 정보