0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

U-Boot介绍

玩转单片机 来源:玩转单片机 作者:noah 2022-10-08 10:50 次阅读

在移植 Linux之前我们需要先移植一个 bootloader 代码,这个 bootloader 代码用于启动 Linux 内核, bootloader有很多,常用的就是 U-Boot。

移植好 U-Boot 以后再移植 Linux 内核,移植完 Linux 内核以后Linux 还不能正常启动,还需要再移植一个根文件系统(rootfs),根文件系统里面包含了一些最常用的命令和文件。

所以 U-Boot、 Linux kernel 和 rootfs 这三者一起构成了一个完整的 Linux 系统,一个可以正常使用、功能完善的 Linux 系统。一个完整的linux系统,通常包含了Uboot、kernel、设备树以及根文件系统。

fc6b1e14-45db-11ed-96c9-dac502259ad0.png

| 硬件平台

综合了多方开发板,最终选择的是野火(i.MX6ULL eMMC),板子的颜值也比较高,但是原子的教程会详细一点,以「野火EBF6ULL Pro开发板教程」「正点原子i.MX6ULL阿尔法开发板教程」为参考,进行学习实践。

(以具体的开发板为准)

| Uboot介绍

uboot 的全称是 Universal Boot Loader, uboot 是一个遵循 GPL 协议的开源软件, uboot 是一个裸机代码,可以看作是一个裸机综合例程。现在的 uboot 已经支持液晶屏、网络USB 等高级功能。

我们一般不会直接用 uboot 官方的 U-Boot 源码的。uboot 官方的 uboot 源码是给半导体厂商准备的,半导体厂商会下载 uboot 官方的 uboot 源码,然后将自家相应的芯片移植进去。也就是说半导体厂商会自己维护一个版本的 uboot,这个版本的 uboot 相当于是他们定制的。

fdb58cdc-45db-11ed-96c9-dac502259ad0.png

| Uboot编译

编译前还要在Ubuntu 中「安装ncurses 库」,安装命令如下:

sudoapt-getinstalllibncurses5-dev

提示:有些库在Ubuntu中已经自带,如果编译出错记得把需要的库安装;

获取原厂的uboot源码:

通过正点原子官网获取资源,在01、例程源码/04、NXP官方原版Uboot和Linux目录下即可找到uboot(uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2)源码,然后放到方便找到的目录下,比如直接放在桌面,本人直接放在桌面/saver目录下;源码文件是.bz2格式,需要对文件进行解压,解压命令:

tar -vxjf uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2

解压后的文件如下图所示:

fe1f5d24-45db-11ed-96c9-dac502259ad0.png

uboot的目录结构如下图所示:

fe5d3c66-45db-11ed-96c9-dac502259ad0.png

首先看下「uboot的配置」,configs目录下有很多的配置文件,找到与实际开发板相同类似的配置文件。正点原子和野火的I.MX6ULL开发板参考的就是「NXP官方的I.MX6ULL EVK开发板」做的硬件,因为手头上的开发板是emmc版本的,所以就使用下面这个配置文件。

mx6ull_14x14_evk_emmc_defconfig

ff1a2088-45db-11ed-96c9-dac502259ad0.png

编译uboot使用的指令:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8

命令解析:

ARCH=arm 设置目标为 arm 架构;

CROSS_COMPILE 指定所使用的交叉编译器。

第1条命令相当于make distclean,目的是清除工程,一般在编译的时候需要清理一下工程已存在的编译文件。

第2条指令相当于make mx6ull_14x14_evk_emmc_defconfig,用于配置 uboot,配置文件为 mx6ull_14x14_evk_emmc_defconfig。

第3条指令相当于make -j8,也就是使用8核来编译uboot。

为了方便使用直接写个脚本文件,新建一个build.sh文件,写入相关脚本:

#!/bin/bash


make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8

ff49a204-45db-11ed-96c9-dac502259ad0.png

运行脚本编译uboot:

. build.sh

ffb56764-45db-11ed-96c9-dac502259ad0.png

编译后的文件结构:

