目录

  • U-Boot 初次编译
  • U-Boot 烧写与启动


上述笔记第三点就是建立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 命令的使用。

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

  1. S3C2440移植uboot之编译烧写uboot

    文章目录 移植环境 获取uboot 更新交叉编译工具 配置环境变量 移植Uboot其他文章链接: S3C2440移植uboot之新建单板_时钟_SDRAM_串口 S3C2440移植uboot之启动过程 ...

  2. tiny210V2 Uboot kernel filesystem 烧写和启动

    1.sd启动 将u-boot镜像写入SD卡 将SD卡通过读卡器接上电脑(或直接插入笔记本卡槽),通过"cat /proc/partitions"找出SD卡对应的设备,我的设备节点是 ...

  3. fpga烧写bin文件_S3C2440移植uboot之编译烧写uboot

    @[TOC] 移植环境 主 机:VMWare--ubuntu16.04 开发板:S3C2440 编译器:arm-linux-gcc-4.3.2.tgz u-boot:u-boot-2012.04.01 ...

  4. imx6ull u-boot 下载/编译/烧写/运行

    下载NXP官方提供的u-boot源码 链接: https://pan.baidu.com/s/1VCzTiGSwJTFtg0D_eHXpPw 密码: 7aas 编译u-boot 进入源码目录新建编译脚 ...

  5. 335平台部分flash用烧录器烧写不能启动问题

    问题题背景描述: 335平台在 更换1gflash 型号后 ,有29F8G08ABABA 更换为29F8G08ABACA 后.部分flash 存在坏块. 用烧录器烧写后部分核心板不能能启动.但是用sd ...

  6. 移植U-BOOT之支持烧写YAFFS文件系统以及制作U-BOOT补丁

    今天,我们来移植U-BOOT让其支持YAFFS文件系统映像的烧写,以及最后的终极目标,制作Uboot补丁,因为我们信心苦苦移植好了Uboot,如果换一个地方的或者换一台电脑之类的,我们也不想再浪费时间 ...

  7. 开源RISC-V处理器(蜂鸟E203)学习(五)A100T-FPGA 移植蜂鸟Hbirdv2,实现Centos下调试器USB识别以及程序编译烧写,并进行C语言仿真

    1.简述 最近购买了一块适合做原型验证FPGA板卡,板卡接口和外设比较丰富,十分适合跑一些小型的SOC工程,比如蜂鸟E203:板卡自带FPGA烧写器和软核CPU的JATG调试器,还有USB接口的UAR ...

  8. SSD202 uboot、kenel 烧写 以及 刷系统 初步学习有不足请见谅

    SSD202 uboot.kenel 烧写 以及 刷系统 ISP 烧录当 flash 没有烧过系统或系统损坏时,可以先通过 ISP 烧录 boot,然后再通过 eth.usb 或 sd 烧录完整的系统 ...

  9. ESP32学习笔记(1)——搭建环境、编译烧写(Windows+VS Code)

    Espressif-IDE 环境搭建参看 ESP32学习笔记(50)--搭建环境.编译烧写(Windows+Espressif-IDE) 一.搭建环境 1.1 官方资料 ESP-IDF 编程指南 1. ...

最新文章

  1. 安装mysql_python的适合遇到mysql_config not found解决方案(mac)
  2. PythonOCC 3D图形库学习—创建立方体模型
  3. 新北洋,知识型员工的科学管理
  4. MVC传递Model
  5. Zookeeper——入门介绍(相关原理、安装启动及使用操作)
  6. 01:MongoDB基础
  7. 无人驾驶入门(camera篇)
  8. 2、python的print函数格式化输出
  9. debian 修改apache2 https 端口为11443
  10. linux内核移植过程问题总结
  11. TFTP服务器的搭建与使用
  12. PHP实现用户扫描二维码后提示扫码成功的操作
  13. 如何成为一名推荐系统工程师
  14. 二项分布期望与方差的证明
  15. linux usb模拟网卡,开发板作为USB设备模拟网卡(linux usb 网卡)--gadgetrndis|cdc
  16. MariaDB ColumnStore初探(1):安装、使用及测试
  17. 输出1000以内能被7整除又能被5整除的数
  18. 小程序 Serverless: 解放生产力,驱动研发效能提升 1
  19. 百度网盘_SEARCH
  20. python读取文件报错:‘utf-8‘ 或“gbk” codec can‘t decode byte 0xbe in position 627: invalid start byte

热门文章

  1. Linux编程 23 shell编程(结构化条件判断 命令if -then , if-then ... elif-then ...else,if test)...
  2. 遏止个人信息泄露亟待立法跟进
  3. 深入浅出 RPC - 浅出篇+深入篇
  4. 使用GPUImage实现视频滤镜
  5. UVA 1156 - Pixel Shuffle(模拟+置换)
  6. Netbeans8下 Weblogic EJB案例
  7. Chuck Cobb谈敏捷组织中PMO的角色
  8. iOS- 关于AVAudioSession的使用——后台播放音乐
  9. Android----Google code android开源项目(四)
  10. 网络邻居无法共享解决办法