uboot笔记(一):概括/移植等

目录

    • 前言
    • 一、下载地址
    • 二、目录介绍
    • 三、编译
    • 四、移植/适配
    • 五、启动流程

前言

本笔记以u-boot-2024.10-rc4代码、在arm64平台运行为例对uboot的介绍、编译、适配移植、运行过程的关键流程等;

一、下载地址

https://ftp.denx.de/pub/u-boot/
下载自己想要使用的版本即可

二、目录介绍

目录或文件说明备 注
apiapi接口函数的封装,可以不用
arch架构相关的目录,移植时在相应架构下添加架构下的具体芯片驱动目录mach-xxx,设备树文件也在此目录,芯片寄存器头文件也在此目录
board板级驱动移植,对具体芯片的不同配置的板卡板载硬件的驱动
boot相对旧版本如2018版本将common中的部分文件移到此目录,是关于uboot启动内核相关的处理
cmd对uboot命令的支持实现
common公共接口函数,main.c 位于此目录
configs包含板级config文件
disk对存储设备分区的管理
doc说明文档
drivers驱动的主要目录
dts对dts编译的管理,实际编译arch下的dts文件
env对环境变量读写、存储的管理
examples一些demo
fs文件系统的接口
include公共头文件目录
Kbuild顶层Kbuild
Kconfig顶层Kconfig
lib工具函数的目录如crc、md5计算等
Makefile顶层Makefile,内部包含uboot版本信息
net包括网络协议处理相关实现文件,如ping ,icmp,tcp,udp等
post大概是powerpc架构相关的处理,可以不用
scriptspc端对于编译过程的一些处理
test测试程序
toolsx86下的一些工具函数实现文件

三、编译

1、以rk3308为例,配置文件configs/evb-rk3308_defconfig, 生成配置文件.config

解压 tar xvf u-boot-2024.10-rc4.tar.bz2
cd u-boot-2024.10-rc4
make CROSS_COMPILE=aarch64-linux-gnu- arch=arm64 evb-rk3308_defconfig

2、编译

make CROSS_COMPILE=aarch64-linux-gnu- arch=arm64;
编译过程中会出现一些缺失工具等的报错,可以根据具体情况安装后编译;

四、移植/适配

移植、适配需要处理以下几方面内容,假设我们的芯片厂商为ideachip
1、arch目录处理

添加设备树文件:
arch/arm/dts/目录增加设备树文件ideachip-chipname-boardname.dts,从大到小范围命名,厂商到具体芯片到以此芯片设计的板卡;
对于可以抽象出的公共部分可以创建一个芯片名称.dtsi 文件;
uboot下的设备树命名字符串中间普遍使用中间划线-,可能是为了和内核设备树区分;
对于设备树文件的编译指定在configs/xxxx配置文件中会通过CONFIG_DEFAULT_DEVICE_TREE=ideachip-chipname-boardname 指定;

添加寄存器头文件
arch/arm/include/asm/目录下增加arch-ideachip目录,并添加需要的外设寄存器头文件;
arch//arm/include/asm/mach-types.h,增加一个匹配id的宏,作为bdinfo成员的bi_arch_number的值;

修改支持厂商目录
修改arch/arm/Kconfig文件,添加配置项,config ARCH_厂商,及其它配置;
修改arch/arm/Makefile文件, 根据厂商配置增加厂商文件夹,文件中会自动加上前缀mach-去找mach-厂商目录;

添加驱动文件和目录
arch/arm/下增加mach-ideachip目录;
在mach-ideachip目录中增加Kconfig文件,根据配置source子目录的Kconfig;
在mach-ideachip目录中增加Makefile文件,根据配置控制子目录编译;
在mach-ideachip目录中增加芯片型号名目录,如chipname;
arch/arm/mach-ideachip/chipname/目录中增加Kconfig文件,根据配置source板级目录中的具体芯片下的Kconfig;
arch/arm/mach-ideachip/chipname/目录中增加Makefile文件,管理目录下的文件编译;
arch/arm/mach-ideachip/chipname/目录中增加具体的源文件、头文件,此部分文件可以选择性的初始化芯片的时钟实现board_postclk_init函数(由board_f.c 中调用)等;
Kconfig和Makefile的内核可以参考同级目录的写法,遵循架构到厂商到具体芯片型号的思路;

