uboot下的mw写内存和md显示内存命令以及nand命令

news/2024/12/27 3:22:08/

配置uboot参数

setenv ipaddr 192.168.0.10;setenv serverip 192.168.0.40;setenv gatewayip 192.168.0.1;setenv netmask 255.255.255.0
setenv bootargs 'mem=512M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=yaffs2 rw init=/init 	mtdparts=hinand:1M(boot),4M(kernel),64M(rootfs),64M(appfs),64M(datafs),59M(backup)'
setenv bootcmd 'nand read 0x42000000 0x100000 0x400000;bootm 0x42000000'
setenv slave_autostart 0
sa

配置好了tftp服务器的ip地址192.168.0.40,uboot自身的ip为192168.0.10
windows上配置好文件夹位置和服务器IP
在这里插入图片描述

内存操作指令

tftp操作指令

tftp命令解析

tftp 42000000 uImage_hi3536

这就是通过tftp将uImage_hi3536在服务器下载到板子的地址为42000000位置的内存

md指令

uboot下输入指令md,会提示md的用法,memory display,即内存显示。

U-Boot-PetaLinux> md
md - memory display
Usage:
md [.b, .w, .l] address [# of objects]

分为三种类型
b:8位
w:16位
l:32位(默认值)
例子:
在这里插入图片描述
其他两种md.w和md.l同md.b用法相同,第三个参数一定是16进制
上述42000000是要显示内存的那个地址,后面的数字4000000是输出的个数,注意是16进制的。
直接输入md来显示,默认是以32位为单位输出 。

mw指令

uboot下输入指令mw,会提示md的用法,memory write,即向内存中写入数据。

U-Boot-PetaLinux> mw
mw - memory write (fill)
Usage:
mw [.b, .w, .l] address value [count]

b\w\l的意思同上,address是要写入内存的地址,value是要写入的值,count是从address开始要写入多少个数,这些都是16进制数。
示例:
图1
图一
图2
图二
在这里插入图片描述
uImage_hi3536的属性显示带下为3862656字节,0x400000转为10进制为4194304,这样大小完全足够

nand操作指令

以上面的图二为例分析

nand erase 100000 400000;nand write 42000000 100000 400000
1)先说nand erase:

nand erase/clean [off] [size]
清除flash,从off 偏移地址开始的size大小的数据,最小单位是一个page。

2)再说nand write

nand write [addr] [off] [size]
将内存地址addr开始的size大小数据写入到flash的off偏移地址去,该命令会自动跳过坏块。

uboot中其他命令

信息查询命令

常用的和信息查询有关的命令有 3 个: bdinfo、 printenv 和 version。
bdinfo 查询板子信息(我这块板子上的uboot没有这个命令)

1)version uboot的版本

在这里插入图片描述

2)printenv 打印环境变量

在这里插入图片描述直接输入“print”也可以。
可以看到很多的环境变量,比如 baudrate、 board_name、 board_rec、 boot_fdt、 bootcmd等等。 uboot 中的环境变量都是字符串,既然叫做环境变量,那么它的作用就和“变量”一样。比如 bootdelay 这个环境变量就表示 uboot 启动延时时间,默认bootdelay=1,也就默认延时 1秒。前面说的 1 秒倒计时就是由 bootdelay 定义的,如果将 bootdelay 改为 5 的话就会倒计时 5s了。

环境变量操作命令

环境变量的操作涉及到两个命令: setenv 和 saveenv,命令 setenv 用于设置或者修改环境变量的值。命令 saveenv 用于保存修改后的环境变量,一般环境变量是存放在外部 flash 中的,uboot 启动的时候会将环境变量从 flash 读取到 DRAM 中。所以使用命令 setenv 修改的是 DRAM中的环境变量值,修改以后要使用 saveenv 命令将修改后的环境变量保存到 flash 中,否则的话uboot 下一次重启会继续使用以前的环境变量值。
命令 saveenv 使用起来很简单,格式为:

saveenv

sa

比如我们要将环境变量 bootdelay 改为 5,就可以使用如下所示命令:

setenv bootdelay 5
saveenv 或 sa

当我们使用命令 saveenv 保存修改后的环境变量的话会有保存过程提示信息,根据提示可以看出环境变量保存到了 MMC(0)中,也就是 SD 卡中。因为我们现在将 uboot烧写到了 SD 卡里面,所以会保存到 MMC(0)中。如果烧写到 EMMC 里面就会提示保存到MMC(1),也就是 EMMC 设备,同理,如果是 NAND 版本核心板的话就会提示保存到 NAND中。
有时候我们修改的环境变量值可能会有空格, 比如 bootcmd、 bootargs 等, 这个时候环境变量值就得用单引号括起来,比如下面修改环境变量 bootargs 的值:
setenv bootargs ‘console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw’
saveenv

