移植u-boot到GEC210
一、 编译u-boot
国内嵌入式厂商研发的S5PV210开发板大都基于SMDKV210评估板做了调整,所以三星提供的u-boot、内核、文件系统大都适用于这些S5PV210开发板,在项目开发中一般利用三星提供的u-boot移植到目标开发板。
1. 解压:
tar jxvf android_uboot_smdkv210.tar.bz2
进入目录:
cd u-boot-samsung-dev
2. 安装交叉编译器: vi Makefile
在147行,我们发现u-boot使用arm-2009q3编译器: 143 ifeq ($(ARCH),arm)
144 #CROSS_COMPILE = arm-linux-
145 #CROSS_COMPILE = /usr/local/arm/4.4.1-eabi-cortex-a8/usr/bin/arm-linux- 146 #CROSS_COMPILE = /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-
147 CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
148 endif
现在我们安装arm-2009q3编译器: tar jxvf arm-2009q3.tar.bz2 -C /usr/local/arm/
3. 修改配置文件:
vim include/configs/smdkv210single.h
将:
#define CONFIG_SERIAL3 1 /* we use UART1 on SMDKC110 */
修改为:
#define CONFIG_SERIAL1 1 /* we use UART1 on SMDKC110 */
4. 配置:
make smdkv210single_config
5. 编译: make
编译完毕后可以得到u-boot.bin。 6. 下载运行:
将GEC210开发板的启动方式开关打到SD--BOOT一侧,连接好USB下载线,打开DNW.exe,然后复位开发板。几秒后窗口上方的USB:X应该会变成USB:OK,如下:
下载gec210_usb.bin到0xd0020010地址:
下载完毕后,USB连接会自动断开并再次自动连接上,再下载u-boot.bin到0x23e00000地址,下面是串口的输出:
U-Boot 1.3.4 (Jan 17 2013 - 10:51:36) for SMDKV210
CPU: S5PV210@1000MHz(OK)
APLL = 1000MHz, HclkMsys = 200MHz, PclkMsys = 100MHz MPLL = 667MHz, EPLL = 96MHz
HclkDsys = 166MHz, PclkDsys = 83MHz HclkPsys = 133MHz, PclkPsys = 66MHz SCLKA2M = 200MHz Serial = CLKUART Board: SMDKV210 DRAM: 1 GB Flash: 8 MB
SD/MMC: Card init fail! 0 MB
NAND: 256 MB
*** Warning - using default environment
In: serial Out: serial Err: serial
checking mode for fastboot ... Hit any key to stop autoboot: 0 SMDKV210 #
可以成功运行,S5PV210运行在1GHz,但认出来的DRAM大小(内存总数)有误。
二、 修改内存
我们的GEC210核心板有四块DDR2内存芯片,每块128MB,总共512MB:
我们再来看看S5PV210的地址映射图,S5PV210有两个DRAM区域:0x20000000-0x3FFFFFFF与0x40000000-0x7FFFFFFF:
由GEC210核心板的原理图可以看出,两块DDR芯片按高低16位数据线模式挂在DRAM0区域,另外两块DDR芯片按高低16位数据线模式挂在DRAM1区域。
1. 修改配置文件:
vim include/configs/smdkv210single.h
加入:
Start 0x20000000 size 0x10000000 Hole 0x10000000
Start 0x40000000 size 0x10000000
32 #define MEMORY_BASE_ADDRESS1 0x40000000 33 #define DMC0_MEMCONTROL 0x00202400
修改:
410 #define DMC0_MEMCONFIG_0 0x20F00313 411 #define DMC0_MEMCONFIG_1 0x00F00313
417 #define DMC1_MEMCONTROL 0x00202400 418 #define DMC1_MEMCONFIG_0 0x40F00313 419 #define DMC1_MEMCONFIG_1 0x00F00313
471 #define SDRAM_BANK_SIZE 0x10000000 /* 256 MB */
474 #define PHYS_SDRAM_2 (MEMORY_BASE_ADDRESS1) /* SDRAM Bank #2 */
2. 修改CPU初始化文件: vim cpu/s5pc11x/s5pc110/cpu_init.S
将122行: ldr r1, =0x00212400
修改为:
ldr r1, =DMC0_MEMCONTROL 重新编译下载运行,可以看出DRAM的大小已经正确认出:
U-Boot 1.3.4 (Jan 17 2013 - 10:51:36) for SMDKV210
CPU: S5PV210@1000MHz(OK)
APLL = 1000MHz, HclkMsys = 200MHz, PclkMsys = 100MHz MPLL = 667MHz, EPLL = 96MHz
HclkDsys = 166MHz, PclkDsys = 83MHz HclkPsys = 133MHz, PclkPsys = 66MHz SCLKA2M = 200MHz Serial = CLKUART Board: SMDKV210 DRAM: 512 MB Flash: 8 MB
SD/MMC: Card init fail! 0 MB
NAND: 256 MB
*** Warning - using default environment
In: serial Out: serial Err: serial
checking mode for fastboot ... Hit any key to stop autoboot: 0 SMDKV210 #