树莓派uboot配置编译

举报
dz小伟 发表于 2022/11/12 18:52:06 2022/11/12
【摘要】 ​ 目录一、什么是uboot二、uboot命令三、uboot的源码目录3.1、文件3.2、文件夹四、主Makefile4.1、Makefile配置编译4.2、uboot version版本号确定4.3、HOSTARCH和HOSTOS4.4、静默编译&原地编译和单独输出文件夹编译4.5、其他五、运行树莓派uboot5.1、树莓派启动流程5.2、运行uboot一、什么是ubootOS跑起来前,需...

 目录

一、什么是uboot

二、uboot命令

三、uboot的源码目录

3.1、文件

3.2、文件夹

四、主Makefile

4.1、Makefile配置编译

4.2、uboot version版本号确定

4.3、HOSTARCH和HOSTOS

4.4、静默编译&原地编译和单独输出文件夹编译

4.5、其他

五、运行树莓派uboot

5.1、树莓派启动流程

5.2、运行uboot



一、什么是uboot

  • OS跑起来前,需要的一段引导程序
  • 负责部署整个计算机系统,引导操作系统内核启动并给内核传参
  • 提供一个命令行界面供人操作
  • 是一个开源项目,uboot就是universal bootloader(通用的启动代码)
  • 命令行用的行缓存,linux终端设计有3种缓冲机制:无缓冲、行缓冲、全缓冲

二、uboot命令

  • printenv/print 打印出系统中所有的环境变量
  • setenv/set 设置环境变量
    set 环境变量 值
  • saveenv/save 保存环境变量到flash
  • ping 网络测试指令

ping ip地址

网段的概念:一个IP地址分为2部分,一部分是网段地址,另一部分是网段内的主机地址(由子网掩码来区分哪一部分是网段地址,哪一部分是IP地址)。在子网掩码是255.255.255.0的情况下,192.168.1.10这个IP地址的前三部分(192.168.1.)属于网段地址,第4部分(10)属于主机地址。

  • tftp下载指令:tftp
  • SD卡/iNand操作指令movi(movi是命令集,有很多子命令,具体用法可以help movi查看)

movi read u-boot 0x30000000,意思就是把iNand中的u-boot分区读出到DDR的0x30000000起始的位置处。

  • NandFlash操作指令nand
  • 内存操作指令:mm(批量的逐个单元的修改内存,用mm最合适)、mw(将内容写到内存中)、md(显示内存中的内容)
  • 启动内核指令:bootm、go
  • 环境变量
    1.ipaddr是开发板的本地IP地址
    2.serverip是开发板通过tftp指令去tftp服务器下载东西时,tftp服务器的IP地址。
    3.gatewayip是开发板的本地网关地址
    4.netmask是子网掩码
    5.ethaddr是开发板的本地网卡的MAC地址。
    6.bootcmd自动运行命令(set bootcmd 'movi read kernel 30008000; bootm 30008000')
    7.bootargs启动参数
      bootargs=console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3    
      console=ttySAC2,115200    控制台使用串口2,波特率115200.
      root=/dev/mmcblk0p2   根文件系统在SD卡端口0设备(iNand)第2分区,根文件系统是可      读可写的
      init=/linuxrc            linux的进程1(init进程)的路径
      rootfstype=ext3            根文件系统的类型是ext3

三、uboot的源码目录

uboot下载官网

使用的是2022.01版

3.1、文件

编辑

  •  .gitignore:git工具的文件
  • config.mk:是一个Makefile文件
  • MAINTAINERS:维护者
  • Makefile:uboot源代码的主Makefile
  • README:所有的软件都有README,简单的使用说明书。

3.2、文件夹

编辑

  •  api: 硬件无关的功能函数的API
  • board:文件夹下每一个文件都代表一个开发板
  • common:放的是一些与具体硬件无关的普遍适用的一些代码
  • disk:磁盘有关的
  • doc:文档目录,里面存放了很多uboot相关文档
  • drivers:驱动,这里面放的就是从linux源代码中的linux设备驱动,如网卡驱动、Inand/SD卡、NandFlash等的驱动
  • examples:示例代码
  • fs:filesystem,文件系统
  • include:头文件目录
  • lib:(典型的lib_arm和lib_generic)架构相关的库文件
  • net:网络相关的代码
  • tools:里面是一些工具类的代码
  • arch:这个目录是SoC相关的,里面存放的代码都是SoC相关初始化和控制代码(譬如CPU的、中断的、串口等SoC内部外设的,包括起始代码start.S也在这里)

