호타리 2025. 6. 20. 09:41

2025.06.19

 

개발 환경 구축

리눅스에서 사용하는 컴파일러는 GCC를 주로 사용하며 디버거로 는 GDB를 사용하고 있다. 타깃 보드가 ARM 계열 프로세서를 사용하고 있으면 ARM용 GCC 컴파일러를 설치하고, 타깃 보드가 x86 계열 프로세서를 사용하고 있으면 x86용 GCC 컴파일러를 설치하여 사용하면 된다.

 

브이엠웨어(VMWare), 버추얼 박스(VirtualBox), Xen 하이버 바이저

 

크로스 개발환경 구축

개발 시스템 구축

Download Linux ISO Image - 로그인 필요 없음.

https://ubuntu.com/download/desktop

Window + VM + Linux 개발 시스템 구축

VM - memory 4GB이상, HD 30GB 이상

Download VMPlayer  - 로그인 필요

https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion

VMWare Tools 설치

설치중 사용자 생성

 

크로스 툴 체인 설치

sudo apt update

sudo apt upgrade -y

sudo apt install git

sudo apt install crossbuild-essential-arm64 <= 64bit

sudo apt install crossbuild-essential-armhf <= 32bit

 

RaspberryPi 커널 컴파일

https://www.raspberrypi.com/documentation/computers/linux_kernel.html

cd project/
git clone --depth=1 --branch rpi-6.12.y  https://github.com/raspberrypi/linux

sudo apt install bc bison flex libssl-dev make libc6-dev libncurses5-dev

sudo apt install crossbuild-essential-arm64

cd linux
# .bashrc에 등록
vim .bashrc
KERNEL=kernel8  
#확인
echo $KERNEL

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig

#
vim .config
CONFIG_LOCALVERSION="-v8-MY_CUSTOM_KERNEL"

make -j12 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs

#sudo env PATH=$PATH make -j12 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/home/ubuntu/rpi_modules modules_install
#scp -r /home/andrew/rpi_modules/lib/modules/6.12.33-v8-MY_CUSTOM_KERNEL+ pi@192.168.55.40:/lib/modules/

# rpi에 /home/kernel폴더 생성 -> 밑에 modules, root, boot폴더 생성
#오래 걸림 => tar로 압축해서 복사하는거는?
#scp -r /home/andrew/rpi_modules/lib/modules/6.12.33-v8-MY_CUSTOM_KERNEL+ pi@192.168.55.40:/home/kernel/modules/
sudo make -j12 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/home/ubuntu/kernel/modules modules_install

sudo tar cf rpi_modules.tar rpi_module/
scp -r /home/andrew/rpi_modules.tar pi@192.168.55.40:/home/pi/kernel/modules/


#sudo cp mnt/boot/$KERNEL.img mnt/boot/$KERNEL-backup.img
#sudo cp arch/arm64/boot/Image mnt/boot/$KERNEL.img
#sudo cp arch/arm64/boot/dts/broadcom/*.dtb mnt/boot/
#sudo cp arch/arm64/boot/dts/overlays/*.dtb* mnt/boot/overlays/
#sudo cp arch/arm64/boot/dts/overlays/README mnt/boot/overlays/

#linux 폴더에서 


scp -r /home/ubuntu/project/linux/arch/arm64/boot/Image pi@10.10.16.221:/home/pi/kernel/boot/$KERNEL.img
scp -r /home/ubuntu/project/linux/arch/arm64/boot/dts/broadcom/*.dtb pi@10.10.16.221:/home/pi/kernel/boot/
scp -r /home/ubuntu/project/linux/arch/arm64/boot/dts/overlays/*.dtb* pi@10.10.16.221:/home/pi/kernel/boot/overlays/
scp -r /home/ubuntu/project/linux/arch/arm64/boot/dts/overlays/README pi@10.10.16.221:/home/pi/kernel/boot/overlays/


#라즈베리파이 /home/pi/kernel/modules에서
sudo mv 6.12.33-v8-MY_CUSTOM_KERNEL+/ /lib/modules/

#라즈베리파이 
sudo cp /home/pi/kernel/boot/kernel8.img /boot/firmware/6.12.33-v8-MY_CUSTOM_KERNEL+.img

sudo cp /home/pi/kernel/boot/* /boot/
sudo cp /home/pi/kernel/boot/overlays/* /boot/overlays

# 라즈베리파이 에서 부팅시 이미지 참조위치 변경
#config.txt => /boot/firmware  in the boot partition to select your kernel:
sudo vim /boot/firmware/config.txt

[all]
kernel=6.12.33-v8-MY_CUSTOM_KERNEL+.img

sudo reboot