02_uboot的工作方式_常用命令_常用环境变量

2023-11-06

一、uboot的工作方式

1.uboot的本质

uboot的本质是一个裸机程序,由若干的.c文件和.h文件组成,配置编译后生成uboot.bin,把这个镜像文件烧录至启动介质中给soc启动。一般的uboot大小在180k-400k之间,我你自己写的裸机程序小于16k。

2.uboot的命令行shell界面

程序需要人机交互,所以uboot程序实现了一个shell。

类似linux的行缓冲命令行:当我们向终端输入命令时,这些命令没有立刻被系统,而是被缓冲到一个缓冲区,等待回车键(换行)按下后系统认为命令输入完,再将缓冲区的命令拿去解析执行。

linux终端设计有3种缓冲机制:无缓冲、行缓冲、全缓冲

3.uboot的环境变量

1)uboot启动后大部分工作都在shell下完成(输入命令,设置环境变量、启动内核)
2)uboot的环境变量和操作系统的环境变量工作原理和方式几乎完全相同。uboot的设计借助了操作系统的设计理念。
(命令行的工作方式借鉴了linux终端命令行、环境变量借鉴了操作系统的环境变量,uboot的驱动管理借鉴了linux的驱动框架)
3)环境变量:可以看做是系统的全局变量,环境变量就是运行时的配置属性。

二、uboot的常用命令

1)
help 列出当前uboot支持的命令
help 命令 查看指定命令的帮助

2)
printenv 打印所有环境变量的值
printenv 环境变量名 查看指定的环境变量值
(printenv命令可以简化为print)

3)
setenv name value 设置/修改 环境变量name 的值为 value
setenv name 删除环境变量为name的环境变量
(setenv 命令可以简化为 set)
使用set命令后需要保存,将ddr内存的环境变量保存至flash中

4)
saveenv/save
直接执行,将内存中的环境变量同步到Flash中环境变量的分区。
环境变量的保存是整体覆盖保存,内存中的所有环境变量都会整体保存覆盖Flash中原来的内容。

5)
ping ip地址 ping是测试开发板和主机之间的网络链接

6)
tftp address filename 把文件filename下载到地址address
tftp 0x30000000 zImage-qt 将服务器上名为zImage-qt的文件下载到开发板内存的0x30000000地址

7)
md[.b,.w,.l] address [count] 表示以[.b,.w,.l]为单位显示从地址address开始的内存数据,显示的数据个数为count
md.b 82000000 10 显示从地址0x82000000地址开始的0x10个字节的数据

8)
mw[.b,.w,.l] address value [count] 表示以[.b,.w,.l]为单位往开始地址为address的内存填充count 个值为 value 的数据
mw.b 82000000 ff 100000 从地址0x82000000地址开始填充0x100000(1M字节)个值为0xff的数据

9)
mm[.b,.w,.l] address 表示以[.b,.w,.l]为单位从地址address开始修改内存数据,执行mm命令后,输入新数据后回车,地址会自动增加

10)
go 地址 执行指定内存地址上的指令
go 0x40008000

11)bootm 启动内核
uboot的终极目标就是启动内核。

12)
reset //重启uboot

三、uboot中的常用环境变量

1.环境变量如何参与程序运行

1)环境变量有两份,一份在FLASH中、一份在DDR中。uboot开机时一次性从FLASH中读取全部环境变量到DDR中作为环境遍历的初始化值,然后在过程中都使用DDR中的这一份,用户可以用saveenv指令将DDR中的环境变量重新写到FLASH中更新Flash中的环境变量。
2)环境变量在uboot中是使用字符串表示的,uboot是按照字符匹配的方式区分各个环境变量的。

2.bootdelay

自动运行倒数时间。

3.网络设置:ipaddr serverip

(1)ipaddr是开发板的本地IP地址
(2)serverip是开发板通过tftp指令去tftp服务器下载东西时,tftp服务器的IP地址。
(3)gatewayip是开发板的本地网关地址
(4)netmask是子网掩码
(5)ethaddr是开发板的本地网卡的MAC地址。

4.自动运行命令设置:bootcmd

(1)uboot启动后会开机自动倒数bootdelay秒,如果没有人按下回车打断启动,则uboot会自动执行启动命令来启动内核。
(2)uboot开机自动启动时实际就是在内部执行了bootcmd这个环境变量的值所对应的命令集。
3)bootcmd=movi read kernel 30008000; bootm 30008000
意思是:将iNand的kernel分区读取到DDR内存的0x30008000地址处,然后使用bootm启动命令从内存0x30008000处去启动内核。

5.uboot给kernel传参:bootargs

(1)linux内核启动时可以接收uboot给他传递的启动参数,这些启动参数是uboot和内核约定好的形式、内容,linux内核在这些启动参数的指导下完成启动过程。这样的设计是为了灵活,为了内核在不重新编译的情况下可以用不同的方式启动。

(2)bootargs=console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3
意义解释:
console=ttySAC2,115200控制台使用串口2,波特率115200.
root=/dev/mmcblk0p2 rw 根文件系统在SD卡端口0设备(iNand)第2分区,根文件系统是可读可写的
init=/linuxrc linux的进程1(init进程)的路径
rootfstype=ext3 根文件系统的类型是ext3

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

02_uboot的工作方式_常用命令_常用环境变量 的相关文章

