Uboot初次编译、烧写、启动(启动界面log简析)

2023-10-27

在这里插入图片描述
上述笔记第三点就是建立shell脚本实现的
第四点就是修改Makefile文件实现的,下面均有实现步骤讲解。

U-Boot 初次编译

先编译体验一下正点原子提供的UBOOT。

首先在Ubuntu 中安装ncurses 库,否则编译会报错,安装命令如下:

sudo apt-get install libncurses5-dev

在Ubuntu 中创建存放uboot 的目录,比如我的/home/$USER/linux/uboot,然后在此目录下新建一个名为“alientek_uboot”的文件夹用于存放正点原子提供的uboot 源码。alientek_uboot文件夹创建成功以后使用FileZilla 软件将正点原子提供的uboot 源码拷贝到此目录中。

正点原子提供的uboot 源码已经放到了开发板光盘中,路径为:开发板光盘->1、例程源码->3、正点原
子Uboot 和Linux 出厂源码-> uboot-imx-2016.03-2.1.0-ge468cdc-v1.5.tar.bz2。将其拷贝到Ubuntu中新建的alientek_uboot 文件夹下,完成以后如图30.2.1 所示:

在这里插入图片描述

使用如下命令对其进行解压缩:

tar -vxjf uboot-imx-2016.03-2.1.0-g8b546e4.tar.bz2

解压完成以后alientek_uboot 文件夹内容如图30.2.2 所示:
在这里插入图片描述

上图中除了uboot-imx-2016.03-2.1.0-g8b546e4.tar.bz2 这个正点原子提供的uboot 源码压缩包以外,其他的文件和文件夹都是解压出来的uboot 源码。可以发现有Makefile,不过不能直接进行编译,需要先进行配置(因为Makefile是通用的,板子不一样)

1、512MB(DDR3)+8GB(EMMC)核心板

如果使用的是512MB+8GB 的EMMC 核心板,使用如下命令来编译对应的uboot:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- (加空格)
mx6ull_14x14_ddr512_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
  • 这三条命令中ARCH=arm 设置目标为arm 架构,CROSS_COMPILE 指定所使用的交叉编译器。第一条命令相当于“make distclean”,目的是清除工程,一般在第一次编译的时候最好清理一下工程。
  • 第二条指令相当于“make mx6ull_14x14_ddr512_emmc_defconfig”,用于配置uboot,配置文件为mx6ull_14x14_ddr512_emmc_defconfig。
  • 最后一条指令相当于“make -j12”也就是使用12 核来编译uboot。当这三条命令执行完以后uboot 也就编译成功了,如图30.2.3 所示:
    在这里插入图片描述
    编译完成以后的alentek_uboot 文件夹内容如图30.2.4 所示:
    在这里插入图片描述

可以看出,编译完成以后uboot 源码多了一些文件,其中u-boot.bin 就是编译出来的uboot二进制文件。uboot 是个裸机程序,因此需要在其前面加上头部(IVT、DCD 等数据)才能在I.MX6U上执行【联想到前面裸机学习的,I.MX 6ULL中内部BOOT ROM初始化DDR,然后将.bin文件加载到RAM里面运行,这里就是u-boot.bin(需要加头部),然后运行的u-boot程序去引导操作系统运行】,图30.2.4 中的u-boot.imx 文件就是添加头部以后的u-boot.bin,u-boot.imx 就是我们最终要烧写到开发板中的uboot 镜像文件。

为了方便,引入shell脚本。其实把Makefile文件进行适当修改,也可以减少输入很多字母,参考上面笔记的第四点,实际操作如下:
在这里插入图片描述
然后编译的时候只要在命令行输入以下命令即可(交叉编译工具变量直接替换了):
在这里插入图片描述

每次编译uboot 都要输入一长串命令,为了简单起见,我们可以新建一个shell 脚本文件,将这些命令写到shell 脚本文件里面,然后每次只需要执行shell 脚本即可完成编译工作。新建名为mx6ull_alientek_emmc.sh 的shell 脚本文件,然后在里面输入如下内容:

1 #!/bin/bash
2 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
3 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- (加空格) mx6ull_14x14_ddr512_emmc_defconfig
4 make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12

第1 行是shell 脚本要求的,必须是“#!/bin/bash”或者“#!/bin/sh”。

第2 行使用了make 命令,用于清理工程,也就是每次在编译uboot 之前都清理一下工程。这里的make 命令带有三个参数,第一个是ARCH,也就是指定架构,这里肯定是arm;第二个参数CROSS_COMPILE 用于指定编译器,只需要指明编译器前缀就行了,比如arm-linux-gnueabihf-gcc 编译器的前缀就是“arm-linux-gnueabihf-”;最后一个参数distclean 就是清除工程。

