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、串口、LCD、Nand Flash等。

6:disk

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

7:fs

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

8:net

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

9:doc

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

10:include

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

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

11:lib_xxx

lib_arm、lib_avr32、lib_blackfin、lib_generic、lib_i386、lib_m68k、lib_microblaze、lib_mips、lib_nios、lib_nios2、lib_ppc、lib_sh、lib_sparc

每一个文件夹代表一种CPU体系架构。与S5PV210相关的文件夹有lib_arm、lib_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

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

时间: 2024-10-13 00:20:14

uboot移植——uboot源码目录分析的相关文章

maven配置多个源码目录分析

最近项目涉及到了多源码目录的问题,因为是用的maven管理项目,虽然maven可以配置源码目录,但是不支持多目录结构.如果要实现多源码目录,需要应用相应插件. 下面多maven的源码目录的配置进行简易分析.图1为项目结构.IDE使用的是eclipse. 新增forg的源码目录和prop的配置目录.默认配置的jar包 (jar包中没有 forg目录和prop.properties文件) maven配置指定源码目录,增加资源目录 maven有一套默认的目录结构,使用maven一般需要遵循此结构来组织

嵌入式linux开发uboot移植(二)——uboot工程源码目录分析

嵌入式linux开发uboot移植(二)--uboot工程源码目录分析 本文分析的uboot为uboot_smdkv210,是三星官方发布的基于S5PV210评估开发板对应的uboot. 一.uboot源码目录结构解析 1.cpu 本文件夹下的子文件与处理器相关,每个文件夹代表一种CPU系列.每个子目录中都包括cpu.c.interrupts.c.start.S文件. cpu.c主要用于初始化CPU.设置指令Cache和数据Cache等 interrupt.c主要用于设置系统的各种中断和异常 s

uboot源码简要分析

uboot源码简要分析 一.uboot源码整体框架 源码解压以后,我们可以看到以下的文件和文件夹: cpu 与处理器相关的文件.每个子目录中都包括cpu.c和interrupt.c.start.S.u-boot.lds. cpu.c:初始化CPU.设置指令Cache和数据Cache等 interrupt.c:设置系统的各种中断和异常 start.S:是U-boot启动时执行的第一个文件,它主要做最早期的系统初始化,代码重定向和设置系统堆栈,为进入U-boot第二阶段的C程序奠定基础. u-boo

转:《Linux设备驱动程序3》源码目录结构和源码分析经典链接

转自:http://blog.csdn.net/geng823/article/details/37567557 [原创][专栏]<Linux设备驱动程序>--- LDD3源码目录结构和源码分析经典链接 [专栏]Linux设备驱动程序学习(总目录) [专栏]LDD3源码分析链接(总目录) 1. LDD3源码分析之hello.c与Makefile模板 2. LDD3源码分析之字符设备驱动程序 其他错误: 我的Linux内核为 3.2.0-65-generic-pae,在scull目录下make时

2.15.1.linux内核源码目录结构1

2.15.1.1.源码从哪里来 (1)之前讲过,我们使用2.6.35.7版本的内核.这个版本的内核有三种:第一种是kernel.org上的官方版本,第二种是三星移植过的,第三种是九鼎X210的移植版本.我们讲课时使用第三种内核来讲解,后面的移植实验使用第二种内核来移植. (2)源码在开发板光盘中有.可以自己去linux下解压然后make distclean清理然后再次打包传输到windows下去解压分析:也可以直接去我网盘中下载我打包好的. (3)解压后最终在windows下得到了一个kerne

Android——4.2.2 源码目录结构分析

最近公司要整android内部培训,分配给我写个培训文档,这里记录如下: 撰写不易,转载请注明出处:http://blog.csdn.net/jscese/article/details/40897277#t17 导读: 关于的Android目录分析,网上有很多资料,在此不做全面介绍. 本文只简单介绍Android中我常涉及的到的一些目录与文件,文中都属个人观点,仅供参考-以google官方Android4.2.2源码为例. 各个厂商平台可能会有出入. 以android源码目录为"/"

postgres源码目录结构

1.第一级目录介绍 |_postgres |_aclocal.m4------------config用的文件的一部分 |_config----------------config文件目录 |_configure-------------configure文件 |_contrib---------------contribution程序 |_COPYRIGHT----------版权信息 |_doc------------------文档目录 |_GNUmakefile.in-------mak

Swift的源码目录结构 其中proxy是前端的业务接入进程

Swift的源码目录结构.其中proxy是前端的业务接入进程.account.container和object目录分别是账户.容器 和对象的业务处理逻辑进程.common目录是一些通用工具代码.common中比较重要的有:哈希环的处理逻辑.接下来会依次介绍各个进程的源码逻辑和 一些关键点机制. 各个业务进程或模块之间的逻辑关系可以参考文中的架构图. 二.Proxy进程的业务处理 首先需要掌握基于PasteDeploy的堆栈式WSGI架构.根据PasteDeploy定义的各个层,可以很快理清配置文

Mahout源码目录说明

Mahout源码目录说明 mahout项目是由多个子项目组成的,各子项目分别位于源码的不同目录下,下面对mahout的组成进行介绍: 1.mahout-core:核心程序模块,位于/core目录下: 2.mahout-math:在核心程序中使用的一些数据通用计算模块,位于/math目录下: 3.mahout-utils:在核心程序中使用的一些通用的工具性模块,位于/utils目录下: 上述三个部分是程序的主题,存储所有mahout项目的源码. 另外,mahout提供了样例程序,分别在taste-