Chap 5 루트파일시스템 (Root F/S)
Chap 5. 루트파일시스템 (Root F/S) 1. Root File System 1.1. Root File system Root file system이란 / 에마운트되는 file system을말한다. 리눅스시스템에서커널이기본적인운용환경을구성해주고난다음, 루트파일시스템이리눅스시스템에서사용하는유틸리티, 라이브러리등과같은부가적인요소들을제공한다. 또한기본적인환경설정뿐만아니라사용자가설치한라이브러리환경설정까지포함한다. 임베디드보드에서 / 의리스트를보면아래와같다. 1.2. 파일시스템퓨징 파일시스템을플래시에퓨징한다. 1.2.1. 파일시스템준비하기 1 작업디렉터리로이동한다. root@ubuntu:/# cd /root/temp 2
Chap 5. 루트파일시스템 (Root F/S) 2 작업폴더에파일시스템소스를복사한다. root@ubuntu:~/temp# cp -a /media/achro-i.mx6q-1/dvd-1_src/linux/linux_filesystem.tar.gz /root/temp 2 복사한파일시스템압축을 /nfsroot 폴더에풀어준다. root@ubuntu:~/temp# tar xvf linux_filesystem.tar.gz -C /nfsroot 1.2.2. 루트파일시스템설치두가지의방법으로루트파일시스템을사용할것이다. 첫번째로는 NFS(Network File System) 을이용하여 Host PC에있는 File System Folder를 Mount할것이고, 두번째로는 File System Folder의내용물을 SD카드에복사해서사용할것이다. SD Card에직접 Host PC에서복사해서사용하는방법을사용할경우 Kernel 또는 File System 수정시 SD Card를다시빼서복사를해야되는불편함이있다. 그래서 NFS를많이사용한다. NFS를통해 File System을 Mount해서사용하거나 SD Card에 File system을만들어놓고 Host PC와 Target 보드의 File System 폴더하나를공유해서사용하는방법이있다. 1.2.3. NFS(Network File System) Mount 하기 1 우선 Bootloader 에서 network 세팅을해준다. 적을때띄어쓰기에주의해라. Achro i.mx6q > set bootargs_nfs 'setenv bootargs $ {bootargs } root=/dev/nfs ip=192.1 68.1.70:192.168.1.222:192.168.1.1:255.255.255.0::eth0:off nfsroot=${serverip}:${nfsroot }, v3,tcp' Achro i.mx6q > set serverip 192.168.10.201 Achro i.mx6q > set ipaddr 192.168.10.70 Achro i.mx6q > set ethaddr 00:0c:29:b0:04:ca Achro i.mx6q > set nfsroot '/nfsroot' Achro i.mx6q > set bootcmd 'run bootcmd_net' Achro i.mx6q > save 3
Chap 5. 루트파일시스템 (Root F/S) ip 의경우 192.168.1.70 은 target Board 의 IP 이며 192.168.1.222 는 server 의 IP 이 고 192.168.1.1 은 Gateway IP, 255.255.255.0 는 Netmask 이다. 즉 ip={target IP}:{server IP}:{Gateway IP}:{Netmask}::eth0:off 이다. 현재위의세팅으로실행을하게되면 bootcmd_net이실행이되는데 bootcmd_net 은현재 bootcmd_net=run bootargs_base bootargs_nfs; tftpboot ${loadaddr} ${kernel}; bootm라고세팅되어있다. bootargs_base를세팅후 bootargs_nfs를세팅한다. 그후 tftp로 kernel 이미지를다운로드하고실행을시킨다. kernel 이미지는이미 sd card에올라가있으므로 bootcmd_net을아래와같이수정해준다. Achro i.mx6q > set bootcmd_net 'run bootargs_nfs; mmc dev 0; mmc read ${loadaddr} 800 7000; bootm' Achro i.mx6q > save 위 command는 sd card에있는 kernel Image를 DRAM으로읽어와서부팅시킨다는뜻이다. 아래의그림은부팅시 NFS가 Mount 되는동작들을나타내고있다. 2 세팅후 reset 또는 Power OFF -> ON 으로재시작해준다. Achro i.mx6q > reset 3 결과부팅이제대로되었다면 welcome to Achro i.mx6q라는메시지가출력될것이다. 그리고엔터를쳐보면 Prompt가뜬다. Network 연결이제대로되어있지않다면그림의두번째줄 ADDRCONF(NETDEV_UP): eth0: link is not ready에서넘어가지않을것이다. 이경우 NFS 세팅을다시확인해봐야한다. 4
Chap 5. 루트파일시스템 (Root F/S) 아래는동작되는그림으로나타낸것이다. 만약도중에 Network 연결이끊어진다 면연결될때까지멈춰있을것이다. 1.2.4. SD Card 에 File System 올리기 루트파일시스템은 CD 에있는루트파일시스템의압축을 SD 카드에복사하는것으 로완료된다. 1 장치에연결된 system SD 메모리를빼서, USB 젠더에연결한다. 2 MicroSD 에파티션생성 5
Chap 5. 루트파일시스템 (Root F/S) 앞서 bootloader와커널은 raw 파일영역에기록되었지만, 파일시스템은 raw 영역을제외한영역에서사용하게된다. 때문에리눅스가접근할수있는파일시스템으로파티션을설정한다음, 해당파티션을포맷해주어야한다. Achro-i.MX6Q 에서사용하는 MicroSD의파티션하나를만들도록하겠다. RAW 영역 : MBR, bootloader, 그리고커널이기록되는영역 (0~8M) 첫번째파티션 : achro_system (30M ~ End sector) ( 사용하는메모리에따라마지막섹터치가변경됨.) fdisk 를이용하여파티션을설정한다. X root@ubuntu File Edit View Terminal Help root@ubuntu:/# fdisk /dev/sdb Command (m for help): d // 기존의파티션삭제 Selected partition 1 Command (m for help): n // 파티션생성 Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 // 1번파티션지정 First sector (2048-7954430, default 2048): +30M // 시작섹터지정 Last sector, +sectors or +size{k,m,g} (3000001-7954430, default 7954430): // 마지막섹터지정. 디폴트섹터로엔터 Command (m for help): w // 저장닫기 The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. 3 MicroSD의두번째파티션초기화파티션이름은최대 16자까지가능하다. root@ubuntu:~/# umount /dev/sdb1 root@ubuntu:~/# mkfs.ext4 -L achro_system /dev/sdb1 6
6. 루트파일시스템 (Root F/S) 5 호스트시스템에카드리더를재연결한다. 호스트시스템에서카드리더기를제거했다가다시연결하면 achro_system이자동으로마운트된다. 리눅스파일시스템은 achro_system 파티션에복사하면된다. root@ubuntu:/# ls /media Achro-i.MX6Q-1 achro_system floppy floppy0 6 기존파일시스템을삭제한다. 만약리눅스루트파일시스템이설치되어있는메모리카드라면, 아래명령어로기존파일들을모두삭제한다. root@ubuntu:~/temp# rm -rf /media/achro_system/* 7 파일시스템을복사한디렉터리에서아래명령을실행해서압축된파일시스템파일을 /work/achroimx6q 디렉터리에푼다. (/nfsroot에작업했던것을사용해도됨 ) mkdir /work/achroimx6q/linux_filesystem root@ubuntu:~/temp# tar xvf linux_filesystem.tar.gz -C /work/achroimx6q/linux_filesystem/ root@ubuntu:~/temp# sync 8 압축이해제된파일시스템디렉터리로이동한다. 압축을풀면 linux_filesystem이라는디렉터리가생성된다. 이디렉터리로이동한다음, 파일내용을 /media/achro_system 디렉터리에복사한다. root@ubuntu:~/temp# cd /work/achroimx6q/linux_filesystem/ root@ubuntu:/work/achroimx6q/linux_filesystem# cp -a * /media/achro_system/ root@ubuntu:/work/achroimx6q/linux_filesystem# sync 9 복사후장치에연결후부팅 7
root@ubuntu:/work/achroimx6q/linux_filesystem# umount /media/achro_system/ 위설명대로준비가완료되면마운트된 sd 카드를제거하여 Achro-i.MX6Q 보드 의 MicroSD 소켓에연결하고부팅한다. 9 부팅절차 ü irom Code에서메모리및기타 H/W를초기화할 Code BL1을 SRAM으로복사 ü BL1이메모리및기타 H/W를초기화하고나머지 Bootloader를 DRAM으로복사 ü DRAM에적재된 Bootloader로 PC(Program Counter) 가넘어가서프로그램진행 ü Bootloader가 Kernel Image를 DRAM에적재시키고압축을해제시킴 ü Kernel Image가압축해제되고동작하면서 SD card에있는 File System을 Mount해서 Root File System으로사용
1.2.5. NFS 로파일공유하기 주로실행파일또는모듈등을수정후테스트할때많이사용된다. 우선파일시 스템까지완전히부팅된상태에서진행을한다. 1 Network 체크 IP 가잡혀있지않으므로 IP 를세팅해준다. [root@achro ~]# ifconfig eth0 192.168.1.70 2 NFS Mount 192.168.1.201 IP 에있는 /nfsroot 폴더를 Target 보드의 /mnt/nfs 폴더에 nfs 9
Type 으로 Mount 시킨다. [root@achro ~]# mount -t nfs 192.168.1.201:/nfsroot /mnt/nfs -o rw,rsize=4096,nolock 3 파일공유하기공유가제대로되었다면 Server의 /nfsroot 폴더에있는파일들이 Target Board의 /mnt/nfs 폴더에나타날것이다. Server에서수정을하든지 Target Board에서수정을하든지작업을하면하나의파일을공유하는것이므로둘다수정된작업내용을확인할수있다. 일반적으로공유폴더에서작업을하면문제가생길수있으므로다른작업폴더로복사해서사용하는것을권장한다. [root@achro ~]# mount -t nfs 192.168.1.201:/nfsroot /mnt/nfs -o rw,rsize=4096,nolock ** SD Card 부팅에서 emmc의파일시스템을만들때 /mnt 폴더아래에 mmc 폴더와 nfs폴더두개를만들고 emmc 파티션은 mmc에마운트시키고 server의 /nfsroot 폴더는 mnt 폴더에 mount 시켜서 /nfsroot 폴더에있는파일시스템내용을 emmc 쪽으로옮기면간단하게파일시스템을적재할수있다. 10