随机推荐

  • 深度学习速学上手小项目

    demo仓库和视频演示 银色子弹zg的个人空间 银色子弹zg个人主页 哔哩哔哩视频 卷积网路CNN分类的模型一般使用包括alexnet DenseNet DLA GoogleNet Mobilenet ResNet ResNeXt Shuf
  • AIX下使用ASM

    metalink note 282036 1 IBM Software Requirements and PTFs for AIX 5 3 support of Oracle Database 10g Release 2 10 2 0 1
  • Anaconda 的Jupyter Notebook更换默认浏览器

    因为之前装的Anaconda默认使用的是系统自带的Edge浏览器 对的 就是这个玩意 然后自己近期一直用的win11 前几个版本还没什么太大问题 但是在20号左右系统自动更新了一下 对的就是这个 然后Microsoft Edge浏览器直接打
  • LUA中的and与or

    LUA中的and与or 2013 01 04 14 51 14074人阅读 评论 2 收藏 举报 分类 Lua 44 逻辑运算符认为false和nil是假 false 其他为真 0也是true and的优先级比or高 其它语言中的and表示
  • 小程序的数据驱动和Vue的双向绑定有何异同

    引言 在现代应用程序开发中 数据驱动和双向绑定是两个非常重要的概念 它们能够提供更好的用户体验和开发效率 本文将探讨小程序的数据驱动和Vue的双向绑定 并通过代码实例来说明它们的异同 让我们一起来了解吧 小程序的数据驱动 小程序是一种轻量级
  • Java初阶——练习题

    import java util Random import java util Scanner public class java 11 1 public static void main String args int ret numb
  • 模板的特化(具体化)

    模板的特化 具体化 重点注意 1 类模板和函数模板都可以被全特化 2 类模板能偏特化 不能被重载 3 函数模板可以实现重载 不能被偏特化 4 类模板调用优先级 全特化类 gt 偏特化类 gt 主版本模板类 6 函数模板同时存在具体化模板 函
  • ZYNQ中FreeRTOS中使用定时器

    使用普通的Timer中断方式时 Timer中断可以正常运行 但是UDP通信进程无法启动 其中TimerIntrHandler是中断服务程序 打印程序运行时间与从BRAM中读取的数据 void SetupInterruptSystem XSc
  • JetBrains各版本全家桶工具 编程开发全套永久软件!IDE也能免费用

    程序员每次换新电脑装IDE总是少不了的 但是奈何激活码难找 功夫不负有心人终于让我找到了激活方法 而且是可以永久激活的 更赞的是操作简单 无需注册机也无需修改文件和host 而且支持2018 2019 2020全版本的全家桶软件 之前也激活
  • shell 多线程介绍与举例

    在Shell脚本中实现多线程通常可以使用以下几种方式 后台执行 在Shell脚本中 你可以使用 符号将某个命令放在后台执行 这样可以同时执行多个命令 达到多线程的效果 例如 bin bash command1 command2 comman
  • CSerialPort教程4.3.x (4) - CSerialPort在QT中的使用

    CSerialPort教程4 3 x 4 CSerialPort在QT中的使用 环境 QT 5 6 3 前言 CSerialPort项目是一个基于C C 的轻量级开源跨平台串口类库 可以轻松实现跨平台多操作系统的串口读写 同时还支持C Ja
  • FTP:服务器发回了不可路由的地址,使用服务器地址代替 问题解决方案

    状态 连接建立 等待欢迎消息 状态 初始化 TLS 中 状态 TLS 连接已建立 状态 已登录 状态 读取目录列表 状态 服务器发回了不可路由的地址 使用服务器地址代替 打开阿里云控制面板 把放行端口中的39000 40000加入放行规则
  • Java设计模式(9):桥接模式

    9 桥接模式 Bridge 9 1 问题引入 手机类型 现在对不同类型不同品牌的手机实现操作编程 如下手机外观类型和对应品牌 则需要编写的代码类图可能如下 带来的问题如下 如果我们需要添加一个手机 则需要在各个类型下添加手机 如果我们需要添
  • 股票数据API接口进行实际对接过程当中要注意哪些方面?

    投资者使用股票量化接口API接口方面使用能够节约不少的成本 不过在进行实际对接的过程当中 一定要从零开始做好研发建设 只要进入系统之后就能够完全体验到接口带来的更多优势 如果选择一些不靠谱的API接口 可能会浪费金钱 甚至会给大多数用户造成
  • 汇编基础(1)--ARM32

    简介 ARM32 也称为ARM Architecture v7 是一种32位的指令集架构 ISA 由ARM公司开发并广泛应用于嵌入式系统和移动设备 ARM32是ARM体系结构中较早的版本 被许多处理器核使用 包括Cortex A Corte
  • 【PTA】数组排序

    对n个整数进行降序排列 然后输出 import java util public class Main public static void main String args Scanner scanner new Scanner Syst
  • python 第三方库的安装与出错解决方案

    今天介绍五种第三方库的安装方法与错误解决方式 1 wordcloud win 加r输入cmd回车在命令行输入pip install wordcloud 如果下载成功则会出现successful 如果出现错误的话则会出现红色字体和erro提示
  • Android 字符串的替换,截取,拆分,拼接

    1 去除字符串中的 逗号替换成 符号 public static String ReplaceString List
  • uniapp中版本更新下载.apk文件并安装

    首先调用版本更新的接口传入当前版本好 判断是否需要版本更新 版本需要更新使用plus downloader createDownload进行下载 下载完成后使用plus runtime install进行安装 updateVersion d
  • 02_uboot的工作方式_常用命令_常用环境变量

    一 uboot的工作方式 1 uboot的本质 uboot的本质是一个裸机程序 由若干的 c文件和 h文件组成 配置编译后生成uboot bin 把这个镜像文件烧录至启动介质中给soc启动 一般的uboot大小在180k 400k之间 我你