当前位置: 首页 > 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,以适应自己的板子

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux运维:MySQL中间件代理服务器,mycat读写分离应用实验
  • ceph存储
  • 大语言模型应用--AI工程化落地
  • 高中数学:立体几何-基本立体图形分类
  • DAMA学习笔记(四)-数据建模与设计
  • 【分布式系统】Ceph块存储系统之RBD接口
  • 【通信协议-RTCM】系统参数消息 ---- 对应RTCM十六进制 编码ID(3F5)
  • UE5 03-物体碰撞检测
  • c++ primer plus 第15章友,异常和其他,15.3.8exception 类
  • JDK11中zgc垃圾回收器的探索
  • 【进阶篇-Day7:JAVA中Date、LocalDate等时间API的介绍】
  • 对于多个表多个字段进行查询、F12查看网页的返回数据帮助开发、数据库的各种查询方式(多对多、多表查询、子查询等)。
  • Zynq系列FPGA实现SDI视频编解码+图像缩放+多路视频拼接,基于GTX高速接口,提供8套工程源码和技术支持
  • IDEA 创建springboot项目杂记-更新中
  • SprintBoot创建遇到的问题
  • co模块的前端实现
  • Docker下部署自己的LNMP工作环境
  • ES6 ...操作符
  • Gradle 5.0 正式版发布
  • js
  • python大佬养成计划----difflib模块
  • Travix是如何部署应用程序到Kubernetes上的
  • 测试如何在敏捷团队中工作?
  • 对超线程几个不同角度的解释
  • 分类模型——Logistics Regression
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 面试总结JavaScript篇
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 排序算法之--选择排序
  • 手机app有了短信验证码还有没必要有图片验证码?
  • # C++之functional库用法整理
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (黑马C++)L06 重载与继承
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (区间dp) (经典例题) 石子合并
  • (转载)Linux网络编程入门
  • **PHP分步表单提交思路(分页表单提交)
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET Framework、.NET Core 、 .NET 5、.NET 6和.NET 7 和.NET8 简介及区别
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .NET学习全景图
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • @JsonFormat与@DateTimeFormat注解的使用
  • [ IO.File ] FileSystemWatcher
  • [ Socket学习 ] 第一章:网络基础知识
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [AIGC] HashMap的扩容与缩容:动态调整容量以提高性能
  • [Android] Implementation vs API dependency