Linux系统移植:U-Boot常用指令(上)

Posted JeckXu666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统移植:U-Boot常用指令(上)相关的知识,希望对你有一定的参考价值。

Linux系统移植:U-Boot常用指令(上)

一、U-Boot 命令行

烧写启动 U-Boot 后,弹出如下界面:

其中 第 1 行 是 uboot 版本信息和编译时间

2 - 3 行 表面了芯片的厂商和最高主频以及当前主频;4 行 是复位源;5 行 是板子名字,当前的板子名字;6 行 提示 I2C 准备就绪;7、8 行是 RAM 和 ROM ;

10 、11 行 是 LCD 型号(800 * 480);12-14 行 是标准输入、标准输出和标准错误所使用的终端;

第 15 和 16 行 是切换到 emmc 的第 0 个分区上,因为当前的 uboot 是 emmc 版本的,也就 是从 emmc 启动的。我们只是为了方便将其烧写到了 SD 卡上,但是它的“内心”还是 EMMC 的。所以 uboot 启动以后会将 emmc 作为默认存储器

18 行 提示 FEC1 网卡地址没有设置,这里还没有配置

最后一行就是 uboot 命令行,在其中我们可以输入 uboot 指令

二、U-Boot 常用命令(上)

2.1 help帮助命令

列出所有命令

help 或者 ?

查询某一条命令功能,比如查询 ls 指令的功能

help ls

2.2 信息查询命令

bdinfo:查看板子信息

打印出 DRAM 的起始地址和大小、启动参数保存起始地址、波特率、 sp(堆栈指针)起始地址等信息

printenv:打印环境信息,显示一些环境参数的配置信息,当然这些参数也是可以修改的

version:查看 uboot 版本,uboot 编译时间和编译器

2.3 环境变量修改命令

2.2 中有打印环境变量,此处我们可以直接通过指令进行变量修改

2.3.1 修改环境变量

修改环境变量的操作涉及到两个命令:setenv 和 saveenv

setenv:设置或者修改环境变量的值

saveenv:保存修改后的环境变量;一般环境变量是存放在外部 flash 中的, uboot 启动的时候会将环境变量从 flash 读取到 DRAM 中,所以使用命令 setenv 将修改的环境变量值保存到 flash 中

eg:设置 uboot 启动延时时间从 3 s到 10 s

setenv bootdelay 10
saveenv

修改的环境变量值可能会有空格,比如 bootcmd 等,这个时候环境变量值就得用单引号括起来

2.3.2 新建\\删除环境变量

命令 setenv 可用于新建命令,比如新建 test 值为 jeckxu666

setenv test jeckxu666
saveenv

重新启动 uboot ,打印变量

删除变量的话,我们直接使用 setenv 设置变量的值为空就行

2.4 内存操作命令

内存操作命令就是用于直接对 DRAM 进行读写操作,常用的内存操作命令有 md、nm、 mm、mw、cp 和 cmp

2.4.1 md 指令

md 命令用于显示内存值

