一. uboot源码获取

  1.1. 从板级厂家获取开发板BSP级uboot(就是由开发板厂家提供的)

  1.2. 从SOC厂家获取相同SOC的BSP级uboot

  1.3. 从uboot官方下载

  1.4. 什么是bsp

    a.  BSP就是board support package(板级支持包,一般由开发板供应商提供),里面的内容就是这个开发板的所有相关的源代码、文档、教程等。

二. uboot初体验

  1.1. 配置

    1.1.1. 将uboot 放到ubuntu下解压获取源码

      a. tar -jxvf qt_x210v3s_160307.tar.bz2

      b. 解压后文件,其中uboot目录下放着uboot源码

buildroot  mk                         tools                  uboot    xboot
kernel qt_x210v3s_160307.tar.bz2 tslib_x210_qtopia.tgz version

    1.1.2. make x210_sd_config

      a. x210_sd_config是uboot目录下Makefile文件下的目标,用于指导后续的编译

root@ubuntu:~/repeat/uboot-jiuding/uboot# ls
api config.mk fs Makefile post
api_examples COPYING image_split mk README
arm_config.mk cpu include mkconfig rules.mk
board CREDITS lib_arm mkmovi sd_fusing
CHANGELOG disk libfdt nand_spl tools
CHANGELOG-before-U-Boot-1.1. doc lib_generic net
Changelog_Samsung drivers MAINTAINERS onenand_bl1
common examples MAKEALL onenand_ipl
root@ubuntu:~/repeat/uboot-jiuding/uboot# make x210_sd_config
Configuring for x210_sd board...
root@ubuntu:~/repeat/uboot-jiuding/uboot#

  1.2. 编译

    1.2.1. 编译前要确认两点

      a. 检查当前编译环境中有没有安装合适的arm-linux-gcc。我们装的是arm-2009q3

      b. 检查当前目录下(uboot根目录)的Makefile中交叉编译链工具目录设置是否正确

    1.2.2. 直接make编译,得到u-boot.bin

root@ubuntu:~/repeat/uboot-jiuding/uboot# ls
api CREDITS MAINTAINERS README
api_examples disk MAKEALL rules.mk
arm_config.mk doc Makefile sd_fusing
board drivers mk System.map
CHANGELOG examples mkconfig tools
CHANGELOG-before-U-Boot-1.1. fs mkmovi u-boot
Changelog_Samsung image_split nand_spl u-boot.bin
common include net u-boot.dis
config.mk lib_arm onenand_bl1 u-boot.map
COPYING libfdt onenand_ipl u-boot.srec
cpu lib_generic post
root@ubuntu:~/repeat/uboot-jiuding/uboot# du -h u-boot.bin
384K u-boot.bin
root@ubuntu:~/repeat/uboot-jiuding/uboot#

三. uboot 源码目录分析

  3.1. 板厂和SOC三星提供的区别

    a. 此uboot是板级厂家提供的,相比于三星SOC提供的uboot有些不必要的文件以及北删除

  3.2. uboot 目录下文件分析

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

  3.3. uboot 目录下文件夹分析

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

    3.3.2. api_examples. API相关的测试事例代码。
    3.3.3. board。board是板的意思,板就是开发板。board文件夹下每一个文件都代表一个开发板,这个文件夹下面放的文件就是用来描述这一个开发板的信息的。board目录下有多少个文件夹,就表示当前这个uboot已经被移植到多少个开发板上了(当前的uboot支持多少个开发板)。但开发板越来越多,board目录下文件夹越来越多不方便管控。于是乎uboot就新增了一种机制,可以在board目录下不直接放开发板目录,而是在board下放厂家目录(vendor目录,以具体芯片厂商名字命名),然后将这个IC厂商的所有芯片开发板都丢到这个vendor目录下面去。所以大家会发现我们X210对应的开发板目录在board/samsung/x210。多了这层目录会影响配置阶段,在uboot的配置阶段要注意配置时的路径深度和实际存放要对应,不然配置后编译时找不到文件编译就会失败。注意一个细节就是历史原因造成的兼容性麻烦。最开始时board目录下就是开发板名字,后来才改成厂商名字的。但是因为要向前兼容,同一个厂商原来还是外面的开发板并没有挪移到厂商目录下面去。这样就造成后来的人不知道原委的感到很奇怪,感觉很混乱。

    3.3.4. common。common是普遍的普通的,这个文件夹下放的是一些与具体硬件无关的普遍适用的一些代码。譬如控制台实现、crc校验的。但是更多的主要是两类:一类是cmd开头的,是用来实现uboot的命令系统的;另一类是env开头的,是用来实现环境变量的。
    3.3.5. cpu。这个目录是SoC相关的,里面存放的代码都是SoC相关初始化和控制代码(譬如CPU的、中断的、串口等SoC内部外设的,包括起始代码start.S也在这里)。里面很多子文件夹,每一个子文件夹就是一个SoC系列。
