经过一周的努力成功移植uboot到GEC210开发板,过程遇到最大的问题是不能启动内核,反复查看文档、重新编译、不断度娘,最终参考51CTO作者:http://11674570.blog.51cto.com 的移植文章修改成功。以下仅为移植步骤及修改方法,不详细讲解其中的原理,望见谅。(原理可到http://11674570.blog.51cto.com 查看作者的文章)
移植步骤:
1、解压
tar jxvf android_uboot_smdkv210.tar.bz2
2、进入目录
cd u-boot-samsung-dev
3、设置交叉编译器(交叉编译工具需提前安装)
vi Makefile
在 147 行,使用 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
4、修改串口设置文件
vim include/configs/smdkv210single.h
将:
145 #define CONFIG_SERIAL3 1 /* we use UART1 on SMDKC110 */
修改为:
145 #define CONFIG_SERIAL1 1 /* we use UART1 on SMDKC110 */
5、注释掉电源管理芯片的初始化函数
vi board/samsung/smdkc110/lowlevel_init.S
118 /* bl PMIC_InitIp */
6、添加定义DMC0_MEMCONTROL 地址
vim include/configs/smdkv210single.h
添加新行
408 #define DMC0_MEMCONTROL0x00202400
7、修改SDRAM的块数量及大小
vim include/configs/smdkv210single.h
469 #define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */ 由2改为1
470 #define SDRAM_BANK_SIZE 0x20000000 /* 512 MB */
471 #define PHYS_SDRAM_1 MEMORY_BASE_ADDRESS /* SDRAM Bank #1 */
472 #define PHYS_SDRAM_1_SIZE SDRAM_BANK_SIZE
473 //#define PHYS_SDRAM_2 (MEMORY_BASE_ADDRESS + SDRAM_BANK_SIZ E) /* SDRAM Bank #2 */
474 //#define PHYS_SDRAM_2_SIZE SDRAM_BANK_SIZE
//注释掉PHYS_SDRAM_2 PHYS_SDRAM_2_SIZE的定义
476 #define CFG_FLASH_BASE 0x80000000
8、修改DRAM部分初始化代码
vi cpu/s5pc11x/s5pc110/cpu_init.S
将122行ldr r1, =0x00212400
改为
122 ldr r1, = DMC0_MEMCONTROL
9、修改DM9000网卡
vim include/configs/smdkv210single.h
修改为
133 #define CONFIG_DM9000_BASE ( 0x88000000)
134 #define DM9000_IO (CONFIG_DM9000_BASE)
135 #if defined(DM9000_16BIT_DATA)
136 #define DM9000_DATA (CONFIG_DM9000_BASE+ 8)
137 #else
138 #define DM9000_DATA (CONFIG_DM9000_BASE+1)
vi board/samsung/smdkc110/smdkc110.c
static void dm9000_pre_init(void)
66 {
67 unsigned int tmp;
68
69 #if defined(DM9000_16BIT_DATA)
70 SROM_BW_REG &= ~(0xf << 4);
71 SROM_BW_REG |= (1<<4);
73 #else
74 SROM_BW_REG &= ~(0xf << 20);
75 SROM_BW_REG |= (0<<19) | (0<<18) | (0<<16);
76 #endif
77 SROM_BC1_REG = ((0<<28)|(1<<24)|(5<<16)|(1<<12)|(4<<8)|(6<<4)|( 0<<0));
78
79 tmp = MP01CON_REG;
80 tmp &= ~(0xf<<4);
1、解压
tar jxvf android_uboot_smdkv210.tar.bz2
2、进入目录
cd u-boot-samsung-dev
3、设置交叉编译器(交叉编译工具需提前安装)
vi Makefile
在 147 行,使用 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
4、修改串口设置文件
vim include/configs/smdkv210single.h
将:
145 #define CONFIG_SERIAL3 1 /* we use UART1 on SMDKC110 */
修改为:
145 #define CONFIG_SERIAL1 1 /* we use UART1 on SMDKC110 */
5、注释掉电源管理芯片的初始化函数
vi board/samsung/smdkc110/lowlevel_init.S
118 /* bl PMIC_InitIp */
6、添加定义DMC0_MEMCONTROL 地址
vim include/configs/smdkv210single.h
添加新行
408 #define DMC0_MEMCONTROL0x00202400
7、修改SDRAM的块数量及大小
vim include/configs/smdkv210single.h
469 #define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */ 由2改为1
470 #define SDRAM_BANK_SIZE 0x20000000 /* 512 MB */
471 #define PHYS_SDRAM_1 MEMORY_BASE_ADDRESS /* SDRAM Bank #1 */
472 #define PHYS_SDRAM_1_SIZE SDRAM_BANK_SIZE
473 //#define PHYS_SDRAM_2 (MEMORY_BASE_ADDRESS + SDRAM_BANK_SIZ E) /* SDRAM Bank #2 */
474 //#define PHYS_SDRAM_2_SIZE SDRAM_BANK_SIZE
//注释掉PHYS_SDRAM_2 PHYS_SDRAM_2_SIZE的定义
476 #define CFG_FLASH_BASE 0x80000000
8、修改DRAM部分初始化代码
vi cpu/s5pc11x/s5pc110/cpu_init.S
将122行ldr r1, =0x00212400
改为
122 ldr r1, = DMC0_MEMCONTROL
9、修改DM9000网卡
vim include/configs/smdkv210single.h
修改为
133 #define CONFIG_DM9000_BASE ( 0x88000000)
134 #define DM9000_IO (CONFIG_DM9000_BASE)
135 #if defined(DM9000_16BIT_DATA)
136 #define DM9000_DATA (CONFIG_DM9000_BASE+ 8)
137 #else
138 #define DM9000_DATA (CONFIG_DM9000_BASE+1)
vi board/samsung/smdkc110/smdkc110.c
static void dm9000_pre_init(void)
66 {
67 unsigned int tmp;
68
69 #if defined(DM9000_16BIT_DATA)
70 SROM_BW_REG &= ~(0xf << 4);
71 SROM_BW_REG |= (1<<4);
73 #else
74 SROM_BW_REG &= ~(0xf << 20);
75 SROM_BW_REG |= (0<<19) | (0<<18) | (0<<16);
76 #endif
77 SROM_BC1_REG = ((0<<28)|(1<<24)|(5<<16)|(1<<12)|(4<<8)|(6<<4)|( 0<<0));
78
79 tmp = MP01CON_REG;
80 tmp &= ~(0xf<<4);