우선 현재 설치되어 있는 컴파일러를 사용할 예정이다. linaro에서 다운받은 컴파일러 이다.
1. 간단한 형태의 root filesystem 의 레이아웃을 우선 간단하게 잡아본다.
2. 레이아웃에 맞게 디렉토리를 생성
$ mkdir rootfs $ cd rootfs $ mkdir bin dev etc lib proc sys sbin usr $ mkdir etc/init.d usr/bin usr/sbin
3. Busybox 를 복제
$ cd .. $ git clone git://busybox.net/busybox.git
4. Busybox 설정
$ cd busybox $ make defconfig $ make menuconfig
Settings—>Build static library
Settings→Cross Compile prefix : ~/VI/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf\bin\arm-linux-gnueabihf-
→설치된 자신의 크로스 컴파일러의 경로를 사용한다.
Settings→Destination path for 'make install' : ~/VI/rootfs
→위에서 만들었던 root file system 폴더
5. Busybox 를 빌드하고 인스톨
$ make $ make install
6. 이제 BusyBox나 그 외 실행파일들이 사용하는 Shared library를 lib 폴더로 복사한다.
$ cp -a ~/x-tools/arm-cortexa5-linux-uclibcgnueabihf/arm-cortexa5-linux-uclibcgnueabihf/sysroot/lib/* ./lib
7. 이제 inittab 파일과 rcS 파일을 설정하여, /proc /sys 폴더를 마운트한다. inittab 파일 샘플은 busybox 소스폴더의 example 폴더에 있다. 우선 이 파일을 복사한 후 수정한다.
$ cd ~/VI/busybox/examples $ cp inittab ~/VI/rootfs/etc $ cd ~/VI/rootfs/etc $ vi inittab
::sysinit:/etc/init.d/rcS # Start an "askfirst" shell on the console (whatever that may be) ttyS0::askfirst:/bin/sh # Start an "askfirst" shell on /dev/tty2-4 tty2::askfirst:/bin/sh tty3::askfirst:/bin/sh tty4::askfirst:/bin/sh # Stuff to do when restarting the init process ::restart:/sbin/init # Stuff to do before rebooting ::ctrlaltdel:/sbin/reboot ::shutdown:/bin/umount -a -r ::shutdown:/sbin/swapoff -a
$ cd ~/VI/rootfs/etc/init.d $ vi rcS
#!/bin/sh mount -t proc proc /proc mount -t sysfs sysfs /sys
8. 앞서 구성했던 레이아웃을 다시 한번 살펴보면 아래와 같이 구성되어진 것을 확인할 수 있다.
$ tree -d . ├── bin => BusyBox에 의해서 구성 ├── dev => Kernel의 devtmpfs 에 의해서 구성 ├── etc => inittab 파일 추가 │ └── init.d => rc.S 파일 추가 ├── lib => sysroot/lib 폴더에서 파일 복사 ├── proc => rcS 파일에서 마운트 ├── sbin => BusyBox에 의해서 구성 ├── sys => rcS 파일에서 마운트 ├── usr => BusyBox에 의해서 구성 ├── bin └── sbin
이를 NFS로 하여 사용해 본다.