DM6467开发之U-Boot移植(3)——U-Boot移植测试

 

1        U-Boot常用命令及环境变量

1.1             U-Boot环境变量

U-Boot通过环境变量(environment)为用户提供一定程度的可配置性,这些环境变量包括串口终端所使用的波特率(baudrate)、启动操作系统内核的参数(bootargs)、本地IP地址(ipaddr)、网卡MAC地址(ethaddr)等等。环境变量可以固化到非易失性存储介质中,在本系统中,环境变量就是固化在NAND Flash中,同时在RAM中有一份拷贝。U-Boot环境变量可以使用printenv / saveenv命令来查看和修改。printenv用于显示内存中的环境变量,saveenv用于把内存中设置的环境变量存储到NAND。U-Boot常用的环境变量见表 5‑1。

5‑1 U-Boot常用环境变量

环境变量

含义

bootdelay

定义执行自动启动的等候秒数

baudrate

定义串口控制台的波特率

netmask

定义以太网接口的掩码

ethaddr

定义以太网接口的MAC地址

bootfile

定义缺省的下载文件

bootargs

定义传递给Linux内核的命令行参数

bootcmd

定义自动启动时执行的几条命令

serverip

定义tftp服务器端的IP地址

ipaddr

定义本地的IP地址

stdin

定义标准输入设备,一般是串口

stdout

定义标准输出设备,一般是串口

stderr

定义标准出错信息输出设备,一般是串口

下面对其中一些重要的环境变量进行详细分析。

bootdelay

用于设置U-Boot启动时的延时,以秒为单位,在调试时一般都需要使用此环境变量,用于在U-Boot启动时中断自启动而进行参数设置。我们开发板设置的启动延时是3秒。环境变量的设置方法既可以是在davinci_dm6467evm.h中进行,也可以在U-Boot启动过程中使用命令修改,设置bootdelay变量时的命令是“setenv bootdelay 3”。

ipaddr

ipaddr用于设置开发板的IP地址,设置方法为“setenvipaddr 192.168.0.68”。

serverip

serverip用于设置服务器端的IP,一般用于TFTP,设置方法为“setenvserverip 192.168.0.83”。

ethaddr

ethaddr变量用于设置开发板的MAC地址,设置方法为“setenvethaddr 00:0c:29:89:09:82”。ethaddr设置之后需要使用saveenv保存参数,然后重启才能使新的MAC地址生效。

bootcmd

bootcmd是U-Boot中非常重要的一个环境变量,它用于设置U-Boot自启动时的命令。针对我们的开发板,设置bootcmd为“tftp 0x80700000 uImage; ping 192.168.0.83; bootm”,表示默认启动步骤是首先使用TFTP从服务器下载uImage内核映像文件到0x80700000处,然后ping服务器端的IP,最后从0x80700000出运行Linux内核映像文件。

bootargs

bootargs是U-Boot中另一个非常重要的环境变量,它用于设置Linux启动时的一些参数。针对我们的开发板,设置的bootargs的值如下所示:

#define CONFIG_BOOTARGS mem=76M console=ttyS0,115200n8 noinitrd rw ip=192.168.0.68:192.168.0.83:192.168.0.254:255.255.255.0::eth0:off eth=00:0c:29:89:09:82 root=/dev/nfs nfsroot=192.168.0.83:/home/tirvideo/lyb/armfs vpif_display.ch2_numbuffers=0"

 

/*

内存大小为76M,串口波特率115200,IP地址192.168.0.68,服务器IP地址192.168.0.83,网关192.168.0.254,子网掩码255.255.255.0,MAC地址00:0c:29:89:09:82,roo=/dev/nfs表示系统使用NFS协议共享主机文件作为自己的文件系统,NFS根目录路径为192.168.0.83:/home/tirvideo/lyb/armfs。

*/

1.2             U-Boot常用命令

U-Boot提供了很多命令,同时也可以自己添加新的命令。比较常用的U-Boot命令不多,如表 5‑2所示。

5‑2 U-Boot常用命令

命令

解释

bootm

执行内存中通过mkimage处理过的内核映像文件

bootp

通过网络启动系统

tftpboot

从服务器下载文件到内存

ping

标准ping工具

help

使用help + command输出帮助信息

printenv

输出环境变量的设定值

setenv

设置环境变量

saveenv

保存环境变量到Flash

在U-Boot命令中,最常用的是printenv、setenv、saveenv和bootm,除bootm外其他三条命令的操作语法都很简单,不详细介绍。对于bootm,其常用的语法规则是“bootm addr”,表示从addr地址处启动。

2        移植测试