2、board目录处理

增加板级目录board/厂商/具体芯片/
board/厂商/具体芯片/,目录中增加Makefile文件;
board/厂商/具体芯片/,目录中增加Kconfig文件;
board/厂商/具体芯片/,目录中增加驱动文件,这里主要是实现ddr初始化的驱动,实现dram_init函数(由board_f.c中调用);

3、configs目录处理

增加配置文件, 厂商芯片型号_板卡_defconfig,用于对各级Kconfig中的配置项进行赋值或者屏蔽;

4、include/configs目录处理

增加配置文件xxx.h,主要定义环境变量等;

5、drivers目录处理

对于设备树中添加的设备节点,此部分驱动要进行对应开发和适配;

五、启动流程

1、启动分为带spl和不带spl启动两种情况

uboot源码编译时,可以增加配置去编译spl或者不编译spl;

不带spl时由bootrom直接将uboot加载到sram中,uboot在sram中运行做ddr、其它硬件初始化等操作,代码重定向到ddr中,加载内核,启动内核等操作;
适用于芯片内部sram容量较大能放下uboot运行的情况;

带spl时由bootrom直接将spl加载到sram中运行,spl主要对ddr做初始化,随后加载uboot到ddr中,uboot在ddr中运行做除ddr初始化外的其它硬件初始化等操作,代码重定向,加载内核,启动内核等操作;
适用于芯片内部sram容量较小不能直接放下uboot运行的情况;

2、不带spl时启动流程示意图

3、带spl时启动流程示意图

4、启动流程差异
不同厂家的芯片在uboot启动细节上会有不同,比如有的为安全boot、对内存初始化的方式或者时机有所不同,具体情况具体分析;
整体必要的启动流程主要就是bootroom->uboot->内核->文件系统;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/55340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

并发编程三大特性(原子性、可见性、有序性)

并发编程的三大特性实际是JVM规范要求的JVM实现必须保证的三大特性 不同的硬件和不同的操作系统在内存管理上有一定的差异,JAVA为了解决这种差异,使用JMM(Java Memry Model)来屏蔽各个操作系统之间的差异,使得java可以…

关于malloc,calloc,realloc

1.引用的头文件介绍&#xff1a; 这三个函数需要调用<stdlib.h>这个头文件 2.malloc 2.1 函数简单介绍&#xff1a; 首先这个函数是用于动态开辟一个空间&#xff0c;例如数组在c99标准之前是无法arr[N]的&#xff0c;这个时候就需要使用malloc去进行处理&#xff0c…

互斥量mutex、锁、条件变量和信号量相关原语(函数)----很全

线程相关知识可以看这里: 线程控制原语(函数)的介绍-CSDN博客 进程组、会话、守护进程和线程的概念-CSDN博客 1.同步概念 所谓同步&#xff0c;即同时起步&#xff0c;协调一致。不同的对象&#xff0c;对“同步”的理解方式略有不同。如&#xff0c;设备同步&#xff0c;是…

【C语言指南】数据类型详解(上)——内置类型

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C语言指南》 期待您的关注 目录 引言 1. 整型&#xff08;Integer Types&#xff09; 2. 浮点型&#xff08;Floating-Point …

计算机毕业设计 基于Python高校岗位招聘和分析平台的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

Ruby基础语法

Ruby 是一种动态、反射和面向对象的编程语言&#xff0c;它以其简洁的语法和强大的功能而受到许多开发者的喜爱。以下是 Ruby 语言的一些基本语法&#xff1a; 1. 打印输出 puts "Hello, Ruby!" 变量赋值 x 10 name "John" 2. 数据类型 Ruby 有多种…

YOLOv8改进 ,YOLOv8改进主干网络为华为的轻量化架构GhostNetV1

摘要 摘要:将卷积神经网络(CNN)部署在嵌入式设备上是困难的,因为嵌入式设备的内存和计算资源有限。特征图的冗余是成功的 CNN 的一个重要特征,但在神经网络架构设计中很少被研究。作者提出了一种新颖的 Ghost 模块,用于通过廉价操作生成更多的特征图。基于一组内在特征图…

力扣(leetcode)每日一题 983 最低票价 |动态规划

