开发者社区> 科技小能手> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

uboot移植(二)uboot源码目录分析

简介:
+关注继续查看

uboot移植(一)——uboot源码目录分析

   本文分析的uboot是九鼎官方提供的,是对应s5pv210开发板x210bv3的uboot 
一:uboot的概念及移植的原理。

uboot就是在内核运行前的一段小程序,用来初始化硬件设备,建立内存空间映射图。从而将系统的软硬件带到合适的状态,主要功能就是为了启动内核,它将内核从flash中拷贝到ddr中,然后跳转到内核入口中,交由内核控制权,uboot严重依赖硬件,因此一个通用的uboot不太可能。

移植原理:uboot中有很多平行代码,各自属于各自不同的架构/CPU/开发板,当我们具体到某一款开发板的时,编译的时候通过创建符号链接的方法来选择具体的哪一个文件夹/文件进行编译,这样就可以在配置的时候通过不同的配置来使用不同的文件,就可以实现可移植性。


二:uboot中个文件介绍

1:.gitignore:git工具文件,这个文件和git工具有关和我们的uboot本身无关。

2:arm_config.mk:一个Makefile文件,后面会有某个Makefile会调用它。

3:CHANGELOG  Changelog_Samsung  CHANGELOG-before-U-Boot-1.1.5  三个Changelog文件,这几个文件用来记录uboot的版本变迁和版本的修改

4:config.mk:一个Makefile文件,等待被调用,该文件里面的TEXT_BASE指定了代码在内存中的地址

5:COPYING:版权声明

6:CREDITS:鸣谢

7:image_split:一个脚本,用于分割uboot.bin到BL1

8:MAINTAINERS:维护者

9:MAKEALL:一个脚本,是帮助编译uboot的

10:Makefile:是uboot源代码的主Makefile,将来整个uboot被编译时就是用这个
Makefile管理编译的。后面会单独分析

11:mk:快速编译的脚本,里面的内容是 make  distclean  make x210_sd_config make -j4,也就是清理->配置->编译

12:mkconfig:是uboot配置阶段的主要配置脚本,这个脚本根据传入的不同SOC/开发板的参数来创建对应的符号链接,是uboot实现可移植性的关键。后面会单独分析

13:mkmovi:一个和iNand/SD卡启动有关的脚本
14:README:读我,一个简单的说明文档(纯英文)
15:rules.mk:uboot的Makefile使用规则文件

三:uboot的源码目录分析

1:api:

硬件无关的功能函数的API。uboot移植时基本不用管,这些函数是uboot本身使用的。

2:api_examples:

API相关的测试事例代码。

3:board

本文件下的子文件与开发板相关,每一个子文件代表一个芯片厂家,芯片厂家文件夹下存放的每一个子文件夹是一种开发板,由于历史原因,board目录下尚保留有大量的开发板文件夹没有归档到芯片厂家文件夹内,保持兼容性,因此整体显得比较混乱。如samsung的smdk2400、smdk2410开发板就位于samsung文件夹外。

  S5PV210芯片对应的文件夹位于board/samsung/x210,文件夹内的lowlevel_init.S文件主要用于时钟、串口、MMU、Flash底层驱动、板级初始化,u-boot.lds文件是链接脚本文件,对于工程项目编译后期的链接阶段非常重要,决定了程序的组装


4:common

    本文件夹下存放与处理器体系结构无关的通用代码,uboot的命令解析代码/common/command.c、所有命令的上层代码cmd_*.c、uboot环境变量处理代码env_*.c、CRC校验等都位于本目录下。


5:drivers

    本目录下存放所有外围芯片的驱动,网卡、USB、串口、LCDNand Flash等。


6:disk

    本目录存放于磁盘驱动的分区处理代码

7:fs

    本目录下存放文件系统相关的代码,每一个子文件夹代表一种文件系统。


8:net

    本目录下存放于网络协议相关的代码。

9:doc

    本目录下存放uboot的说明文档。


10:include

    头文件,包括各种CPU的寄存器定义,文件系统、网络等等

         configs子目录下的文件是与目标板相关的配置头文件,后面mkconfig文件中创建的符号链接都在该目录下面。


11:lib_xxx

    lib_arm、lib_avr32lib_blackfin、lib_generic、lib_i386lib_m68klib_microblazelib_mipslib_nioslib_nios2lib_ppclib_shlib_sparc

每一个文件夹代表一种CPU体系架构。与S5PV210相关的文件夹有lib_armlib_generic,lib_generic目录存放的是各CPU体系架构通用的加密算法、压缩算法、字符处理相关代码。在每一种CPU体系架构文件夹内都存在board.c,是uboot启动第二阶段代码入口函数和相关初始化函数存放的地方。


12:libfdt

    本目录下存放的是设备数相关的代码。


13:tools

    编译S-Record或uboot映像等相关工具,如制作bootm引导的内核映像文件工具mkimage源码。


14:post

    上电自检相关代码


15:nand_spl、onenand_bl1、onenand_ipl

    Nand、onenand启动相关的代码。


16:sd_fusing

本目录下存放的是烧录相关的工具代码



本文转自 菜鸟养成记 51CTO博客,原文链接:http://blog.51cto.com/11674570/1825527

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
springboot源码分析5-springboot之命令行参数以及原理
摘要:本文我们重点分析一下Springboot框架中的命令行参数的使用以及框架内部处理的命令行参数的原理。 众所周知,springboot项目可以有两种方式启动,第一种使用jar包;第二种使用war包。
1481 0
Spring Cloud源码分析(四)Zuul:核心过滤器
通过之前发布的《Spring Cloud构建微服务架构(五)服务网关》一文,相信大家对于Spring Cloud Zuul已经有了一个基础的认识。通过前文的介绍,我们对于Zuul的第一印象通常是这样的:它包含了对请求的路由和过滤两个功能,其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础;而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础。
1053 0
uboot 环境变量
从bootm 命令讲起   1 找到linux的内核入口   Bootm命令通过读取uImage的头部0×40字节的信息,将uImage定位到正确的地址,同时找到linux的内核入口地址。   这个地方就涉及到uImage的头部0×40字节信息到底是什么的问题?uboot提供了mkimage命令去把0×40字节加在linux内核头部。
1052 0
浅析uboot移植
开发板移植前,首先要分析uboot支持的开发板,选择硬件配置最接近的开发板。选择的原则是,首先处理器相同,其次处理器架构相同,然后外围接口电路相同   以6410开发板为例 1、在顶层makefile中为开发板添加新的配置项       smdk6410_config: unconfig             @.
891 0
u-boot源码分析
本文从以下几个方面粗浅地分析u-boot并移植到FS2410板上: 1、u-boot工程的总体结构 2、u-boot的流程、主要的数据结构、内存分配。
688 0
u-boot源码分析
本文从以下几个方面粗浅地分析u-boot并移植到FS2410板上: 1、u-boot工程的总体结构 2、u-boot的流程、主要的数据结构、内存分配。
951 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载