在下载的uboot源码中并没有对mini2440开发板的支持,需要做相应的移植
1、下载u-boot源码:u-boot-2008.10.tar
2、解压源码
3、选择移植参考开发板
3.1、首先选择MCU相同的开发板,在u-boot-2008.10中不支持MCU为S3C2440芯片的开发板
3.2、如果没有相同MCU的开发板,则选择MPU相同的开发板
此处S3C2440的MPU为arm920t,与u-boot-2008.10中的smdk2410相同,故选择smdk2410作为参考开发板
4、在顶层Makefile中为开发板添加新的配置选项,同样参考smdk2410的配置选项
terry@terry-virtual-machine:~/terry_shared/uboot/u-boot-2008.10$ vi Makefile
4.1、添加mini2440_config
4.2、修改编译工具,arm架构下使用CROSS_COMPILE = arm-linux-gnu-
5、修改cpu/arm920t/start.S
terry@terry-virtual-machine:~/terry_shared/uboot/u-boot-2008.10/cpu/arm920t$ vi start.S
5.1、修改编译条件使其支持S3C2440
#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)
修改为:
5.2、添加寄存器的定义
5.3、修改中断禁止部分,添加S3C2440中断禁止代码
5.4、修改时钟设置(将S3C2440主频设置为405MHZ)
6、修改cpu/arm920t/s3c24x0/interrupts.c
terry@terry-virtual-machine:~/terry_shared/uboot/u-boot-2008.10/cpu/arm920t/s3c24x0$ vi interrupts.c
6.1、在有S3C2410宏定义开关里加入对S3C2440的支持
6.2、在函数get_tbclk中,添加对mini2440的支持
7、修改cpu/arm920t/s3c24x0/speed.c
7.1、仍然是在宏定义中添加对S3C2440的支持
7.2、修改函数get_PLLCLK
由于S3C2440与S3C2410的MPLL、UPLL计算公式不同,需要修改相关代码
7.3、修改函数get_HCLK,同样S3C2440对分频的设置也不相同,需添加相关修改
8、修改cpu/arm920t/s3c24x0/serial.c
terry@terry-virtual-machine:~/terry_shared/uboot/u-boot-2008.10/cpu/arm920t/s3c24x0$ vi serial.c
在有s3c2410宏定义开关里加入对s3c2440的支持
9、修改include/asm-arm/mach-types.h,添加mini2440机器ID,要求添加的ID与内核提供的ID保持一致。在内核源码文件include/asm-arm/mach-types.h
10、修改include/s3c24x0.h
在有s3c2410宏定义开关里加入对s3c2440的支持
10.1、INTERRUPT
10.2、DMAS
10.3、CLOCK & POWER MANAGEMENT
10.4、LCD CONTROLLER
10.5、I/O PORT
11、在board目录中创建一个属于新开发板的目录,向目录中添加文件,再修改
terry@terry-virtual-machine:~/terry_shared/uboot/u-boot-2008.10/board$ sudo cp -r smdk2410/ mini2440
terry@terry-virtual-machine:~/terry_shared/uboot/u-boot-2008.10/board$ sudo chmod -R 777 mini2440/
terry@terry-virtual-machine:~/terry_shared/uboot/u-boot-2008.10/board/mini2440$ vi Makefile
28 COBJS := smdk2410.o flash.o 修改为:28 COBJS := mini2440.o flash.o
12、修改board/mini2440/mini2440.c
terry@terry-virtual-machine:~/terry_shared/uboot/u-boot-2008.10/board$ cd mini2440/
terry@terry-virtual-machine:~/terry_shared/uboot/u-boot-2008.10/board/mini2440$ sudo cp smdk2410.c mini2440.c
terry@terry-virtual-machine:~/terry_shared/uboot/u-boot-2008.10/board/mini2440$ vi mini2440.c
12.1、修改PLL的配置
12.2、修改UPLL的配置
12.3、为了引导内核,修改函数board_init中开发板类型代码部分
123 /* arch number of SMDK2410-Board */
124 gd->bd->bi_arch_number = MACH_TYPE_SMDK2410;
修改为:
124 /* arch number of mini2440-Board */
125 gd->bd->bi_arch_number = MACH_TYPE_MINI2410;
13、修改board/mini2440/lowlevel_init.S,修改REFRESH的刷新周期
terry@terry-virtual-machine:~/terry_shared/uboot/u-boot-2008.10/board/mini2440$ vi lowlevel_init.S
123 #define Trp 0x0 /* 2clk */ 修改为:123 #define Trp 0x2 /* 4clk */
126 #define REFCNT 1113 /* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */ 修改为:
126#define REFCNT 1112
14、软硬件配置文件mini2440.h
为开发板添加新的软硬件配置文件,先复制参考板的配置文件smdk2410.h,然后修改
terry@terry-virtual-machine:~/terry_shared/uboot/u-boot-2008.10/include/configs$ cp smdk2410.h mini2440.h
15、修改include/configs/mini2440.h
terry@terry-virtual-machine:~/terry_shared/uboot/u-boot-2008.10/include/configs$ vi mini2440.h
15.1、添加对S3C2440宏定义
37 #define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */
38 #define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */
改为:
37 #define CONFIG_S3C2440 1 /* in a SAMSUNG S3C2440 SoC */
38 #define CONFIG_mini2440 1 /* on a SAMSUNG mini2440 Board */
15.2、修改命令提示符
114 #define CFG_PROMPT "SMDK2410 # " /* Monitor Command Prompt */
修改为:
114 #define CFG_PROMPT " mini2440 # " /* Monitor Command Prompt */
16、网卡驱动移植
terry@terry-virtual-machine:~/terry_shared/uboot/u-boot-2008.10/include/configs$ vi mini2440.h
17.1、屏蔽原来关于网卡的配置
17.2、添加关于DM9000的配置
17.3、添加对ping命令的支持
17、修改网卡驱动
terry@terry-virtual-machine:~/terry_shared/uboot/u-boot-2008.10/drivers/net$ vi dm9000x.c
在网卡驱动drivers/net/dm9000x.c中,有一段程序试图连接网卡的MII接口,而实际MII接口并未使用,会有十秒的等待时间,然后报错,可以将此段程序注释掉
18、修改drivers/rtc/s3c24x0_rtc.c
terry@terry-virtual-machine:~/terry_shared/uboot/u-boot-2008.10/drivers/rtc$ vi s3c24x0_rtc.c
在有s3c2410宏定义开关里加入对s3c2410的支持
19、至此,代码部分已经修改完毕,接下来对修改之后的代码进行编译
#make clean
#make mini2440_config
#make CROSS_COMPILE=arm-linux-gnu-
20、编译后生成,用JTAG烧录到mini2440开发板中,并测试是否可用
20.1、配置环境变量
#setenv serverip 192.168.7.253
#setenv ipaddr 192.168.7.153
#setenv ethaddr 12:34:56:78:90:53
#saveenv
20.2、ping服务器ip
#ping 192.168.7.153