关于uboot的简介——uboot的目录结构

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

不同版本的uboot,或者同一版本不同人员移植的uboot,目录结构和文件内容都会有所不同,也就是说,可以根据需要去添加、删除或者更改目录结构。在以三星的uboot为原材料进行移植时,九鼎删除了很多不必要的文件夹与文件。我们以九鼎移植后的uboot进行说明。

一、文件分析

重要文件有mkconfig和Makefile,一个负责uboot的配置,一个负责编译。

(1)Makefile。此文件是uboot源代码的主Makefile,用此文件来管理uboot的编译。

(2)mkconfig。此文件是uboot配置阶段的主要配置脚本,uboot的可移植性很大程度依靠这个配置脚本。

(3).gitignore。git是一个版本管理工具(类似的还有svn),这个文件和git有关,和uboot本身无关的。

(4)arm_config.mk。后缀是.mk,是一个Makefile文件,将来在某个Makefile中会去调用它。

(5)三个Changelog文件。修改记录文件,记录uboot项目的版本变迁,以及每个版本较上个版本修改的记录。正式的项目都有这些记录的。主要是给维护uboot的人用的。

(6)config.mk。和arm_config.mk性质差不多。

(7)COPYING。版权声明,uboot本身是GPL许可证的。

(8)CREDITS。鸣谢,里面记录了对uboot有贡献的人,感谢目录。

(9)image_split。一个脚本,将uboot.bin分割到BL1。

(10)MAINTAINERS。维护者,即当前在参与维护uboot源码的社区工作者。

(11)MAKEALL。一个脚本,帮助编译uboot的。

(12)mk。快速编译的脚本,其实就是先清理然后配置然后编译而已。

#!/bin/sh
make distclean
make x210_sd_config
make -j4

(13)mkmovi。一个脚本,和iNand/SD卡启动有关。

(14)README。所有的软件都有README,其实就是个简单的使用说明书。

(15)rules.mk。这个文件是uboot的Makefile的使用规则。本身非常重要,但是不用分析。


二、目录分析

重要的目录有board、common、cpu、drivers、include、lib_arm、lib_generic、sd_fusing等。

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

(2)api_examples。 API相关的测试事例代码。

(3)board。board文件夹下每一个文件都代表一个开发板,这个文件夹下面放的文件就是用来描述这一个开发板的信息的。board目录下有多少个文件夹,就表示当前的uboot支持多少个开发板。

(4)common。这个文件夹存放一些与具体硬件无关的、普遍适用的一些代码。譬如控制台实现、crc校验的。但是更多的主要是两类:一类是cmd开头的,是用来实现uboot的命令系统的;另一类是env开头的,是用来实现环境变量的。

(5)cpu。这个目录是SoC相关的,存放与SoC相关初始化和控制的代码(譬如CPU的、中断的、串口等SoC内部外设的,包括起始代码start.S)。里面很多子文件夹,每一个子文件夹就是一个SoC系列。这个文件和硬件严格相关,移植时也是要注意的。

(6)disk。与磁盘有关。

(7)doc。文档目录,里面存放了很多uboot相关文档,这些文档可以帮助理解uboot代码。

(8)drivers。存放的是从linux源代码中拷贝过来的linux设备驱动,主要是开发板上必须用到的一些驱动,如网卡驱动、Inand/SD卡、NandFlash等的驱动。uboot中的驱动其实就是linux中的驱动,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。

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

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

相关文章

为何不精通C? 03 深入剖析声明

对于复杂的C函数声明,或者被typedef别名后的声明,很多人往往一头雾水。本文主要解析下C语言中声明过程所遵循的原则。 声明 引用《C专家编程》的第三章内容,说明下声明的优先级规则: 声明从它的名字开始读,然后按照优先…

Photoshop绘制植物大战僵尸中的食人花

