본문 바로가기
임베디드 개발/비글본 블랙

BBB ] 커널 업데이트

by eteo 2024. 9. 26.

 

 

Host PC 정보 : Ubuntu 16.04 LTS, 64비트

 

 


1. 커널 소스 크로스 컴파일을 위한 툴체인 설치

호스트는 x86이고 타겟은 ARM 아키텍처이므로 Linaro 사이트에서 크로스 컴파일을 위한 툴체인을 특정 경로에 다운받아 놓는다.

 

https://releases.linaro.org/components/toolchain/binaries/

$wget -c https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz

 

압축 해제

$tar xf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz

 

압축을 해제하면 그 안의 /bin 디렉토리 안에 컴파일러가 존재하는데 해당 경로를 PATH에 등록해 둔다.

$cd ~
$vim .bashrc
#export PATH=$PATH:<path-to-tool-chain-binaries>
export PATH=$PATH:/home/jo/workspace/ldd/downloads/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin

 

source .bashrc로 다시 로드하고 arm을 입력한 뒤 탭을 두번쳤을 때 컴파일러가 나열되면 잘 등록된 것이다.

 

 


2. 커널 소스 다운받기

 

커널 소스를 위치시킬 폴더를 하나 만들고 이동한 뒤 아래 명령으로 다운받는다.

$git clone https://github.com/beagleboard/linux.git

 

이후 원하는 커널 버전의 브랜치로 체크아웃

# git checkout <branch-name> 
$git checkout 5.10.168-ti-rt-r76

 

혹은 처음부터 원하는 브랜치만 다운로드 받는 방법도 있다.

$git clone --depth=1 --branch <branch-name> https://github.com/beagleboard/linux.git <directory-name>

 

 

 

 


3. 커널 빌드

 

커널 빌드에 필요한 패키지들을 설치한다.

$sudo apt-get update
$sudo apt-get install build-essential lzop u-boot-tools net-tools bison flex libssl-dev libncurses5-dev libncursesw5-dev unzip chrpath xz-utils minicom wget git-core
$sudo apt-get install-y libgmp-dev
$sudo apt-get install libmpc-dev
$sudo apt-get install liblz4-tool

 

 

이전 빌드로 생성된 이미지 파일이나 오브젝트 파일, .config 파일 등을 지운다.

$make distclean

 

 

비글본 제조사에의해 기본 제공되는 config 파일을 사용해서 .config 파일을 생성한다.

$make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bb.org_defconfig

 

 

(Optional) 커널 설정을 바꾸고 싶은 경우 menuconfig를 실행한다. 이미 존재하는 .config 파일을 수정할 수 있다.

$make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

 

 

커널 소스를 컴파일해 uImage 형식으로 빌드하고 디바이스 트리 소스 파일도 같이 컴파일한다. uImage는 U-Boot 부트로더가 부팅할 수 있는 커널 이미지 포맷이다.

$make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage dtbs LOADADDR=0x80008000 -j4

 

 

그 다음 커널 모듈을 빌드해 .ko 파일을 생성한다.

$make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules -j4

 

 

모듈을 설치한다. 이렇게 하면 생성된 모듈이 호스트 PC의 /lib/modules/<kernel-ver> 경로에 복사된다.

$sudo make ARCH=arm modules_install

 

 

 

 

 

 

 


4. uImage 및 dtb 업데이트 및 커널 모듈 복사

 

커널 소스가 위치한 경로에서 uImage는 <kernel-root>/arch/arm/boot 경로에 있고 am335x-boneblack.dtb 파일은 <kernel-root>/arch/arm/boot/dts 경로에 있다.

 

SD카드 BOOT 파티션에서 기존 두 파일을 백업해두고 새로 생성된 파일로 덮어쓰기 한다.

$cp <kernel-source-root>/arch/arm/boot/uImage /media/<username>/BOOT/
$cp <kernel-source-root>/arch/arm/boot/dts/am335x-boneblack.dtb /media/<username>/BOOT/

 

 

호스트 PC에 설치된 커널 모듈을 타겟 보드의 Root File System의 동일 위치에 복사한다.

$sudo cp -a /lib/modules/<kernel-version>/ /media/<username>/ROOTFS/lib/modules/

 

 

sync 명령어로 메모리의 버퍼나 캐시에 남아있는 데이터를 강제로 디스크에 flush하고 SD카드로 BBB를 부팅시켜본 후 uname -r 명령으로 잘 업데이트 됐는지 확인한다.