u-boot-2009.08在2440上的移植详解(四)
时间:2010-09-16 来源:linuxdevelop
一、移植环境
- 主 机:VMWare--RHEL5.5
- 开发板:Mini2440--64MB Nand,Kernel:2.6.30.4
- 编译器:arm-linux-gcc-4.3.2.tgz
- u-boot:u-boot-2009.08.tar.bz2
二、移植步骤
上接:u-boot-2009.08在2440上的移植详解(三)
在这一篇中,我们首先让开发板对CS8900或者DM9000X网卡的支持,然后再分析实现u-boot怎样来引导Linux内核启动。因为测试u-boot引导内核我们要用到网络下载功能。
7)u-boot对CS8900或者DM9000X网卡的支持。
u-boot-2009.08版本已经对CS8900和DM9000X网卡有比较完善的代码支持(代码在drivers/net/目录下),而且在S3C24XX系列中默认对CS8900网卡进行配置使用。只是在个别地方要根据开发板的具体网卡片选进行设置,就可以对S3C24XX系列中CS8900网卡的支持使用。代码如下:
#gedit include/configs/my2440.h |
/* |
首先,我们看看drivers/net/目录下有关DM9000的代码,发现dm9000x.h中对CONFIG_DRIVER_DM9000宏的依赖,dm9000x.c中对CONFIG_DM9000_BASE宏、DM9000_IO宏、DM9000_DATA等宏的依赖,所以我们修改代码如下:
#gedit include/configs/my2440.h |
/* * Hardware drivers */ 屏蔽掉u-boot默认对CS8900网卡的支持
//添加u-boot对DM9000X网卡的支持
#define CONFIG_DRIVER_DM9000 1 //#define CONFIG_DM9000_USE_16BIT 1
注意:
//给u-boot加上ping命令,用来测试网络通不通 #define CONFIG_CMD_PING
//恢复被注释掉的网卡MAC地址和修改你合适的开发板IP地址
#define CONFIG_ETHADDR 08:00:3e:26:0a:5b //开发板MAC地址 #define CONFIG_SERVERIP 192.168.1.103 //Linux主机IP地址 |
添加板载DM9000网卡初始化代码,如下:
#gedit board/samsung/my2440/my2440.c |
#include <net.h>
#ifdef CONFIG_DRIVER_DM9000 |
修改MD9000网卡驱动代码,如下:
#gedit drivers/net/dm9000x.c |
#if 0 //屏蔽掉dm9000_init函数中的这一部分,不然使用网卡的时候会报“could not establish link”的错误 |
然后重新编译u-boot,下载到Nand中从Nand启动,查看启动信息和环境变量并使用ping命令测试网卡,操作如下:

#gedit drivers/net/dm9000x.c //屏蔽掉dm9000_halt函数中的内容 |
/* |




#define MACH_TYPE_SMDK2440 1008 //针对2440的MACH_TYPE码的值定义为1008 |
#gedit board/samsung/my2440/my2440.c //修改board_init函数 |
/* arch number of SMDK2410-Board */ |
smdk2440 MACH_SMDK2440 SMDK2440 1008 |
#gedit arch/arm/mach-s3c2440/mach-smdk2440.c //修改文件最后面 |
//MACHINE_START(S3C2440, "SMDK2440") |
#gedit arch/arm/kernel/head.S //在ENTRY(stext)下添加如下代码(红色部分) |
ENTRY(stext)
mov r0, #0 ....... |

使用: 中括号括起来的是可选的
mkimage [-x] -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image
选项: |
mkimage -n 'linux-2.6.30.4' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -d zImage uImage.img |
起始地址 结束地址
uboot : 0x00000000 0x00030000 |
//设置启动参数,意思是将nand中0x50000-0x00200000(和kernel分区一致)的内容读到内存0x31000000中,然后用bootm命令来执行 set bootcmd 'nand read 0x31000000 0x50000 0x00200000;bootm 0x31000000' saveenv //保存设置 |
tftp 0x30000000 uImage.img //将uImage.img下载到内存0x30000000处 |

