一、基本的移植
1、找到u-boot的源码包,比如android_uboot_smdkv210.tar.bz2。
2、解压源码包到home目录下,为了方便的查找。
3、进入解压的目录下,编辑Makefile文件,修改交叉编译器的工具,即是147行中的CROSS_COMPILE改成CROSS_COMPILE = arm-linux-(此时确定主机是已经安装了arm-linux- 交叉编译器的,如果没有安装编译失败)
4、修改配置文件:vim include/configs/smdkv210single.h 把里面的CONFIG_SERIAL3改为CONFIG_SERIAL1(即是使用UART1串口)
5、配置和编译 make smdkv210single_config(配置开发板的文件,配置之后在include下生成好几个文件,其中比较重要的有config.mk和config.h)
配置完成了就可以进行编译了make 或者make -j 2 ( -j表示编译的时候使用两个线程,加快编译的速度)
注:以上步骤只是完成了基本的移植,下载到开发板,不一定能够成功的运行
二、修改内存
1、修改配置文件 vim include/configs/smdkv210single.h
加入以下两行:
32 #define MEMORY_BASE_ADDRESS1 0x40000000
33 #define DMC0_MEMCONTROL 0x00202400
修改:
410 #define DMC0_MEMCONFIG_00x20F00313 在vim cpu/s5pc11x/s5pc110/cpu_init.S 125调用到 ,在datasheet里面614可以查看到
411 #define DMC0_MEMCONFIG_10x00F00313
417 #define DMC1_MEMCONTROL 0x00202400
418 #define DMC1_MEMCONFIG_00x40F00313
419 #define DMC1_MEMCONFIG_10x00F00313
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 然后重新编译
三、去掉SRAM电源管理芯片
修改vim board/samsung/smdkc110/lowlevel_init.S,屏蔽掉如下所示的两段代码
#if 0
/* SRAM(2MB) init for SMDKC110 */
/* GPJ1 SROM_ADDR_16to21 */
ldr r0, =ELFIN_GPIO_BASE
……省略部分代码……
/* PS_HOLD pin(GPH0_0) set to high */
ldr r0, =(ELFIN_CLOCK_POWER_BASE + PS_HOLD_CONTROL_OFFSET)
ldr r1, [r0]
orr r1, r1, #0x300
orr r1, r1, #0x1
str r1, [r0]
#endif
#if 0
/* init PMIC chip */
bl PMIC_InitIp
#endif
重新编译make
四、修改网卡
修改 vim include/configs/smdkv210single.h
将 #define CONFIG_DM9000_BASE (0xA8000000) 修改为 #define CONFIG_DM9000_BASE (0x88000000)
将 #define DM9000_DATA (CONFIG_DM9000_BASE+2) 修改为 #define DM9000_DATA (CONFIG_DM9000_BASE+8)
修改板级预初始化函数dm9000_pre_init,
vim board/samsung/smdkc110/smdkc110.c
如下所示:
static void dm9000_pre_init(void)
{
unsigned int tmp;
/* DM9000 on SROM BANK1, 16 bit */
SROM_BW_REG &= ~(0xf << 4);
SROM_BW_REG |= (0x1 << 4);
SROM_BC1_REG = ((0<<28)|(0<<24)|(5<<16)|(0<<12)|(0<<8)|(0<<4)|(0<<0));
/* Set MP01_1 as SROM_CSn[1] */
tmp = MP01CON_REG;
tmp &=~(0xf<<4);
tmp |=(2<<4);
MP01CON_REG = tmp;
}
五、制作SD卡启动
1、在u-boot的源码目录下,进入目录sd_fusing
2、在该目录下进行编译
3、插入SD卡都linux的主机中,可以使用ls -al /dev/sdb*来查看主机是否已经能够成功的识别了SD卡
4、制作SD卡,在该目录下,进行./sd_fusing.sh /dev/sdb
5、将SD卡插到开发板上面去,启动模式打到SD卡启动模式,重新上电即可以进行SD卡启动。
六、固化u-boot
1、在SD卡启动的方式下,先设置开发板的(setenv serverip 主机网址、setenv ipaddr 开发板网址、setenv gatewayip 网关、然后保存saveenv)
2、把编译好的u-boot.bin下载到nand flash中:tftp 0x40000000 u-boot.bin
3、 擦除部分nand flash:nand erase 0 0x60000
4、把处于0x40000000地址段的u-boot.bin固化到nand flash中:nand write 0x40000000 0 0x60000
5、断电,把开发板的启动方式设置为nand flash启动,重新上电启动即可
步骤总结:
1、修改uboot的Makefile,并配置u-boot make smdkv210single_config ,进行编译
2、修改内存的部分参数:vim include/configs/smdkv210single.h vim cpu/s5pc11x/s5pc110/cpu_init.S, 进行编译
3、去掉SRAM电源管理芯片:vin board/samsung/smdkc110/lowlevel_init.S ,进行编译
4、修改网卡:vim include/configs/smdkv210single.h vim board/samsung/smdkc110/smdkc110.c 进行编译
5、制作SD卡启动卡:进入目录然后:./sd_fusing.sh /dev/sdb
6、把u-boot下载到nand flash中,进行固化。
另外的注释:
配置
make smdkv210single_config
smdkv210single_config : unconfig
@$(MKCONFIG) $(@:_config=) arm s5pc11x smdkc110 samsung s5pc110
@echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/smdkc110/config.mk
1、依赖伪目标 unconfig
将之前的配置信息删掉
unconfig:
@rm -f $(obj)include/config.h $(obj)include/config.mk $(obj)borad/*/config.tm $(obj)board/*/*/config.tmp $(obj)include/autoconf.mk $(obj)include/autoconf.mk.dep $(obj)board/$(VENDOR)/$(BOARD)/config.mk
2、执行目标 smdkv210single_config --->
./mkconfig mdkv210single arm s5pc11x smdkc110 samsung s5pc110
3、配置一些链接关系
$1 = smdkv210single
$2 = arm
$3 = s5pc11x
$4 = smdkc110
$5 =samsung
$6 = s5pc110