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

2023-10-20 00:59
文章标签 uboot 命令 显示 内存 nand md mw

本文主要是介绍uboot下的mw写内存和md显示内存命令以及nand命令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

配置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
在这里插入图片描述

uboot中的环境变量:
bootdelay:执行自动启动的等候秒数
baudrate:串口控制台的波特率
netmask: 以太网接口的掩码
ethaddr: 以太网卡的网卡物理地址
bootfile: 缺省的下载文件
bootargs:传递给内核的启动参数
bootcmd:自动启动时执行的命令
serverip: 服务器端的ip地址
ipaddr: 本地ip 地址
stdin: 标准输入设备
stdout: 标准输出设备
stderr: 标准出错设备

内存操作指令

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

这篇关于uboot下的mw写内存和md显示内存命令以及nand命令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/243559

相关文章

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Linux find 命令完全指南及核心用法

《Linuxfind命令完全指南及核心用法》find是Linux系统最强大的文件搜索工具,支持嵌套遍历、条件筛选、执行动作,下面给大家介绍Linuxfind命令完全指南,感兴趣的朋友一起看看吧... 目录一、基础搜索模式1. 按文件名搜索(精确/模糊匹配)2. 排除指定目录/文件二、根据文件类型筛选三、时间

使用mvn deploy命令上传jar包的实现

《使用mvndeploy命令上传jar包的实现》本文介绍了使用mvndeploy:deploy-file命令将本地仓库中的JAR包重新发布到Maven私服,文中通过示例代码介绍的非常详细,对大家的学... 目录一、背景二、环境三、配置nexus上传账号四、执行deploy命令上传包1. 首先需要把本地仓中要

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C