(一) 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.bz2cd 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文件。
(一) u-boot 基本介绍相关推荐
- Linux中 /boot 目录介绍 【转载】
Linux中 /boot 目录介绍 转自:点击打开链接 一./boot/目录中的文件和目录 Linux系统在本地启动时,目录/boot/非常重要,其中的文件和目录有: (1)系统Kernel的配置文件 ...
- 服务监控 Spring Boot Actuator 介绍
服务监控 Spring Boot Actuator 介绍 1. 概述 在本文中,我们将介绍Spring Boot Actuator.首先介绍一些Actuator的基础知识,然后详细讨论Spring B ...
- STM32三种BOOT模式介绍
一.三种BOOT模式介绍 所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存.用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启 ...
- Spring Boot开发介绍
Spring Boot开发介绍 Spring Boot介绍 安装Spring Boot插件 创建Spring Boot项目 Idea 创建Spring Boot项目失败 解决方法1-更换为aliyun ...
- WINDOWS PE制作 - 主引导记录(Master Boot Record)介绍
WINDOWS PE制作之主引导记录(Master Boot Record)介绍 本章内容的主要部分百度百科相关条目重新编辑而来,原文网址:https://wapbaike.baidu.com/ite ...
- Spring Boot Starters介绍
文章目录 Web Start Test Starter Data JPA Starter Mail Starter 结论 对于任何一个复杂项目来说,依赖关系都是一个非常需要注意和消息的方面,虽然重要, ...
- Spring Boot 框架介绍和使用
本文参考自Spring Boot文档. Spring Boot 简介 Spring框架功能很强大,但是就算是一个很简单的项目,我们也要配置很多东西.因此就有了Spring Boot框架,它的作用很简单 ...
- Spring Boot文件目录介绍
创建Spring Boot项目后,会产生一个工程目录,该工程目录存放了工程项目的各种文件,对于Spring Boot开发人员来说,了解该工程目录非常必要. • /src/main/java:目录下放置 ...
- Spring Boot项目介绍(值得学习,超详细)
目录 1 Spring Boot介绍 2 创建Spring Boot项目 2.1 第一种方式, 使用Spring提供的初始化器, 就是向导创建SpringBoot应用 使用国内的地址 3 注解的使用 ...
- spring boot入门 -- 介绍和第一个例子
"越来越多的企业选择使用spring boot 开发系统,spring boot牛在什么地方?难不难学?心动不如行动,让我们一起开始学习吧!" 使用Spring boot ,可以轻 ...
最新文章
- 【每日一算法】相交链表
- Flex警告:framework.swc”具有默认样式并且在 library-path 中,表...
- 前端面试题(html篇)
- 「洛谷P1343」地震逃生 解题报告
- scrapy需要的xpath知识点
- fragment怎么获得上下文环境_Flask 源码剖析 (三):Flask 的上下文机制 (上)
- codeblocks快速注释多行
- CCNA配置试验之八 帧中继——点到点子接口(point-to-point)的配置
- linux学习笔记(13)终端清屏
- 单片机技术与c语言编程教学大纲,《单片机原理及应用》课程教学大纲
- java8进制转换_Java进制转换方法大全_十进制,八进制,二进制,十六进制转换...
- java ssh详解_JAVA SSH 框架介绍
- 关于《上海市城镇生育保险办法》的问答
- Python爬虫实战,requests模块,Python实现IMDB电影top数据可视化
- Vue多个元素的过渡
- 2012年的Android之旅:梦想、学习、坚持、自信、淡定
- hbase报错: ERROR: Can‘t get master address from ZooKeeper; znode data == null
- css表格随内容变化,css 使表格随着内容自动适应宽度
- java迭代法求圆周率用梯形_常用的圆周率计算公式
- Latex的安装与使用