강좌 & 팁
글 수 2,412
2015.04.03 16:17:19 (*.134.169.166)
41186
U-boot v2015.01에서 Kernel처럼 Kconfig방식으로 menuconfig가 가능하게 변경되었다.
이전 게시글을 참고하면 어떻게 빌드하는지 알수 있다.
http://forum.falinux.com/zbxe/index.php?document_srl=828720&mid=lecture_tip
오늘은 2015.01릴리즈에서 i.MX6관련 코드들을 분석해보자.
만약 새로운 보드를 만든다면 이와 비슷하게 정의해서 사용할 수 있을 것이다.
만약 새로운 보드를 만든다면 이와 비슷하게 정의해서 사용할 수 있을 것이다.
u-boot의 소스 디렉토리 구조를 살펴보자.
uboot$ tree -d -L 1 <--- -d는 디렉토리만 -L 깊이 레벨 1까지만
.
├── api
├── arch <---CPU 아키텍쳐 관련 소스가 있다. Kconfig/Makefile 정도만 수정한다.
├── board <---플랫폼 보드에 대한 정보
├── common
├── configs <---defconfig들이 위치한 곳
├── disk
├── doc
├── drivers
├── dts
├── examples
├── fs
├── include <---- config와 해더파일들이 위치.
├── lib
├── Licenses
├── net
├── post
├── scripts
├── test
└── tools
포팅을 한다면 거의 위의 네가지 디렉토리만 건드리게 된다.
그 예로 Boundary의 Nitrogen6x 보드의 경우를 보면 아래와 같다.
참고로 2014.04 릴리즈부터 i.mx6의 레퍼런스 보드에 대한 소스가 nitrogen으로 통합되어 있다.
따라서 Sabre 시리즈 보드도 nitrogen6x.c와 nitrogen6x.h소스를 살펴보면 된다.
uboot$ tree board/boundary/
board/boundary/
└── nitrogen6x
├── 1066mhz_4x128mx16.cfg
├── 1066mhz_4x256mx16.cfg
├── 1066mhz_8x256mx16.cfg
├── 6x_bootscript_android_recovery.txt
├── 6x_bootscript_android.txt
├── 6x_bootscript.txt
├── 6x_upgrade.txt
├── 800mhz_2x128mx16.cfg
├── 800mhz_2x256mx16.cfg
├── 800mhz_4x128mx16.cfg
├── 800mhz_4x256mx16.cfg
├── clocks.cfg
├── ddr-setup.cfg
├── Kconfig <--------------- Nitrogen6x에 대한 Kconfig
├── MAINTAINERS
├── Makefile <-------------- Makefile
├── nitrogen6dl2g.cfg
├── nitrogen6dl.cfg
├── nitrogen6q2g.cfg
├── nitrogen6q.cfg
├── nitrogen6s1g.cfg
├── nitrogen6s.cfg
├── nitrogen6x.c <---여기에 i.MX6관련 코드가 들어있다.
├── README
└── README.mx6qsabrelite
cfg파일들은 ddr 메모리에 대한 레지스터 세팅값들이다.
새로운 보드에 대한 BSP 작업을 한다면 이런 구조로 디렉토리를 만들어야한다.
그리고 nitrogen6x.h 파일은 아래 경로에 위치해 있다.
uboot$ tree include/configs/
include/configs/
├── a320evb.h
├── a3m071.h
├── a4m072.h
...
├── nitrogen6x.h <---여기 nitrogen6x 해더파일 위치한다.
이런 식으로 플랫폼 관련 소스들이 들어있다.
그리고 nitrogen6x에 대해서 빌드를 한번 했다면 auto generated 된 config.h가 생성되어 있다.
(반드시 빌드를 한번 해야 생성됨)
$ vi include/config.h
1 /* Automatically generated - do not edit */
2 #define CONFIG_IMX_CONFIG board/boundary/nitrogen6x/nitrogen6q2g.cfg
3 #define CONFIG_MX6Q 1
4 #define CONFIG_DDR_MB 2048
5 #define CONFIG_BOARDDIR board/boundary/nitrogen6x
6 #include <config_defaults.h>
7 #include <configs/nitrogen6x.h>
8 #include <asm/config.h>
9 #include <config_fallbacks.h>
10 #include <config_uncmd_spl.h>
arch/arm/Kconfig를 열어 보면 nitrogen6x에 대해서 아래와 같이 정의 되어 있다.
604 config TARGET_NITROGEN6X
605 bool "Support nitrogen6x"
606 select CPU_V7
그리고 맨 아래에 nitrogen6x보드의 Kconfig경로가 위치해 있다.
새로 보드를 만든다면 이와 동일하게 맞춰주면 된다.
878 source "board/bluewater/snapper9260/Kconfig"
879 source "board/boundary/nitrogen6x/Kconfig" <------nitrogen6x 보드의 Kconfig 위치.
880 source "board/broadcom/bcm28155_ap/Kconfig"
board/boundary/nitrogen6x/Kconfig를 열어보자
1 if TARGET_NITROGEN6X
2
3 config SYS_BOARD
4 default "nitrogen6x"
5
6 config SYS_VENDOR
7 default "boundary"
8
9 config SYS_SOC
10 default "mx6"
11
12 config SYS_CONFIG_NAME
13 default "nitrogen6x"
14
15 endif
이런식으로 보드에 대한 심볼이 정의 되어 있다.
그리고 같은 디렉토리의 Makefile을 보자.
$ vi board/boundary/nitrogen6x/Makefile
nitrogen6x.c가 컴파일되도록 Makefile이 만들어져 있다.
...
...
obj-y := nitrogen6x.o
이런 방식으로 해당 보드에 대한 Kconfig/Makefile을 만들어 주면
새로운 보드에 대한 빌드도 문제 없이 진행될 것이다.
새로운 보드에 대한 빌드도 문제 없이 진행될 것이다.