上面命令设置 bootargs 的值为“console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw”,其中“console=ttymxc0,115200”、“root=/dev/mmcblk1p2”、“rootwait”和“rw”相当于四组“值”,这四组“值”之间用空格隔开,所以需要使用单引号‘’将其括起来,表示这四组“值”都属于环境变量 bootargs。
命令 setenv 也可以用于新建命令,用法和修改环境变量一样,比如我们新建一个环境变量author, author 的值为: yyy,那么就可以使用如下命令:

setenv author yyy
saveenv

新建命令 author 完成以后重启 uboot,然后使用命令 printenv 查看当前环境变量。
删除环境变量也是使用命令 setenv,要删除一个环境变量只要给这个环境变量赋空值即可,比如我们删除掉上面新建的 author 这个环境变量,命令如下:

setenv author
saveenv

上面命令中通过 setenv 给 author 赋空值,也就是什么都不写来删除环境变量 author。重启uboot 就会发现环境变量 author 没有了。

网络操作命令

关键的几个环境变量
环境变量 描述

环境变量描述
ipaddr开发板 ip 地址,可以不设置,使用 dhcp 命令来从路由器获取 IP 地址
ethaddr开发板的 MAC 地址,一定要设置。
gatewayip网关地址
netmask子网掩码
serverip服务器 IP 地址,也就是 Ubuntu 主机 IP 地址,用于调试代码
设置命令:
setenv ipaddr 192.168.0.10      		//设置本地地址
setenv ethaddr b8:ae:1d:01:00:00		//设置本机mac地址
setenv gatewayip 192.168.0.1				//设置网关			
setenv netmask 255.255.255.0				//设置子网掩码
setenv serverip 192.168.0.40				//设置服务器IP
saveenv												保存参数

也可以一句直接全部设置出来

setenv ipaddr 192.168.0.10;setenv serverip 192.168.0.40;setenv gatewayip 192.168.0.1;setenv netmask 255.255.255.0
sa

通过";"号分隔开,这样一次就将所有的网络参数设置成功了
注意,网络地址环境变量的设置要根据自己的实际情况,确保主机和开发板的 IP地址在同一个网段内,比如我现在的开发板和电脑都在 192.168.0.1 这个网段内,所以设置开发板的 IP 地址为 192.168.0.10,我的 windows的 主机的地址为 192.168.0.40,因此 serverip 就是192.168.0.40。 ethaddr 为网络 MAC 地址,是一个 48bit 的地址,如果在同一个网段内有多个开发板的话一定要保证每个开发板的 ethaddr 是不同的,否则通信会有问题!设置好网络相关的环境变量以后就可以使用网络相关命令了。

ping 命令

开发板的网络能否使用,是否可以和服务器(主机)进行通信,通过 ping 命令就可以验证,直接 ping 服务器的 IP 地址即可,比如我的服务器 IP 地址为 192.168.0.40,命令如下:
在这里插入图片描述
可以看出, 192.168.0.40这个主机存在,说明 ping 成功, uboot 的网络工作常。
注意!只能在 uboot 中 ping 其他的机器,其他机器不能 ping uboot,因为 uboot 没有对 ping命令做处理,如果用其他的机器 ping uboot 的话会失败!

dhcp 命令

dhcp 用于从路由器获取 IP 地址,前提得开发板连接到路由器上的,如果开发板是和电脑直连的,那么 dhcp 命令就会失效。直接输入 dhcp 命令即可通过路由器获取到 IP 地址

tftp 命令

前面讲了用windows作为主机,使用tftp32或者tftp64的软件作为服务器,现在看一下使用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/zuozhongkai/linux/tftpboot
chmod 777 /home/zuozhongkai/linux/tftpboot

这 样 我 就 在 我 的 电 脑 上 创 建 了 一 个 名 为 tftpboot 的 目 录 ( 文 件 夹 ) , 路 径 为/home/zuozhongkai/linux/tftpboot。注意!我们要给 tftpboot 文件夹权限,否则的话 uboot 不能从tftpboot 文件夹里面下载文件。
最后配置 tftp,安装完成以后新建文件/etc/xinetd.d/tftp, 如果没有/etc/xinetd.d 目录的话自行创建, 然后在里面输入如下内容:

