본문 바로가기
카테고리 없음

U-Boot의 Makefile 분석

by 무늬만학생 2012. 4. 18.
반응형

U-Boot의 Makefile에는 다음과 같은 항목이 존재하며, 

이 항목은 U-Boot를 어떤 CPU로 사용하는 Board용으로 빌드 할 것인지를 결정합니다.




[1~7 항목별 역할] 

①U-Boot를 빌드 할 Configuration의 이름 

U-Boot를 특정 보드를 위하여, 빌드 할 수 있도록 해주는 구분자입니다. 실제로 U-Boot 컴파일 시 “make smdk2410_config”라고 입력하면, U-Boot는 SMDK2410 보드용으로 컴파일 될 수 있도록 설정됩니다.


②“make smdk2410_config”를 입력하면, 

위의 Makefile에서는 mkconfig라는 유틸리티를 호출하여 mkconfig에 ③~⑦ 번 항목을 인자로 입력합니다. mkconfig 스크립트는 이 인자를 입력 받아서 컴파일 환경 설정을 진행하게 됩니다.

$(@:_config=) 항목의 경우 위의 “smdk2410_config” 라는 항목이며, 여기서 “smdk2410”이라는 항목만을 인자로 받아서, mkconfig에 전달하게 됩니다.

“smdk2410”이라는 항목은 mkconfig에서 BOARD_NAME을 설정하는데 사용되며, 

다음은 mkconfig에서 이 인자를 전달 받아서 Board Name을 설정하는 항목입니다.


while [ $# -gt 0 ] ; do 

case "$1" in 

--) shift ; break ;; 

-a) shift ; APPEND=yes ;; 

-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;; 

*) break ;; 

esac 

done 

[ "${BOARD_NAME}" ] || BOARD_NAME="$1" 

[ $# -lt 4 ] && exit 1 

[ $# -gt 6 ] && exit 1 

echo "Configuring for ${BOARD_NAME} board..."


위의 BOARD_NAME이라는 항목에는 “smdk2410_config”에서 “_config”를 제외한 “smdk2410”을 $1 인자로 받아 처리하는 mkconfig 스크립트의 루틴입니다. 이 루틴 때문에 U-Boot 컴파일 시 “make smdk2410_config”을 입력하면,"Configuring for smdk2410 board..."라는 메시지가 화면에 출력되게 됩니다.


③CPU의 아키텍처를 입력하는 부분으로 ARM, MIPS등 CPU 아키텍처들 별로 상이하게 사용되는 어셈블러 랭귀지를 구분하기 위해 만들어진 항목입니다. mkconfig에 두 번째 인자로 전달되며 [ARCH] 라는 항목으로 인식됩니다. 이 항목은 다음과 같은 디렉터리를 컴파일 하도록 설정합니다. 


- U-Boot의 “include/” 디렉터리 내의 헤더 파일들에 대한 컴파일 항목

ㆍ“include/asm-[ARCH]/” 를 “include/asm/” 이라는 이름으로 심볼릭 링크를 생성하고 이 항목들을 이 항목들을 소스 컴파일 시 include시킵니다.. 

ㆍ“include/asm-[ARCH]/proc-armv/”를 “proc-armv/”라는 이름으로 심볼릭 링크를 생성하고 이 항목들을 소스 컴파일 시에 include시킵니다. - U-Boot 소스의 루트 디렉터리에 대한 컴파일 항

ㆍ“lib_[ARCH]/” 디렉터리를 컴파일 합니다. 


④CPU의 종류를 입력하는 부분으로 ARM 계열 CPU의 각 계열들을 구분하기 위해서 만들어진 항목입니다. 각 CPU 계열별로 특화된 항목에 대한 부분이 담겨있습니다. mkconfig에 세 번째 인자로 전달되며 [CPU] 라는 항목으로 인식됩니다. 이 항목은 다음과 같은 이름의 디렉터리를 컴파일 하도록 명령합니다. 


- U-Boot 소스의 “cpu/” 디렉터리에 대한 컴파일 항목 

“cpu/[CPU]/” 디렉터리를 컴파일 합니다. 


⑤Board의 이름을 입력하는 항목으로 Board의 종류에 따라 특화된 항목에 대한 부분이 담겨있습니다. mkconfig에 네 번째 인자로 전달되며, [BOARD] 라는 항목으로 인식됩니다. 이 항목은 다음과 같은 이름의 디렉터리를 컴파일 하도록 명령합니다. 


- U-Boot 소스의 “/board” 디렉터리에 대한 컴파일 항목 “board/[BOARD]/” 디렉터리를 컴파일 합니다.


⑥Board를 제조한 Vendor에 대한 이름을 입력하는 항목으로 한 벤더에서 여러 가지의 Board를 출시했을 경우, 편리하게 분류 하기 위하여 만든 항목 입니다. 특정한 벤더가 없을 경우 “NULL”로 처리하면 자동으로 ⑤번 에서 설명한 항목만을 가지고 컴파일 합니다. 


- U-Boot 소스의 “board/” 디렉터리에 대한 컴파일 항목 

“board/[VENDOR]/[BOARD]/”디렉터리를 컴파일 합니다.


⑦SoC(이하 System On Chip)의 모델명을 입력하는 항목으로, 각 CPU 아키텍처와 계열을 탑재한 각 CPU 벤더의 SoC에 담겨있는 특화된 기능을 지원하기 위해 만들어진 항목입니다. mkconfig에 여섯 번째 인자로 전달되며,[SoC] 라는 항목으로 인식됩니다. 이 항목은 다음과 같은 이름의 디렉터리를 컴파일 하도록 명령합니다. 


- U-Boot 소스의 “cpu/” 디렉터리에 대한 컴파일 항목

“cpu/[CPU]/[SoC]/” 디렉터리를 컴파일 합니다. 


- U-Boot의 “include/” 디렉터리 내의 헤더 파일들에 대한 컴파일 항목 

“include/asm-[ARCH]/[SoC]/” 를 “asm/arch/”라는 이름으로 심볼릭 링크를 생성하고 이 항목들을 이 항목들을 소스 컴파일 시에 include 시킵니다. 


출처 : 이솝 임베디드 포럼(http://www.aesop.or.kr)

http://blog.naver.com/hirou6/80107355464

 


반응형