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

简介:

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









本文转自 chen138 51CTO博客,原文链接:http://blog.51cto.com/chenboqiang/484037,如需转载请自行联系原作者

目录
相关文章
|
2月前
|
Linux 内存技术 Perl
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件
|
2月前
|
存储 运维 Linux
Linux内核学习(三):Bootloader的特种兵-Uboot(一)
Linux内核学习(三):Bootloader的特种兵-Uboot(一)
51 0
|
2月前
|
Linux 编译器 Go
Linux内核学习(四):Bootloader的特种兵-Uboot(二)
Linux内核学习(四):Bootloader的特种兵-Uboot(二)
573 0
|
10月前
|
存储 Linux 内存技术
嵌入式Linux系列第16篇:使用SD卡
嵌入式Linux系列第16篇:使用SD卡
|
Linux 虚拟化 Windows
如何在把Linux装进移动硬盘/U盘(UEFI启动)?
如何在把Linux装进移动硬盘/U盘(UEFI启动)?
2259 1