当前位置: 首页 > news >正文

【Linux】Petalinux U-Boot

描述

部分图片和经验来源于网络,若有侵权麻烦联系我删除,主要是做笔记的时候忘记写来源了,做完笔记很久才写博客。

 专栏目录:记录自己的嵌入式学习之路-CSDN博客


目录

0   引导流程示例

1    进入U-Boot

2    常用U-Boot操作命令

2.1    查看命令帮助

2.2    查看板子信息

2.3    查看环境变量

2.4    网络相关命令

2.5    mmc操作命令

2.6    文件系统操作命令

2.7    系统引导命令

2.8    其他常用命令

3    常用环境变量

3.1    修改环境变量的方式

3.2    bootdelay

3.3    bootargs

3.4    网络相关环境变量

4    U-Boot的默认引导过程

4.1    执行bootcmd

4.2    distro_bootcmd内容

4.3    boot_targets内容

4.4    bootcmd_${target}内容


0   引导流程示例


1    进入U-Boot

        在启动带有U-Boot的Zynq板子时,在倒计时前键入任意键就能阻止autoboot从而进入U-Boot部分。

        

        进入后可以发现U-Boot操作方式与Linux命令类似。


2    常用U-Boot操作命令

2.1    查看命令帮助

(1)    help

        查看U-Boot支持的所有命令。

(2)    ? <命令> 或 help <命令>

        查看命令的具体用法。

2.2    查看板子信息

        bdinfo

        查看DRAM的起始地址和大小、启动参数保存起始地址、波特率、sp(堆栈指针)起始地址等信息。

2.3    查看环境变量

        printenv/print

        U-Boot中的环境变量都是字符串

2.4    网络相关命令

(1)    dhcp

        使用DHCP服务为板子获取IP地址,前提是板子连接到路由器而不是直连到主机上。

(2)    ping <ip地址>

        测试网络能否ping通。

(3)    nfs命令

        nfs [loadAddress] [[hostIPaddr:]bootfilename]

        表示将hostIPaddr这个IP对应主机的bootfilename文件下载到DRAM的loadAddress位置上,示例:

        

        前提是主机需要安装并开启nfs-kernel-server,并已在/etc/exports文件中对NFS服务进行文件夹和权限的配置。

(4)    tftpboot命令

        tftpboot [loadAddress] [[hostIPaddr:]bootfilename]

        与nfs命令相似,都是用于通过网络下载文件到DRAM中,只是协议不同。该命令的前提也是已经在主机配置好了tftp服务器及共享路径。除此以外,其主机文件路径可以省略,可以只写文件名:

        

2.5    mmc操作命令

        uboot支持EMMC和SD卡,因此提供了这类mmc的操作命令。

        其中,mmc info看到的是当前MMC设备的信息,使用mmc dev [dev] [part]可以进行选择。

2.6    文件系统操作命令

(1)    FAT文件系统命令:

        fatinfo:查询指定MMC指定分区的文件系统信息;

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

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

        fatload:命令用于将指定的文件读取到DRAM中;

        fatwirte:将DRAM中的数据写入到MMC设备中;

(2)    EXT文件系统命令:

        ext2load、ext2ls、ext4load、ext4ls、ext4write,其用法与FAT文件系统的类似,分别针对ext2和ext4文件系统。

2.7    系统引导命令

        要启动Linux,需要先将Linux镜像文件拷贝到DRAM中,如果使用到设备树的话也需要将设备树拷贝到DRAM中。当镜像文件和设备树文件加载到DRAM后,就可以使用bootm、bootz、boot等命令执行系统引导。

(1)    bootm <addr> [initrd[:size]] <fdt>

        addr:uImage文件所在的内存地址;

        initrd:initrd文件在内存中的地址和大小,可以不指定,不指定时用“-”代替。其实就是根文件系统的地址,一般用RAMDISK文件(ramdisk.cpio.gz.u-boot)做根文件系统才需要指定,用EXT4根文件系统时无需指定;

        size:initrd文件的大小;

        fdt:dtb文件在内存中的地址,由petalinux-config -c u-boot中的Default DTB pickup address设定;

        其他信息:由于image.ub包含了uImage规定的头部信息,因此bootm也可以用来引导image.ub镜像。引导image.ub时只需要image.ub的偏移即可,无需其他参数。

(2)    booti <addr> [initrd[:size]] [fdt]

        与bootm类似,不过addr是Image文件所在的内存地址,不是uImage。

(3)    bootz <addr> [initrd[:size]] [fdt]

        与bootm类似,不过addr是zImage文件所在的内存地址,不是uImage。

