嵌入式开发(s5pv210)——u-boot的不同来源和目录结构

代二毛 代二毛     2023-01-12     515

关键词:

1、u-boot的不同来源和联系

uboot的来源大致有三个途径:uboot官网下载、Soc厂商提供、开发板厂商提供。假设某个厂商推出新的Soc,Soc厂商的工程师会去uboot的官网下载uboot,然后把此款Soc的开发板的uboot移植上去并开源,让买这款Soc的公司去参考移植上去的uboot,然后开发自己的产品。Soc产商推出的开发板,一般来说功能都比较全配置也很高,一般厂商拿Soc开发产品需要用到的外设上面都有了,开发产品公司的系统开发工程师在uboot的基础上根据自己的开发板修改一下就可以使用,然后开发板的厂商也会推出针对自己开发板的uboot。一般来说,移植uboot时先去找最接近你手里这块开发板的uboot,然后在此基础上移植,这样可以减少工作量。

2、u-boot的目录结构

2.1、文件夹分析

(1)api:硬件无关的功能函数的API。uboot移植时基本不用管,这些函数是uboot本身使用的。
(2)api_examples. API相关的测试事例代码。
(3)board。board是板的意思,板就是开发板。board文件夹下每一个文件都代表一个开发板,这个文件夹下面放的文件就是用来描述这一个开发板的信息的。标准的uboot支持的开发板特别多,该目录下大致是按照Soc产商进行分类的,同一款Soc的开发板放在一个目录下。如果在对应厂商的目录下没有找到该开发板,可以尝试直接在board目录下查找,因为按Soc厂商分类是后来才采用的,为了向前兼容,之前直接放在board目录下的开发板文件夹是没有动的。
(4)common。common是普遍的普通的,这个文件夹下放的是一些与具体硬件无关的普遍适用的一些代码。譬如控制台实现、crc校验的。但是更多的主要是两类:一类是cmd开头的,是
用来实现uboot的命令系统的;另一类是env开头的,是用来实现环境变量的。
(5)cpu。这个目录是SoC相关的,里面存放的代码都是SoC相关初始化和控制代码(譬如CPU的、中断的、串口等SoC内部外设的,包括起始代码start.S也在这里)。里面很多子文件夹,
每一个子文件夹就是一个SoC系列。
注意:这个问价是严格和硬件相关的,因此移植时也是要注意的。但是因为这个文件夹内都是SoC有关的,我们自己的开发板和三星的开发板虽然板子设计不同但是SoC都是同一个,
因此实际移植时这个目录几乎不用动。
(6)disk。磁盘有关的,没研究过,没用过。
(7)doc。文档目录,里面存放了很多uboot相关文档,这些文档可以帮助我们理解uboot代码。但是因为是纯英文的,而且很杂乱,所以几乎没用。
(8)drivers。顾名思义,驱动。这里面放的就是从linux源代码中扣出来的原封不动的linux设备驱动,主要是开发板上必须用到的一些驱动,如网卡驱动、Inand/SD卡、NandFlash等的驱动。要知道:uboot中的驱动其实就是linux中的驱动,uboot在一定程度上移植了linux的驱动给自己用。但是linux是操作系统而uboot只是个裸机程序,因此这种移植会有不同,uboot中的驱动其实是linux中的驱动的一部分。
(9)examples。示例代码。
(10)fs。filesystem,文件系统。这个也是从linux源代码中移植过来的,用来管理Flash等资源。
(11)include。头文件目录。uboot和linux kernel在管理头文件时都采用了同一个思路,就是把所有的头文件全部集中存放在include目录下,而不是头文件跟着自己对应的c文件。
所以在uboot中头文件包含时路径结构要在这里去找。
(12)lib_开头文件夹。(典型的lib_arm和lib_generic)架构相关的库文件。譬如lib_arm里面就是arm架构使用的一些库文件。lib_generic里是所有架构通用的库文件。这类文件夹中的内容移植时基本不用管。
(13)libfdt。设备树有关的。linux内核在3.4左右的版本的时候更改了启动传参的机制,改用设备树来进行启动传参,进行硬件信息的描述了。
(14)nand_spl。nand相关的。
(15)net。网络相关的代码,譬如uboot中的tftp nfs ping命令 都是在这里实现的。
(16)onenand开头的,是onenand相关的代码,是三星加的,标准uboot中应该是没有的。
(17)post。没关注过,不知道干嘛的。
(18)sd_fusing。这里面代码实现了烧录uboot镜像到SD卡的代码。后面要仔细研究的。
(19)tools。里面是一些工具类的代码。譬如mkimage。

