嵌入式Linux--U-Boot(三)Boot命令使用

2023-05-16

目录

  • 介绍
  • 1 、bootz 命令
    • bootz启动Linux
    • 1、tft启动
      • 1、设置开发板网络设置
      • 2、ping虚拟机(tft服务器)
      • 3、tft下载zImage
      • 4、tft下载设备树
    • 2、emmc启动Linux
  • 2 、bootm 命令
  • 3 、boot 命令

 

介绍

 uboot 的本质工作是引导 Linux,所以 uboot 肯定有相关的 boot(引导)命令来启动 Linux。

常用的跟 boot 有关的命令有:

  • bootz
  • bootm
  • boot。

1 、bootz 命令

 要启动 Linux,需要先将 Linux 镜像文件拷贝到 DRAM 中,如果使用到设备树的话也需要将设备树拷贝到 DRAM 中。可以从 EMMC 或者 NAND 等存储设备中将 Linux 镜像和设备树文件拷贝到 DRAM,也可以通过 nfs 或者 tftp 将 Linux 镜像文件和设备树文件下载到 DRAM 中。

bootz启动Linux

 不管用那种方法,只要能将 Linux 镜像和设备树文件存到 DRAM 中就行,然后使用 bootz 命令来启动,bootz 命令用于启动 zImage 镜像文件,bootz 命令格式如下:

bootz [addr [initrd[:size]] [fdt]]

 命令 bootz 有三个参数:

  • addr 是 Linux 镜像文件在 DRAM 中的位置
  • initrd 是 initrd 文件在DRAM 中的地址,如果不使用 initrd 的话使用‘-’代替即可
  • fdt 就是设备树文件在 DRAM 中的地址。

1、tft启动

 现在使用网络和 EMMC 两种方法来启动 Linux 系统,首先将 I.MX6U-ALPHA 开发板的 Linux 镜像和设备树发送到 Ubuntu 主机中的 tftpboot 文件夹下。Linux 镜像文件前面已经放到了 tftpboot 文件夹中,现在把设备树文件放到 tftpboot 文件夹里面。以 EMMC 核心板为例,将开发板光盘->8、开发板系统镜像->imx6ull-alientek-emmc.dtb 文件发送到 Ubuntu 主机中的 tftpboot 文件夹里面,完成以后的 tftpboot 文件夹如下所示:

fyuan@ubuntu:~/linux/tftpboot$ ls
imx6ull_liefyuan_emmc.dtb  u-boot.imx  zImage

1、设置开发板网络设置

setenv ipaddr 192.168.0.121
setenv ethaddr de:b4:7c:de:dc:07
setenv gatewayip 192.168.0.1
setenv netmask 255.255.255.0
setenv serverip 192.168.0.120
saveenv

2、ping虚拟机(tft服务器)

ping 192.168.0.120

3、tft下载zImage

下载 Linux 镜像文件和设备树都准备好了,我们先学习如何通过网络启动 Linux,使用 tftp命令将 zImage 下载到 DRAM 的 0X80800000 地址处,然后将设备树 imx6ull-alientek-emmc.dtb下载到 DRAM 中的 0X83000000 地址处,最后之后命令 bootz 启动,命令如下:

tftp 80800000 zImage
tftp 83000000 imx6ull-alientek-emmc.dtb
bootz 80800000 – 83000000

异常TFTP error: 'Permission denied' (0):这里是zImage需要在ubuntu上修改权限:sudo chmod 777 zImage


=> tft 80800000 zImage
Using FEC1 device
TFTP from server 192.168.0.120; our IP address is 192.168.0.121
Filename 'zImage'.
Load address: 0x80800000
Loading: *
TFTP error: 'Permission denied' (0)
Starting again

修改zImage文件权限之后正常执行:

=> tft 80800000 zImage
Using FEC1 device
TFTP from server 192.168.0.120; our IP address is 192.168.0.121
Filename 'zImage'.
Load address: 0x80800000
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ########
         1.8 MiB/s
done
Bytes transferred = 6788696 (679658 hex)

4、tft下载设备树

tftp 83000000 imx6ull_liefyuan_emmc.dtb

需要修改权限sudo chmod 777 imx6ull_liefyuan_emmc.dtb后才能下载:


=> tftp 83000000 imx6ull_liefyuan_emmc.dtb
Using FEC1 device
TFTP from server 192.168.0.120; our IP address is 192.168.0.121
Filename 'imx6ull_liefyuan_emmc.dtb'.
Load address: 0x83000000
Loading: ###
         1.3 MiB/s
done
Bytes transferred = 38823 (97a7 hex)

bootz 80800000 – 83000000

出错了!错误信息如下:

=> bootz 80800000 – 83000000
Kernel image @ 0x80800000 [ 0x000000 - 0x679658 ]
Wrong Ramdisk Image Format
Ramdisk image is corrupt or invalid