第3 行也使用了make 命令,用于配置uboot。同样有三个参数,不同的是,最后一个参数是mx6ull_14x14_ddr512_emmc_defconfig。前面说了uboot 是bootloader 的一种,可以用来引导Linux,但是uboot 除了引导Linux 以外还可以引导其它的系统,而且uboot 还支持其它的架构和外设,比如USB、网络、SD 卡等。这些都是可以配置的,需要什么功能就使能什么功能。所
以在编译uboot 之前,一定要根据自己的需求配置uboot。mx6ull_14x14_ddr512_emmc_defconfig就是正点原子针对I.MX6U-ALPHA 的EMMC 核心板编写的配置文件,这个配置文件在uboot源码的configs 目录中。在uboot 中,通过“make xxx_defconfig”来配置uboot,xxx_defconfig
就是不同板子的配置文件,这些配置文件都在uboot/configs 目录中。

第4 行有4 个参数,用于编译uboot,通过第3 行配置好uboot 以后就可以直接“make”编译uboot 了。其中V=1 用于设置编译过程的信息输出级别;-j 用于设置主机使用多少线程编译uboot,最好设置成我们虚拟机所设置的核心数,如果在VMware 里面给虚拟就分配了4 个核,那么使用-j4 是最合适的,这样4 个核都会一起编译。使用chmod 命令给予mx6ull_alientek_emmc.sh 文件可执行权限,然后就可以使用这个shell脚本文件来重新编译uboot,命令如下:

./mx6ull_alientek_emmc.sh

2、256MB(DDR3)+ 512MB(NAND)核心板
如果用的256MB+512MB 的NAND 核心板,新建名为x6ull_alientek_nand.sh 的shell 脚本文件,然后在里面输入如下内容:

1 #!/bin/bash
2 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
3 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- (加空格) mx6ull_14x14_ddr256_nand_defconfig
4 make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12

完成以后同样使用chmod 指令给予mx6ull_alientek_nand.sh 可执行权限,然后输入如下命令即可编译NAND 版本的uboot:

./mx6ull_alientek_nand.sh

mx6ull_alientek_nand.sh 和mx6ull_alientek_emmc.sh 类似,只是uboot 配置文件不同,这里就不详细介绍了。

U-Boot 烧写与启动

视频里老师先是演示了简单方便的OTG方式(参照上面笔记的第二点,给.bin添加头使用的也是另一种方式),烧写到EMMC里的。
后面我们还是使用imxdownload 软件进行烧写,就像裸机开发一样。因为使用OTG方式不仅把U_boot,还有系统镜像zimage、设备树、根文件系统全部重新烧进去,很费时间,我们只是想更新一个u-boot而已。
这里是引用

uboot 编译好以后就可以烧写到板子上使用了,这里我们跟前面裸机例程一样,将uboot烧写到SD 卡中,然后通过SD 卡来启动来运行uboot。使用imxdownload 软件烧写,命令如下:

chmod 777 imxdownload //给予imxdownload 可执行权限,一次即可
./imxdownload u-boot.bin /dev/sdd //烧写到SD 卡,不能烧写到/dev/sda 或sda1 设备里面!

等待烧写完成,完成以后将SD 卡插到I.MX6U-ALPHA 开发板上,BOOT 设置从SD 卡启动,使用USB 线将USB_TTL 和电脑连接,也就是将开发板的串口1 连接到电脑上。打开MobaXterm,设置好串口参数并打开,最后复位开发板。在MobaXterm 上出现“Hit any key to stop autoboot: ”倒计时的时候按下键盘上的回车键,默认是3 秒倒计时,在3 秒倒计时结束以后如果没有按下回车键的话uboot 就会使用默认参数来启动Linux 内核了如果在3 秒倒计时结束之前按下回车键,那么就会进入uboot 的命令行模式,如图30.3.1 所示:

在这里插入图片描述
从图30.3.1 可以看出,当进入到uboot 的命令行模式以后,左侧会出现一个“=>”标志。uboot 启动的时候会输出一些信息,这些信息如下所示:

U-Boot 2016.03-gd3f0479 (Aug 07 2020 - 20:47:37 +0800)

CPU: Freescale i.MX6ULL rev1.1 792 MHz (running at 396 MHz)
CPU: Industrial temperature grade (-40C to 105C) at 51C
Reset cause: POR
Board: I.MX6U ALPHA|MINI
I2C: ready
DRAM: 512 MiB
MMC: FSL_SDHC: 0, FSL_SDHC: 1
Display: ATK-LCD-7-1024x600 (1024x600)
Video: 1024x600x24
In: serial
Out: serial
Err: serial
switch to partitions #0, OK
mmc1(part 0) is current device
Net: FEC1
Error: FEC1 address not set.

Normal Boot
Hit any key to stop autoboot: 0
=>

