Nvidia의 Jetson TK1 보드용 사용자 정의 커널을 컴파일하려고 하는데 커널 자체(zImage) 외에도 /usr/src/linux-headers-{version}
및 /lib/modules/{version}
.
하지만 Linux 헤더를 만드는 방법을 모르겠습니다. 실행해 보았 으나 다른 디렉터리에서 볼 수 있는 것과 동일한 유형의 출력이 make headers_install
생성되지 않는 것 같습니다 ./usr/src/linux-headers
나는 다음과 같은 다른 비슷한 질문을 보았습니다.여기하지만 이는 실행 중인 것과 동일한 버전을 빌드한다고 가정하고 다른 LOCAL_VERSION을 사용하여 빌드를 시도했습니다.
저는 "Linux4Tegra" 배포판으로 시작하고 있지만 Ubuntu Core를 기반으로 사용자 정의 시스템을 만들려고 합니다.
밝히다, 나는 내 자신의 LOCAL_VERSION, 즉 저장소에 있는 기존 버전이 아닌 내 자신의 버전으로 커널을 생성하려고 합니다. 이에 맞는 헤더를 생성하고 싶습니다. 따라서 linux-headers-xxx 패키지를 설치해도 문제가 해결되지 않았습니다.
내 질문은 이러한 패키지가 원래 Linux 소스에서 어떻게 생성되었는지입니다.
기존 헤더 디렉터리의 파일을 보면 해당 커널 버전에 대한 참조가 포함되어 있으므로 해당 버전의 Linux 소스에서 생성된 것으로 가정합니다. 어떻게 생성할 수 있나요? 누군가 커널 버전을 컴파일할 때 어떻게든 이러한 파일을 생성합니까?
답변1
답변이 늦었습니다. 최근에 이 문제가 발생하여 가능한 답변을 찾았습니다.
커널 헤더 파일을 에 설치한다고 가정합니다 /usr/src/linux-headers-4.15.3
. 컴파일된 커널 소스 트리는 다음 위치에 있습니다./path/to/compiled/linux-4.15.3/
먼저 깨끗한 커널 소스 트리의 압축을 풉니다.
tar xvf linux-4.15.3.tar.xz
cd linux-4.15.3/
둘째, 파일을 .config
디렉터리에 복사합니다.
cp /path/to/compiled/linux-4.15.3/.config .
셋째, 실행한 다음 소스 디렉터리에서 .config 파일을 삭제하여 깨끗한 커널 소스를 얻습니다.
make O=/usr/src/linux-headers-4.15.3 oldconfig
rm .config
4. modules_prepare
make 타겟 실행
make O=/usr/src/linux-headers-4.15.3 modules_prepare
마지막으로 불필요한 내용을 삭제하고 필요한 내용을 복사하세요.
rm /usr/src/linux-headers-4.15.3/source
cp /path/to/compiled/linux-4.15.3/Module.symvers /usr/src/linux-headers-4.15.3
이제 이 디렉토리는 /usr/src/linux-headers-4.15.3
모듈을 구축할 준비가 되었습니다.
문서https://www.kernel.org/doc/Documentation/kbuild/modules.txt우리에게 말해주세요modules_prepare
이렇게 하면 커널에 필요한 정보가 포함됩니다. 이 타겟은 외부 모듈을 구축하기 위해 커널 소스 트리를 준비하는 간단한 방법으로만 존재합니다.
참고: "modules_prepare"는 CONFIG_MODVERSIONS가 설정된 경우에도 Module.symvers를 빌드하지 않습니다. 따라서 모듈 버전 관리가 작동하려면 전체 커널 빌드를 수행해야 합니다.