uboot命令使用-uboot启动log信息分析与内存、网络命令

正点原子linux学习个人笔记

uboot启动基本默认log信息

带调试性质的开发,uboot都是烧写到sd卡中,方便烧写。

U-Boot 2016.03 (Nov 12 2023 - 20:03:26 +0800)

CPU:   Freescale i.MX6ULL rev1.1 792 MHz (running at 396 MHz)    //800MHz,实际792MHz
CPU:   Industrial temperature grade (-40C to 105C) at 43C    //工业芯片,温度范围-40~105,当前43°
Reset cause: POR    //复位模式
Board: I.MX6U ALPHA|MINI    //板子名字,自己开发记得改成自己的命名
I2C:   ready    //I2C就绪
DRAM:  512 MiB    //DDR512
MMC:   FSL_SDHC: 0, FSL_SDHC: 1    //2个mmc设备,emmc,sd卡
*** Warning - bad CRC, using default environment    //使用默认的环境变量
In:    serial
Out:   serial
Err:   serial    //标准输入输出错误通过串口呈现
switch to partitions #0, OK    //切换到0分区
mmc0 is current device    //mmc0是sd卡
Net:   FEC1    //网络是FEC1
Error: FEC1 address not set.    //网络地址没设置

Normal Boot
Hit any key to stop autoboot:  0 
=> 

uboot命令

进入 uboot 的命令行模式以后输入“help”或者“?”,然后按下回车即可查看当前 uboot 所 支持的命令

 输入“? 命令名”或者“help 命令名”即可查看命令用法

? bootz 或 help bootz

信息查询命令

bdinfo命令

 查看板子信息命令

bdinfo

0x80000000是ddr的起始地址0x80000100是boot参数存放的地址

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

printenv命令

输出环境变量信息

printenv

version命令

查看 uboot 的版本号

version

环境变量操作命令

setenv 和 saveenv

一般环境变量是存放在外部 flash 中的,uboot 启动的时候会将环境变量从 flash 读取到 DRAM 中。所以使用命令 setenv 修改的是 DRAM 中的环境变量值,修改以后要使用 saveenv 命令将修改后的环境变量保存到 flash 中,否则的话 uboot 下一次重启会继续使用以前的环境变量值。

示例:bootdelay 改为 5

setenv bootdelay 5
saveenv

 修改环境变量 bootargs

环境变量值有空格时,要用''括起来

setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
saveenv

命令 setenv 也可以用于新建命令

setenv author xy
saveenv

新建后通过frintenv查询可得

命令 setenv 也可以用于删除命令

删除什么,给什么命令赋空值

setenv author
saveenv

内存操作命令

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

md命令

