누구나 쉽게 배우는 임베디드 리눅스③
작성자 정보
- 웹관리자 작성
- 작성일
컨텐츠 정보
- 20,498 조회
- 0 추천
- 목록
본문
누구나 쉽게 배우는 임베디드 리눅스③
부트로더 설정은 이렇게
시스템을 처음 동작시키기 위해서는 시스템을 구동시켜 주는 부트로더가 필요하다. 이 부트로더는 시스템을 구동시킨 후 운영체제를 메모리에 로딩해 운영체제가 동작할 수 있도록 만들어 준다. 이번호에서는 부트로더에 대한 기본적인 내용과, 타겟을 동작시키기 위한 절차에 대해 알아 보기로 하겠다.
글 _ 장영준 삼성전자 SW연구소 Linux Technology Group 선임 연구원
연재 순서
① 임베디드 리눅스 첫 걸음마
② 교차 개발 환경을 구축하자
③ 부트로더 설정은 이렇게
④ 커널을 올려보자
⑤ 루트 파일 시스템은 어떻게 구성되는가
⑥ 2% 부족함을 채워보자
윈도가 설치된 PC의 전원을 켜면 어떤 과정을 거쳐서 윈도가 실행되는 것일까. PC마다 다를 수 있겠지만 보통‘그림1’과 같은 화면이 보이고, 윈도 OS가 구동돼 인터넷, 게임 등 PC의 기능을 활용할 수 있게 된다.
이 단계는 하드웨어 검사, 하드웨어 초기화 등의 과정을 거쳐 시스템을 구동시켜 주고, OS를 실행시키는 역할을 수행한다. 이를 부트로더(Boot Loader)라고 한다(PC에서는 BIOS라는 용어를 많이 사용). 임베디드 시스템에서도 마찬가지이다. 시스템을 처음 동작시키기 위해서는 시스템을 구동시켜 주는 부트로더가 필요하다. 시스템의 전원을 켜면 ROM이나 FLASH 또는 하드디스크와 같은 저장장치에 있는 부트로더가 가장 먼저 실행되고, 이 부트로더는 시스템을 구동시킨 후 운영체제를 메모리에 로딩해 운영체제가 동작할 수 있도록 만들어 준다.
이번호에서는 부트로더에 대한 기본적인 내용과, 타겟을 동작시키기 위한 절차에 대해 알아보기로 하겠다.
부트로더의 종류
부트로더는 기능이 간단하고 크기가 작은 프로그램이긴 하지만, 하드웨어 의존성이 강해 하드웨어의 구조를 이해해야만 작성할 수 있다. 그래서 보통은 보드 제작업체에서 하드웨어와 함께 탑재해 출시하는데, 간단한 구조이기 때문에 사용자가 직접 작성하기도 하고, 공개된 부트로더를 해당 보드에 맞게 고쳐서 사용하기도 한다. 공개된 부트로더를 이용하는 방식이 훨씬 만들기도 쉽고, 시리얼, 네트워크 등 여러 가지 기능을 이용할 수 있기 때문에 많이 사용되고 있다. 부트로더의 종류로는 U-boot, Blob, PMON, LILO, GRUB 등이 있고, 이중에서 임베디드 시스템에서 가장 많이 사용되는 것은 U-boot 이다. 타겟마다 사용되는 부트로더가 다르겠지만, 여기서는 가장 많이 사용되는 U-boot을 기준으로 진행하기로 한다.
U-boot
U-boot은 Universal Boot Loader의 약자로서 리눅스를 탑재하는 임베디드 시스템에서 가장 많이 사용되는 부트로더다. 다양한 시스템에서 사용 가능하고, 시리얼, 네트웍, USB, 플래시를 지원하는 등의 많은 기능을 가지고 있다. U-boot 역시 오픈 소스로서 아래 사이트에서 소스코드를 다운로드 할수 있다.
http://www.denx.de/wiki/UBoot
현재의 최신 버전은 1.3.0 버전이고, 안정 버전은 1.2.0 이다. 여기서는 1.2.0 버전을 기준으로 설명하기로 하겠다. 물론 어떤 버전을 사용해도 대동소이하다.
먼저 위 사이트에서 U-boot 최신 버전을 다운로드 한다. 지난호에서와 마찬가지로 oss 계정의
elinux 디렉토리에서 작업하기로 하겠다.
# cd elinux
# wget ftp://ftp.denx.de/pub/u-boot/u-boot-1.2.0.tar.bz2
# tar -xjf u-boot-1.2.0.tar.bz2
# cd u-boot-1.2.0
U-boot 디렉토리의 cpu 디렉토리를 보면 현재 uboot 에서 지원하는 CPU의 종류를 알 수 있다.
1.2.0 버전은 다음과 같은 cpu를 지원한다.
# ls cpu
74xx_7xx arm925t at32ap lh7a40x mpc5xx mpc8260 mpc8xx pxa
arm1136 arm926ejs bf533 mcf52x2 mpc5xxx mpc83xx nios s3c44b0
arm720t arm946es i386 microblaze mpc8220 mpc85xx nios2 sa1100
arm920t arm_intcm ixp mips mpc824x mpc86xx ppc4xx
다음으로 board 디렉토리를 보면 현재 U-boot에서 지원되는 보드의 종류를 알 수 있다. 약 200여개의 보드가 현재 지원되며, 계속 추가되고 있다.
# ls board
AtmarkTechno cradle gw8260 mp2usb pm828 spc1920
BuS cray hermes mpc8260ads pm854 spd8xx
…
c2mon evb4510 lart o2dnt sbc8260 wepep250
canmb evb64260 logodl omap1510inn sbc8560 westel
cds exbitgen lpd7a40x omap1610inn sc520_cdp xaeniax
cerf250 ezkit533 lubbock omap2420h4 sc520_spunk xilinx
cm4008 fads lwmon omap5912osk scb9328 xm250
cm41xx flagadm m5271evb omap730p2 shannon xpedite1k
cmc_pu2 funkwerk m5272c3 oxc siemens xsengine
cmi g2000 m5282evb pb1x00 sixnet zpc1900
cobra5272 gcplus mbx8xx pcippc2 sl8245 zylonite
cogent gen860t mcc200 pcs440ep smdk2400
cpc45 genietv ml2 pleb2 smdk2410
cpu86 gth modnet50 pm520 snmc
cpu87 gth2 mousse pm826 sorcery
“U-boot에서 지원되는 보드의 종류가 점차 추가되고 있기는 하지만, 물론 현존하는
모든 보드에 대해 지원하지는 않기 때문에 필요한 경우 해당타깃에 맞도록 소스코드를
수정할 필요가 생기기도 한다.”
U-boot에서 지원되는 보드의 종류가 점차 추가되고 있기는 하지만, 물론 현존하는 모든 보드에 대해지원하지는 않기 때문에 필요한 경우 해당 타깃에 맞도록 소스코드를 수정할 필요가 생기기도 한다.
지난호에서 예를 들었던 SMDK2440 보드도 역시 지원되지 않는다. 이러한 경우 소스코드를
SMDK2440 보드에 맞게 직접 수정하여 사용하거나 인터넷에서 패치 파일을 구해서 사용할 수 있다.
그럼 U-boot의 빌드 방법에 대해 알아보기로 하자.
먼저 툴체인을 설정한다. 여기서는 지난호에서 빌드한 ARM용 툴체인을 사용하기로 한다.
U-boot디렉토리의 Makefile 파일에서 CROSS_COMPILE 항목에 사용하려는 툴체인의 prefix를 지정해주면 된다.
# vi Makefile
…
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linuxendif
…
위와 같이 CPU별로 디폴트로“arm-linux-”라는 prefix가 설정되어 있는데 지난호에서 만든 툴체인의 prefix와 동일하므로 수정 없이 그대로 사용하면 되고, 만일 다른 툴체인을 사용하게 된다면 해당툴체인의 prefix로 수정해 주면 된다.
다음으로 환경 설정을 한다. 사용하려는 보드의 CPU와 보드 종류를 지정해주는 것으로 환경 설정이 완료된다. make [보드이름]_config 와 같이 설정하면 된다. 이때 사용 가능한 보드 이름은 board 디렉토리나 uboot 디렉토리의 Makefile을 참고하면 된다. 예를 들어, omap5912osk 이라는 보드의 환경 설정은 다음과 같다.
# make omap5912osk_config
환경 설정이 완료됐으면 make 명령으로 빌드하면 된다.
# make
빌드가 성공적으로 완료되면 u-boot.bin 이라는 이미지 파일이 생성된다. 타겟에 탑재되어 실행될 이미지다.
부트로더 탑재
부트로더는 타겟의 FLASH와 같은 저장장치의 특정 영역에 위치해 있고, 전원을 켜게 되면 부트로더이미지가 RAM으로 복사되어 부팅이 진행된다. 이를 새로 탑재하려는 경우 호스트로부터 부트로더 이미지를 다운로드해 FLASH에 저장하면 된다. 이를 퓨징(Fusing)이라고 한다.
보통의 경우, 타겟 보드(임베디드 시스템)에는 부트로더가 제품 구입 시부터 내장되어 있어서 보드의 전원을 켜게 되면 곧바로 보드를 동작시켜 볼 수가 있다. 그리고 부트로더 상에서 리눅스 커널을 실행하게 된다. 만일 부트로더가 적재되어 있지 않거나 실수로 망가트렸다면, 보드를
관련자료
-
이전
-
다음