一:Bootloader启动结构:
      由于 Boot Loader 的实现依赖于 CPU 的体系结构,因此大多数 Boot Loader 都分为 stage1 和 stage2 两大部分。依赖于 CPU 体系结构的代码,比如设备初始化代码等,通常都放在 stage1 中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而 stage2 则通常用C语言来实现,这样可以实现给复杂的功能,而且代码会具有更好的可读性和可移植性。

Boot Loader 的 stage1 通常包括以下步骤(以执行的先后顺序):
1.硬件设备初始化。
2.为加载 Boot Loader 的 stage2 准备 RAM 空间。
3.拷贝 Boot Loader 的 stage2 到 RAM 空间中。
4.设置好堆栈。
5.跳转到 stage2 的 C 入口点。

Boot Loader 的 stage2 通常包括以下步骤(以执行的先后顺序):
1.初始化本阶段要使用到的硬件设备。
2.检测系统内存映射(memory map)。
3.将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中。
4.为内核设置启动参数。
5.调用内核。

二:u-boot目录结构:

u-boot目录结构主要经历过2次变化,u-boot版本第一次从u-boot-1.3.2开始发生变化,主要增加了api的内容;变化最大的是第二次,从2010.6版本开始。

u-boot-2010.03及以前版本

├── api                存放uboot提供的接口函数
├── board              根据不同开发板定制的代码,代码也不少
├── common             通用的代码,涵盖各个方面,已命令行处理为主
├── cpu                与体系结构相关的代码,uboot的重头戏
├── disk                磁盘分区相关代码
├── doc                文档,一堆README开头的文件
├── drivers            驱动,很丰富,每种类型的设备驱动占用一个子目录
├── examples           示例程序
├── fs                 文件系统,支持嵌入式开发板常见的文件系统
├── include            头文件,已通用的头文件为主
├── lib_【arch】        与体系结构相关的通用库文件
├── nand_spl           NAND存储器相关代码
├── net                网络相关代码,小型的协议栈
├── onenand_ipl
├── post               加电自检程序
└── tools              辅助程序,用于编译和检查uboot目标文件

从u-boot-2010.06版本开始把体系结构相关的内容合并,原先的cpu与lib_arch内容全部纳入arch中,并且其中增加inlcude文件夹;分离出通用库文件lib

├── api                 存放uboot提供的接口函数
├── arch               与体系结构相关的代码,uboot的重头戏
├── board             根据不同开发板定制的代码,代码也不少
├── common         通用的代码,涵盖各个方面,已命令行处理以及环境变量为主
├── disk                磁盘分区相关代码
├── doc                文档,一堆README开头的文件
├── drivers            驱动,很丰富,每种类型的设备驱动占用一个子目录
├── examples         示例程序
├── fs                   文件系统,支持嵌入式开发板常见的文件系统
├── include            头文件,已通用的头文件为主
├── lib                   通用库文件
├── nand_spl         NAND存储器相关代码
├── net                 网络相关代码,小型的协议栈
├── onenand_ipl
├── post               加电自检程序
└── tools              辅助程序,用于编译和检查uboot目标文件

三:u-boot移植工作涉及的目录情况:

从u-boot代码根目录,可以看出其已经非常庞大,功能也很丰富。移植工作最主要的是看对应的处理器和开发板代码,2010.06版本以后处理器相关的代码集中在arch、board目录。(以前版本主要在cpu和board目录)

先看一下arch目录:
arch
├── arm
├── avr32
├── blackfin
├── i386
├── m68k
├── microblaze
├── mips
├── nios2
├── powerpc
├── sh
└── sparc

arch目录内容比以前的版本干净,每个子目录代表一个处理器类型,子目录名称就是处理器的类型名称。
笔者要移植的是mips的处理器,所以参考一下arch/mips目录:

arch/mips
├── cpu
├── include
└── lib

arch/mips目录下有三个目录,其他的处理器目录下也是这个结构:
cpu子目录对应一种处理器的不同产品型号或者系列;
include子目录是处理器用到的头文件;
lib目录对应用到处理器公用的代码;

下面看看cpu下的内容,arch/mips/cpu目录下的内容:

arch/mips/cpu
├── asc_serial.c
├── asc_serial.h
├── au1x00_eth.c
├── au1x00_serial.c
├── au1x00_usb_ohci.c
├── au1x00_usb_ohci.h
├── cache.S
├── config.mk
├── cpu.c
├── incaip_clock.c
├── incaip_wdt.S
├── interrupts.c
├── Makefile
└── start.S          整个uboot代码入口点

目前最新版本(2011.6版本开始)中cpu目录中建立mips32目录,把incaip和au1x00也分类放在不同的目录中。