[.b .w .l]对应 byte、word 和 long
[# of objects]表示要查看的数据长度

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

查看以 0X80000000 开始的 20 个字节的内存值,显示为.b

md.b 80000000 14


md.b 80000000 10//查看0x80000000为起始地址后16个字节的内容
md.w 80000000 10//查看0x80000000为起始地址后32个字节的内容
md.l 80000000 10//查看0x80000000为起始地址后64个字节的内容

nm命令

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

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

比如现在以.l 格式修改 0x80000000 地址 的数据为 0x12345678

nm.l 80000000

输入12345678完成以后按下回车,再按下q即可完成修改,使用 md.l 80000000 l 查看是否修改成功

mm 命令

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

mm 80000000

使用md.l 80000000 3

mw 命令

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

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

使用.l 格式将以 0X80000000 为起始地址的 0x10 个 内存块(0x10 * 4=64 字节)填充为 0X0A0A0A0A

mw.l 80000000 0A0A0A0A 10

cp命令

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

source 为源地址,target 为目的地址,count 为拷贝的长度

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

 使用.l 格式将 0x80000000 处的地址拷贝到 0X80000100 处,长度为 0x10 个 内存块

cp.l 80000000 80000100 10

cmp 命令

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

addr1 为第一段内存首地址,addr2 为第 二段内存首地址,count 为要比较的长度。

cmp [.b, .w, .l] addr1 addr2 count
cmp.l 80000000 80000100 10

网络操作命令

 环境变量设置命令如下

确保 Ubuntu 主机和开发板的 IP 地址在同一个网段内

setenv ipaddr 192.168.1.50
setenv ethaddr b8:ae:1d:01:00:00
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.253
saveenv

ping 命令

直接 ping uboot主机 IP 地址即可测试是否可以通信

ping 192.168.1.253

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

dhcp 命令

dhcp 用于从路由器获取 IP 地址

开发板通过 dhcp 获取到的 IP 地址为 192.168.1.137。同时在图 30.4.4.3 中可以看到“warning:no boot file name;”、“TFTP from server 192.168.1.1”这样的字样。 这是因为 DHCP 不单单是获取 IP 地址,其还会通过 TFTP 来启动 linux 内核,输入“? dhcp”即 可查看 dhcp 命令详细的信息。

nfs 命令

通过 nfs 可以在计算机之间通过网络来分享资源

比如我们将 linux 镜像和设备树文件放到 Ubuntu 中,然后在 uboot 中使用 nfs 命令将 Ubuntu 中 的 linux 镜像和设备树下载到开发板的 DRAM 中。

目的是为了方便调试 linux 镜像和 设备树,也就是网络调试,通过网络调试是 Linux 开发中最常用的调试方法。

loadAddress 是要保存的 DRAM 地址,[[hostIPaddr:]bootfilename]是要下载的文件地址。

nfs [loadAddress] [[hostIPaddr:]bootfilename]

 使用 nfs 命令来将 zImage 下载到开发板 DRAM 的 0X80800000 地址处

nfs 80800000 192.168.1.253:/home/zuozhongkai/linux/nfs/zImage

使用命令 md.b 来查看前 0x100 个字节的数据

再使用 winhex 软件来查看 zImage

结果一致

tftp 命令

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

只是 tftp 命令 使用的 TFTP 协议,Ubuntu 主机作为 TFTP 服务器。因此需要在 Ubuntu 上搭建 TFTP 服务器, 需要安装 tftp-hpa 和 tftpd-hpa,命令如下:

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

和 NFS 一样,TFTP 也需要一个文件夹来存放文件,在用户目录下新建一个目录,命令如 下:

mkdir /home/linux/tftpboot
chmod 777 /home/linux/tftpboot

最后配置 tftp,安装完成以后新建文件/etc/xinetd.d/tftp,如果没有/etc/xinetd.d 目录的话自行创建,然后在里面输入如下内容:

1 server tftp
2 {
3 socket_type = dgram
4 protocol = udp
5 wait = yes
6 user = root
7 server = /usr/sbin/in.tftpd
8 server_args = -s /home/zuozhongkai/linux/tftpboot/
9 disable = no
10 per_source = 11
11 cps = 100 2
12 flags = IPv4
13 }

 完了以后启动 tftp 服务

sudo service tftpd-hpa start

打开/etc/default/tftpd-hpa 文件,将其修改为如下所示内容:

1 # /etc/default/tftpd-hpa
2
3 TFTP_USERNAME="tftp"
4 TFTP_DIRECTORY="/home/linux/tftpboot"
5 TFTP_ADDRESS=":69" 
6 TFTP_OPTIONS="-l -c -s"

最后输入如下命令, 重启 tftp 服务器

sudo service tftpd-hpa restart

tftp 服务器已经搭建好了,接下来就是使用了。将 zImage 镜像文件拷贝到 tftpboot 文件夹 中,并且给予 zImage 相应的权限

cp zImage /home/linux/tftpboot/
cd /home/linux/tftpboot/
chmod 777 zImage

uboot 中的 tftp 命令格式如下

loadAddress 是文 件在 DRAM 中的 存放 地址 , [[hostIPaddr:]bootfilename]是要从 Ubuntu 中下载的文件

tftpboot [loadAddress] [[hostIPaddr:]bootfilename]

 tftp 命令不需要输入文件在 Ubuntu 中的完整路径,只需要输入文件名即可。

tftp 80800000 zImage

在uboot网络命令中,我们最常用的就是 ping、nfs 和 tftp 这三个命令。使用 ping 命令来查看网络的连接状态,使用 nfs 和 tftp 命令来从 Ubuntu 主机中下载文件。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值