누구나 쉽게 배우는 임베디드 리눅스⑤
작성자 정보
- 웹관리자 작성
- 작성일
컨텐츠 정보
- 21,555 조회
- 0 추천
- 목록
본문
누구나 쉽게 배우는 임베디드 리눅스⑤
루트 파일 시스템은
어떻게 구성되는가
지난 호에서는 리눅스 커널을 빌드하고 실행해 보면서,
커널 부팅 메시지가 출력 도중 멈추는 데까지 확인을 해 보았다.
커널 이미지만 가지고서는 부팅을 하는 데 불충분하기 때문이다.
이번 시간에는 부팅을 완료하는 데까지 필요한 마지막 조건인 루트 파일 시스템에 대해 다룰 것이다.
글 _ 장영준 삼성전자 SW연구소 Linux Technology Group 선임 연구원
연재 순서
① 임베디드 리눅스 첫 걸음마
② 교차 개발 환경을 구축하자
③ 부트로더 설정은 이렇게
④ 커널을 올려보자
⑤ 루트 파일 시스템은 어떻게 구성되는가
⑥ 2% 부족함을 채워보자
부팅에 꼭 필요한 파일 시스템, RFS
리눅스가 적재된 PC를 사용하기 위해서는 꼭 필요한 요소가 바로 하드디스크, 플래시와 같은 저장장치이다. 여기에는 PC를 사용하기 위해 필요한 프로그램과 자료들이 저장돼 있고, 시스템 초기화 및 각종 주변장치들을 제어하기 위한 파일 등 부팅에 필요한 내용도 포함돼 있다. 리눅스에서 이러한 저장장치는 파일 시스템으로 관리되고 있는데, 이 중 시스템 초기화 및 관리에 필요한 내용을 담고 있어 부팅에 꼭 필요한 파일 시스템을 루트 파일 시스템(Root File System, 이하 RFS)이라고 한다.
리눅스가 설치된 PC를 보면‘/’라는 디렉토리가 있고, ‘/’아래의 하위 디렉토리로 /bin, /sbin, /lib등의 디렉토리가 있음을 확인할 수 있다. 여기서‘/’라는 디렉토리는 저장장치와 연결이 되어 있어, 리눅스의 동작에 필요한 기능을 담고 있다. 이때‘/’가 루트 파일 시스템(RFS)가 된다.
그렇다면 커널 부팅을 완료하기 위해서는 타겟에 RFS를 적재하고, 커널에서 RFS가 어느 위치에 있는가를 알려주는 과정을 거쳐야 할 것이다. 이제부터 RFS를 구축하고, 이를 이용하여 커널 부팅을 완료하는 과정에 대해 알아 보겠다.
RFS 디렉토리 생성
RFS를 만들기에 앞서, 그동안의 과정에서는 oss라는 유저 계정을 만들어 사용해 왔는데, 이번 시간은 root 계정으로 진행을 하겠다. 과정 중간에 root 계정으로만 할 수 있는 일들이 있기 때문이다. root 계정으로 RFS를 구성하는 작업은 자칫 PC의 시스템 파일을 잘못 건드릴 우려가 있기 때문에 다른 작업에 비해 각별한 주의를 요한다.
먼저, RFS 디렉토리를 생성한다.
# cd ~oss/
# mkdir mk_rfs
# cd mk_rfs
# mkdir rfs tmp
여기에서 rfs는 RFS를 구성할 디렉토리이고, tmp는 과정 중에 사용될 임시 디렉토리이다. 이어서 실제 RFS 를 구성하게 될 rfs 디렉토리를 구성해 보자.
# cd rfs
# mkdir bin sbin etc dev lib usr mnt proc sys
이제부터는 각 디렉토리의 내용을 채워 보도록 하겠다.
busybox 설치
RFS를 구성하는데 필요한 프로그램들을 설치하는 과정이다.
리눅스를 구동하는데 필요한 가장 기본이 되는 프로그램은 쉘(shell)이다. GUI모드가 아닌 커맨드 라인 모드로 리눅스 부팅을 하게 되면 프롬프트가 뜨게 되고, 여기에서 명령어를 입력하여 다양한 프로그램을 실행하게 된다. 이러한 역할을 수행하는 쉘을 비롯하여, 시스템 동작에 필요한 ls, mv, cp, ps등의 유틸리티를 설치해야 기본적인 리눅스 명령어를 실행할 기반이 갖춰지는데, 이러한 프로그램 각각을 구하여 빌드해서 설치해도 되지만, 여기서는 임베디드 리눅스에서 많이 사용되는 busybox라는 프로그램을 이용하기로 한다.
busybox 역시 오픈소스이기 때문에 무료로 사용가능하고,공식사이트는http://www.busybox.net/
이다. 자세한 정보 및 소스 코드를 구할 수 있다. busybox는 위에서 언급한 shell 을 비롯하여, ls, mv, cp 등 기본적으로 필요한 프로그램들을 한데 묶어 busybox라는 하나의 파일로서 실행되도록 만들어 준다. 필요한 기능들을 하나로 관리해 주기 때문에 설치가 편리하고, 무엇보다도 각각을 직접 만들었을 때보다 실행파일의 크기가 현저히 작아진다는 이유로, 저장공간에 제약을 받는 임베디드 리눅스에서 많이 사용되고 있다. 물론, 크기를 작게 만들기 위한 프로그램이기 때문에, 모든 기능이 들어 있는 것은 아니므로, 필요한 프로그램을 추가로 설치해야 할 필요가 생기기도 하는데, 기본 기능만을 필요로 하는 임베디드 시스템에서는 busybox 하나만으로도 충분히 사용 가능하다.
그러면 busybox 의 설치 방법에 대해 알아보겠다. 여기서는 최신 안정 버전인 1.8.2를 기준으로 설명한다.
먼저, 공식 사이트에서 소스 코드를 다운로드받고, 압축을 해제한다.
# wget http://busybox.net/downloads/busybox-1.8.2.tar.bz2
# tar - xjf busybox-1.8.2.tar.bz2
# cd busybox-1.8.2
busybox 빌드는 리눅스 커널과 비슷한 방식으로 진행된다. Makefile 의 ARCH와 CROSS_COMPILE
항목을 다음과 같이 수정한다.
Makefile (Line 175)
#ARCH ?= $(SUBARCH)
#CROSS_COMPILE ?=
ARCH = arm
CROSS_COMPILE = arm-linux-
다음으로 busybox 를 빌드하기 위한 옵션을 지정한다.
# make menuconfig
위와 같은 화면이 나오고, 목적에 맞게 필요한 프로그램을 등록하거나 기능을 선택할 수 있다. 디폴트로 자주 사용되는 옵션이 지정되어 있으므로, 여기서는 옵션 변경 없이 저장하고 종료한다.
마지막으로 빌드 및 인스톨 작업을 수행한다.
# make
# make CONFIG_PREFIX=./_inst install
인스톨 과정에 추가된 CONFIG_PREFIX는 빌드가 완료된 busybox 를 _inst 디렉토리로 설치해준다.
생성된 _inst 디렉토리의 내용을 보면 bin, linuxrc, sbin, usr 라는 디렉토리 및 파일이 생성되었음을 확인할 수 있고, 이를 RFS로 복사한다.
관련자료
-
이전
-
다음