u-boot.lds是ld程序也就是连接器的脚本文件,这个文件描述了如何连接目标文件,ld程序会根据这个文件的指示按照需求把不同的目标文件连接在一起生成供烧写到开发板的程序。
该文件放在可能在board对应的目录中。

u-boot简单学习笔记(一)的更多相关文章

  1. LM3S之boot loader学习笔记-2

    LM3S之boot loader学习笔记-2 彭会锋 () 上一篇中介绍了bootloader的基础知识,对于bootloader的作用和如何编写bootloader也有了大概的了解了,这一篇主要讲解 ...

  2. Log4j简单学习笔记

    log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...

  3. Linux——帮助命令简单学习笔记

    Linux帮助命令简单学习笔记: 一: 命令名称:man 命令英文原意:manual 命令所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得帮助信 ...

  4. LM3S之boot loader学习笔记-1

    LM3S之boot loader学习笔记-1 彭会锋 (首先声明,此系列文章编写参考了很多资料,其中一些内容是原版内容的引用和整理,并加入了一些自己的见解,我已经尽量标明引用部分,如有未全部标注部分, ...

  5. OI数学 简单学习笔记

    基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...

  6. <<C++标准程序库>>中的STL简单学习笔记

    0. 内容为个人学习笔记, 仅供参考, 如有错漏, 欢迎指正! 1. STL中的所有组件都是由模板构成的, 所以其元素可以是任意型别的. 组件有: - 容器: 管理某类对象的集合. 不同的容器有各自的 ...

  7. Mongoose简单学习笔记

    1.1 名词解释 Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对 Entity : 由Mo ...

  8. Spring BOOT的学习笔记

    1,静态文件夹src/main/resources/static下的,图片必须放在images文件夹下才能访问,直接放在static下不能访问 2,配置热部署,否则修改下Html,图片都得重启 htt ...

  9. SpringCloud+Boot简单例子笔记

    一.spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运 ...

  10. Linux——bash应用技巧简单学习笔记

    本人是看的lamp兄弟连的视频,学习的知识做一下简单,如有错误尽情拍砖. 命令补齐 命令补齐允许用户输入文件名起始的若干个字 母后,按<Tab>键补齐文件名. 命令历史 命令历史允许用户浏 ...

随机推荐

  1. VC调试入门

    概述调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言.不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件.这里我简要的根据自己的经验列出调试中比较常用的技巧,希望对大家有用. ...

  2. 解决win7下pycharm移动文件出现Clear Read-Only status移动失败的问题

    问题描述: 将pycharm中的文件move到指定文件夹或者将其他文件拖动到pycharm指定文件夹下,会出现如下问题导致文件移动失败: 出现这个问题的原因及解决办法如下: 第一种,pycharm下建 ...

  3. Scrapy 应用之爬取《盗墓笔记》

    爬取<盗墓笔记>和爬取<宦海沉浮>原理一样,但是使用了两种不同的追踪链接的方式,<盗墓笔记>使用的是跟踪下一页链接,直至没有下一页为止,<宦海沉浮>则是 ...

  4. TOJ 2596: Music Notes

    2596: Music Notes  Time Limit(Common/Java):1000MS/10000MS     Memory Limit:65536KByteTotal Submit: 3 ...

  5. 九度oj 题目1337:寻找最长合法括号序列

    题目描述: 给你一个长度为N的,由’(‘和’)’组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的含义便是,在这个序列中,所有的左括号都有唯一的右括号匹配:所有的右括号都有唯一的 ...

  6. LA 4728 旋转卡壳算法求凸包的最大直径

    #include<iostream> #include<cstdio> #include<cmath> #include<vector> #includ ...

  7. 家用电脑架服务器提供web

    要搞一个可以对外的web服务,需要服务器,域名.这些都需要money,但有时,我们只是想自己可以在外面访问,或是提供给朋友看自己的网站有多牛.这时使用家用电脑配置一个可以提供web的服务器,就显得很必 ...

  8. 使用 ftrace 调试 Linux 内核,第 2 部分

    ftrace 操作概述 使用 ftrace 提供的跟踪器来调试或者分析内核时需要如下操作: 切换到目录 /sys/kernel/debug/tracing/ 下 查看 available_tracer ...

  9. maven自动导入包失败

    pom.xml文件依赖添加后,让maven自动导入包,老是失败,文件夹中有其他文件,就是缺少jar文件 解决: // 进入pom.xml所在的文件夹,执行下面的命令,下载jar包 mvn -f pom ...

  10. POJ 3080 多个串最长公共子序列

    求多个串最长公共子序列,字典序最小输出.枚举剪枝+kmp.比较简单,我用find直接查找16ms #include<iostream> #include<string> #in ...