u-boot-2011.06虽然支持一些常见的开发板,但如果u-boot-2011.06不支持我们手上的开发板,那就要找到与我们的开发板最接近的u-boot-2011.06所支持的开发板,在这个开发板的基础上进行移植。u-boot-2011.06所支持的smdk2410开发板是最接近我的开发板的,所以我就在该此基础上进行修改、移植。
在移植之前,我们还需要安装、配置eldk,用于编译u-boot。下面我们就先介绍一下eldk的安装与配置:
1.下载eldk
在ftp://ftp.denx.de/pub/eldk/选择任一版本的eldk并下载,我选择的是eldk4.2版本的arm-2008-11-24.iso文件。把该文件下载到/home/zhaocj/download/目录下。
2.在root权限下安装eldk
创建挂载点:
mkdir /mnt/dvdrom
挂载光驱:
mount –o loop /home/zhaocj/download/arm-2008-11-24.iso/mnt/dvdrom
安装eldk:
cd /mnt/dvdrom
./install –d /opt/eldk4.2/
这样eldk就安装到了/opt/eldk4.2目录下。
3.设置环境变量
cd ~
gedit .bashrc
在最后添加如下内容:
export CROSS_COMPILE=arm-linux-
export PATH=/opt/eldk4.2/bin: /opt/eldk4.2/usr/bin:$PATH
保存并退出,然后执行:
source .bashrc
重启电脑就完成了eldk的安装。
下面就介绍u-boot-2011.06的移植,在这里我把我的开发板命名为gq2440:
1.下载u-boot
在ftp://ftp.denx.de/pub/u-boot/下载目前最新的u-boot版本(即u-boot-2011.06.tar.bz2)到我的用户主目录下。
2.解压u-boot
cd ~
把u-boot-2011.06解压到当前目录下
tar –xvjf u-boot-2011.06.tar.bz2
cd u-boot-2011.06
3.在u-boot中添加我的开发板信息
emacs boards.cfg
打开boards.cfg文件,在第70行(smdk2410 arm arm920t – samsung s3c24x0)的下面添加一行,内容如下:
gq2440 arm arm920t – samsung s3c24x0
保存并退出。
4.通过复制的方式添加我的开发板头文件
cp include/configs/smdk2410.h include/configs/gq2440.h
5.通过复制的方式添加我的开发板文件夹
cp –r board/samsung/smdk2410 board/samsung/gq2440
更改文件名
mv board/samsung/gq2440/smdk2410.c board/samsung/gq2440/gq2440.c
修改Makefile文件
emacs board/samsung/gq2440/Makefile
打开Makefile文件,在第28行中,把COBJS :=smdk2410.o改为:
COBJS:=gq2440.o
保存并退出。
6.编译
make distclean
make gq2440_config
make
如果上述过程没有出错的话,会在u-boot的目录下出现新的u-boot.bin文件。
2 NorFlash启动移植方法
.修改宏定义
打开include/configs/gq2440.h文件
第38行“#define CONFIG_S3C2410 ”改为:
38:#define CONFIG_S3C2440
目的是告之系统本开发板使用的是S3C2440处理器。
第131行“#define CONFIG_SYS_PROMPT "SMDK2410 # "”改为:
131:#define CONFIG_SYS_PROMPT "gq2440# "
目的是使命令行提示符显示为“gq2440# ”。
第185行“#define CONFIG_FLASH_CFI_LEGACY”改为:
185:#define CONFIG_SYS_CFI_FLASH_CONFIG_REGS {0xFFFF}
因为在u-boot-2011.06中,使用的是CFI的NorFlash接口,所以不需要定义CONFIG_FLASH_CFI_LEGACY,而是要定义CONFIG_SYS_CFI_FLASH_CONFIG_REGS。
第191行“#define CONFIG_SYS_MAX_FLASH_SECT (19)”改为:
191:#define CONFIG_SYS_MAX_FLASH_SECT (35)
因为本开发板使用的NorFlash是EN29LV160AB,它有35个扇区。
第212行“#define CONFIG_NAND_S3C2410”改为:
212:#define CONFIG_NAND_S3C2440
第213行“#define CONFIG_SYS_S3C2410_NAND_HWECC”改为:
213:#define CONFIG_SYS_S3C2440_NAND_HWECC
2.修改系统时钟频率
打开arch/arm/cpu/arm920t/start.s文件
第164行“# if defined(CONFIG_S3C2410)”改为:
164:# if defined(CONFIG_S3C2440)
第165行“ldr r1, =0x3ff”改为:
165:ldr r1, =0x7fff
目的是屏蔽所有子中断。
第173行“mov r1, #3”改为:
173:mov r1, #5
目的是使FCLK:HCLK:PCLK= 1:4:8。
打开board/samsung/gq2440/gq2440.c文件
第42行至第44行的内容改为:
42:#define M_MDIV 92
43:#define M_PDIV 1
44:#define M_SDIV 1
本开发板的输入晶振频率为12MHz,通过上面的修改,则MPLL频率为400MHz。
第54行至第56行的内容改为:
54:#define U_M_MDIV 56
55:#define U_M_PDIV 2
56:#define U_M_SDIV 2
通过上面的修改,则UPLL频率为48MHz。
3.修改内存SDRAM时序
打开board/samsung/gq2440/lowlevel_init.s文件
第54行至第126行的内容改为:
54:#define B1_BWSCON (DW16)
55:#define B2_BWSCON (DW16)
56:#define B3_BWSCON (DW16)
57:#define B4_BWSCON (DW32)
58:#define B5_BWSCON (DW16)
59:#define B6_BWSCON (DW32)
60:#define B7_BWSCON (DW32)
61:
62:
63:#define B0_Tacs 0x3
64:#define B0_Tcos 0x3
65:#define B0_Tacc 0x7
66:#define B0_Tcoh 0x3
67:#define B0_Tah 0x3
68:#define B0_Tacp 0x1
69:#define B0_PMC 0x0
70:
71:
72:#define B1_Tacs 0x1
73:#define B1_Tcos 0x1
74:#define B1_Tacc 0x6
75:#define B1_Tcoh 0x1
76:#define B1_Tah 0x1
77:#define B1_Tacp 0x0
78:#define B1_PMC 0x0
79:
80:#define B2_Tacs 0x1
81:#define B2_Tcos 0x1
82:#define B2_Tacc 0x6
83:#define B2_Tcoh 0x1
84:#define B2_Tah 0x1
85:#define B2_Tacp 0x0
86:#define B2_PMC 0x0
87:
88:#define B3_Tacs 0x1
89:#define B3_Tcos 0x1
90:#define B3_Tacc 0x6
91:#define B3_Tcoh 0x1
92:#define B3_Tah 0x1
93:#define B3_Tacp 0x0
94:#define B3_PMC 0x0
95:
96:#define B4_Tacs 0x1
97:#define B4_Tcos 0x1
98:#define B4_Tacc 0x6
99:#define B4_Tcoh 0x1
100:#define B4_Tah 0x1
101:#define B4_Tacp 0x0
102:#define B4_PMC 0x0
103:
104:#define B5_Tacs 0x1
105:#define B5_Tcos 0x1
106:#define B5_Tacc 0x6
107:#define B5_Tcoh 0x1