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 명령으로 잘 업데이트 됐는지 확인한다.
'임베디드 개발 > 비글본 블랙' 카테고리의 다른 글
BBB ] Internet over USB 설정 (0) | 2024.09.24 |
---|---|
비글본 블랙 시작하기 (0) | 2023.04.09 |
비글본 블랙 ] 전원 공급 방법 (0) | 2023.04.09 |
비글본 블랙 BeagleBone Black(BBB) (0) | 2023.04.09 |