기존 포스팅에서 armbian build를 이용해서 쉽게 6.12 커널을 사용 (이미 preempt_rt 패치가 적용되어 있음) 해서 이미지를 만들고 사용까지 했었습니다. 하지만, armbian의 6.12 커널의 경우, Orange Pi 5 Plus에서 가지고 있는 다양한 주변회로 (i2c, can, spi 등)을 사용하기 위한 dtb가 존재하지 않습니다. 따라서 일반적인 사용은 가능하되, 최적화되어 있다고는 보기 어렵습니다. armbian build에서는 이 경우를 대비해 커널의 BRANCH를 선택할 수 있도록 해놨는데, vendor에서 제공한 커널을 사용하려면 BRANCH 옵션에 vendor를 적어주면 됩니다. Orangi Pi 5 Plus의 vendor 커널은 6.1 버전으로 preempt_rt 커널을 사용하기 위해선 수동을 rt 패치를 진행해줘야 합니다.
이를 위해서 userpatches/kernel/rk35xx-vendor-6.1 디렉토리에 아래와 같이 패치 파일을 복사해 줍니다. 이 패치 파일은 kernel-config 명령을 이용해서 기존 https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/6.1 에서 받아온 rt 패치 파일을 적용한 것으로, vendor 커널에 맞게끔 몇가지를 수정하였습니다. 기존 커널에서 몇가지 수정한게 있어서 rt 패치를 그냥 적용하면 에러가 발생합니다.
https://gist.github.com/byeongkyu/7d9b999c310c3ef3852c6844b11e3191#file-patch-6-1-112-rt43-patch
이 패치 파일을 받아서 위 디렉토리에 복사해 넣으면 됩니다.
또, 커널 빌드 후 패키징 과정에서 커널 파일명과의 차이가 발생하여 에러가 발생하는데, 이를 해결하기 위해서 lib/functions/compilation/kernel-debs.sh 파일을 열어서,
declare kernel_version_family="${kernel_version}-rt43-${BRANCH}-${LINUXFAMILY}"
와 같이 rt43 플래그를 추가해 줍니다.
이제 빌드를 시작하고,
$ ./compile.sh BOARD=orangepi5-plus BRANCH=vendor RELEASE=noble BUILD_DESKTOP=no BUILD_MINIMAL=no VENDOR=armbian-kft REVISION=25.8.2 CPUTHREADS=12 PACKAGE_LIST_BOARD="net-tools wireless-tools vim" build
다음으로, kernel 옵션을 설정해주고,
General setup --->
Preemption Model (Fully Preemptible Kernel (Real-Time)) --->
(X) Fully Preemptible Kernel (Real-Time)
-*- Control Group support --->
-*- CPU controller --->
[ ] Group scheduling for SCHED_RR/FIFO
Kernel Features --->
Timer frequency (1000 HZ) --->
(X) 1000 HZ
CPU Power Management --->
CPU Frequency scaling --->
Default CPUFreq governor (performance) --->
(X) performance
빌드가 정상적으로 완료되어 output/images 디렉토리에
armbian-kft_25.8.2_Orangepi5-plus_noble_vendor_6.1.115.img
와 같이 이미지가 정상적으로 생성되어 있음을 확인할 수 있습니다.
이제 이 이미지를 SD카드에 Write 하고, 부팅을 진행하면.. 끝!.
Leave a Reply