(4)    boot

        使用u-boot环境变量中的bootcmd引导系统。其实就是执行bootcmd的内容。

2.8    其他常用命令

(1)    reset

        系统复位重启

(2)    run <cmd>

        运行环境变量中定义的命令,如run bootcmd。


3    常用环境变量

3.1    修改环境变量的方式

        setenv <环境变量名> ‘<值>’:临时修改环境变量,因为环境变量是被加载到DRAM中的,掉电就会丢失。如环境变量包含多个值,就用空格隔开。若环境变量仅有单个值且值中不含空格,可以省略引号。

        saveenv:将当前DRAM中的环境变量写入到非易失性存储器中,使得U-Boot重启后它还在。具体使用哪个非易失性存储器,可由Petalinux配置。

        删除环境变量的方法:给环境变量赋空值,即直接setenv <环境变量名>。

3.2    bootdelay

        开机时倒计时进行autoboot的时间。

3.3    bootargs

        用于传递给内核的信息,主要用来告诉内核分区信息和根文件系统所在的分区。Zynq使用EXT4根文件系统时,bootargs需要包含以下内容,否则系统的启动有可能会报错无法找到根文件系统:

root=/dev/mmcblk0p2 rw rootwait

        该参数说明了根文件系统位于第一张SD卡/eMMC存储器的第2个分区中。

3.4    网络相关环境变量

        其中,需要确保板子的IP和Ubuntu的IP在同一网段内;serverip为Ubuntu的IP地址。

4    U-Boot的默认引导过程

4.1    执行bootcmd

bootcmd=run distro_bootcmd

        实际就是执行distro_bootcmd。

4.2    distro_bootcmd内容

distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done

        其实就是循环每一个boot_targets,并尝试执行其对应的引导命令,直到成功引导进入系统为止。不行就会一直循环。

4.3    boot_targets内容

boot_targets=qspi jtag mmc0 mmc1 qspi nand nor usb0 usb1 pxe dhcp

        这里表示引导方式,最开始多出来一个qspi,可能是因为在petalinux或者什么地方设置过qspi优先引导,所以添加了一个在前面。

        这里的顺序就代表着引导的顺序。

4.4    bootcmd_${target}内容

        其实就是各模式实际的引导命令内容,根据模式的不同,其实际的内容也不同。

        下面以bootcmd_qspi内容为例子:

bootcmd_qspi=sf probe 0 0 0 && sf read ${scriptaddr} ${script_offset_f} ${script_size_f} && echo QSPI: Trying to boot script at ${scriptaddr} && source ${scriptaddr}; echo QSPI: SCRIPT FAILED: continuing...;

        bootcmd_qspi在这里其实就是通过QSPI FLASH加载boot.scr文件并依据脚本文件内容进行引导。

相关文章:

  • 【中间件】brpc_基础_bthread头文件
  • 精益数据分析(36/126):SaaS商业模式的指标动态与实践案例
  • 数据分析_问题/优化
  • 力扣838.推多米诺随笔
  • 变转速振动信号分析处理与故障诊断算法模块
  • C++ 动态内存管理
  • VGG网络模型
  • 云原生后端架构的挑战与应对策略
  • mysql--索引
  • 多平台输入法+助聊APP开发技术指南:从概念到实现
  • 华为云Astro轻应用利用自定义连接器调用第三方接口实际操作
  • 传奇各职业/战士/法师/道士戒指爆率及出处产出地/圣战/法神/天尊/虹魔/魔血/麻痹/超负载/求婚/隐身/传送/复活/护身/祈祷/火焰
  • GAMES202-高质量实时渲染(Assignment 2)
  • 阿里云服务器 篇五(加更):短链服务网站:添加反垃圾邮件功能
  • Unity Text打字机效果,支持富文本
  • C++ 与 Lua 联合编程
  • [预备知识]6. 优化理论(二)
  • 如何配置NGINX作为反向代理服务器来缓存后端服务的响应?
  • 微信小程序 自定义组件 标签管理
  • [SoC]AXI总线Performance验证方案
  • 5月1日全国铁路发送旅客2311.9万人次,创历史新高
  • 对谈|“对工作说不”是不接地气吗?
  • 《一鸣惊人》五一特别节目:以戏曲为桥梁,展现劳动者的坚守
  • 上海:以税务支持鼓励探索更多的创新,助力企业出海
  • 节前A股持续震荡,“五一”假期持股还是持币过节胜率更高?
  • 跟着京剧电影游运河,京杭大运河沿线六城举行京剧电影展映