2.2、文件分析

(1).gitignore。git工具的文件,git是一个版本管理工具(类似的还有个svn),这个文件和git有关,和uboot本身无关的,不用去管。
(2)arm_config.mk。后缀是.mk,是一个Makefile文件,将来在某个Makefile中会去调用它。
(3)三个Changelog文件,修改记录文件,该文件记录了这个uboot项目的版本变迁以及每个版本较上个版本修改的记录。正式的项目都有这些记录的。可以直接忽略,主要是给维护uboot的人用的。
(4)config.mk。和arm_config.mk差不多性质。
(5)COPYING。版权声明,uboot本身是GPL许可证的。
(6)CREDITS。鸣谢,里面记录了对uboot有贡献的人,感谢目录。
(7)image_split。一个脚本,看说明是用来分割uboot.bin到BL1的,暂时用不到,先不管。
(8)MAINTAINERS。维护者,就是当前在参与维护uboot源码的社区工作者。
(9)MAKEALL。一个脚本,应该是帮助编译uboot的。
(10)Makefile。这个很重要,是uboot源代码的主Makefile,将来整个uboot被编译时就是用这个Makefile管理编译的,所以我们在下个课程中研究uboot配置编译过程时就要分析这个Makefile。
(11)mk。快速编译的脚本,其实就是把配置编译的命令写成一个脚本,可以一键完成配置编译。
(12)mkconfig。这个很重要,是uboot配置阶段的主要配置脚本。uboot的可移植性很大程度就是靠这个配置脚本在维护的。
(13)mkmovi。一个脚本,和iNand/SD卡启动有关
(14)README。所有的软件都有README,一般拿到一个东西要先读README,这个东西其实就是个简单的使用说明书。
(15)rules.mk。这个文件是我们uboot的Makefile使用的规则,本身非常重要,但是我们不去分析他,不去看他。

嵌入式开发(s5pv210)——u-boot的头文件包含问题(代码片段)

前言uboot和kernel的头文件包含比一般的程序更复杂,将头文件的路径用链接来表示,这样的用意是为了程序的可移植性。uboot是高度可移植的,不同的配置和编译指令可以编译出不同Soc和开发板的程序,其中源码是... 查看详情

嵌入式开发(s5pv210)——u-boot的链接脚本分析(代码片段)