第1 行是uboot 版本号和编译时间,可以看出,当前的uboot 版本号是2016.03,编译时间是2020 年8 月7 日凌晨20 点47 分。

第3 和第4 行是CPU 信息,可以看出当前使用的CPU 是飞思卡尔的I.MX6ULL(I.MX 以前属于飞思卡尔,然而飞思卡尔被NXP 收购了),频率为792MHz,但是此时运行在396MHz。这颗芯片是工业级的,结温为-40°C~105°C。

第5 行是复位原因,当前的复位原因是POR。I.MX6ULL 芯片上有个POR_B 引脚,将这个引脚拉低即可复位I.MX6ULL。

第6 行是板子名字,当前的板子名字为“I.MX6U ALPHA|MINI”。

第7 行提示I2C 准备就绪。

第8 行提示当前板子的DRAM(内存)为512MB,如果是NAND 版本的话内存为256MB。

第9 行提示当前有两个MMC/SD 卡控制器:FSL_SDHC(0)和FSL_SDHC(1)。I.MX6ULL支持两个MMC/SD,正点原子的I.MX6ULL EMMC 核心板上FSL_SDHC(0)接的SD(TF)卡,FSL_SDHC(1)接的EMMC(MMC表示EMMC或者SD卡)。

第10 和第11 行是LCD 型号,当前的LCD 型号是ATK-LCD-7-1024x600 (1024x600),分辨率为1024x600,格式为RGB888(24 位)。

第12~14 是标准输入、标准输出和标准错误所使用的终端,这里都使用串口(serial)作为终端。

第15 和16 行是切换到emmc 的第0 个分区上,因为当前的uboot 是emmc 版本的,也就是从emmc 启动的。我们只是为了方便将其烧写到了SD 卡上,但是它的“内心”还是EMMC的。所以uboot 启动以后会将emmc 作为默认存储器,当然了,你也可以将SD 卡作为uboot 的存储器,这个我们后面会讲解怎么做。

第17 行是网口信息,提示我们当前使用的FEC1 这个网口,I.MX6ULL 支持两个网口。

第18 行提示FEC1 网卡地址没有设置,后面我们会讲解如何在uboot 里面设置网卡地址。

第20 行提示正常启动,也就是说uboot 要从emmc 里面读取环境变量和参数信息启动Linux内核了。

第21 行是倒计时提示,默认倒计时3 秒,倒计时结束之前按下回车键就会进入Linux 命令行模式。如果在倒计时结束以后没有按下回车键,那么Linux 内核就会启动,Linux 内核一旦启动,uboot 就会寿终正寝。这个就是uboot 默认输出信息的含义,NAND 版本的uboot 也是类似的,只是NAND 版本
的就没有EMMC/SD 相关信息了,取而代之的就是NAND 的信息,比如NAND 容量大小信息。

uboot 是来干活的,我们现在已经进入uboot 的命令行模式了,进入命令行模式以后就可以给uboot 发号施令了。当然了,不能随便发号施令,得看看uboot 支持哪些命令,然后使用这些uboot 所支持的命令来做一些工作。下一节就讲解uboot 命令的使用。

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

Uboot初次编译、烧写、启动(启动界面log简析) 的相关文章

