Linux-笔记 开发板Uboot命令使用

将之前自学的知识整理了一下笔记,以便回忆
信息查询命令

1、help/?:查看所支持命令

=> ? md
md - memory displayUsage:
md [.b, .w, .l] address [# of objects]

 2、bdinfo:查询板子信息

=> bdinfo
arch_number = 0x00000000
boot_params = 0x80000100
DRAM bank   = 0x00000000
-> start    = 0x80000000
-> size     = 0x20000000
eth0name    = FEC1
ethaddr     = b8:ae:1d:01:00:00
current eth = FEC1
ip_addr     = 192.168.31.100
baudrate    = 115200 bps
TLB addr    = 0x9FFF0000
relocaddr   = 0x9FF47000
reloc off   = 0x18747000
irq_sp      = 0x9EF44EA0
sp start    = 0x9EF44E90
FB base     = 0x00000000

3、printenv:输出环境变量信息

=> printenv
baudrate=115200
board_name=EVK
board_rev=14X14
boot_fdt=try
bootargs=comsole=tty1 console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.31.121:/home/lxz/linux/nfs/rootfs,proto=tcp rw ip=192.168.31.102:192.168.31.121:192.168.31.1:255.255.255.0::eth0:off
bootcmd=tftp 80800000 zImage;tftp 83000000 imx6ull-alientek-emmc.dtb;bootz 80800000 - 83000000
bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};
bootdelay=3
bootscript=echo Running bootscript from mmc ...; source
console=ttymxc0
ethact=FEC1
ethaddr=b8:ae:1d:01:00:00
省略...

4、version:版本号

=> versionU-Boot 2016.03 (Oct 17 2023 - 10:40:58 +0800)
arm-linux-gnueabihf-gcc (Linaro GCC 4.9-2017.01) 4.9.4
GNU ld (Linaro_Binutils-2017.01) 2.24.0.20141017 Linaro 2014_11-3-git
环境变量命令

5、setenv:设置环境变量

=> setenv cc 123
=> printenv cc
cc=123
=>

6、saveenv:保存环境变量

=> saveenv
Saving Environment to MMC...
Writing to MMC(1)... done
内存操作命令

1、显示内存值:md