006ee252-45dc-11ed-96c9-dac502259ad0.png

编译后会生成不少中间文件,其中编译生成的 u-boot.imx文件就是我们最终要烧写到开发板中的 uboot 镜像文件;

| 烧写镜像

烧写镜像的方法有很多,这里采用的是SD卡烧录的方式,简单理解就是让开发板从SD启动,开发板的启动方式是通过拨码开关实现切换的;

配置拨码开关:

0087fe0e-45dc-11ed-96c9-dac502259ad0.png

(截图来源于正点原子,具体根据实际开发板配置)

00d3e814-45dc-11ed-96c9-dac502259ad0.png

(截图来源于野火,具体根据实际开发板配置)

野火使用的是USB OTG或Etcher的方式更新镜像,但是正点原子专门编写了一个软件来将编译出来的.bin 文件烧写到 SD 卡中,这个软件叫做"imxdownload",路径为:开发板光盘->5、开发工具->2、Ubuntu 下裸机烧写软件->imxdownload,注意imxdownlaod 只能在 Ubuntu 下使用;

00e8024a-45dc-11ed-96c9-dac502259ad0.png

使用步骤:

1. 将 imxdownload 拷贝到工程根目录下,也就是和 **.bin 处于同一个文件夹下,要不然烧写会失败的;

010ca0f0-45dc-11ed-96c9-dac502259ad0.png

2.给予 imxdownload 可执行权限,imxdownload 默认是没有可执行权限的,需要给予 imxdownload 可执行权限;

chmod 777 imxdownload

3. 烧录到SD卡,注意提前备份数据,烧录会格式化SD卡;

Ubuntu 下所有的设备文件都在目录“/dev”里面,所以插上 SD 卡以后也会出现在“/dev”里面,其中存储设备都是以“/dev/sd”开头的。

//查看电脑所有存储设备
ls /dev/sd*

注意:SD卡一定要连接到ubuntu中,如果出现设备无法连接到它的理想主机控制器,就需要把usb兼容性改成3.0;

01432e04-45dc-11ed-96c9-dac502259ad0.png

imxdownload向SD卡烧写u-boot.bin文件,命令格式如下:

./imxdownload u-boot.bin /dev/sdb

imxdownload:imxdownload工具;

u-boot.bin:需要烧写到SD卡的文件;

/dev/sdb:插入的SD卡设备;

注意:不要选择错设备,一定要保证是自己插入的SD卡设备;

0178ef4e-45dc-11ed-96c9-dac502259ad0.png

注意这个烧写速度,如果这个烧写速度在几百 KB/s 以下那么就是正常烧写,如果这个烧写速度大于几十 MB/s、甚至几百 MB/s 那么肯定是烧写失败了! 烧写完成以后会在当前工程目录下生成一个 load.imx 的文件,load.imx 这个文件就是软件 imxdownload 根据 NXP 官方启动方式介绍的内容,在 u-boot.bin文件前面添加了一些数据头以后生成的。最终烧写到 SD 卡里面的就是这个 load.imx 文件,而非boot.bin。

01a41f48-45dc-11ed-96c9-dac502259ad0.png

0267ae72-45dc-11ed-96c9-dac502259ad0.png

|验证效果

把启动方式切换到SD卡启动,重新上电启动开发板,当出现倒计时时(串口打印上出现Hit any key to stop autoboot)按下回车,就可以进行uboot面板,默认倒计时3秒,3秒内没有按下按键就会启动内核;

使用MobaXterm工具查看开发板数据,波特率设置为115200;

04b8503c-45dc-11ed-96c9-dac502259ad0.png

| uboot命令 输入help或?,然后按下回车即可查看当前 uboot 所支持的命令,不同版本的uboot支持的命令会有一点出入:

04e2083c-45dc-11ed-96c9-dac502259ad0.png

uboot支持的命令比较多,具体使用可以去官网看看文档。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • u-boot
    +关注

    关注

    0

    文章

    116

    浏览量

    38044
  • LINUX内核
    +关注

    关注

    1

    文章

    311

    浏览量

    21389

