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

目录

  • 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 命令的使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

360 linux 扩展文件夹,360签具名工Linux下载0907 官方版

腾牛网提供的这款360签名工具Linux版,共有两个版本,分别是图形界面版和命令行界面版,两种选择为apk签名具有一样的正版效果。相关下载:360加固助手pc端Linux签名工具使用流程(图形界面)使用方法:一、准备工作&#xff…

锁优化

前言 高效并发是从JDK1.5到JDK1.6的一个重要改进,HotSpot虚拟机开发团队在这个版本上花费了大量的精力去实现各种锁优化技术,如适应性自旋、锁消除、锁粗化、轻量级锁和偏向锁等,这些技术都是为了在线程之间高效的共享数据,以及解…

WPF--ComboBox数据绑定

0-在ComboBox中显示图片&#xff1a; <ComboBox Height"33" HorizontalAlignment"Right" Margin"0,94,31,0" x:Name"comboBox1" VerticalAlignment"Top" Width"142" SelectedIndex"0"> <Co…

U-Boot源码目录分析(VScode工程创建及文件夹过滤)

参考&#xff1a;U-Boot工程目录介绍 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-10-21 14:47:30 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/109199081 目录0、Uboot下载编译VScode工程创建及文件夹过滤2、重要文件2.1、arch文件夹&…

Spring Security 案例实现和执行流程剖析

在线演示 演示地址&#xff1a;http://139.196.87.48:9002/kitty 用户名&#xff1a;admin 密码&#xff1a;admin Spring Security Spring Security 是 Spring 社区的一个顶级项目&#xff0c;也是 Spring Boot 官方推荐使用的安全框架。除了常规的认证&#xff08;Authentica…

Ubuntu用户与用户组

目录Ubuntu用户与用户组创建用户和用户组Ubuntu用户与用户组 创建用户和用户组

linux执行windows创建的脚本,如何在Windows 10上创建和运行Bash Shell脚本 | MOS86

随着Windows 10的到来您还可以将Bash命令合并到Windows批处理文件或PowerShell脚本中。如果你知道你是什么Windows和UNIX使用不同的行尾字符&#xff0c;Windows文件系统可以在Bash环境的不同位置访问。如何在Windows上编写一个Bash脚本10当在Windows上编写shell脚本时&#xf…

31 锁,信号量,事件,队列

1.同步锁&#xff08;互斥锁&#xff09; from mutilprocessing import Lock 方式一&#xff1a; lockLock() lock.acquire() 数据操作的代码 lock.release() 方式二&#xff1a; with lock: 数据操作代码2.信号量 from mutilprocessing import …

Ubuntu下文件权限管理

参考&#xff1a;Ubuntu / Linux 下文件权限管理 作者&#xff1a;~莘莘 发布时间&#xff1a; 2021-07-12 17:09:48 网址&#xff1a;https://blog.csdn.net/lcx1837/article/details/118676383?spm1001.2014.3001.5501 目录一、文件权限二、修改文件权限一、文件权限 文件权…

U-Boot顶层Makefile分析

参考&#xff1a;U-Boot顶层Makefile介绍 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-10-22 16:22:17 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/109218569 目录0、学习目的1、准备好uboot源码2、分析顶层Makefile2.1、版本号2.2、M…

思科路由器的硬件组成

思科路由器的硬件组成常建议常建议CCNA的学员们&#xff0c;除了能灵活配置与应用思科的路由器和交换机以外&#xff0c;还需要掌握对路由器与交换机的常规维护工作&#xff0c;比如IOS的安装与升级&#xff0c;这个过程好比为一台全新的计算机安装操作系统&#xff0c;在此之前…

linux gone kde 图形程序 兼容,Oracle8i HowTo

现在假设你要在Linux上安装Oracle服务器,请先过以下5关&#xff1a;系统要求规划硬盘创建用户创建目录设置参数1.系统要求前提条件是能够安装运行Linux&#xff0c;然后应满足以下硬件要求&#xff1a;内存 RequirementsMemory  最小要求128 MB RAM.更多(256MB)内存可以提…

U-Boot启动流程详解

参考&#xff1a;U-Boot顶层目录链接脚本文件&#xff08;u-boot.lds&#xff09;介绍 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-10-23 13:52:23 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/109240625 目录链接脚本 u-boot.lds 详解…

linux下使用nginx搭建集群,CentOS(linux) 下Nginx的安装(Nginx+Tomcat集群第一步)

CentOS(linux) 下Nginx的安装(NginxTomcat集群)CentOS 7.4(腾讯云)pcre库zlib库opensslNginx服务器安装gcc g开发类库yum -y install gcc automake autoconf libtool makeyum install gcc gcc-cwget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz解压pcre库tar -zxvf pcre-8…

在线生成透明ICO图标神器

此神器的链接为&#xff1a;http://ico.duduxuexi.com/ 大家可以将这个网址收藏好&#xff0c;本人亲测十分好用&#xff01;对我们的ios,安卓以及windows开发都有极大的好处。转载于:https://www.cnblogs.com/geeksongs/p/10040935.html

Vim的使用和快捷键介绍

参考&#xff1a;Linux–Vim的使用以及快捷键大全 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-07-12 12:43:19 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107297756 目录安装vim三种常用的模式三种常用模式的切换vim 快捷键1.一般模…

手机当电脑麦克风 linux,WO Mic让手机成为电脑的无线麦克风

WO Mic 是一款可以让 Android 手机成为电脑无线麦克风的应用&#xff0c;支持 windows 和 Linux&#xff0c;除了 WiFi&#xff0c;还能使用蓝牙以及 USB 数据线(只有安卓支持数据线连接)。官方下载页面如下&#xff1a;一、windows下安装连接windows主机上需要安装客户端和驱动…

如何编写 Cloud9 JavaScript IDE 的功能扩展

上周末我们在JSConf.eu发布了 Cloud9 IDE &#xff0c;同时发布了对应的GitHub项目。在4天时间里该项目得到340个人的关注和将近50个fork。Cloud9的口号是由"由Javascripters 为Javascripters创建的IED"&#xff0c;这口号有点递归&#xff0c;它意味着你可以hack这个…

make工具和Makefile基础语法(含有交叉编译、pthread_create()的处理)

目录含有交叉编译、pthread_create()处理初次使用1、编写Makefile文件2、make3、make cleanMakefile基本语法1、Makefile规则格式2、变量3、变量赋值符&#xff08;、:、?、&#xff09;4、模式规则&#xff08;通配符&#xff09;5、自动化变量6、伪目标7、条件判断8、函数使…

树莓派超声波模块测距

参考&#xff1a;树莓派超声波模块测距及C语言demo 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-07-22 16:54:16 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107516949 前面这篇博文已经讲过了&#xff1a;树莓派外设开发基础&#xf…