md[.b, .w, .l] address [# of objects]
md.b 80000000 14 //查看0x80000000开始的20个字节的内存值    uboot中的命令数字都是十六进制

2、修改内存值:nm

nm [.b, .w, .l] address
nm.l 80000000
=> nm.l 80000000
80000000: 0500e031 ? 修改的值
80000000: 修改的值 ? q
=>

3、自增修改指定地址的内存值:mm 

4、指定数据填充内存:mw

mw [.b, .w, .l] address value [count]
=> mw.l 80000000 0A0A0A0A 10
=> md.l 80000000 10
80000000: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a
80000010: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a
80000020: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a
80000030: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a

5、数据拷贝:cp

cp [.b, .w, .l] source target count
cp.l 80000000 80000100 10

6、比较内存值是否相等:cmp

cmp [.b, .w, .l] addr1 addr2 count
=> cmp.l 80000000 80000100 10
Total of 16 word(s) were the same
=> cmp.l 80002000 80003000 10
Total of 16 word(s) were the same
=> cmp.l 80002000 80008000 10
word at 0x80002000 (0x00) != word at 0x80008000 (0xeb0049d6)
Total of 0 word(s) were the same
=>
网络操作命令

使用命令前需要先设置好uboot网络有关的环境变量,确保网络正常。

=> printenv ipaddr
ipaddr=192.168.31.100
=> printenv serverip
serverip=192.168.31.54
=> printenv ethaddr
ethaddr=b8:ae:1d:01:00:00
=> printenv gatewayip
gatewayip=192.168.31.1
=> printenv netmask
netmask=255.255.255.0
=>

1、检查网络是否正常:ping(只能在 uboot 中 ping 其他的机器,其他机器不能 ping uboot,因为 uboot 没有对 ping 命令做处理,如果用其他的机器 ping uboot 的话会失败!)

=> ping 192.168.31.54
FEC1 Waiting for PHY auto negotiation to complete... done
Using FEC1 device
host 192.168.31.54 is alive
=>

2、自动获取ip:dhcp

从路由器获取IP,如果是连接电脑则会不成功。

3、网络文件系统:nfs(Network File System)

nfs [loadAddress] [[hostIPaddr:]bootfilename]
nfs 80800000 192.168.1.253:/home/tux/nfs/zImage

4、tftp

tftpboot [loadAddress] [[hostIPaddr:]bootfilename]
tftp 80800000 zImage
EMMC/SD卡操作命令

设备操作命令头:mmc

1、mmc info :输出当前选择的mmc设备

2、mmc rescan:扫描开发板上的所有mmc设备

3、mmc list:列出所有的mmc设备

4、mmc dev:切换当前mmc设备

mmc dev [dev] [part]

5、mmc part:查看分区

EMMC 里面烧写了 Linux 系统的话,EMMC 是有 3 个分区的,第 0 个分区存放 uboot,第 1 个分区存放 Linux 镜像文件和设备树,第 2 个分区存放根文件系统。

mmc read addr    blk#   cnt
mmc read 80800000 600 10
=> mmc read 80800000 600 10MMC read: dev # 1, block # 1536, count 16 ... 16 blocks read: OK=> md.b 80800000 2000
80800000: 28 67 cf c8 62 61 75 64 72 61 74 65 3d 31 31 35    (g..baudrate=115
80800010: 32 30 30 00 62 6f 61 72 64 5f 6e 61 6d 65 3d 45    200.board_name=E
80800020: 56 4b 00 62 6f 61 72 64 5f 72 65 76 3d 31 34 58    VK.board_rev=14X
80800030: 31 34 00 62 6f 6f 74 5f 66 64 74 3d 74 72 79 00    14.boot_fdt=try.
80800040: 62 6f 6f 74 61 72 67 73 3d 63 6f 6d 73 6f 6c 65    bootargs=comsole
80800050: 3d 74 74 79 31 20 63 6f 6e 73 6f 6c 65 3d 74 74    =tty1 console=tt
省略...

6、mmc write:写数据到mmc设备

mmc write addr blk# cnt
// addr 是要写入 MMC 中的数据在 DRAM 中的起始地址,blk 是要写入 MMC 的块起始地址
(十六进制),cnt 是要写入的块大小,一个块为 512 字节。mmc write 80800000 2 33E//例子(1)
//先将uboot下载到DRAM
=>tftp 80800000 u-boot.imx     
FEC1 Waiting for PHY auto negotiation to complete... done
Using FEC1 device
TFTP from server 192.168.31.54; our IP address is 192.168.31.100
Filename 'u-boot.imx'.
Load address: 0x80800000
Loading: #############################2.1 MiB/s
done
Bytes transferred = 424960 (67c00 hex)//然后写到mmc 设备对应分区里,这里写到SD卡 分区0 第二块,
mmc dev 0 0
mmc write 80800000 2 33E
424960/512 转16进制 = 33E   千万不能写 SD 卡或者 EMMC 的前两个块(扇区),里面保存着分区表!//例子(2) 更新 EMMC 对应的 uboot
mmc dev 1 0 //切换到 EMMC 分区 0
tftp 80800000 u-boot.imx //下载 u-boot.imx 到 DRAM
mmc write 80800000 2 32E //烧写 u-boot.imx 到 EMMC 中
mmc partconf 1 1 0 0 //分区配置,EMMC 需要这一步!
千万不能写 SD 卡或者 EMMC 的前两个块(扇区),里面保存着分区表!

7、mmc erase:擦除命令

mmc erase blk# cnt
// blk 为要擦除的起始块,cnt 是要擦除的数量
FAT格式文件系统操作命令

需要在 uboot 中对 SD 卡或者 EMMC 中存储的文件进行操作,文件操作相关的命令有:fatinfo、fatls、fstype、fatload 和 fatwrite,只支持FAT格式系统。

1、fatinfo:查询指定 MMC 设备分区的文件系统信息

fatinfo <interface> [<dev[:part]>]
interface 表示接口,dev 是查询的设备号,part 是要查询的分区
fatinfo mmc 1:1

2、fatls:查询 FAT 格式设备的目录和文件信息

fatls <interface> [<dev[:part]>] [directory]
fatls mmc 1:1 //查所有文件
=>fatls mmc 1:16725336   zimage36325   imx6ull-alientek-emmc.dtb2 file(s), 0 dir(s)

3、fstype:查看 MMC 设备某个分区的文件系统格式

fstype <interface> <dev>:<part>
fstype mmc 1:0
fstype mmc 1:1
fstype mmc 1:2
=> fstype mmc 1:0
Failed to mount ext2 filesystem...
** Unrecognized filesystem type **
=> fstype mmc 1:1
fat
=> fstype mmc 1:2
ext4
=>

4、fatload:将指定的文件读取到 DRAM 中

fatload <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]
fatload mmc 1:1 80800000 zImage  // EMMC 分区 1 中的 zImage 文件读取到 DRAM 中的
0X80800000 地址处

5、fatwrite:用于将 DRAM 中的数据写入到 MMC 设备中

fatwrite <interface> <dev[:part]> <addr> <filename> <bytes>
// interface 为接口,比如 mmc,dev 是设备号,part 是分区,addr 是要写入的数据在 DRAM
中的起始地址,filename 是写入的数据文件名字,bytes 表示要写入多少字节的数据。例子:通过 fatwrite 命令在 uboot 中更新 linux 镜像文件和设备树,先将文件读取到DRAM,再从DRAM写到EMMC 1、tftp 80800000 zImage //tftp下载到DRAM
2、fatwrite mmc 1:1 80800000 zImage 6788f8  //根据uboot大小写到EMMC分区中
3、fatls mmc 1:1  //查询一下文件
EXT格式文件系统命令

uboot 支持 ext2 和 ext4 这两种格式的文件系统的操作命令,一般的命令有 ext2load、ext2ls、ext4load、ext4ls 和 ext4write。这些命令的含义和使用与 fatload、fatls 和 fatwrite 一样,只是 ext2 和 ext4 都是针对 ext 文件系统的,使用 ext4ls 就可以查询 EMMC 的分区 2 中的文件和目录。

ext4ls mmc 1:2
=> ext4ls mmc 1:2
<DIR>       4096 .
<DIR>       4096 ..
<DIR>      16384 lost+found
<DIR>       4096 bin
<DIR>       4096 dev
<DIR>       4096 drivers
<DIR>       4096 etc
<DIR>       4096 lib
<SYM>         11 linuxrc
<DIR>       4096 mnt
<DIR>       4096 proc
<DIR>       4096 root46 rootfs
<DIR>       4096 sbin
<DIR>       4096 sys
<DIR>       4096 tmp
<DIR>       4096 usr27766784 v
<DIR>       4096 中文测试84 .ash_history
BOOT操作命令

        uboot 的本质工作是引导 Linux,一般使用 boot(引导)命令来启动 Linux。常用的跟 boot 有关的命令有:bootz、bootm 和 boot。

1、bootz:启动 DRRM中的 zImage 镜像文件

启动 Linux,需要先将 Linux 镜像文件拷贝到 DRAM 中,如果使用到设备树的话也需要 将设备树拷贝到 DRAM 中。可以从 EMMC 或者 NAND 等存储设备中将 Linux 镜像和设备树文 件拷贝到 DRAM,也可以通过 nfs 或者 tftp 将 Linux 镜像文件和设备树文件下载到 DRAM 中。 不管用那种方法,只要能将 Linux 镜像和设备树文件存到 DRAM 中就行,然后使用 bootz 命令 来启动,bootz 命令用于启动 zImage 镜像文件。

bootz [addr [initrd[:size]] [fdt]]
// addr 是 Linux 镜像文件在 DRAM 中的位置,initrd 是 initrd 文件在
DRAM 中的地址,如果不使用 initrd 的话使用‘-’代替即可,fdt 就是设备树文件在 DRAM 中
的地址。// 方法(1):将zImage下载到DRAM的0X80800000地址处,然后将设备树下载到 DRAM 中的 0X83000000 地址处,最后之后命令 bootz 启动
tftp 80800000 zImage
tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb
bootz 80800000 - 83000000//方法(2):使用命令 fatload 将 镜像和 设备树 从 EMMC 的分区 1 中拷贝到 DRAM 中,然后使用命令 bootz 启动
fatload mmc 1:1 80800000 zImage
fatload mmc 1:1 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb
bootz 80800000 - 83000000

2、bootm:启动 zImage 镜像文件中的uImage镜像

//不使用设备树的话启动 Linux 内核
bootm addr   //addr 是 uImage 镜像在 DRAM 中的首地址//使用设备树启动内核
bootm [addr [initrd[:size]] [fdt]]  //addr 是 uImage 在 DRAM 中的首地址,initrd 是 initrd 的地址,fdt 是设备树(.dtb)文件 ,在 DRAM 中的首地址,如果 initrd 为空的话,同样是用“-”来替代

3、boot:读取环境变量 bootcmd 来启动 Linux 系统

uboot 倒计时结束以后就会启动 Linux 系统,其实就是执行的 bootcmd 中的启动 命令。

//(1)通过tftp下载到DRAM中启动
=> printenv bootcmd
bootcmd=tftp 80800000 zImage;tftp 83000000 imx6ull-alientek-emmc.dtb;bootz 80800000 - 83000000
=>//(2)通过加载EMMC中的镜像文件到DRAM驱动
setenv bootcmd 'fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-14x14-
emmc-7-1024x600-c.dtb; bootz 80800000 - 83000000'注:启动 Linux 内核的时候可能会遇到如下错误
“Kernel panic – not Syncing: VFS: Unable to mount root fs on unknown-block(0,0)”
这个错误的原因是 linux 内核没有找到根文件系统,这个很正常,因为没有设置 uboot 的bootargs 环境变量,

4、go:到指定地址运行应用

go addr [arg ...]
// 使用 tftp 命令将 xxx.bin下载到开发板 DRAM 的 0X87800000(这个应用的链接首地址) 地址处
tftp 87800000 xxx.bin
go 87800000

5、run:运行环境变量中定义的命令

run bootcmd
// run 命令最大的作用在于运行我们自定义的环境变量
// 比如定义环境变量 mybootemmc 表示从 emmc 启动,
定义 mybootnet 表示从网络启动,定义 mybootnand 表示从 NAND 启动。如果要切换启动方式
的话只需要运行“run mybootxxx(xxx 为 emmc、net 或 nand)”即可。例子:根据之前学习给出自己的板子情况//emmc启动
setenv mybootemmc 'fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull14x14-emmc-7-1024x600-c.dtb;bootz 80800000 - 83000000'//nand启动
setenv mybootnand 'nand read 80800000 4000000 800000;nand read 83000000 6000000 
100000;bootz 80800000 - 83000000'//网络启动
setenv mybootnet 'tftp 80800000 zImage; tftp 83000000imx6ull-14x14-emmc-7-1024x600-c.dtb; 
bootz 80800000 - 83000000'
saveenv//然后 run 对应的环境变量即可

6、mtest:开发板DDR内存读写测试

mtest [start [end [pattern [iterations]]]]// start是要测试的DRAM 开始地址,end 是结束地址,比如我们测试 0X80000000~0X80001000
这段内存,输入“mtest 80000000 80001000” => mtest 80000000 80001000
Testing 80000000 ... 80001000:
Pattern FFFFFFFF  Writing...  Reading...Iteration:    248
=>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/836421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

匿名管道及其应用

目录 一、什么是匿名管道&#xff1f; 三、创建与使用匿名管道 三、匿名管道的特点 匿名管道的四种情况 匿名管道的五种特性 四、匿名管道的实践应用---进程池 在编程的世界中&#xff0c;匿名管道是一种非常重要的通信机制。今天&#xff0c;让我们一起来深入探讨一下匿…

vivado Virtex-7 配置存储器器件

Virtex-7 配置存储器器件 下表所示闪存器件支持通过 Vivado 软件对 Virtex -7 器件执行擦除、空白检查、编程和验证等配置操作。 本附录中的表格所列赛灵思系列非易失性存储器将不断保持更新 &#xff0c; 并支持通过 Vivado 软件对其中所列非易失性存储器 进行擦除、…

单链表经典算法OJ题---力扣206,876(带图详解

1.链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09;【点击即可跳转】 思路&#xff1a;创建三个指针&#xff0c;看下图 注意&#xff1a;n3如果为空&#xff0c;则不能继续指向下一节点&#xff0c;需要进行判断 代码实现&#xff1a; struct ListNode* reverseLi…

第二课,python基础语法(一),认识字面量和变量、注释

一&#xff0c;字面量 &#xff08;一&#xff09;什么是字面量 被写下来的的固定的值&#xff0c;称之为字面量 &#xff08;二&#xff09;常见的三种字面量类型 &#xff08;三&#xff09;练习一下&#xff0c;使用print去输出三种不同类型的字面量&#xff1a;10&#x…

树莓派安装opencv

安装opencv 上述步骤完成后&#xff0c;输入以下代码(基于python3) sudo apt-get install python3-opencv -y不行的话&#xff0c;试试换源&#xff0c;然后 sudo apt-get update成功&#xff01; 测试opencv是否安装成功 输入 python3 然后再输入 import cv2 没有报错就…

【Java】:向上转型、向下转型和ClassCastException异常

目录 先用一个生动形象的例子来解释向上转型和向下转型 向上转型&#xff08;Upcasting&#xff09; 向下转型&#xff08;Downcasting&#xff09; 向上转型 概念 例子 发生向上转型的情况 1.子类对象赋值给父类引用 2.方法参数传递 3.返回值 向下转型 概念 注意…

扩散模型(Diffusion Model)学习笔记

目录 Diffusion Model 基本原理 预测原理 ddpm 实例 ddmp数字图片生成 有的还没看完 Diffusion Model 基本原理 扩散模型1&#xff1a;基本原理 - 知乎 前向扩散过程可以理解为一个马尔可夫链&#xff0c;即通过逐步对一张真实图片添加高斯噪声直到最终变成纯高斯噪声图片…

labview技术交流-字符串数组连接成字符串

应用场景 我们可能需要将一维的字符串数组转换成一整条字符串&#xff0c;然后方便记录在数据库或表格中的一个单元格中。 代码展示 方案一 我们使用for循环完成这样的功能需求&#xff0c;见下图&#xff1a; 这种方案可能相对基础和普通&#xff0c;但是它更方便和易于扩展…

【科研绘图 基础版】01 使用Python绘制时间序列折线图

下面这段代码绘制了一个折线图&#xff0c;其中包含了实际平均温度数据和使用线性回归模型预测的平均温度数据&#xff08;用来近似地表示数据的整体趋势&#xff09;。 具体来说&#xff0c;图中的横轴表示年份&#xff0c;纵轴表示平均温度。蓝色的实心线代表了实际的平均温度…

《Python机器学习 》书籍分享

文章目录 前言内容介绍作者简介书籍目录 前言 随着计算能力的快速增长&#xff0c;大量任务都可在台式机上完成&#xff1b;在这样的背景下&#xff0c;机器学习应运而生&#xff0c;成为当今炙手可热的话题。但初出茅庐的新手常对机器学习感到十分畏惧&#xff1b;为给这些新…

面试集中营—Seata分布式事务

一、分布式事务 本地事务 在计算机系统中&#xff0c;更多的是通过关系型数据库来控制事务&#xff0c;这是利用数据库本身的事务特性来实现的&#xff0c; 因此叫数据库事务&#xff0c;由于应用主要靠关系数据库来控制事务&#xff0c;而数据库通常和应用在同一个服务器&am…

数据结构:包装类初始泛型

目录 1.包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱 2.什么是泛型3.引出泛型3.1 语法3.2 泛型的使用 4.泛型是如何编译的4.1 擦除机制4.2 为什么不能实例化泛型类型数组 5.泛型的上界5.1 语法5.2 示例5.3 复杂示例 6.泛型方法6.1 定义语法6.2 示例6.3 使用示例-可以类…

【CMU 15-445】Proj4 Concurrency Control

Concurrency Control 通关记录Task1 TimestampsTask2 Storage Format and Sequential ScanTask3 MVCC ExecutorsTask3.1 Insert ExecutorTask3.2 CommitTask3.3 Update and Delete ExecutorTask3.4 Stop-the-world Garbage Collection Task4 Primary Key IndexTask4.0 Index Sc…

Springboot+logback 详细配置

一、添加依赖 这里使用springboot3.0.2 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency><dependency><groupId>org.projectlombok</grou…

macos使用yarn创建vite时出现Usage Error: The nearest package directory问题

步骤是macos上使用了yarn create vite在window上是直接可以使用了yarn但是在macos上就出现报错 我们仔细看&#xff0c;它说的If /Users/chentianyu isnt intended to be a project, remove any yarn.lock and/or package.json file there.说是要我们清除yarn.lock和package.js…

yolo world 瑞芯微芯片rknn部署、地平线芯片Horizon部署、TensorRT部署

特别说明&#xff1a;参考官方开源的 yoloworld 代码、瑞芯微官方文档、地平线的官方文档&#xff0c;如有侵权告知删&#xff0c;谢谢。 模型和完整仿真测试代码&#xff0c;放在github上参考链接 模型和代码。 yoloworld出来的有一段时间了&#xff0c;还没有盘到板端上玩一玩…

芸众商城电商专业版400+插件源码+搭建教程

介绍&#xff1a; 芸众商城社交电商系统SAAS平台前端基于vue开发&#xff0c;后端基于研发积分商城系统源码 php&#xff0c;本文安装芸众商城全插件&#xff08;400多个&#xff09;商业版平台源码&#xff0c;可同时支持多端口部署运行&#xff1b;使用宝塔面板一键部署的形…

LibreNMS简介

目录 1 LibreNMS简单介绍1.1 LibreNMS介绍 2 安装2.1 Ubuntu安装1、安装依赖2、添加 librenms 用户3、下载 LibreNMS4、设置权限5、安装 PHP 依赖项6、设置时区7、配置 MariaDB8、配置 PHP-FPM9、配置 Web 服务器10、启用 lnms 命令11、配置 snmpd12、cron13、启用调度程序14、…

贪吃蛇(c实现)

目录 游戏说明&#xff1a; 第一个是又是封面&#xff0c;第二个为提示信息&#xff0c;第三个是游戏运行界面 游戏效果展示&#xff1a; 游戏代码展示&#xff1a; snack.c test.c snack.h 控制台程序的准备&#xff1a; 控制台程序名字修改&#xff1a; 参考&#xff1a…

练习队列的相关操作:循环队列

1. 思路解析 循环队列就是在只有有限的空间时使用队列实现循环存储数据&#xff0c;有双向链表和数组两种选择&#xff0c;这里我们使用数组实现循环队列&#xff08;因为链表我不会 >-<&#xff09; 2. 相关函数及其实现 2.1 判空与判满 判空&#xff1a;直接返回头尾…