introduction u-boot(1)
1.bootloader综述
一个嵌入式系统从软件角度的话分为四个层次:引导加载程序,包括固化在firmware中的boot代码和bootloader中两部分,linux内核(特定于班子定制的内核级内核的启动参数),文件系统(通常使用ramdisk),用户应用程序。
2.bootloader概念
简单的说就是在操作系统运行之前的一小段代码,通过这一小段代码来初始化硬件设备,建立内存空间映射,从而将系统的软硬件环境带到一个合适的空间,以为操作系统的内核启动做好准备。
bootloader的主要作用是将内核镜像从硬盘(在嵌入式中通常是flash)读到ram中,然后跳转到内核的入口点去运行。
3.bootloader的安装媒介
系统加电或者复位之后,所有额cpu都是从某个预先安排好的地址上取指令,通常空间分配图
bootloader -> boot parameters -> kernel -> file system
bootloader的启动过程通常分为两个过程:stage1,stage2,stage1完成硬件初始化,为stage2准备内存空间,将stage2复制到内存空间,设置堆栈然后跳转到stage2执行
stage1通常包含,通常使用汇编来编写:
1.硬件设备初始化
2.为加载bootloader的stage2准备ram空间
3.拷贝bootloader的stage2到ram空间
4.跳转到stage2的c入口点
stage2:
1.初始化所需的硬件设备
2.检测系统内存映射
3.将kernel映象和根文件系统从flash上读到ram中
4.为内核设置启动参数
5.调用内核
4.u-boot下载地址
uboot官网:http://www.denx.de/wiki/U-Boot
5.u-boot目录结构简介
1.board:和一些已有开发板相关的文件
2.common:实现u-boot下支持的命令
3.cpu:与特定的cpu相关的文件
4.disk:对磁盘的支持
5.doc:文档目录
6.drivers:u-boot支持的驱动通常放在这个目录下,比如网卡,串口,flash,usb等
7.fs支持的文件系统,u-boot 1.1.4支持的有cramfs,ext2,fat,fdos,jffs2,reiserfs,七种最常用的是jffs2和cramfs
8.include:include使用的头文件,在该目录下文件夹config中存放的是cpu的配置信息,asmXXX中存放的是与cpu体系相关的头文件
9net:bootp协议,tftp协议实现等
10:tools目录下存放的是生成uboot的工具,其中主要的是mkimage,主要用来生成内核镜像的文件头,因为在u-boot的启动过程加载内核时,uboot会检查内核的镜像的文件头
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?