전에 잠깐 언급했던 임베디드 리눅스 개발용 통합개발 환경 buildroot입니다.
openembedded 등도 있는데, 저한테는 이게 조금 더 쉽고 편하네요.
cross-toolchain(build 또는 미리 빌드된 것 사용), kernel, filesystem(busybox) 을 menuconfig로 설정해 사용하는 게 컨셉입니다.
buildroot 다운로드
http://buildroot.uclibc.org/download.html
다운로드 받으시고 압축을 해제하신 뒤에
$ cd buildroot-2012.05
$ make qemu_arm_vexpress_defconfig // qemu vexpress용 defconfig 파일을 제공해 줍니다.
$ make menuconfig
이 화면에서 설정해 주어야 할 게 몇 가지 있습니다.
4번째 "Build options --->" "Number of jobs to run simultaneously" 을 선택하시고, 사용하시는 cpu core 개수정도 입력해 주시면 됩니다.
서버급이라면 thread 수만큼 지정해 주시면 되겠지요. 필수는 아니고, 작업을 더 빨리 수행해 줍니다.
설정한 후에 첫화면으로 다시 돌아와 5번째 "Toolchain --->"
"Toolchain type" 은 "External toolchain"
"Toolchain" 은 "Linaro 2012.04" (5월 배포된 buildroot라 4월까지만 있네요. 직접 설정가능하신 분들은 다른 버전을 쓰시면 됩니다)
다시 첫화면으로 돌아와서 9번째 "Filesystem images --->"
ext2가 기본으로 선택되어 있을 겁니다. 전 "initramfs for initial ramdisk of linux kernel"도 지정했습니다.
다시 첫화면으로 돌아와서 마지막 "Kernel --->" 을 다음과 같이 지정해 주시면 됩니다. (추가 2012.08.29 로컬에 받아둔 directory를 지정하셔도 됩니다)
[*] Linux Kernel
Kernel version (Custom Git tree) --->
(git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git) URL of custom Git repository
(HEAD) Custom Git version
() Custom kernel patches
Kernel configuration (Using a defconfig) --->
(vexpress) Defconfig name
Kernel binary format (zImage) --->
Linux Kernel Extensions --->
그리고 '저장'하고 종료.
$ make
정상적으로 빌드가 수행되었다면 qemu로 실행시키시면 됩니다.
$ cat board/qemu/arm-vexpress/readme.txt
qemu-system-arm -M vexpress-a9 -kernel output/images/zImage -drive file=output/images/rootfs.ext2,if=sd -append "console=ttyAMA0,115200 root=/dev/mmcblk0" -serial stdio -net nic,model=lan9118 -net user
처음 빌드를 먼저 하시고, debugging 등을 위해 kernel을 수정할 때는
$ make linux-menuconfig
디버깅 옵션 등 설정해 주시고 다시 make 하시면 됩니다.
저는 initramfs 등을 추가로 설정해 주었습니다.
" General setup --->"
"[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support"
(./output/images/rootfs.cpio) Initramfs source file(s)
" Boot options --->"
"(console=ttyAMA0,115200 root=/dev/ram ram=512M) Default kernel command string"
그리고 이렇게 실행해서 사용했습니다.
$ qemu-system-arm -M vexpress-a9 -m 512M -snapshot -s -S -kernel output/images/zImage -serial stdio -append "root=/dev/ram init=/sbin/init console=ttyAMA0 debug"
busybox의 설정을 바꾸고 싶으시면
$ make busybox-menuconfig
$ make
해서 사용하시면 됩니다.
.
통합해서 제공해주니 편하겠네요. 좋은 정보 감사합니다.
참고로 디버깅 할때 gdb 연동가능한 debugger를 사용하는것도 괜찮을것 같습니다.
방금 ddd 라는 놈을 써봤는데 GUI는 단순하지만 기능적으로 있을건 다 있는것 같네요.
ddd --debugger arm-none-linux-gnueabi-gdb ~/linux/linux-stable/vmlinux
이렇게 하심 됩니다.
그리고 eclipse/cdt를 사용 방법도 있네요.. 세팅방법은 아래 주소에 나와있네요.
http://issaris.blogspot.kr/2007/12/download-linux-kernel-sourcecode-from.html