四、主Makefile

4.1、Makefile配置编译

u-boot.lds,就是uboot的链接脚本

configs文件夹,uboot 配置文件,xxx_defconfig

安装依赖项

sudo apt-get install libssl-dev

sudo apt-get install bison

sudo apt-get install flex

make distclean # 清除上次的make命令所产生文件以及配置文件

make rpi_3_defconfig# 使用树莓派3的配置文件,执行完这步会生成.config文件

生成.config文件

make CROSS_COMPILE=aarch64-linux-gnu- # 编译uboot

官方下载编译工具 : aarch64-linux-gnu&arm-linux-gnueabi

交叉编译工具链安装

4.2、uboot version版本号确定

1.这4个共同构成了最终的版本号

 编辑 

 VERSION:主板本号

PATCHLEVEL:次版本号

SUBLEVEL:再次版本号

EXTRAVERSION:另外附加的版本信息 

2.Makefile中版本号最终生成了一个变量UBOOTVERSION,这个变量记录了Makefile中配置的版本号
 编辑 3.include/config/uboot.release文件是编译过程中自动生成的一个文件,内容是一个宏定义,宏定义的值内容就是我们在Makefile中配置的uboot的版本号。
 编辑 

4.3、HOSTARCH和HOSTOS

这两个环境变量是主机的操作系统和主机的CPU架构

  • HOSTARCH:x86_64
  • HOSTOS:Linux

编辑

4.4、静默编译&原地编译和单独输出文件夹编译

  • 静默编译:后台编译,使用方法就是编译时make -s
  • 单独输出文件夹编译:make O=输出目录,环境变量export KBUILD_OUTPUT=设置

编辑

编辑

4.5、其他

  • OBJTREE:编译出的.o文件存放的目录的根目录。在默认编译下,OBJTREE等于当前目录;在O=xx编译下,OBJTREE就等于我们设置的那个输出目录。
  • SRCTREE: 源码目录,其实就是源代码的根目录,也就是当前目录。

五、运行树莓派uboot

5.1、树莓派启动流程

参考

  • 树莓派上电后,SoC 中的 bootloader 首先被执行,其作用是挂载 SD 卡上的 FAT32 分区,从而加载下一阶段的 bootloader。这部分程序被固化在 SoC 的 ROM 中,用户无法修改。
  • 这个阶段的 bootloader (bootcode.bin) 会从 SD 卡上检索 GPU 固件,将固件写入 GPU,随后启动 GPU。
  • 本阶段中 (start.elf),GPU 启动后会检索附加配置文件(config.txt、fixup.dat),根据其内容设置 CPU 运行参数及内存分配情况,随后将用户代码加载至内存,启动 CPU。
  • 通常情况下,CPU 启动后便开始执行 kernel7.img 中的指令,初始化操作系统内核,在某些情况下,也可以被 U-BOOT 代替,由 U-BOOT 来加载内核。

5.2、运行uboot

  • SD卡2个分区:
    FAT32:这个分区里存放启动文件和内核
    EXT4:文件系统,放Linux操作系统文件
    可以使用 fdisk 新建分区,也可以在可以启动的SD卡上改动:参考文章
  • FAT32分区:start4.elf、fixup4.dat、bcm2711-rpi-4-b.dtb、config.txt、u-boot.bin

config.txt 文件,在原有的基础上进行修改

 kernel=u-boot.bin # 如果不指定,则start4.elf默认启动kernel7.img
 kernel_address=Ox00080000 # 内核地址
 arm_64bit=1
 enable_uart=1 # 开启串口
 uart_2ndstage=1
 enable_gic=1
  • 插入SD卡树莓派,上电运行,使用SecureCRT

编辑

 编辑

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。