随机推荐

  • 7-16 求符合给定条件的整数集 (15分)

    7 16 求符合给定条件的整数集 15分 给定不超过6的正整数A 考虑从A开始的连续4个数字 请输出所有由它们组成的无重复数字的3位数 输入格式 输入在一行中给出A 输出格式 输出满足条件的的3位数 要求从小到大 每行6个整数 整数间以空格
  • 基于CRNN的中文车牌识别

    1 概述 目前HyperLRP是一个开源的 基于深度学习高性能中文车牌识别库 本文主要在其基础上进行改动 自己训练一个crnn车牌识别模型 2 可识别的车牌类型 单行蓝牌 单行黄牌 新能源车牌 白色警用车牌 使馆 港澳车牌 教练车牌 3 可
  • 在windows上配置VScode支持ARM GCC开发环境

    简单有效的在windows上 配置VS Code 以支持GCC开发环境 没有什么花里胡哨的 需要用到的工具 Visual Studio Code 编辑工具 ARM GCC 交叉编译工具链 Msys2 命令行开发环境 mingw window
  • DDIM模型代码解析(一)

    目录 预备知识 main py 解析命令行参数 解析配置文件 预备知识 由于代码中除了一些必要的对模型 数据进行操作的PyTorch函数外 还有一些辅助显示训练等过程有关信息的 或辅助对文件目录进行操作的库 因此 建议读者先对这些库进行了解
  • RT-Thread的设备模型

    RTT内核对象 设备 RT Thread有多种内核对象 其中设备device就是其中一种 内核继承关系图如下 设备继承关系图如下 I O 设备模型框架 应用程序通过 I O 设备管理接口获得正确的设备驱动 然后通过这个设备驱动与底层 I O
  • 如何迈向知识驱动的人工智能?

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入 近年来第三代人工智能的讨论热度不断升温 特别在张钹院士发文 迈向第三代人工智能 之后 AI TIME精心策划了一场关于 如何迈向知识驱动的人工智能 的PhD Debate 就大家
  • spring拓展执行时机

    这是一个被人讲烂了的东西 但是我还是会更全面地介绍 并且提出一些坑 一 整体流程 BeanFactoryPostProcessor 这个严格来说不是bean生命周期 只是他会在容器初始化完会调用 这里提及 主要为了说明集中后置处理器顺序 b
  • BUSMASTER使用记录(二):诊断功能、在线16进制转字符串、脚本编写

    目录 五 诊断使用 5 1 诊断设置 5 2 发送数据 5 3 16进制转字符串 推荐工具一 推荐工具二 六 脚本 在上一篇 点击进入 中主要是记录了下基本收发 报文过滤和报文录制 这一篇重点是诊断功能的使用 测试脚本的编写 五 诊断使用
  • Deep Learning-Based CSI Feedback Approach for Time-V arying Massive MIMO Channels阅读笔记

    在频分双工网络中 大规模MIMO系统依靠CSI反馈来执行预编码并获得增益 然而大量的天线对传统CSI反馈方法提出挑战 导致了过多的反馈开销 提出一个实时的CSI反馈架构 CsiNet long short term memory LSTM
  • 探讨UUID和Secrets:确保唯一性与数据安全的利器

    前言 在现代软件开发中 唯一标识符 UUID 和机密信息的处理是至关重要的 UUID是用于唯一标识数据记录和对象的128位值 确保了全球范围内的唯一性 同时 Python的secrets模块为处理机密信息提供了强大的随机数生成功能 适用于密
  • 《华为机试》刷题之HJ41 称砝码

    一 题目 二 示例 三 代码 while True try n int input m list map int input split x list map int input split list1 for i in range n l
  • FSDB 波形文件产生以及截取

    FSDB波形产生 FSDB Fast Signal Database 相比较于VCD文件 FSDB文件的大小比VCD波形小5 50倍 各家的仿真器都支持在simulation的过程中 直接生成FSDB文件 将VCD文件转换为FSDB文件的三
  • 键盘摄影:今天老李是一名动物摄影师

    键摄 全称键盘摄影师 原本是一个贬义词 是指那些没有相机 没有实拍经验 仅凭一副鼠标键盘 在家里打字 在网上头头是道地分享摄影技巧 同时对别人的作品指指点点 然后又无法秀出自己的作品的人 然而 在今天 有了Midjourney 键盘摄影师终
  • js逆向反调试笔记

    sojson反调试 遇到一调试就卡死的代码 现在js最开始位置打上debugger 如果打完debugger后还是直接卡死 那就多打几处 运行代码后 按单步跟 如图 发现正则new RegExp test toString 大概率是在检测代
  • java中金额计算

    撒欢的老猫 java中金额计算 在牵涉到金额的计算时 为了保持高精度的准确性 使用bigDecimal类型 在使用BigDecimal类来进行计算的时候 主要分为以下步骤 1 用float或者double变量构建BigDecimal对象 2
  • 关于路由传参与接收参数

    路由 跳转传参的方式有很多 下面我总结一下常用的传参方式及其相对应的接收参数方式 第一 参数是以 分隔 http localhost 8092 account manage issue id 161123434754052096 路由跳转方
  • 文本生成视频Make-A-Video,根据一句话就能一键生成视频 Meta新AI模型

    Meta公司 原Facebook 在今年9月29日首次推出一款人工智能系统模型 Make A Video 可以从给定的文字提示生成短视频 Make A Video研究基于文本到图像生成技术的最新进展 该技术旨在实现文本到视频的生成 可以仅用
  • 有序序列的二分查找

    二分算法思想 1 定义下标min指向第一个元素 定义max指向最后一个元素 2 定义下标mid等于 min max 2 3 判断arr mid 是否等于要查找的数 若等于返回mid值 若不等于 如果小于 则min mid 1 如果大于 则m
  • SSH远程访问控制

    目录 一 SSH概述 1 1什么是SSH 1 2SSH的作用 1 3SSH的主程序以及配置文件 二 SSH远程登录方式 2 1ssh 远程主机用户名 远程服务器主机名或IP地址 p port 2 2ssh l 远程主机用户名 远程服务器主机
  • Uboot初次编译、烧写、启动(启动界面log简析)

    目录 U Boot 初次编译 U Boot 烧写与启动 上述笔记第三点就是建立shell脚本实现的 第四点就是修改Makefile文件实现的 下面均有实现步骤讲解 U Boot 初次编译 先编译体验一下正点原子提供的UBOOT 首先在Ubu