솔라리스/리눅스

mtd-utils 크로스 컴파일 하기

지니아부지 2011. 6. 8. 14:46

 

JakeWorld|2010-12-17 09:55 PM
  • 이 글은 Jake에 의해 www.jakeworld.net 에서 작성되었습니다.

  • 퍼가실 때는 이 박스와 함께 복사해주세요.
 
최근 새로운 파일 시스템 제작에 앞서 낸드 플래시의 파티션 영역을 임의로 4MB 정도 지정해서 별개의 파티션을 생성하였다.

문제는 현재 제작중인 새로운 파일 시스템은 각종 정보들을 낸드 플래시의 OOB(Spare 영역)를 이용하는데 이 영역은 낸드 플래시의 데이터 영역의 주소를 통해 접근할 수 없다.

대부분 학습용 타깃보드의 부트로더 상에서 제공하는 낸드 플래시 퓨징은 데이터 영역에 대해서만 지원을 하며 이러한 OOB 영역에 대해서만 커스터마이즈 할 수 있도록 지원하지는 않는다. 아니 부트로더 자체에서 파일 시스템을 퓨징할 때 아에 옵션으로 어떠한 파일 시스템인지 지정하도록 되어있으니 이러한 부분에 대해서 고려가 필요없는 것이다.

하지만 현재 새로운 파일 시스템 이미지 샘플을 낸드 플래시 상에 퓨징하기 위해서는 데이터 영역과 OOB 영역을 별도로 분리 시켜서 퓨징을 해야 하거나 아에 부트로더를 수정하여 이러한 동작에 대응할 수 있는 기능을 추가해야 할 것이다.

후자의 경우 나중을 생각하면 어차피 추가되어야 할 부분이기는 하지만 현재 빠른 테스트를 고려할 때, 이러한 방법보다는 OOB 영역을 별도로 퓨징할 수 있는 방법이 필요했다. 그래서 주변 지인들에게 물어보니 mtd-utils 이라는 것을 써보라고 해서 구글링에 들어갔다.



일단... mtd-utils는 저장소에서 찾을 수 있긴 했지만 아카이브를 원해서 조금 더 찾아보니 다음 경로에서 찾을 수 있었다.

ftp://ftp.infradead.org/pub/


위경로에서 mtd-utils를 받은 후에 압축을 해제한다.

앞으로의 설명은 1.4.1 버전을 기준으로 한다.

이 글의 목적은 크로스 컴파일을 통해 특정 타깃보드 환경용 mtd-utils 바이너리를 생성하기 위함이다.

따라서, 먼저 컴파일러와 링커를 크로스 컴파일러로 대체해야 하는데 컴파일러에 대한 정의는 common.mk 에 들어있다.

첫번째와 두번째 라인을 보면 다음과 같다.
CC := $(CROSS)gcc
AR := $(CROSS)ar
크로스 컴파일을 염두해 두고 CROSS 변수를 각각 지정하고 있는 것을 볼 수 있다.
따라서 처음에 CROSS 변수를 자신의 크로스 컴파일러 프리픽스로 지정해주면 된다.

CROSS := /root/toolchain/bin/arm-none-linux-gnueabi-

그리고 환경이 다르기 때문에 안전하게 Shared library 를 포함시키도록 하자.
이는 CFLAGS 에 --static 옵션을 추가시키면 해결된다.
CFLAGS ?= -O2 -g --static


다음으로, Makefile 을 열어보자.

Makefile에서는 TARGET을 수정해야 한다.
mtd-utils 소스는 mtd 관련 컨트롤 바이너리 뿐만 아니라 파일시스템 이미지를 생성하기 위한 툴도 존재하는데, 이러한 이미지 생성기는 호스트에서 수행되기 때문이다.
따라서 TARGET 에서 mkfs.jffs2 타겟을 주석으로 처리하고, SUBDIRS 에서 mkfs.ubifs 를 주석처리하자.

만약 이러한 이미지 생성기가 필요하다면 위 컴파일러 지정단계에서 CROSS 를 주석처리하고 먼저 이미지 생성기의 바이너리를 생성하면 된다.

모든 과정이 끝났다면 make 를 입력하여 컴파일 한다.
바이너리는 이상하게도 소스 경로내의 CROSS 에 지정한 경로를 따라 생성되어진다.

해당 바이너리를 NFS 나 minicom의 zmoodem 기능을 통해 전송하여 실행시켜서 정상적으로 실행이 된다면 성공한 것이다.

'솔라리스/리눅스' 카테고리의 다른 글

IPC Message Queue  (0) 2011.06.13
리눅스 프로세스간 통신  (0) 2011.06.11
mtd util download  (0) 2011.06.08
busybox  (0) 2011.06.07
compile -static 적용시 err  (0) 2011.06.07