server tftp
{socket_type = dgramprotocol = udpwait = yesuser = rootserver = /usr/sbin/in.tftpdserver_args = -s /home/zuozhongkai/linux/tftpboot/disable = noper_source = 11cps = 100 2flags = IPv4
}

完了以后启动 tftp 服务,命令如下:

sudo service tftpd-hpa start

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

# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/zuozhongkai/linux/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s"

TFTP_DIRECTORY 就是我们上面创建的 tftp 文件夹目录,以后我们就将所有需要通过TFTP 传输的文件都放到这个文件夹里面,并且要给予这些文件相应的权限。
最后输入如下命令, 重启 tftp 服务器:

sudo service tftpd-hpa restart

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

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

万事俱备,只剩验证了, uboot 中的 tftp 命令格式如下:

tftpboot [loadAddress] [[hostIPaddr:]bootfilename]

看 起 来 和 nfs 命 令 格式 一 样 的 , loadAddress 是 文 件 在 DRAM 中 的存 放 地 址 ,[[hostIPaddr:]bootfilename]是要从 Ubuntu 中下载的文件。但是和 nfs 命令的区别在于, tftp 命令不需要输入文件在 Ubuntu 中的完整路径,只需要输入文件名即可。比如我们现在将 tftpboot 文件夹里面的 uImage_hi3536文件下载到开发板 DRAM 的 0X42000000 地址处,命令如下:
tftp 42000000 uImage_hi3536


http://www.ppmy.cn/news/121162.html

相关文章

深入解析Spring源码系列:Day 6 - Spring MVC原理

深入解析Spring源码系列:Day 6 - Spring MVC原理 欢迎来到本系列的第六篇博客。在前几篇博客中,我们探索了Spring框架的核心概念,包括Bean的生命周期、作用域、AOP原理和事务管理。今天,我们将深入研究Spring框架中的MVC&#xf…

【嵌入式烧录/刷写文件】-2.6-剪切/保留Intel Hex文件中指定地址范围内的数据

案例背景: 有如下一段HEX文件,保留地址范围0x9140-0x91BF内的数据,删除地址范围0x9140-0x91BF外的数据。 :2091000058595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273747576775F :2091200078797A7B7C7D7E7F808182838485868788898A…

ESP32-C2系列开发板

C2是一个芯片采用4毫米x 4毫米封装,与272 kB内存。它运行框架,例如ESP-Jumpstart和ESP造雨者,同时它也运行ESP-IDF。ESP-IDF是Espressif面向嵌入式物联网设备的开源实时操作系统,受到了全球用户的信赖。它由支持Espressif以及所有…

华硕 Vivobook Go 14笔记本 评测

华硕 Vivobook Go 14 的外观设计与 Vivobook Go 15 OLED 类似,重量减轻到 1.38kg,可选 14 英寸 1920x1080 IPS 屏,屏幕比例为 16:9,最大亮度 250nits,覆盖 45% NTSC 色域。 华硕 Vivobook Go 14 笔记本更多使用感受和…

ROG 幻 X 二合一笔记本 2023款评测 怎么样

ROG 幻 X 2023 搭载 13 代酷睿 i9-13900H 处理器,显卡可选 RTX4050、RTX4060 等多种型号,显卡性能释放可达 65W,不仅性能释放较上代有所提升,还支持双显三模热切换。 ROG 幻 X 二合一笔记本更多使用感受和评价 http://rog.adianna…

小米笔记本 Air 13 评测

小米笔记本 Air 13 搭载了基础功耗为 9W 的 12 代酷睿 U9 系列处理器,可选 i5 和 i7 型号。其中, i7-1250U,处理器为 10 核 12 线程,即 2 大核 8 小核,最高 4.7GHz,核显为 96EU,基础功耗为 9W&…

笔记本 续航测试软件,续航测试及全文总结_笔记本评测-中关村在线

Switch 10SW5-015-18DF,其搭配的是64GB 储存空间500GB机械硬盘,配备1920x1200分辨率IPS显示屏,搭载Intel Z3735F处理器,有兴趣的不妨关注一下。 Switch 10(SW5-015-18DF)信息一览 ◆3Dmake 3DMark测试软件针对移动设备分为IceStor…

华为 MateBook E GO 二合一笔记本评测

华为 MateBook E GO 采用了轻薄设计,轻至 710g,薄至 7.68mm。 华为 MateBook E GO 采用了雪域白和星云灰配色,可选多彩键盘。 华为 MateBook E GO 二合一笔记本更多使用感受和评价 http://huawei.adiannao.cn 屏幕方面,华为 MateB…