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://blog.naver.com/hirou6/80107355464

+ Recent posts