# git clone git://git.buildroot.net/buildroot buildroot-rpi
2. buildroot 설정
# cd buildroot-rpi
# make raspberrypi2_defconfig
# make menuconfig
menuconfig main menu 에서 Kernel 선택 후 Custom repository version 을 변경한다. raspberry pi 공식 linux kernel 은 https://github.com/raspberrypi/linux 에서 다운받을 수 있다. kernel 버전이 여러 개이므로 원하는 버전을 선택해서 Custom repository version 항목에 입력하고 저장한 후 빠져나온다. 여기서는 rpi-4.0.y 버전을 사용하기로 한다.
3. buildroot build
# make
menuconfig 에서 빠져나온 뒤 make 명령을 입력하면 ARM 용 toolchain, 위에서 선택한 raspberry pi kernel, busybox 등을 다운로드 한 뒤 build 한다. build 과정이 끝나면 output/images 디렉토리에 raspberry pi 초기 부팅 시 필요한 firmware 파일(rpi-firmware)과 kernel 이미지(zImage), Root Filesystem(rootfs.tar) 이 생성된다.
# ls output/images
bcm2709-rpi-2-b.dtb rootfs.tar rpi-firmware zImage
# ls output/images/rpi-firmware
bootcode.bin cmdline.txt config.txt fixup.dat start.elf
4. SD card 에 Kernel 및 Filesystem 복사하기
위에서 build 한 Kernel 과 Root Filesystem 을 SD card 에 복사를 해줄 차례이다. 아래와 같이 SD card의 Boot 파티션을 mount 한 뒤 Raspberry Pi Firmware 와 Kernel 을 복사한다. 복사 후 config.txt 의 kernel 항목을 위에서 build 한 kernel image 파일 이름으로 수정한다. 그리고 cmdline.txt 파일을 열어서 아래와 같이 수정한다. cmdline.txt 는 kernel 부팅 시 전달되는 명령이다.
# mkdir -p /mnt/rpi-boot
# mount /dev/sdb1 /mnt/rpi-boot
# cp -r output/images/rpi-firmware/* /mnt/rpi-boot
# cp output/images/zImage /mnt/rpi-boot
# cp output/images/bcm2709-rpi-2-b.dtb /mnt/rpi-boot
# ls /mnt/rpi-boot/
bcm2709-rpi-2-b.dtb bootcode.bin cmdline.txt config.txt fixup.dat start.elf zImage
# vi /mnt/rpi-boot/config.txt
..............
..............
야래와 같이 kernel 항목을 수정한다.
kernel=zImage
..............
# vi /mnt/rpi-boot/cmdline.txt
..............
아래와 같이 수정한다.
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
..............
# umount /mnt/rpi-boot
Boot 파티션을 unmount 한 후 아래와 같이 Root Filesystem 을 mount 한 뒤 inittab 파일을 열어서 getty 옵션 부분을 수정한다. cmdline.txt 와 동일하게 serial port의 이름을 ttyAMA0, baudrate 를 115200 으로 수정한다.
# mkdir -p /mnt/rpi-rootfs
# mount /dev/sdb2 /mnt/rpi-rootfs
# tar -xvpsf output/images/rootfs.tar -C /mnt/rpi-rootfs
# ls /mnt/rpi-rootfs/
bin etc lib linuxrc media opt root sbin tmp var
dev home lib32 lost+found mnt proc run sys usr
# vi /mnt/rpi-rootfs/etc/inittab
..............
# Put a getty on the serial port
아래와 같이 수정한다.
tty1::respawn:/sbin/getty -L ttyAMA0 115200 vt100 # GENERIC_SERIAL
..............
# umount /mnt/rpi-rootfs
5. Raspberry Pi 부팅
Kernel 과 Root Filesystem 을 복사한 SD card 를 Raspberry Pi 에 삽입한 후 PC 와 serial 케이블로 연결 하거나 모니터와 연결 한 후 전원을 인가하면 다음과 같이 부팅 되는 것을 확인할 수 있다. 부팅 후 kernel 버전을 확인 해 보자.