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.rhkb.cn/news/328877.html

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

相关文章

C#知识|上位机子窗体嵌入主窗体方法(实例)

哈喽,你好啊,我是雷工! 上位机开发中,经常会需要将子窗体嵌入到主窗体, 本节练习C#中在主窗体的某个容器中打开子窗体的方法。 01 需求说明 本节练习将【账号管理】子窗体在主窗体的panelMain容器中打开。 账号管理子窗体如下: 主窗体的panelMain容器位置如图: 02 实现…

四川古力未来科技抖音小店:科技赋能,购物新体验!

在当下这个数字化飞速发展的时代&#xff0c;电商行业早已成为了人们日常生活中不可或缺的一部分。而抖音小店作为电商领域的一匹黑马&#xff0c;正以其独特的优势和魅力&#xff0c;吸引着越来越多的消费者。今天&#xff0c;我们就来一起探讨一下四川古力未来科技抖音小店的…

免费视频格式在线转换网站,推荐这5款!

在数字化时代&#xff0c;视频已成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;随着各种设备和平台的不断涌现&#xff0c;视频格式繁多&#xff0c;常常会出现不兼容的情况。为了解决这一问题&#xff0c;视频格式在线转换网站应运而生&#xff0c;成为了我们应…

微软宣布GPT-4o模型,可在 Azure OpenAI上使用

5月14日&#xff0c;微软在官网宣布&#xff0c;OpenAI最新发布的多模态模型GPT-4o&#xff0c;可以在 Azure OpenAI 云服务中使用。 据悉&#xff0c;GPT-4o支持跨文本、视频、音频多模态推理&#xff0c;例如&#xff0c;通过GPT-4o打造一个AI助手&#xff0c;用于辅导孩子解…

【Python】语句与众所周知【自我维护版】

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 本篇博客是在之前的基础上进行的维护 目录 条…

Kibana使用

一、什么是Kibana   Kibana 是一个开源的分析和可视化平台&#xff0c;Kibana 提供搜索、查看和与存储在 Elasticsearch 索引中的数据进行交互的功能。开发者或运维人员可以轻松地执行高级数据分析&#xff0c;并在各种图表、表格和地图中可视化数据。 Kibana使用&#xff1a…

前端学习第一课

AJAX 事先说明&#xff0c;这只是记录&#xff0c;并不是从零到一的教学内容&#xff0c;如果想要学习的话&#xff0c;可以跳过本文章了 ok&#xff0c;转回正题&#xff0c;正如上面所说&#xff0c;这只是记录。其实我是有一定的前端基础的&#xff0c;也做过涉及相关的开发…

力扣82题删除排序链表中的重复元素

82题删除排序链表中的重复元素 题目描述 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 题目分析 这个题需要返回已排序链表&#xff0c;我们需要考虑一种情况就是头结点为重复元素&…

学习C语言的重要性以及如何学好

配套视频&#xff1a;https://www.bilibili.com/video/BV1kw4m1Q7AV/?spm_id_from333.999.0.0 一、C语言在互联网领域重要的开源项目 https://github.com/mysql/mysql-server 数据库开源项目【互联网重型开源项目】 编程语言&#xff1a;C/C/ASM 部分汇编代码 开源项目核心…

【汇编】算术指令

一、加法指令 &#xff08;一&#xff09;各加法指令的格式及操作 加法指令可做字或字节运算 &#xff08;1&#xff09;加法指令 ADD 格式&#xff1a;ADD DST,SRC执行的操作&#xff1a;(DST) ← (SRC)(DST) &#xff08;2&#xff09;带进位加法指令 ADC 格式&#xf…

除自身以外数组的乘积[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个整数数组nums&#xff0c;返回数组answer&#xff0c;其中answer[i]等于nums中除nums[i]之外其余各元素的乘积。题目数据保证数组nums之中任意元素的全部前缀元素和后缀的乘积都在32位整数范围内。请不要使用除法&#xff…

【SQL】SQL常见面试题总结(2)

目录 1、增删改操作1.1、插入记录&#xff08;一&#xff09;1.2、插入记录&#xff08;二&#xff09;1.3、插入记录&#xff08;三&#xff09;1.4、更新记录&#xff08;一&#xff09;1.5、更新记录&#xff08;二&#xff09;1.6、删除记录&#xff08;一&#xff09;1.7、…

Spring初学入门(跟学笔记)

一、Spring概述 Spring是一款主流的Java EE轻量级开源框架。 Spring的核心模块&#xff1a;IoC&#xff08;控制反转&#xff0c;指把创建对象过程交给Spring管理 &#xff09;、AOP&#xff08;面向切面编程&#xff0c;在不修改源代码的基础上增强代码功能&#xff09; 二、…

常用五款文件加密软件|好用加密软件工具分享

随着信息化时代的到来&#xff0c;数据安全问题日益凸显&#xff0c;加密软件应运而生&#xff0c;成为了保护数据安全的重要手段。在市场上&#xff0c;众多加密软件层出不穷&#xff0c;各有千秋。本文将介绍几款常用的加密软件&#xff0c;分析它们的优缺点&#xff0c;以帮…

使用JasperReport工具,生成报表模版,及通过JavaBean传参,常见问题及建议

1.下载JasperReport工具 下载地址:社区版 - Jaspersoft 社区 邮箱:lorettepatri.ckoa5434gmail.com 密码:Zx123456. 2.工具使用方法注意 1.一次参数需要在左下角Parameters中新建,直接拖转右上角的TextField不会自动新建参数,到头来还是要在Parameters中新建 2.循环参数需…

Kexp 动态展示 k8s 资源对象依赖关系

kexp[1] 旨在以可视化的方式帮助用户理解和探索 Kubernetes 的能力。 适用场景&#xff1a; 学习和探索 Kubernetes 的功能。 应用开发&#xff0c;提供每个应用的对象图预设。 控制器和操作器的开发&#xff0c;支持动态对象图。 即将推出类似 Postman 的 Kubernetes API …

如何组织 Vue 项目

介绍 在启动 Vue 项目时&#xff0c;思考项目结构至关重要。主要考虑因素是预期项目的规模。在本篇博文中&#xff0c;我将探讨适用于不同规模 Vue 项目的各种结构。这个考虑与康威定律相吻合&#xff1a; “设计系统的组织受限于产生这些组织沟通结构的设计。” - 梅尔康威 基…

linux防火墙的操作

linux防火墙的操作 前言1查看防火墙状态2暂时关闭防火墙3永久关闭防火墙4开启防火墙5开启指定端口6关闭指定端口7立即生效8查看开放的端口 前言 systemctl是管理linux中服务的命令&#xff0c;可以对服务进行启动、停止、重启、查看状态等操作 firewall-cmd是linux中专门用于控…

shell脚本之sort,uniq,tr,cut,sphit,paste,ecal与正则表达式

sort命令 uniq命令 tr命令 cut命令 sphit命令 paste命令 ecal命令 正则表达式 sort命令 sort命令---以行为单位对文件内容进行排序&#xff0c;也可以根据不同的数据类型来排序 比较原则是从首字符向后&#xff0c;依次按ASCII码值进行比较&#xff0c;最后将他们按升序…

Centos7使用kubeadm搭建k8s集群(一主两从)----(mac版)

一、环境准备 1、下载centos7镜像 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 下载地址: centos安装包下载_开源镜像站-阿里云 选择对应的版本即可&#xff0c;我下载的&#xff1a;CentOS-7-x86_64-DVD-2207-02.iso 2、使用VirtualBox安装centos 选择新建&#xff0c…