原来是bootz 80800000 – 83000000中间的横杠应该要写成英文符!

bootz 80800000 - 83000000

正确的启动信息:

=> bootz 80800000 - 83000000
Kernel image @ 0x80800000 [ 0x000000 - 0x678d40 ]
## Flattened Device Tree blob at 83000000
   Booting using the fdt blob at 0x83000000
   Using Device Tree in place at 83000000, end 8300c7a6

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.1.15-gb8ddbbc (alientek@ubuntu) (gcc version 5.3.0 (GCC) ) #1 SMP PREEMPT Wed Apr 29 17:39:59 CST 2020
[    0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c53c7d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] Machine model: Freescale i.MX6 ULL 14x14 EVK Board
[    0.000000] Reserved memory: created CMA memory pool at 0x98000000, size 128 MiB

2、emmc启动Linux

 上面就是我们通过 tftp 和 bootz 命令来从网络启动 Linux 系统,如果我们要从 EMMC 中启动 Linux 系统的话只需要使用命令 fatload 将 zImage 和 imx6ull_liefyuan_emmc.dtb 从 EMMC 的分区 1 中拷贝到 DRAM 中,然后使用命令 bootz 启动即可。

 先使用命令 fatls 查看要下 EMMC的分区1中有没有Linux镜像文件和设备树文件:

命令为:

fatls mmc 1:1

打印信息:

=> fatls mmc 1:1
  6788696   zimage
    38823   imx6ull-14x14-emmc-4.3-800x480-c.dtb
    39655   imx6ull-14x14-emmc-hdmi.dtb

3 file(s), 0 dir(s)

从上面可以看出,emmc 的分区 1 中存放着三个文件:

  • zimage
  • imx6ull-14x14-emmc-4.3-800x480-c.dtb
  • imx6ull-14x14-emmc-hdmi.dtb

这两个文件分别是 linux 镜像文件和两个设备树。确定有文件就使用fatload将zImage和设备树文件拷贝到DRAM中,地址分别为:0x80800000和0x83000000,最后使用bootz命令启动:

fatload mmc 1:1 80800000 zImage
fatload mmc 1:1 83000000 imx6ull-14x14-emmc-4.3-800x480-c.dtb
bootz 80800000 - 83000000

正确执行的信息:

=> fatload mmc 1:1 80800000 zImage
reading zImage
6788696 bytes read in 224 ms (28.9 MiB/s)
=> fatload mmc 1:1 83000000 imx6ull-14x14-emmc-4.3-800x480-c.dtb
reading imx6ull-14x14-emmc-4.3-800x480-c.dtb
38823 bytes read in 18 ms (2.1 MiB/s)
=> bootz 80800000 - 83000000
Kernel image @ 0x80800000 [ 0x000000 - 0x679658 ]
## Flattened Device Tree blob at 83000000
   Booting using the fdt blob at 0x83000000
   Using Device Tree in place at 83000000, end 8300c7a6

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.1.15 (liefyuan@ubuntu) (gcc version 4.9.4 (Linaro GCC 4.9-2017.01) ) #1 SMP PREEMPT Sat Dec 12 13:45:03 CST 2020
[    0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c53c7d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] Machine model: Freescale i.MX6 ULL 14x14 EVK Board
[    0.000000] Reserved memory: created CMA memory pool at 0x98000000, size 128 MiB
[    0.000000] Reserved memory: initialized node linux,cma, compatible id shared-dma-pool
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] PERCPU: Embedded 12 pages/cpu @97b90000 s16832 r8192 d24128 u49152
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 130048


2 、bootm 命令

 bootm 和 bootz 功能类似,但是 bootm 用于启动 uImage 镜像文件。如果不使用设备树的话启动 Linux 内核的命令如下:

bootm addr

 addr 是 uImage 镜像在 DRAM 中的首地址。
如果要使用设备树,那么 bootm 命令和 bootz 一样,命令格式如下:

bootm [addr [initrd[:size]] [fdt]]

 其中 addr 是 uImage 在 DRAM 中的首地址,initrd 是 initrd 的地址,fdt 是设备树(.dtb)文件在 DRAM 中的首地址,如果 initrd 为空的话,同样是用“-”来替代。


3 、boot 命令

 boot 命令也是用来启动 Linux 系统的,只是 boot 会读取环境变量 bootcmd 来启动 Linux 系统,bootcmd 是一个很重要的环境变量!其名字分为“boot”和“cmd”,也就是“引导”和“命令”,说明这个环境变量保存着引导命令,其实就是启动的命令集合,具体的引导命令内容是可以修改的。比如我们要想使用 tftp 命令从网络启动 Linux 那么就可以设置 bootcmd 为tftp 80800000 zImage; tftp 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000,然后使用 saveenv 将 bootcmd 保存起来。然后直接输入 boot 命令即可从网络启动 Linux 系统,命令如下:

TFT启动

setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull_liefyuan_emmc.dtb; bootz 80800000 - 83000000'
saveenv
boot

MMC启动

setenv bootcmd 'fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-14x14-emmc-4.3-800x480-c.dtb; bootz 80800000 - 83000000'
saveenv
boot

正常执行:

=> setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull_liefyuan_emmc.dtb; bootz 80800000 - 83000000'
=> saveenv
Saving Environment to MMC...
Writing to MMC(1)... done
=> boot
FEC1 Waiting for PHY auto negotiation to complete.... done
Using FEC1 device
TFTP from server 192.168.0.120; our IP address is 192.168.0.121
Filename 'zImage'.
Load address: 0x80800000
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ########
         525.4 KiB/s
done
Bytes transferred = 6786368 (678d40 hex)
Using FEC1 device
TFTP from server 192.168.0.120; our IP address is 192.168.0.121
Filename 'imx6ull_liefyuan_emmc.dtb'.
Load address: 0x83000000
Loading: ###
         2.2 MiB/s
done
Bytes transferred = 38823 (97a7 hex)
Kernel image @ 0x80800000 [ 0x000000 - 0x678d40 ]
## Flattened Device Tree blob at 83000000
   Booting using the fdt blob at 0x83000000
   Using Device Tree in place at 83000000, end 8300c7a6

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.1.15-gb8ddbbc (alientek@ubuntu) (gcc version 5.3.0 (GCC) ) #1 SMP PREEMPT Wed Apr 29 17:39:59 CST 2020
[    0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c53c7d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] Machine model: Freescale i.MX6 ULL 14x14 EVK Board
[    0.000000] Reserved memory: created CMA memory pool at 0x98000000, size 128 MiB
[    0.000000] Reserved memory: initialized node linux,cma, compatible id shared-dma-pool
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] PERCPU: Embedded 12 pages/cpu @97b90000 s16780 r8192 d24180 u49152
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 130048
[    0.000000] Kernel command line: noinitrd console=ttymxc0,115200
[    0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
[    0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
[    0.000000] Memory: 375280K/524288K available (8547K kernel code, 450K rwdata, 2964K rodata, 524K init, 451K bss, 17936K reserved, 131072K cma-reserved, 0K highmem)
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
[    0.000000]     vmalloc : 0xa0800000 - 0xff000000   (1512 MB)
[    0.000000]     lowmem  : 0x80000000 - 0xa0000000   ( 512 MB)
[    0.000000]     pkmap   : 0x7fe00000 - 0x80000000   (   2 MB)
[    0.000000]     modules : 0x7f000000 - 0x7fe00000   (  14 MB)
[    0.000000]       .text : 0x80008000 - 0x80b46274   (11513 kB)
[    0.000000]       .init : 0x80b47000 - 0x80bca000   ( 524 kB)
[    0.000000]       .data : 0x80bca000 - 0x80c3a9a0   ( 451 kB)
[    0.000000]        .bss : 0x80c3d000 - 0x80cadfc4   ( 452 kB)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] Preemptible hierarchical RCU implementation.

 如果不修改 bootcmd 的话,每次开机 uboot 倒计时结束以后都会自动从 EMMC 里面读取zImage 和 imx6ull-alientek-emmc.dtb,然后启动 Linux。
在启动 Linux 内核的时候可能会遇到如下错误:

“Kernel panic – not Syncing: VFS: Unable to mount root fs on unknown-block(0,0)”
  •  

 这个错误的原因是 linux 内核没有找到根文件系统,这个很正常,因为没有设置 uboot 的bootargs 环境变量,关于 bootargs 环境变量后面会讲解!此处我们重点是验证 boot 命令,linux内核已经成功启动了,说明 boot 命令工作正常。

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

嵌入式Linux--U-Boot(三)Boot命令使用 的相关文章

  • 自学记录--django模型使用记录

    对于重要数据都做逻辑删除 xff0c 不做物理删除 xff0c 实现方法是定义isDelete字段 xff0c 类型为BooleanField 默认值为False 字段类型概括 AutoField xff1a 一个根据实际ID自动增长的In
  • 自学记录--django模板使用记录

    模板template相关知识及问题 xff1a 过滤器 xff1a value floatformat gt 不给参数的话会将浮点数的小数位舍入到一个小数位 例 xff1a value 61 34 256 gt 结果为34 3 value
  • 自学记录--django+uwsgi+nginx部署

    一 xff1a 服务器环境配置 在本地的虚拟环境中 xff0c 项目根目录下 xff0c 执行命令收集所有包 pip freeze gt plist txt 通过xftp软件将开发好的项目和收集的包上传到服务器某个目录在服务器上面安装并创建
  • 赛码-三分线-java

    题目描述 小赛很喜欢看A队和B队的篮球比赛 众所周知 xff0c 篮球每回合根据投篮远近可以得2分或3分 如果投篮距离小于d那么得2分 xff0c 大于等于d得3分 我们将d记为三分线 每次小赛都喜欢通过改变三分线的大小来让自己支持的A队获
  • xrdp远程登录恢复上一次登陆会话

    本文参考Xrdp Tip How to reconnect to the existing session while using the xrdp package from Ubuntu Repository 首先连接远程桌面是观察连接时
  • 查看Debian版本

    查看Debian版本信息命令如下 xff1a lsb release a 参考运行截图 xff1a
  • Linux 服务器安装配置 TimeMachine

    Linux 服务器安装配置 TimeMachine 1 安装 Time Machine 相关的后台服务 1 安装netatalk xff1a apt get install netatalk 2 安装 dbus xff1a apt get
  • Linux命令总结--特殊符号命令

    Linux中特殊符号大全 井号 comments 管理员 普通用户 脚本中 bin bash bin sh 井号也常出现在一行的开头 xff0c 或者位于完整指令之后 xff0c 这类情况表示符号后面的是注解文字 xff0c 不会被执行 T
  • ZeroMQ学习笔记(5)——高级发布订阅模式

    第五章 高级发布订阅模式 何时使用发布 订阅模式 如何处理过于慢速的订阅者 xff08 自杀蜗牛模式 xff09 如何设计高速订阅者 xff08 黑盒模式 xff09 如何监控一个发布 订阅网络 xff08 特浓咖啡模式 xff09 如何建
  • n个数依次入栈,出栈顺序有多少种?

    这个问题是卡特兰数的第n项结果 卡特兰数 卡特兰数前几项为 1 1 2 5 14 42 132 429 1430 4862 16796 58786 208012 742900 2674440 9694845 35357670 1296447
  • cas-overlay-template实现单点登录步骤

    转载 https blog csdn net zlsuperjj article details 92439816 搭建CAS SERVER 这里使用cas overlay template搭建cas服务器 xff0c overlay可以把
  • Ubuntu—Anaconda库介绍

    Ubuntu Anaconda库介绍 库的构成 其库由各个下载的包组成 xff0c 如torch numpy等 安装后 xff0c 除原始包外 xff0c 还有一个链接包XXXXX dist info xff0c 这个是用来实现包的调用的
  • Ubuntu、Debian、Deepin 怎样删除多安装的桌面环境?- Linux 小妙招

    xff08 首发地址 xff1a 学习日记 Ubuntu Debian Deepin 怎样删除多安装的桌面环境 xff1f Linux 小妙招 学习日记 xff09 今天跟大家分享一点使用 Linux 的小技巧 我们在使用桌面 Linux
  • something about Google Mock

    下载 xff1a http code google com p googlemock downloads list 安装 xff1a 将下载的压缩包解压出来 xff0c 到解压目录下执行 xff1a configure 然后执行 xff1a
  • 如何匹配一个单词存在一次或零次并且不占捕获组位置

    正则表达式如何匹配一个单词存在一次或零次并且不占捕获组位置 今天要用正则表达式实现匹配一个词出现一次或者不出现的情况 xff0c 但是又不仅仅是这么简单的需求 先详细说下我这种情况吧 xff0c 也许有人也遇到这种情况但是没找办法的时候可以
  • 1-2、戴尔DELL服务器R730XD配置bios,raid,R720XD安装系统,DELL510配置管理口

    服务器 xff1a DELL 510 xff0c R720XD xff0c R730XD 1 DELL510 启动过程中按组合键ctrl 43 e 配置管理口IP 2 R720XD 光盘安装系统 启动F11进启动项选择 选择BIOS BOO
  • 普通用户不能登录linux图形界面,只有root用户可以登录到图形界面

    普通用户不能登录linux图形界面 xff0c 只有root用户可以登录到图形界面 xff08 普通用户 xff0c 用户名和密码输入正确 xff0c 点击登录 xff0c 2秒后又返回到了登录界面 xff0c 即不能登录 xff09 这个
  • Linux命令总结--cp命令

    命令简介 xff1a cp命令用来复制文件或目录 指令英文原义 xff1a copy 指令所在路径 xff1a bin cp 命令语法 xff1a Usage cp OPTION T SOURCE DEST or cp OPTION SOU
  • VSR dataset

    1 视频超分的数据集 https cxyzjd com article qq 41554005 116466156 2 Question OSError span class token punctuation span libcurand
  • Ubuntu 12.04.1 desktop 设置中文界面

    Ubuntu 12 04 1 desktop 设置中文界面 介绍打开Ubuntu系统设置配置Region和Language安装语言Chinese xff08 simplified xff09 安装中Chinese xff08 simplif

随机推荐