임베디드 리눅스를 설치할 때 커널 이미지와 함께 반드시 꼭 작성해야 하는 것이 루트 파일 시스템이다. 루트 파일 시스템은 "/"로 마운트될 수 있는 파일 시스템을 말한다. 즉, /etc, /usr, /var, /tmp 등등 중요한 모든 파일 디렉토들이 설정되어 있으며, 필요한 명령이나 설정 파일이 들어 있는 이미지를 생각하면 된다.
임베디드 장비는 리소스의 제한이 많기 때문에 루트 파일 시스템에 들어가는 내용을 필요한 내용만 가지도록 최소화 시킬 필요가 있다. 따라서, 실행을 위한 프로그램 뿐만 아니라 관련된 라이브러리들도 필요한 것들로만 배치해야 한다. 일반적인 리눅스 명령과 연관된 프로그램들의 경우에는 busybox와 같은 프로그램을 대신 사용하면 용량을 절약할 수 있다. 라이브러리의 경우에는 glibc의 경량화 버전을 찾아서 사용하면(이전 포스팅 중에 몇몇 사이트를 적어놨다) 도움이 된다. 추가적으로 필요한 라이브러리가 어떤 것이 있는지 확인하려면 'ldd' 명령을 사용하면 된다.
이 명령을 사용하면 관련된 라이브러리 목록을 볼 수 있다.
다음은 필요한 파일들이 선택된 상태에서 루트 파일 시스템을 만드는 방법을 두 가지 형태로 살펴보도록 하겠다.
램 디스크
램디스크를 사용하기 위해서는 루프백 디바이스 지원과 램디스크 지원을 먼저 설정해야 한다.
각각은 커널 설정화면에서 "Block devices" 메뉴에서 "Loopback device support"와 "RAM disk support"를 통해서 할 수 있다.
이미지를 만들기 위해서는 먼저 루프백 디바이스가 사용 가능한지 확인해 봐야 한다.
ls /dev/loop*
루프백 디바이스가 존재한다면, 원하는 크기만큼의 파일을 만든 다음 루프백 디바이스와 연결해 주어야 한다.
losetup /dev/loop0 my_ram_disk
mke2fs -j /dev/loop0
먼저 8MB짜리 파일을 하나 만든 후 루프백 디바이스 0번과 연결해 준다(용량은 필요에 따라 조절해 주면 된다). 다음에는 my_ram_disk를 포맷하기 위해 연결된 루프백 장치에 대해서 저널링 형태로 포맷하도록 mke2fs 명령을 호출한다. ext3 형태로 해당 파일이 포맷된다.
파일 시스템 내에 내용을 채워 넣기 위해서는 (디렉토리 구조나 필요한 명령어들의 배치), 우선 해당 파일을 마운트를 시켜야 한다. 여기에서는 기존에 ramdisk 이미지가 하나 있는 상태를 가정하겠다. ramdisk-rebis.gz이 있는 경우에 먼저 이것을 풀어 놓고 진행한다.
mkdir my_old
mount -o loop ramdisk-rebis ./my_old
mkdir my_tmp
mount -o loop my_ram_disk ./my_tmp
mv ./my_old/* ./my_tmp/
cd ./my_tmp
먼저 기존 램디크를 푼다. 다음에는 새로 마운트하려는 파일에 대한 디렉토리를 생성해주고 루프백 디바이스 형태로 my_ram_disk를 my_tmp에 마운트 한다. 일단, 기존에 가지고 있던 내용들을 my_tmp에 넣은 후에 필요하면 추가적인 내용 변경을 해주면 된다.
내용의 추가 및 변경이 모두 이루어졌으면 다음에는 해당 디렉토리를 언마운트하고 파일을 압축한다.
umount ./my_tmp
gzip my_ram_disk
file my_ram_disk.gz
먼저 해당 디렉토리에서 빠져 나온 후 언마운트를 한다. 다음에는 해당하는 파일을 gzip을 사용해서 압축한다. 마지막으로 해당 파일이 정상적인 형태로 압축되었는지 확인해 본다.
JFFS2 파일 시스템 만들기
램디스크는 램에 올라가 있는 파일 시스템으로서 전원이 나가면 내용도 사라져 버리게 된다. 플래쉬 메모리를 하드 디스크처럼 사용할 수 있다면 이러한 문제를 겪지 않아도 될 것이다. 플래쉬는 Read-Write의 횟수에 제한이 있기 때문에 균등하게 영역을 사용할 수 있도록 해주는 것이 필요하다. 이러한 점을 고려해서 나온게 JFFS, JFFS2 파일 시스템이다. JFFS는 MTD(Memory Technology Device) 계층 위에서 동작하기 때문에 보드용 커널을 컴파일 할 때 이 부분도 같이 설정해 주어야 한다.
커널 설정 화면에서 "Filesystems" > "Miscellaneous filesystems" 에 보면 "Journalling Flash File System v2 (JFFS2) support" 화면을 볼 수 있다. 이것을 선택해 준다. 또한, MTD를 설정하기 위해서는 "Device Drivers" 에서 "Memory Technology Device (MTD) support"를 선택해 주면 된다. 추가로 "RAM/ROM/Flash chip drivers" 및 "Mappping drivers for chip access"에서 하드웨어에 관련되서 필요한 내용들을 선택한다.
이와 함께 해당 보드와 연관된 디렉토리 (drivers/mtd/maps/<보드파일>)에서 타겟 시스템을 위한 메모리 맵 정보를 확인할 수 있고 수정할 수 도 있다.
jffs 파일 시스템을 만드는 것도 램디스크를 만드는 것과 유사하다. 약간의 차이점은 단순히 압축하는 것이 아니고, mkfs.jffs2 명령을 사용해서 이미지를 만든 다는 점이다. mkfs.jffs2 명령도 미리 설치해 두어야 한다.
만들어진 my_jffs.img는 플래쉬에 퓨징(Fusing)하면 된다.
JFFS2의 공식 사이트 : http://sourceware.org/jffs2/
'Linux > Embedded' 카테고리의 다른 글
| GPIO (0) | 2008/01/23 |
|---|---|
| 루트 파일 시스템 만들기 (0) | 2008/01/23 |
| Rebis 보드용 2.4.18 커널에 시스템 호출 추가하기 (0) | 2008/01/22 |
| Rebis 보드에 커널 이미지 올리기 위한 설정 과정 및 강의자료 (0) | 2008/01/18 |
| Embedded Linux 관련 링크들 (0) | 2007/10/08 |
이올린에 북마크하기
이올린에 추천하기