原文标题:i.MX6ULL|uboot初探

文章出处:【微信号:玩转单片机,微信公众号:玩转单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    U-boot的基本介绍

    从本文开始,将陆续推送“手把手教你移植U-boot”系列文章,目标是由浅入深地讲解U-boot的工作流程、原理、配置方法和移植方法,手把手教你完成U-boot的移植工作,默认硬件开发平台为ARM,操作系统为Linux。
    发表于 07-14 16:52 1473次阅读
    <b class='flag-5'>U-boot</b>的基本<b class='flag-5'>介绍</b>

    u-boot-1.2.0移植手册》(转载)

    U-Boot移植手册目录: 写在前面的话... 2 目 录... 3 1. u-boot介绍... 4 1.1 U-Boot的来源... 4 1.2
    发表于 11-17 08:46

    U-Boot介绍1

    U-Boot介绍1
    发表于 08-04 00:23

    u-boot

    最近在移植u-boot,移植到dm9000网卡的时候出问题了。u-boot能识别dm9000,并且在板子上通过u-boot能ping通服务器,但是在tftp下载时候一直处于等待状态。。。,搞了两天了,还没解决。有没有遇到这个问题
    发表于 04-14 16:48

    u-boot

    最近在移植u-boot,移植到dm9000网卡的时候出问题了。u-boot能识别dm9000,并且在板子上通过u-boot能ping通服务器,但是在tftp下载时候一直处于等待状态。。。,搞了两天了,还没解决。有没有遇到这个问题
    发表于 04-14 16:53

    关于U-boot的问题?

    U-Boot是不是下载好的文件然后在ubuntu里去编译?U-Boot的编译和移植的区别和关系是什么?U-Boot的移植=烧写?
    发表于 05-12 08:22

    【OK210试用体验】u-boot篇 -- u-boot命令tab补全功能

    和 hash 要看好哈。 在u-boot官网下有对 u-boot hush shell 的介绍 :http://www.denx.de/wiki/view/DULG
    发表于 09-10 17:56

    u-boot详解

    1 U-Boot简介 U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译
    发表于 07-04 04:56

    基于U-boot的EB44B0开发板移植

    嵌入式系统来说,引导程序比较复杂,一般采用在基本符合硬件体系要求的现有引导程序的基础上进行修改,然后通过应用的方法设计引导程序,这就是引导程序的移植。1 U-boot介绍U-boot
    发表于 06-20 06:28

    U-boot的特点是什么

    Bootloader的操作模式常用bootloader介绍U-boot介绍U-boot的特点:U-boot命令
    发表于 12-14 09:22

    BootLoader与u-boot介绍

    发表于 10-20 18:11 0次下载

    fireflyAIO-3399C主板U-Boot介绍

    RK U-Boot 基于开源的 U-Boot 进行开发,工作模式有启动加载模式和下载模式。
    的头像 发表于 12-04 10:31 1201次阅读

    fireflyAIO-3288C主板U-Boot介绍

    RK U-Boot 基于开源的 U-Boot 进行开发,工作模式有启动加载模式和下载模式。
    的头像 发表于 12-16 13:52 937次阅读
    fireflyAIO-3288C主板<b class='flag-5'>U-Boot</b><b class='flag-5'>介绍</b>

    微雪电子AIO-3128C主板U-Boot使用介绍

    RK U-Boot 基于开源的 U-Boot 进行开发,工作模式有启动加载模式和下载模式。
    的头像 发表于 12-23 16:08 1114次阅读
    微雪电子AIO-3128C主板<b class='flag-5'>U-Boot</b>使用<b class='flag-5'>介绍</b>

    fireflyAIO-3399J主板U-Boot使用介绍

    RK U-Boot 基于开源的 U-Boot 进行开发,工作模式有启动加载模式和下载模式。
    的头像 发表于 12-24 10:00 1313次阅读
    fireflyAIO-3399J主板<b class='flag-5'>U-Boot</b>使用<b class='flag-5'>介绍</b>