本人意见:我打算使用本文中的食人花形象作为我的一次讲课中的主要参考。我想说明的是,通过FLASH和PS都能够轻松地绘制出如本文所描述的食人花卡通效果。独立游戏开发者如果安排好时间,完全可以通过1-2个月掌握FLASH和PS绘制(想精通…

ios手机 php无法上传文件,【已解决】uni.uploadFile 苹果ios图片上传不成功

安卓正常上传,苹果里我到相册里选了一张20k的图片,服务器都得不到数据,服务器端是PHP,$_FILES居然是空的,下面是简单的代码openPic(){var that this;uni.chooseImage({count: 1,sourceType: [album, camera],sizeType…

uboot源码——uboot启动内核过程总结

总结的思维导图,其下载地址:Uboot启动.mmap_免费高速下载|百度网盘-分享无限制 第一阶段:汇编阶段,即start.S文件的工作。 第二阶段:C代码阶段,即start_armboot函数的工作。 值得一提的是,star…

虚拟化运行[OpenStack] VMWare产品介绍

最近使用开发的过程中出现了一个小问题,顺便记录一下原因和方法--虚拟化运行 世界上最早研制虚拟化软件的厂商之一。目前是是寰球桌面到数据中心虚拟化解决方案的引导厂商。中文名“威睿”,纽约证券交易所代码:VMW。总部设在加利福尼亚州的帕…

oracle模拟重叠事务,ORACLE的事务读一致性与语句读一致性

SET TRANSACTION READ ONLY来实现事物级别的一致性。一个事物所有语句读到的数据都是一致的。我们开始试验一,模拟语句级别读一致性。第一个session使用显示打开一个游标模拟数据读,同时在游标读数据的过程中,启动另外一个session更改数据&am…

内核源码——kernel启动过程的思维导图

参考博客 内核源码——汇编阶段的head.S文件_天糊土的博客-CSDN博客___head汇编 内核源码——C语言阶段的start_kernel函数_天糊土的博客-CSDN博客_start_kernel 思维导图 kernel启动过程的思维导图下载地址:内核启动过程.mmap

能力=知识+技能+经验

知识少则眼光不够深远;技能不精则难以服众经验太少则容易应变不灵。那么如果想让老板提升你,最“靠谱”的方法就是用这几方面检验自己,寻找机会进行自我提升,全面而优质的能力自然会让HR对你另眼相看。 然而这种理想的状态并非短期…

oracle 01013 02063,Oracle11g dblink用户密码大写限制-ORA-02063: preceding line from FOR244_DBLINK...

[oracleKY22 ~]$ sqlplus admin/admin4567SQL*Plus: Release 10.2.0.1.0 - Production on D???t 6?? 12 13:52:50 2012Copyright (c) 1982, 2005, Oracle. All rights reserved.Connected to:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Product…

oracle的等保,3.Oracle 检查(部分)

这是3级等保中oracle的检查方法,剩下的检查项可通过询问的方式进行检查。1.身份鉴别a.1 查看数据库用户select username,account_status from dba_users;b.1 检查用户的profileselect username,account_status,profile from dba_users;b.2 检查密码策略select profi…

Activiti配置实例以及Spring集成配置

public class TestDB {public static void main(String[] args) {//1。 创建Activiti配置对象的实例ProcessEngineConfiguration configuration ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();//2. 设置数据库连接信息// 设置数据库地址configura…

Linux字符设备驱动剖析

以下内容整理于Linux字符设备驱动剖析,如有侵权请告知删除 。 一、应用层的程序 应用程序一般都是open打开设备文件,read、write、ioctl设备文件,最后close设备文件退出。 int main(int argc ,char *argv[]) { unsigned char val[1] 1; …

php处理form多文件上传,ajax利用FormData、FileReader实现多文件上传php获取

前台代码(注意,不需要用到form标签):a. html部分:b. js部分:c. 完整代码:function loadDoc(file,data,asynctrue){if(window.XMLHttpRequest){ // code for IE7, Firefox, Chrome, Opera, Safarixmlhttpnew XMLHttpReq…

getattr

getattr(object, name[, default]) -> value Get a named attribute from an object; getattr(x, y) is equivalent to x.y. When a default argument is given, it is returned when the attribute doesnt exist; without it, an exception is raised in that case转载于:h…

rpmbuild FILE

2、一些rpm相关信息rpm软件包系统的标准分组:/usr/share/doc/rpm-4.3.3/GROUPS各种宏定义: /usr/lib/rpm/macros已经安装的rpm包数据库: /var/lib/rpm如果要避免生成debuginfo包:这个是默认会生成的rpm包。则可以使用下面的命令&a…

Linux设备文件的创建和mdev

以下内容源于微信公众号嵌入式企鹅圈,有格式内容上的修改,如有侵权请告知删除。 本文将从代码级去理解Linux设备类和设备文件的创建过程。 一、设备类相关知识 设备类是虚拟的,并没有直接对应的物理实物,只是为了更好地管理同一类…

linux查看执行过的命令行,在Linux命令终端中查看和编辑曾执行过的命令 – LINUX笔记 – CFEI.NET...

今天我们来讲讲linux的知识,积累的这些知识就是我们以后的财富,各位加油.因为水平有限,难免有疏忽或者不准确的地方,希望大家能够直接指出来,我会及时改正。一切为了知识的分享。history 命令可以用来显示曾执行过的命令,也可以根…

烂泥:【解决】word复制windows live writer没有图片

本文由秀依林枫提供友情赞助,首发于烂泥行天下。 在使用windows live writer发表博客,博客先是在是word2013中进行编辑,编辑完毕后我会复制到windows live writer中,然后发表出去。 使用了几年都没有问题,就是最近这个…

平台设备与平台驱动的注册

以下内容源于网络资源的学习与整理,如有侵权请告知删除。 参考资料 linux中 probe函数何时调用 platform总线的probe函数调用_Linux编程_Linux公社-Linux系统门户网站 Linux设备驱动模型之platform(平台)总线详解 Linux设备驱动模型2——总线式设备驱动组织方式_天…

JDK源码 - BitSet的实现

java.util.BitSet是个很有趣的类&#xff0c;了解其内部实现对正确的使用非常重要。 对象构造&#xff1a; Java代码 private final static int ADDRESS_BITS_PER_WORD 6; private final static int BITS_PER_WORD 1 << ADDRESS_BITS_PER_WORD; private long[] wor…