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
대상도 데비안인 경우 거기에 설치하는 것이 더 쉬울 수 있습니다.