누구나 쉽게 배우는 임베디드 리눅스⑥
작성자 정보
- 웹관리자 작성
- 작성일
컨텐츠 정보
- 17,792 조회
- 1 추천
- 목록
본문
누구나 쉽게 배우는 임베디드 리눅스⑥
2% 부족함을 채워보자
지난 호까지 5회에 걸쳐 임베디드 리눅스를 사용하기 위한 필요사항에 대해 알아보았다.
리눅스를 사용한 임베디드 개발 환경을 만들어 보고, 커널을 동작시키는 과정에 대해 살펴보았는데 최소한의 내용만을 다루었기에 실제 사용 하기에는 부족함이 많은 것이 사실이다.
연재의 마지막인 이번 호에서는 부족했던 부분을 조금이라도 채워보고자 다루지 않았던 부분 중 임베디드 리눅스를 사용하는 데 도움이 될 만한 내용을 소개하고자 한다.
글 _ 장영준 삼성전자 SW연구소 Linux Technology Group 선임 연구원
연재 순서
① 임베디드 리눅스 첫 걸음마
② 교차 개발 환경을 구축하자
③ 부트로더 설정은 이렇게
④ 커널을 올려보자
⑤ 루트 파일 시스템은 어떻게 구성되는가
⑥ 2% 부족함을 채워보자
툴체인과 RFS를 보다 쉽게 구축하는, BuildRoot
지난 5회에 걸쳐 툴체인에서부터 커널, RFS까지 구축해보았다. 여기서 한 가지 의문이 생길 수 있을 것이다. 시스템을 구성하는 데 있어 상당히 많은 종류의 오픈소스(Binutil, GCC, C ibrary, BusyBox, Kernel)들을 모두 다운로드 받아 개별적으로 빌드하고, 각각의 버전 조합과 연관성 등을 고려해 만드는 이의 과정이 번거로울 수 있다는 것이다. 그렇다면 이를 보다 간단하게 만들 수 있지 않을까? 이러한 필요에 의해 등장한 것이 바로 BuildRoot.
BuildRoot란 툴체인과 RFS(Root File System)를 보다 쉽게 구축하기 위한 툴이다. 빌드에 필요한 모든 소스코드를 자동으로 다운로드받아 빌드, 설치까지의 작업을 make 한번으로 만들어준다. 그리고 한 번의 빌드로 모든 이미지가 만들어지고, 이를 타겟에 적재해 바로 실행시켜 볼 수 있게 된다. 이 외에 자주 사용하는 여러 가지 유틸리티 등도 함께 빌드할 수 있으며, 자신이 원하는 기능을 추가해 사용할 수도 있다.
다운로드
소스코드를 다운로드 받는 방법은 크게 두 가지가 있다. 최근 날짜의 Daily Snapshot을 다운로드 받아 사용해도 되고, SubVersion을 이용해 CheckOut해 사용할 수도 있다.
1. Using Daily Snapshot
http://buildroot.uclibc.org/downloads/snapshots/ 사이트에서 최근 날짜의 파일을 다운로드한다. 다운로드 후 압축을 해제하면 BuildRoot 디렉토리가 생성된다.
# wget http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2
# tar -xjf buildroot-snapshot.tar.bz2
2. Using SubVersion
# svn co svn://uclibc.org/trunk/buildroot
사용법
아래와 같은 간단한 과정을 거쳐 툴체인과 RFS를 구축할 수 있게 된다.
여기서 짚고 넘어갈 사항은 BuildRoot 사용시 루트 계정이 아니어도 된다는 점이다. 보통 툴체인, RFS를 만들 때 루트 계정으로 작업을 하게 되는데, 가급적 루트가 아닌 일반 유저로 작업하기를 권장한다.
먼저, 다음 명령으로 필요한 환경 설정을 한다. 여기서는 타겟 정보, 사용할 GCC, C Library,
BusyBox의 버전, 옵션 등의 정보를 설정하게 된다.
# make menuconfig
menuconfig 하게 되면 다음과 같은 화면이 뜬다. 리눅스 커널이나 BusyBox와 비슷한 인터페이스로 구성돼있다.
각 항목마다 적절한 값으로 설정해준다. BuildRoot 사이트를 참고하면 되므로
(http://buildroot.uclibc.org/buildroot.html) 각 항목의 자세한 설명은 생략한다.
설정을 마치고 저장한 후 종료하고, make를 하게 되면 필요한 소스를 자동으로 다운로드 받아 적절한 옵션으로 설치ㆍ빌드돼 툴체인과 RFS가 생성된다.
# make
Using GLIBC
2회 툴체인 강좌에서 소개한 CrossTool은 BuildRoot에 비해 기능은 많지 않지만 타겟에서 프로그램을 구동하는 데 필요한 요소인 C Library로서 glibc를 지원한다는 장점을 가진다. 반면 BuildRoot는 uClibc만을 지원한다. uCLibc가 이미지 크기가 비교적 작은 편이라 Embedded System에 많이 사용되고 있기는 하지만, 기능의 제약 때문에 glibc를 사용해야 하는 경우도 발생하게 된다. glibc를 사용하고자 하는 경우 CrossTool을 사용하거나, CrossTool을 참고해 BuildRoot를 직접 수정, 사용할 수 있다. 자세한 설정 방법은 생략한다.
개발 효율 향상을 가져오는, NFS
5회 RFS 강좌에서는 RFS를 구성하고 이를 램디스크로 만들어 타겟에서 실행해 보았다. 상용화된 제품이나 보통의 경우에는 타겟에 내장된 저장장치(램이나 플래시)에서 RFS를 수행해야 할 것이다. 그러나 개발단계에서는 프로그램을 빌드하고 실행해보는 과정이 많이 발생돼, 다시 수행할 때마다 타겟에 프로그램 이미지를 다시 적재해야 하는 번거로움이 생긴다. 그리고 개발 당시 테스트 등을 수행하면서 타겟의 저장한도를 초과하는 크기가 필요한 경우도 생긴다. 이때 사용되는 기법이 NFS(Network FileSystem)이다.
NFS라는 이름에서 추측할 수 있겠지만, RFS가 호스트에 위치하고, 타겟에서는 이를 네트워크로 연결해 사용하는 방식이다. 이렇게 되면 RFS 영역이 호스트와 타겟에서 공유가 되므로, 호스트에서 빌드된 프로그램 이미지를 타겟에서 곧바로 실행해 볼 수 있게 돼 결과적으로 개발 효율 향상을 가져온다. 또한 호스트는 저장 공간이 타겟에 비해 훨씬 많으므로 저장 공간의 제약도 받지 않게 된다. 이제부터 NFS의 사용 방법에 대해 알아보자.
호스트 설정
호스트에서 해줘야 할 작업은 타겟으로부터의 NFS연결을 받을 수 있도록 설정하는 작업과 NFS용 RFS를 구성하는 작업이다.
먼저, RFS를 구성해 보자. NFS라고 해도 램디스크에서 사용했던 RFS의 내용은 동일하므로, 5회 RFS강좌에서 만든 RFS를 그대로 사용하면 된다. 적당한 디렉토리를 만들고 여기에 이전 시간 만들었던 RFS 디렉토리 내용을 복사한다. 본 강좌에서는 nfs_root라는 이름의 디렉토리를 사용하겠다.
# mkdir -p ~oss/elinux/nfs_root
# cp -af ~oss/elinux/mk_rfs/rfs/* ~oss/elinux/nfs_root/
지난 시간에는 타겟에 적재하기 위해 작은 크기로 만들었지만, NFS에서는 용량 제약이 없으므로 필요한 다른 파일을 추가해도 무방하다.
다음으로, 외부(타겟)로부터 연결을 받기
관련자료
-
이전
-
다음