Table of Contents

최소사양으로 rootfs 만드는 법

우선 현재 설치되어 있는 컴파일러를 사용할 예정이다. linaro에서 다운받은 컴파일러 이다.

1. 간단한 형태의 root filesystem 의 레이아웃을 우선 간단하게 잡아본다.

rootfs_000.jpg

2. 레이아웃에 맞게 디렉토리를 생성

$ mkdir rootfs
$ cd rootfs
$ mkdir bin dev etc lib proc sys sbin usr
$ mkdir etc/init.d usr/bin usr/sbin

rootfs_001.jpg

3. Busybox 를 복제

$ cd ..
$ git clone git://busybox.net/busybox.git

rootfs_002.jpg

4. Busybox 설정

$ cd busybox
$ make defconfig
$ make menuconfig

rootfs_003.jpg rootfs_004.jpg rootfs_005.jpg rootfs_006.jpg

Settings—>Build static library

rootfs_007.jpg

Settings→Cross Compile prefix : ~/VI/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf\bin\arm-linux-gnueabihf-
→설치된 자신의 크로스 컴파일러의 경로를 사용한다.

rootfs_008.jpg rootfs_009.jpg

Settings→Destination path for 'make install' : ~/VI/rootfs
→위에서 만들었던 root file system 폴더

rootfs_010.jpg rootfs_011.jpg rootfs_012.jpg

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로 하여 사용해 본다.

Buildroot로 rootfs 만드는 법

Yocto Poky로 rootfs 만드는 법