(一) u-boot 基本介绍

▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
分享一个大神朋友的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!点击浏览教程。写得特别用心喔~
→→→→→→大神朋友简介:从事十几年人工智能研究,麻省理工博士学位,目前在百度继续进行着人工智能的研究。。。

▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目。U-Boot的作用是系统引导。

U-Boot从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是根据相应的Linux内核源程序进行简化而形成的,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。

一、uboot的最终目的

在说uboot之前,先看一下PC机是怎么启动的?
  • pc上电,bios(引导操作系统)、识别C盘、运行应用程序。
  • 同样的在嵌入系统里面,启动过程:一上电的时候,uboot(引导Linux内核)、挂接根文件系统、运行应用程序。
    这里写图片描述

小结:uboot的最终的目的->启动内核

二、怎么让嵌入式系统使用uboot

① 先来介绍一下补丁:
  • 什么是补丁?
所谓的补丁就是我们在原码包上做了什么修改,我们将这些修改单独列出来放到一个文件,然后发布的时候,把补丁文件给别人家即可。
  • 怎么打补丁?
 tar xjf u-boot-1.1.6.tar.bz2
 cd u-boot-1.1.6/
 patch -p1 < ../u-boot-1.1.6_jz2440.patch

-p1 是忽略配置文件中的第一个参数,即,u-boot-1.1.6/和u-boot-1.1.6_jz2440/

这里写图片描述

这里写图片描述

  • 补丁文件中的 ---表示原来的代码,+++表示修改后的代码;比如:
    这里写图片描述
② 打完补丁之后,要想uboot支持哪些单板,需要配置。通过make 100ask24x0_config 来配置我们此款JZ2440V3单板,然后再make编译uboot。
总结一下:
tar xjf u-boot-1.1.6.tar.bz2 //解压缩
patch -p1 < ../u-boot-1.1.6_jz2440.patch //打补丁
make 100ask24x0_config //配置
make //编译
③ 编译完成以后,会生成一个u-boot.bin的文件,如图:

这里写图片描述

然后通过dnw或者eop将这个bin文件烧写到开发板上面,烧写完成以后在串口上可以看到它的启动信息;

这里写图片描述

三、uboot命令使用

在嵌入式操作系统中,bootloader有很多种,我们这里使用的是uboot;

① 输入help或?可以查看uboot有哪些命令;
  • 如果想查看具体哪个命令的用法,可以输入“? 命令名”即可。
    这里写图片描述
  • 如何查看uboot有哪些环境变量?
使用print 命令

这里写图片描述

② 怎么设置环境变量?
使用set 命令

这里写图片描述

总结一下:
?/help + 命令 //查询命令的用法
print		 //查看当前环境变量
set 		 //修改环境变量
save		 //保存环境变量
reset        //重启uboot
boot		 //引导内核

四、uboot功能介绍

① 对于PC机来说windows操作系统存在于硬盘上面,BIOS从硬盘上读出windows操作系统,然后放到DDR(SDRAM的一种 DDR SDRAM);
② 而对于嵌入linux来说,一般从flash中读取出内核,然后放到SDRAM中去。
可以看出,uboot要具备的基本功能:能够读取flash、写入SDRAM之前要初始化SDRAM、启动内核。
在开发阶段,我们想让它增加更多的功能,比如说加入写flash的功能,因为在开发中(为了开发方便),内核也是通过uboot利用网络或USB下载把内核烧写到开发板中去的。

这里写图片描述

总结一下uboot的功能:

这里写图片描述

五、uboot的源码结构:

目录特性解释说明
board开发板相关对应不同配置的(即使CPU相同),smdk2410、sbc2410x
cpu平台相关对应不同的CPU,arm920t、arm925t、i386等;在它们的子目录下仍可以细分,比如arm920t就有at91rm9200、s3c24x0
lib_i386 类似平台相关某一架构下通用的文件
include通用的函数头文件和开发板配置文件,开发板的配置文件都放在include/configs目录下,U-boot没有make menuconfig类似的菜单来进行可视化配置,需要手动地修改配置文件中的宏定义
lib_generic通用的函数通用的库函数,比如printf等
common通用的函数通用的函数,多是对下一层驱动程序的进一步封装
disk通用的设备驱动程序硬盘接口程序
drivers通用的设备驱动程序各类具体设备的驱动程序,基本上可以通用,它们通过宏从外面引入平台/开发板相关的函数
dtt通用的设备驱动程序数字温度测量器或者传感器的驱动
fs通用的设备驱动程序文件系统
nand_spl通用的设备驱动程序U-Boot一半从ROM、NOR Flash等设备启动,现在开始支持从NAND Flash启动,但是支持的CPU种类还不多
net通用的设备驱动程序各种网络协议
post通用的设备驱动程序上电自检程序
rtc通用的设备驱动程序实时时钟的驱动
doc文档开发、使用文档
examples示例程序一些测试程序,可以使用U-Boot下载后运行
tools工具制作S-Record、U-Boot格式映象的工具,比如mkimage
U-boot中各目录间也是有层次结构的,虽然这种分法不是绝对的,但是在移植过程中可以提供一些指导意义

这里写图片描述

这些源码是怎么组织起来构成一个uboot的,最简单的方法就是分析它的makefile文件

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

种瓜大爷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值