在完成对U-Boot的修改之后就需要对其进行测试,测试可以分为两部分,一是查看编译生成的文件中的信息是否正确,二是将u-boot.bin文件下载到开发板上看能否正常启动Linux。

2.1             核对编译生成的文件

按照4.2.2节中所述的命令编译U-Boot,如果编译成功,那么终端中的输出信息如图 6‑1所示,表示正确生成了目标文件。


6‑1 终端输出信息

编译成功之后,主要生成了以下这些目标文件:

l  u-boot.bin:用于引导Linux的U-Boot二进制可执行文件。

l  system.map:内存映射表。

l  u-boot.map:指示U-Boot中各函数在内存中的位置。

l  config.h:位于include/目录,包含davinci_dm6467evm.h头文件的引用。

l  config.mk:位于include/目录,包含开发板架构和CPU的信息。

l  autoconf.mk:位于include/目录,包含根据davinci_dm6467evm.h生成的配置信息。

对于u-boot.bin文件,由于是二进制文件,不方便直接查看,不过,在修改U-Boot时可以比较修改前后修改后生成的u-boot.bin文件的大小,如果大小没有改变的话那很可能修改有错误。

对于config.h、config.mk和autoconf.mk三个文件,都是包含了一些配置信息,内容很简单,可以在编译完之后核对其中信息是否正确。不过一般来说这三个文件都是没问题的。

编译后生成的文件中最需要注意的其实是system.map和u-boot.map这两个关于内存分配的文件,需要详细分析。system.map中包含了按内存增长顺序排列的各种函数和标号的地址。u-boot.map文件中包含了根据不同段排列的库和目标文件,我们可以在u-boot.map中查看某函数是否编译进了最终的bin文件。例如,查看board/davinci/dm6467evm/dm646x.c文件中的board_init()函数的方法是:在u-boot.map中的.text段中找到“board/davinci/dm6467evm/libdm6467evm.a”,看它下面是否有“board_init”标号,如果有,那么表示board_init()函数是编译进了bin文件的。

U-Boot通过在board/dacinci/dm6467evm/config.mk文件中设置“TEXT_BASE= 0x81080000”来设置U-Boot下载到内存中的位置,这个地址也即是system.map中记录U-Boot标号信息的起始地址。DM6467的SDRAM起始地址为0x80000000,在include/configs/davinci_dm6467evm.h头文件中通过宏定义“#defineCONFIG_SYS_LOAD_ADDR 0x80700000”设置Linux内核映像文件的下载地址为0x80700000,这和U-Boot之间相隔了大于16M的空间,足够放置uImage文件。

系统的内存分配情况见图 6‑2。从图中可以看出,U-Boot本来是存储在NANDFlash中,通过UBL将其复制到了SDRAM的0x81080000,在这个地址之前的是malloc区、U-Boot全局变量存储区和用户堆栈区,然后是linux内核映像文件。SDRAM的起始地址0x800000000到0x80700000作为系统预留分区。           


6‑2 内存分配图

2.2             下载测试

要将u-boot.bin文件下载到开发板进行启动测试,需要先通过仿真器连接开发板,然后烧写UBL,再烧写u-boot.bin,然后系统上电,在串口控制台查看输出信息。

Booting PSP Boot Loader

Starting NAND Copy

Booting Application @ 0x81080000

 

U-Boot 2009.08  ( 7.20 2012 - 14:07:04)

I2C:     ready

DRAM:  256M

NAND:  128M

In:      serial

Out:    serial

Err:     serial

ARM Clock : - 363MHz

DDR Clock : - 297MHz

Net:    Ethernet PHY: GENERIC @ 0x01

DaVinci EMAC

Hit any key to stop autoboot: 3

上面的前三行是UBL的输出信息,之后的都是U-Boot输出的。在看到“Hitany key to stop autoboot:”时按下任意键进行环境变量设置。

setenv serverip 192.168.0.83:255.255.255.0

setenv ipaddr 192.168.0.68:255.255.255.0

setenv ethaddr 00:0c:29:89:09:82

setenv bootargs mem=76M console=ttyS0,115200n8 noinitrd rw ip=192.168.0.68:192.168.0.83:192.168.0.254:255.255.255.0::eth0:off eth=00:0c:29:89:09:82 root=/dev/nfs nfsroot=192.168.0.83:/home/tirvideo/lyb/armfs vpif_display.ch2_numbuffers=0

tftp 0x80700000

bootm

执行完bootm之后系统开始下载uImage到0x80700000处,然后启动linux内核。当在串口控制台看到提示登录的信息之后,linux启动就完成了,这表示整个U-Boot移植成功完成。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值