문제 상황 #
레드햇 계열 리눅스에서 커널 모듈이 빌드되는지 테스트해보려는 중 라즈베리파이에 Rocky가 깔려있으니 그걸로 해보려고 했는데,
빌드를 시도하니 커널 헤더를 찾을 수 없다는 오류가 뜨는 것이였다, 그래서 kernel-devel이 제대로 설치되었는지 확인해보았는데
kernel-devel 패키지는 5.14버전인데 뜬금없이 라즈베리파이에 설치된 커널의 버전이 6.1이였다.1
저 버전의 커널에 맞는 패키지는 찾아봐도 없는것 같았고 낮은 버전의 커널 패키지를 설치해도 커널 버전이 바뀌지 않아서 문제를 해결할 수 없었다.
그래서 Rocky Linux 채팅에서 질문을 했는데 커널과 관련된 패키지의 소스가 어디에 있는지 알게 되었다. 그래서 커널과 관련된 패키지를 직접 빌드해서 문제를 해결할 수 있었다.
대충 보니 커널은 kernel.org에서 받은 커널에서 패치를 적용하는 식인 것 같다.
커널관련 패키지 빌드하기 #
rpm 패키지 빌드 처음 해보는거라 과정이 조금 이상할 수 있음.
공통 과정 #
git clone https://git.rockylinux.org/sig/altarch/src/raspberrypi2/
cd raspberrypi2
빌드에 필요한 도구 설치
sudo dnf install rpmdevtools rpmlint
sudo dnf builddep SPECS/raspberrypi2.spec
파일 준비
rpmlint SPECS/raspberrypi2.spec
이걸 하면 ~/ 에 rpmbuild 관련 파일이 생기는 것 같다.
spectool -g -R SPECS/raspberrypi2.spec
cp SOURCES/*.patch ~/rpmbuild/SOURCES/
라즈베리파이에서 네이티브로 빌드하는 경우 #
라즈베리파이 3B에서 3시간 넘게 걸렸다. 커널 컴파일은 둘째치고 패치를 적용하는데도 40분 가량 걸린 것 같은데 SD카드 저장하는 탓에 읽기/쓰기 속도가 느려서 그렇다.
rpmbuild -bb SPECS/raspberrypi2.spec
크로스 컴파일하는 경우 #
윈도우에서 빌드하려면 도커로 RHEL 계열 리눅스를 쓰거나 WSL로 alma같은 것을 쓰면 될 것이다.
aarch64 GCC 크로스 컴파일러 설치
sudo dnf install gcc-aarch64-linux-gnu
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu
빌드
rpmbuild -bb --target aarch64-linux-gnu SPECS/raspberrypi2.spec
설치 #
빌드에 성공했다면 ~/rpmbuild/RPMS 에 빌드된 패키지가 있을 것이다.
sudo dnf install rpmbuild/RPMS/*.rpm
설치하고 재부팅해서 커널 버전이 달라지면 성공!
기타 #
최신버전을 사용해서 커널헤더 뿐 아니라 커널까지 새로 설치했는데 커널 버전을 똑같이 맞추면 굳이 커널까지 빌드하고 설치할 필요는 없을 것 같다. 지금 글을 쓰는 시점에서 https://git.rockylinux.org/sig/altarch/src/raspberrypi2/-/commit/a306da8fe044b983dbf610e30de087f0ea05c1e3 이 커밋보다 이전으로 돌리면 이미지와 동일한 버전의 커널로 맞출 수 있을 것 같다.
https://www.redhat.com/en/blog/create-rpm-package
크로스 컴파일 방법 참고한 곳
https://jfearn.fedorapeople.org/en-US/RPM/4/html/RPM_Guide/ch19s04s02.html
소스 다운로드
https://stackoverflow.com/questions/33177450/how-do-i-get-rpmbuild-to-download-all-of-the-sources-for-a-particular-spec
빌드 종속성 자동으로 설치
https://stackoverflow.com/questions/13227162/automatically-install-build-dependencies-prior-to-building-an-rpm-package
-
RHEL의 커널 버전이 궁금하다면 https://access.redhat.com/ko/articles/7065635 ↩︎