当前位置: 首页 > news >正文

uboot学习:(一)基础认知

目录

uboot是一个裸机程序(bootloader)

作用

要运行linux系统时,如何从外置的flash拷贝到DDR中,才能启动

uboot使用步骤

步骤1中的命令例子

注意

uboot源码获取方法


uboot是一个裸机程序(bootloader)

作用

  • 用于启动Linux或其他系统
  • 主要工作是初始化DDR(因为Linux是运行在DDR里面的)
    • 一般 Linux 镜像 ( zImage / uImage ) + 设备树 ( .dtb ) 存放在SD、EMMC、NAND、SPI FLASH 等等外置存储区域

要运行linux系统时,如何从外置的flash拷贝到DDR中,才能启动

  • Uboot提供了flash的读写服务
  • Uboot的主要目的就是为系统的启动做准备
  • Uboot的宿命就是启动linux后,再把cpu还给linux
  • Uboot不仅仅能启动Linux,也可以启动其他系统,比如vxworks
  • Linux不仅仅能通过uboot启动
  • Uboot是个通用的bootloader,他支持多种架构

uboot使用步骤

先配置,一个板子一个配置文件,然后执行配置文件,就会把uboot配置好,然后再次编译,就可以得到配对这个板子的uboot执行文件(.bin),用bin文件来启动板子,这就是裸机开发,通常是操控寄存器来编程,汇编

1.下载uboot源码,在源码根目录下先配置(可以写一个shell脚本来执行清理和编译)

        1.1清理工程

        1.2先使用默认配置文件来配置uboot,就会生成一个.config文件,(根据默认配置文件将配置写入.config文件里,编译的时候需要用到.config配置项)

        1.3使用多少核编译命令 

2.编译完成以后就会生成一个u-boot.bin。必须向u-boot.bin添加头部信息。Uboot编译最后会通过/tools/mkimage软件添加头部信息,生成u-boot.imx (最后烧到板子上的是imx,可以使用mfg烧录,要将新的imx替换到掉原来的imx,在使用mfg烧录时,会把整个系统也重新烧录进去)

步骤1中的命令例子

  • 1.1的命令make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
  • 1.2的命令make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
  • 1.3的命令make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
  • ARCH是指定架构
  • CROSS_COMPILE是指定编译器,只需要前缀
  • mx6ull_14x14_ddr512_emmc_defconfig是默认配置文件
  • V=1用于设置编译过程输出信息
  • -j12使用12核来编译uboot,最好设置成我们虚拟机所设置的核心数

注意

  • 如果配置过uboot,那么一定要注意shell脚本会清除整个工程,那么配置的文件也会被删除,配置项也会被删除掉
  • 为了方便开发,建议直接在uboot顶层Makefile里面设置好ARCH和CORSS_COMPILE这两个变量的值,就可以直接用make -j几核来进行编译

uboot源码获取方法

  1. 官网下载源码,缺点就是支持少,比如某一款具体芯片驱动等不完善
  2. SOC厂商会从uboot官网下载某一个版本的uboot,然后在这个版本的uboot上加入相应的SOC以及驱动。这就是SOC厂商定制版的uboot
  3. 做开发板的厂商,开发板会参考SOC厂商的板子。开发板必然会和官方的板子不一样。因此开发板厂商又会去修改SOC厂商做好的uboot,以适应自己的板子

http://www.lryc.cn/news/399230.html

相关文章:

  • 每天一个数据分析题(四百二十六)- 总体方差
  • 【C++】设计一套基于C++与C#的视频播放软件
  • 数学建模中的辅助变量、中间变量、指示变量
  • python的seek()和tell()
  • Go泛型详解
  • 【每日一练】python之sum()求和函数实例讲解
  • 打造智慧校园德育管理,提升学生操行基础分
  • 自定义函数---随机数系列函数
  • 一文了解5G新通话技术演进与业务模型
  • 视频使用操作说明书-T80002系列视频编码器如何对接海康NVR硬盘录像机,包括T80002系列高清HDMI编码器、4K超高清HDMI编码器
  • el-input-number计数器change事件校验数据,改变绑定数据值后change方法失效问题的原因及解决方法
  • 将vue项目整合到springboot项目中并在阿里云上运行
  • AC修炼计划(AtCoder Regular Contest 179)A~C
  • 开发编码规范笔记
  • spring boot easyexcel
  • Docker 部署 ShardingSphere-Proxy 数据库中间件
  • Qt常用快捷键
  • 关于RiboSeq分析流程的总结
  • NLP任务:情感分析、看图说话
  • Linux桌面溯源
  • 深入Linux:权限管理与常用命令详解
  • Mojo 编程语言:AI开发者的新宠儿
  • ARM/Linux嵌入式面经(十):极氪
  • 【PVE】新增2.5G网卡作为主网卡暨iperf测速流程
  • 数学建模美赛入门
  • 两段序列帧动画播放,在ios机型上出现闪屏
  • 【C++深度探索】全面解析多态性机制(二)
  • MySQL配置数据库的连接命令
  • [PaddlePaddle飞桨] PaddleSpeech-自动语音识别-小模型部署
  • redis查询慢,你们是如何排查优化的?(总结篇)