md[.b, .w, .l] address [# of objects]

[.b .w .l] :对应 byte、word 和 long,也就是分别以 1 个字节、2 个字节、4 个字节来显示内存值

address :就是要查看的内存起始地址

[# of objects] :表示要查看的数据长度(总长度安装选择的内存大小来计算)

eg:

2.4.2 nm 指令

nm 命令用于修改指定地址的内存值

nm[.b, .w, .l] address

输入指令后,就可以跟在后面输入我们需要修改的值,如下,修改 0x80000000 内存值为 0x66666666,修改完成输入 q 退出修改:

2.4.3 mm 指令

mm 命令也是修改指定地址内存值的,使用 mm 修改内存值的时候地址会自增,而使用命 令 nm 的话地址不会自增,使用 mm 修改完一个值后会修改下一个值

mm[.b, .w, .l] address

2.4.4 mw 指令

mw 用于使用一个指定的数据填充一段内存

mw[.b, .w, .l] address value [count]

eg:

2.4.5 cp 指令

cp 是数据拷贝命令,用于将 DRAM 中的数据从一段内存拷贝到另一段内存中,或者把 Nor Flash 中的数据拷贝到 DRAM 中

cp[.b, .w, .l] source target count

2.4.6 cmp 指令

cmp 是比较命令,用于比较两段内存的数据是否相等

cmp[.b, .w, .l] addr1 addr2 count

eg例程:

2.5 网络操作命令

ARM 板的调试经常用到网络功能,uboot 提供了许多用于网络调试的指令,将开发板和电脑连接在同一个交换机或者路由器下,方便进行网络调试

首先看一下 env 环境中关于网络的配置变量

环境变量描述
ipaddr开发板 ip 地址,可以不设置,使用 dhcp 命令来从路由器获取 IP 地址
ethaddr开发板的 MAC 地址,一定要设置
gatewayip网关地址
netmask子网掩码
serverip服务器 IP 地址,也就是 Ubuntu 主机 IP 地址,用于调试代码

这些网络参数用于配置网关网段,使网络处于局域网下,使用如下代码进行设置 (以下的ip地址要根据自己的情况进行设置)

setenv ipaddr 210.45.244.17
setenv ethaddr 00:04:9f:04:d2:35
setenv gatewayip 210.45.244.1
setenv netmask 255.255.255.0
setenv serverip 210.45.244.1
saveenv

2.5.1 ping 命令

通过 ping 命令可以验证网络能否使用

ping 210.45.244.116

比如,我用开发板 ping 我的电脑主机和一台不存在的机器,分别有如下结果:

只能在 uboot 中 ping 其他的机器,其他机器不能 ping uboot,因为 uboot 没有对 ping 命令做处理,如果用其他的机器 ping uboot 的话会失败!

2.5.2 dhcp 命令

dhcp 可以用于从路由器获取 IP 地址,前提得开发连接到路由器(交换机自动分配IP)上

2.5.3 nfs 命令

nfs (Network File System) 网络文件系统,通过 nfs 可以在计算机之间通过网络来分享资源

可以通过网络将编译好的 linux 镜像和设备树文件下载 到 DRAM 中,然后直接运行

主机通过 nfs 和开发板建立连接,首先需要新建一个文件夹作为 nfs 的根目录,把正点原子出厂内核镜像放进去,这文件我已经上传,可以 0 积分下载: 正点原子阿尔法开发板出厂内核镜像


然后我们在 uboot 中通过 nfs 指令,下载镜像到 DRAM 中 0x80800000 地址处,nfs 指令格式

nfs [loadAddress] [[hostIPaddr:]bootfilename]

下载指令

nfs 0x80800000 210.45.244.116:/home/jeck/linux/nfs/zImage

下载完成如下:

待加入

2.5.4 tftp 命令

tftp 命令的作用和 nfs 命令一样,都是用于通过网络下载东西到 DRAM 中,只是 tftp 命令 使用的 TFTP 协议

使用前需要在主机上安装 tftp 服务

sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd

然后在主机上创建一个文件夹,方便传输文件

使用 tftp 需要新建文件 /etc/xinetd.d/tftp 文件,在配置文件里面输入如下内容

server tftp

	socket_type = dgram
	protocol = udp
	wait = yes
	user = root
	server = /usr/sbin/in.tftpd
	server_args = -s /home/jeck/linux/tftp
	disable = no
	per_source = 11
	cps = 100 2
	flags = IPv4

然后修改 /etc/default/tftpd-hpa 文件传输信息,改变传输目录

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/jeck/linux/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s" 

配置完成,启动服务

sudo service tftpd-hpa start

我们使用 tftp 就是把文件传到对应目录下,权限设置为 777 ,然后在 uboot 内就可以调用 tftp 指令来传文件了

tftpboot [loadAddress] [[hostIPaddr:]bootfilename]

指令和 nfs 差不多,区别在于 tftp 命令不需要输入文件在 Ubuntu 中的完整路径,只需要输入文件名即可,因为文件目录已经配置完成,使用如下指令传文件

tftp 80800000 zImage

传输完成图片:

待加入

以上是关于Linux系统移植:U-Boot常用指令(上)的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统移植:U-Boot 顶层 Makefile 分析(上)

Linux系统移植:U-Boot 启动流程(上)

Linux系统移植:U-Boot 顶层 Makefile 分析(下)

Linux系统移植:正点原子 U-Boot 移植

Linux系统移植:U-Boot 启动流程(中)

Linux系统移植:U-Boot 启动流程(中)