983. 最低票价 题干 在一个火车旅行很受欢迎的国度&#xff0c;你提前一年计划了一些火车旅行。在接下来的一年里&#xff0c;你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。 火车票有 三种不同的销售方式 &#xff1a; 一张 为期一天 的通…

Android 安卓内存安全漏洞数量大幅下降的原因

谷歌决定使用内存安全的编程语言 Rust 向 Android 代码库中写入新代码&#xff0c;尽管旧代码&#xff08;用 C/C 编写&#xff09;没有被重写&#xff0c;但内存安全漏洞却大幅减少。 Android 代码库中每年发现的内存安全漏洞数量&#xff08;来源&#xff1a;谷歌&#xff09…

Spring Boot实现足球青训俱乐部管理自动化

4 系统设计 4.1 系统架构设计 B/S系统架构是本系统开发采用的结构模式&#xff0c;使用B/S模式开发程序以及程序后期维护层面需要的经济成本是很低的&#xff0c;用户能够承担得起。使用这样的模式开发&#xff0c;用户使用起来舒心愉悦&#xff0c;不会觉得别扭&#xff0c;操…

WebSocket消息防丢ACK和心跳机制对信息安全性的作用及实现方法

WebSocket消息防丢ACK和心跳机制对信息安全性的作用及实现方法 在现代即时通讯&#xff08;IM&#xff09;系统和实时通信应用中&#xff0c;WebSocket作为一种高效的双向通信协议&#xff0c;得到了广泛应用。然而&#xff0c;在实际使用中&#xff0c;如何确保消息的可靠传输…

Docker笔记-Docker磁盘空间清理

无用的容器指的是已经停止运行且处于非活跃状态的容器。无用的镜像包括没有被任何容器使用的镜像&#xff0c;或者是被标记为"<none>"的镜像&#xff0c;通常是构建过程中产生的无标签镜像。 通过执行 docker container ls -a 和 docker image ls -a 命令&…

ffmpeg录制视频功能

本文目录 1.环境配置2.ffmpeg编解码的主要逻辑&#xff1a;3. 捕获屏幕帧与写入输出文件4. 释放资源 在录制结束时&#xff0c;释放所有分配的资源。5.自定义I/O上下文6.对于ACC编码器注意事项 1.环境配置 下载并安装FFmpeg库 在Windows上 从FFmpeg官方网站下载预编译的FFmpeg…

LiveNVR监控流媒体Onvif/RTSP功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大

LiveNVR监控流媒体Onvif/RTSP功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大 1、视频广场2、录像回看3、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1、视频广场 视频广场 -》播放 &#xff0c;左键单击可以拉取矩形框&#xff0c;放大选中的范围&#xff…

使用conda-pack迁移环境

要使用 conda-pack 迁移 conda 环境&#xff0c;可以按照以下步骤进行&#xff1a; 安装 conda-pack: 首先&#xff0c;需要确保 conda-pack 已安装。如果没有安装&#xff0c;可以通过 pip 安装&#xff1a; pip install conda-pack打包环境: 选择你想要打包的 conda 环境&…

2024年9月中国干旱监测报告(FYDI-2.0指数)

目录 引言 旱情监测与分析 资料来源 引言 2024年9月&#xff0c;北方的降水逐渐增多&#xff0c;进入华西秋雨集中期&#xff0c;从青藏高原北部一直延伸到东北多地&#xff0c;常出现大范围的云带&#xff0c;西北地区的降雨强度较大。南方地区降水分布不均&#xff0c;受…

【Python报错已解决】error: subprocess-exited-with-error

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

025.Oracle_DBMS_job定时任务

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…

Windows开发工具使用技巧

在 Windows 上进行开发时&#xff0c;有许多工具和技巧可以提升开发效率和用户体验。以下是一些常用的开发工具和技巧&#xff1a; 常用开发工具 1. Visual Studio Code (VS Code) - 插件管理&#xff1a;利用扩展市场&#xff08;Extension Marketplace&#xff09;安装各种…

RabbitMQ基本原理

一、基本结构 所有中间件技术都是基于 TCP/IP 协议基础之上进行构建新的协议规范&#xff0c;RabbitMQ遵循的是AMQP协议&#xff08;Advanced Message Queuing Protocol - 高级消息队列协议&#xff09;。 生产者发送消息流程&#xff1a; 1、生产者和Broker建立TCP连接&#…