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://github.com/Freescale

 

           我这样下载是为了下载外网的资源 更加快速,具体操作 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