1、脚本内容OUTPUT_FORMAT("elf32-littlearm","elf32-littlearm","elf32-littlearm")/*OUTPUT_FORMAT("elf32-arm","elf32-arm","elf32-arm")*/OUTPUT_ARCH(arm)ENTRY(_s 查看详情

嵌入式开发(s5pv210)——u-boot的顶层mkconfig文件分析(代码片段)

mkconfig文件的调用#第一步:SRCTREE是源码的路径,也就是顶层的目录MKCONFIG :=$(SRCTREE)/mkconfigexportMKCONFIG#第二步:配置#$(@:_config=):作用是将x210_sd_config的_config去掉,得到x210_sdx210_sd_c 查看详情

嵌入式开发(s5pv210)——u-boot启动过程中三次设置栈(代码片段)

1、多次设置栈的原因无论是汇编代码还是C语言代码,当涉及函数嵌套调用时都需要用栈来保存函数返回地址,所以必须设置栈。多次设置栈的原因是,uboot不同的启动阶段可用的内存空间是不同的。最开始只有IRAM可... 查看详情

嵌入式开发(s5pv210)——u-boot中如何确定启动方式(代码片段)

1、嵌入式设备确认启动方式设备确认启动方式分为硬件方式和软件方式,硬件方式是通过芯片某几个引脚的高低电平来决定启动方式;软件方式就是通过代码设置来决定启动方式。(1)硬件方式:比如S5PV210芯片,... 查看详情

嵌入式开发(s5pv210)——u-boot的顶层config.mk分析(代码片段)

1、config.mk的作用config.mk的作用是配置uboot编译的,比如配置交叉编译工具链,链接地址,编译选项,指定头文件路径等,但是config.mk的配置是建立在顶层mkconfig、主Makefile等配置之上的。2、config.mk的调用#loadothe... 查看详情

嵌入式开发(s5pv210)——u-boot中开启mmu(代码片段)

1、MMU介绍在uboot阶段并不是必须要开启MMU(内存管理单元),在没开启MMU前使用的是物理地址,开启MMU后使用的是虚拟地址。MMU就是在物理内存和应用程序之间添加了一个层次,专门用来管理内存,这样写应用程序... 查看详情

第一章之s5pv210启动顺序

我所使用的开发板是:友善之臂smart210,cpu为s5pv210.u-boot版本是:u-boot-2012-101,首先在u-boot中配置相对应的开发板的配置文件#makes5p_goni_config2,设事先编译好的交叉编译器放在Makefile中添加上去,打开Makefile在67行补充CROSS_COMPILE?=arm-linux-... 查看详情

嵌入式开发(s5pv210)——lcd显示器

LCD介绍1.LCD(LiquidCrystalDisplay)俗称液晶,这种材料的一大特点就是在电信号的驱动下液晶分子进行旋转,旋转会影响透光性,不同的透光性会透过不同的颜色的光,于是我们便看到显示屏上五颜六色的画面。2.LCD是... 查看详情

嵌入式开发综述

0、嵌入式系统开发流程:   1、S5PV210内部结构图2、S5PV210系统启动三阶段正解     根据S5PV210芯片手册第6章所述S5PV210consistsof64KBROMand96KBSRAMasinternalmemory(意思210芯片有两块片上内存,ROM:64KB,SRAM:96KB),并... 查看详情

嵌入式开发(s5pv210)——adc和触摸屏

1、ADC介绍ADC(analogdigitalconverter)就是AD转换,把模拟量转换为数字量。CPU本身是数字的、离散的,而外部世界却是模拟的、连续的,所以外界的信息是不能直接被计算机进行处理,需要先将模拟量转换为数字量... 查看详情

s5pv210移植minigui3.0.12

...包,在MiniGui官网可以下载http://www.minigui.org/zhcn/【已放在嵌入式软件组资料共享文件夹】---------------- 查看详情

嵌入式s5pv210的启动流程

S5PV210的启动流程S5PV210上电后执行iROM中的固化代码,即BL0(Bootloader0)。这个代码是厂家出厂前烧写好的,不提供源代码,但提供相应的功能说明,比如进行一些时钟初始化、设备控制器初始化和启动相关... 查看详情

在s5pv210的开发板上使用串口收发信息

 参考学习教程:周立功嵌入式Linux开发教程-(上册) 材料:首先准备一个安装好Linux的开发板  使用 xshell工具连接开发板 ,winscp工具连接开发板 , 准备一个Ubuntu 32位,装上交叉编译链。。使用下... 查看详情

在s5pv210的开发板上点亮一个led灯

 参考学习教程:周立功嵌入式Linux开发教程-(上册) 材料:首先准备一个安装好Linux的开发板  使用 xshell工具连接开发板 ,winscp工具连接开发板 , 准备一个Ubuntu 32位,装上交叉编译链。。使用下... 查看详情

tiny210(s5pv210)移植u-boot(基于2014.4版本号)——移植u-boot.bin(打印串口控制台)

...信息打印。在上节。我们看到调用relocate_code重定位。在u-boot的帮助文档doc/README.arm-relocation中对重定位有说明。u-boot为了生成位置无关码,在链接时指定了-pie选项,这个选项在u-boot-2014.04/arch/arm/config.mk中指定: 查看详情

s5pv210开发板连接虚拟机的网络设置(代码片段)

1、前言用PC机进行嵌入式设备开发,会在pc机上安装虚拟机来运行linux系统,其中就涉及到开发板和虚拟机的通信问题。本文介绍的就是如何正确的设置网络,开发板通过有线网络与虚拟机通信。如果不知道如何设置... 查看详情

嵌入式专题:s5pv210-mpeg4编码

我想说不台的平台,如tiny210和x210。它们的头文件是有稍微区别的。我这个是x210下的代码。但都须要注意的是NV12T与NV12的问题,默认要求输入的图片是NV12T,经过调整之后,能够同意用NV12。即便如此。NV12格式的图片也不好拿... 查看详情