您的位置:首页 > 运维架构 > Linux

BootLoader引导程序制作及移植(二)

2011-01-22 22:35 387 查看
2、添加命令

U-Boot中提供了丰富的命令,smdk2410板增加一些命令。我们为我们的开发板配置了一部分命令,找到下面的几行:
#define CONFIG_CMD_CACHE
#define CONFIG_CMD_DATE
#define CONFIG_CMD_ELF
在其下面添加下面几行:
#define CONFIG_CMD_REGINFO
#define CONFIG_CMD_NAND
#define CONFIG_CMD_PING
#define CONFIG_CMD_DLF
#define CONFIG_CMD_ENV
#define CONFIG_CMD_NET
这样就添加了一些我们需要的命令。



这样就添加了一些我们需要的命令。
3、修改环境变量
环境变量是U-Boot运行时或者传递给内核的重要参数,需要正确设置。找到下面的一行:
#define CONFIG_BOOTDELAY 3
/*#define CONFIG_BOOTARGS "root=ramfs devfs=mount console=ttySA0,9600"
*/
/*#define CONFIG_ETHADDR 08:00:3e:26:0a:5b */
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 10.0.0.110
#define CONFIG_SERVERIP 10.0.0.1
/*#define CONFIG_BOOTFILE "elinos-lart" */
/*#define CONFIG_BOOTCOMMAND "tftp; bootm" */
#if defined(CONFIG_CMD_KGDB)

注意上面的#if defined(CONFIG_CMD_KGDB)处,需要做的修改都在这之前进行修改。修改后的代码如下:

#define CONFIG_BOOTDELAY 3
#define CONFIG_BOOTARGS "root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200"
#define CONFIG_ETHADDR 08:00:3e:26:0a:5b
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 10.88.221.118
#define CONFIG_SERVERIP 10.88.221.117
#define CONFIG_BOOTFILE "uImage"
#define CONFIG_BOOTCOMMAND "tftp; bootm"
#define CONFIG_CMDLINE_TAG 1
#define CONFIG_SETUP_MEMORY_TAGS 1
#define CONFIG_INITRD_TAG 1
#if defined(CONFIG_CMD_KGDB)




添加的环境变量在U-Boot启动时作为U-Boot的默认环境变量,如果不执行saveenv命令,则这些变量只存在于SDRAM中;执行saveenv命令后,这些便量会保存到Flash中,下次上电,在从Flash中把它读出来,作4、修改命令提示符为环境变量使用。

找到下面一行:
#define CFG_PROMPT "SMDK2410 # " /* Monitor Command Prompt */
修改为:
#define CFG_PROMPT "[UP-2410 #]"
这样,U-Boot的命令提示符就是[UP-2410 #]用的是经典。这样做只是为了使用的时候知道我们使2410开发板上Bootloader,当然不改的话,也没有什么影响。




5、修改默认下载地址

找到下面的一行:
#define CFG_LOAD_ADDR 0x33000000 /* default load address */
这个变量定义的是在使用串口或者网卡下载文件到SDRAM址,则下载到这个宏指定的默认地址。我们用下面的两行来替代:时,如果不指定下载地
#define CFG_LOAD_ADDR 0x30008000
#define CFG_TFTP_LOAD_ADDR 0x30008000




6、修改环境变量在Flash 中的存储地址

找到下面的两行:
#define CFG_ENV_IS_IN_FLASH 1
#define CFG_ENV_SIZE 0x10000 /* Total Size of Environment Sector */
上面的定义说明环境变量是存在Flash中。我们的板子上只有Nand Flash量只能存在,因此环境变Nand Flash中。因此,注释掉上面的两行,用下面的几行代替:
#define CFG_ENV_IS_IN_NAND 1
#define CFG_ENV_SIZE 0x4000
#define CFG_ENV_OFFSET (0x80000-0x4000)

表示环境变量存储在Nand Flash中,大小为16KB,起始地址是0.5M往下的16KB址处。这样的话, 地U-Boot占用的Flash地址是前0.5M,对U-Boot来说,已经足够了。到这里,配置文件的修改就完成了。



四、修改网卡驱动
前面提到,我们的开发板上是DM9000A网卡,不能直接只用U-Boot这动个,驱我动们的提实供现了代这码个。网公卡有的两驱个动文,件由:于修改的地方比较多,就不作详细解释了提,供直的接网给卡出驱dm9000x.c和dm9000x.h。这两个文件在我们的src目录中存放。把这两个拷贝到u-boot源代码目录下的drivers/net下,替换掉U-Boot驱动文件。
[root@localhost u-boot-1.3.2]# cp /mnt/hgfs/linux/dm9000x.* drivers/net/




五、编译U-Boot
首先运行如下命令配置U-Boot:
[root@vm-dev u-boot-1.3.2]# make up2410_config
Configuring for up2410 board...
[root@localhost u-boot-1.3.2]# vi Makefile
CROSS_COMPILE = arm-softfloat-linux-




然后运行make命令编译:
[root@vm-dev u-boot-1.3.2]# make
编译完成后,会在U-Boot的源代码目录下生成u-boot.bin文件。这个文件就是我们需要的二进制文件。




编译完成后,会在U-Boot的源代码目录下生成u-boot.bin文件。这个文件就是我们需要的二进制文件。

六、烧写U-Boot
将编译得到的u-boot.bin拷贝到XP的D盘下,将我们光盘中的sjf2410-s.exe贝到文件也拷D盘下。连接好开发板的电源、JTAG 下载线,打开发板的电源。在电脑桌面的左下角点击开始,找到运行:

版权所有
1985-2001 Microsoft Corp.
C:\Documents and Settings\Administrator>D:
D:\>
这样就进入了D盘,运行如下命令进行烧写:
D:\>sjf2410-s.exe /f:u-boot.bin
这样就会启动烧写程序。在烧写程序中需要我们做一些选择,要分别输入三次0,然后才开始真正的烧写,烧写完毕后,输入2推出程序。如下面的内容:

七、测试U-Boot
现在U-Boot和主机之间的串口已、经网烧口写,到断开开发板发上板了的,可以启动开发板检测是否烧写好。连接好开发板JTAG下载线,启动开发板。如果烧写成功,会在串口终端上出现如下内容:

注意上面内容中红色的部分,主要是因为我们没有把环境变脸写入Flash令将环境变量写入。运行如下命Flash中:
[UP-2410 #]saveenv
[UP-2410 #]printenv
[UP-2410 #]ping 192.168.1.135
[UP-2410 #]help
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息