U-Boot 简介
Linux 系统启动需要 bootloadr 程序。
bootloader程序 先初始化 DDR(内存条,Double Data Rate 双倍速率同步动态随机存储器 )等 外设,后 Linux内核从flash( 非易失性内存( Non-Volatile ),NAND,NOR FLASH, SD, MMC 等)拷贝到 DDR 中,最后启动 Linux 内核。
uboot ( Universal Boot Loader)遵循 GPL 协议的开源 裸机代码
uboot 官网为 http://www.denx.de/wiki/U-Boot/
不管是Linux内核还是uboot,建议都去厂商官网获取
飞思卡尔 uboot源码,可以在GitHub找到
我这样下载是为了下载外网的资源 更加快速,具体操作 https://blog.csdn.net/qq_44226094/article/details/104683054
三种uboot
U-Boot 编译
下载完成,把压缩包上传到 Linux编译端
注意!!!!压缩包 不要 在 windos下解压上传( 编译可能会出现莫名的错误 )
开启 Ubuntu 下的 FTP 服务
打开 Ubuntu 的终端窗口,然后执行如下命令来安装 FTP 服务:
sudo apt-get install vsftpd
等待软件自动安装,安装完成以后使用如下 VI 命令打开/etc/vsftpd.conf,命令如下:
sudo vi /etc/vsftpd.conf
打开以后 vsftpd.conf 文件以后找到如下两行:
local_enable=YES
write_enable=YES
ifconfig // 查看 本机 IP地址
Ubuntu 中安装 ncurses 库(Linux系统下的图形支持的函数库,字符终端处理库,包括面板和菜单)
sudo apt-get install libncurses5-dev
解压 uboot-imx-2016.3-2.1.0.tar.bz2
unzip -CZlv u-boot-fslc-2020.01-fslc.zip
/* C 压缩文件中的文件名称区分大小写
* l 显示压缩文件内所包含的文件
* Z 显示压缩文件的注解
* v 显示命令显示的执行过程
*/
编译错误:
Traceback (most recent call last):
File "scripts/dtc/pylibfdt/setup.py", line 21, in <module>
from distutils.core import setup, Extension
ModuleNotFoundError: No module named 'distutils.core'
scripts/dtc/pylibfdt/Makefile:27: recipe for target 'scripts/dtc/pylibfdt/_libfdt.so' failed
make[3]: *** [scripts/dtc/pylibfdt/_libfdt.so] Error 1
scripts/Makefile.build:432: recipe for target 'scripts/dtc/pylibfdt' failed
make[2]: *** [scripts/dtc/pylibfdt] Error 2
make[2]: *** Waiting for unfinished jobs....
LDS u-boot.lds
scripts/Makefile.build:432: recipe for target 'scripts/dtc' failed
make[1]: *** [scripts/dtc] Error 2
Makefile:551: recipe for target 'scripts' failed
make: *** [scripts] Error 2
sudo apt-get install python3-pip
编译错误:
unable to execute 'swig': No such file or directory
sudo apt-get install swig
编译uboot
/*
* ARCH 设置为arm架构
* CROSS_COMPILE 指定交叉编译器
* V=1 显示编译工程
*/
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabif- distclean //清除工程
//配置 uboot,是什么厂商就用什么厂商的defconfig u-boot-fslc-2020.01-fslc/configs
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- A20-Olimex-SOM204-EVB_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12 // 12核编译 uboot
U-Boot 烧写与启动
在 SecureCRT 上出现“ Hit any key to stop autoboot: ”
倒计时的时候 按回车键,进入 uboot 的命令行模式。
倒计时结束,没有按回车键, uboot 使用默认参数启动 Linux 内核
uboot 的命令行模式,左侧会有 “ => ” 标志
uboot 打印信息
/*
* 1月 Jan 2月 Feb 3月 Mar 4月 Apr
* 5月 May 6月 Jun 7月 Jul 8月 Aug
* 9月 Sep 10月 Oct 11月 Nov 12月 Dec
*
*/
U-Boot 2016.03 (Feb 12 2020 - 12:29:00 +0800) // 版本号:2016.03 编译时间:括号里
CPU: Freescale i.MX6ULL rev1.1 528 MHz (running at 396 MHz) // CPU 信息 主频
CPU: Industrial temperature grade (-40C to 105C) at 46C // 工业级 温度
Reset cause: POR // 复位原因
Board: MX6ULL 14x14 EVK // 板子名字
I2C: ready // I2C 准备就绪
DRAM: 512 MiB // 内存大小
MMC: FSL_SDHC: 0, FSL_SDHC: 1 // MMC/SD 卡控制器
Display: ATK-LCD-7-1024x600 (1024x600) // LCD 型号
Video: 1024x600x24 // 分辨率 格式
** Unrecognized filesystem type **
In: serial // 标准输入
Out: serial // 标准输出
Err: serial // 标准错误
switch to partitions #0, OK // 分区 0
mmc0 is current device // 默认存储器
Net: FEC1 // 网卡信息
Normal Boot // 成功提示
Hit any key to stop autoboot: 0 // 倒计时
=> // 命令行
U-Boot 命令使用
uboot 支持 TAB 键 自动补全功能
//查看 base 详细用法
? base
help base
信息查询命令
// 查看板子信息
bdinfo
// 输出环境变量信息
printenv
uboot 中的环境变量都是字符串
bootdelay : uboot 启动延时时间
// 查看uboot的版本号
version
环境变量操作命令
/*
* 设置 修改 环境变量的值
* 新建命令
* 删除环境变量
*
* 变量存在 DRAM
*/
setenv 命令 '值1 值2 ...'
/*
* 保存 修改后的环境变量
*
* 保存在 flash
*/
saveenv
/*
* 查看当前环境变量
*/
printenv
内存操作命令
/*
* [.b .w .l]:byte word long 1字节 2字节 4字节
* address:查看的内存起始地址
* [# of objects]:查看的数据长度
* 十六进制
*/
md [.b .w .l]address[# of objects]
/*
* 修改指定地址的内存值
* ? 输入要修改的数据
* q 退出
*/
nm [.b .w .l]address
/*
*
*/
mm