注意:这个文件夹是严格和硬件相关的,因此移植时也是要注意的。但是因为这个文件夹内都是SoC有关的,我们自己的开发板和三星的开发板虽然板子设计不同但是SoC都是同一个,因此实际移植时这个目录几乎不用动。
    3.3.6. disk。磁盘有关的,没研究过,没用过。
    3.3.7. doc。文档目录,里面存放了很多uboot相关文档,这些文档可以帮助我们理解uboot代码。但是因为是纯英文的,而且很杂乱,所以几乎没用。
    3.3.8. drivers。顾名思义,驱动。这里面放的就是从linux源代码中扣出来的原封不动的linux设备驱动,主要是开发板上必须用到的一些驱动,如网卡驱动、Inand/SD卡、NandFlash等的驱动。要知道:uboot中的驱动其实就是linux中的驱动,uboot在一定程度上移植了linux的驱动给自己用。但是linux是操作系统而uboot只是个裸机程序,因此这种移植会有不同,让我说:uboot中的驱动其实是linux中的驱动的一部分。
    3.3.9. examples。示例代码,没用过。
    3.3.10. fs。filesystem,文件系统。这个也是从linux源代码中移植过来的,用来管理Flash等资源。
    3.3.11. include。头文件目录。uboot和linux kernel在管理头文件时都采用了同一个思路,就是把所有的头文件全部集中存放在include目录下,而不是头文件跟着自己对应的c文件。所以在uboot中头文件包含时路径结构要在这里去找。
    3.3.12. lib_开头的一坨。(典型的lib_arm和lib_generic)架构相关的库文件。譬如lib_arm里面就是arm架构使用的一些库文件。lib_generic里是所有架构通用的库文件。这类文件夹中的内容移植时基本不用管。
    3.3.13. libfdt。设备树有关的。linux内核在3.4左右的版本的时候更改了启动传参的机制,改用设备树来进行启动传参,进行硬件信息的描述了。
    3.3.14. nand_spl。nand相关的,不讲。
    3.3.15. net。网络相关的代码,譬如uboot中的tftp nfs ping命令 都是在这里实现的。
    3.3.16. onenand开头的,是onenand相关的代码,是三星加的,标准uboot中应该是没有的。
    3.3.17. post。没关注过,不知道干嘛的。
    3.3.18. sd_fusing。这里面代码实现了烧录uboot镜像到SD卡的代码。后面要仔细研究的。
    3.3.19. tools。里面是一些工具类的代码。譬如mkimage。

    

参考《朱老师.零距离初体验uboot.txt》

BSP中uboot初体验的更多相关文章

  1. uboot初体验-----趣谈nand设备发起的浅显理解

    1 选择Uboot版本号 2 移植uboot至console正常work 3 制造uImage和使用uboot指南 4 写NFC驱动器 5 uboot从nand启动引导系统 1 选择Uboot版本号 ...

  2. DubboSPI机制二之Dubbo中SPI初体验

    Dubbo高级之一SPI机制之JDK中的SPI - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中阐述了JDK标准的SPI,并对其应用做了相应的实践.在实际应用中,很多框架都会对其进行扩展 ...

  3. Consul在.Net Core中初体验

    Consul在.Net Core中初体验 简介 在阅读本文前我想您应该对微服务架构有一个基本的或者模糊的了解 Consul是一个服务管理软件,它其实有很多组件,包括服务发现配置共享键值对存储等 本文主 ...

  4. [Ajax] AJAX初体验之-在博客中添加无刷新搜索

    现在博客很流行,相信应该上网时间稍微长点的朋友都会在这或者在那的有一个自己的博客.对于一些有一定能力的朋友,可能更喜欢自己去下载一个博客程序来架设一个自己的博客,而不是使用一些博客网站提供的服务.而大 ...

  5. JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中

    JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中 一.JMS的理解JMS(Java Message Service)是jcp组织02-03年定义了jsr914规范(http://j ...

  6. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  7. Windows Embedded Compact 7初体验

    Windows Embedded Compact 7初体验 Windows Embedded Compact 7已经出来半年多了,一直没时间搞.最近它又出了Refresh的版本,电脑也换了个1T的硬盘 ...

  8. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  9. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

随机推荐

  1. Git的使用及安装

    1安装. 步骤一 如果是32位就安装32位,64位就安装64,任选一款. 步骤二 步骤三 步骤四 步骤五 步骤六 步骤七 步骤八 步骤九 步骤十 步骤十一 上面的安装完成以后,下面的程序包按要求安装就 ...

  2. 配置中心Apollo多环境部署

  3. vue学习-day04(路由)

    目录: 1.组件传值-父组件向子组件传值和data与props的区别    2.组件传值-子组件通过事件调用向父组件传值          3.案例:发表评论.使用ref获取DOM元素和组件引用   ...

  4. 【java工具类】下载文件

    FileUtil.java /** * 下载文件 * @param file; * @param response */ public static void downloadFile(File fi ...

  5. linux socket设置阻塞与非阻塞

    非阻塞IO 和阻塞IO: 在网络编程中对于一个网络句柄会遇到阻塞IO 和非阻塞IO 的概念, 这里对于这两种socket 先做一下说明:       基本概念: 阻塞IO:: socket 的阻塞模式 ...

  6. 自定义springmvc参数解析器

    实现spring HandlerMethodArgumentResolver接口 通过使用@JsonArg自定义注解来解析json数据(通过fastjson的jsonPath),支持多个参数(@Req ...

  7. eclipse 简单配置

    1.安装STS4 help-->Eclipse Maketplace-->search 'STS'-->install 2.代码提示 Window-->preferences- ...

  8. java跨越请求实例

    使用Access-Control-Allow-Origin解决跨域 什么是跨域 当两个域具有相同的协议(如http), 相同的端口(如80),相同的host(如www.google.com),那么我们 ...

  9. CNN中感受野的理解

    本文摘自看完还不懂卷积神经网络“感受野”?那你来找我 作者:程序_小白链接:https://www.jianshu.com/p/9305d31962d8 一.到底什么是“感受野”(接受野Recepti ...

  10. 关闭layer.open打开的页面

    window.parent.location.reload(); //刷新父页面 var index = parent.layer.getFrameIndex(window.name); //获取窗口 ...