从自己自学嵌入式,到现在已经有两个多有了,刚开始就是重新全面的打基础,包括c语言,数据结构,操作系统原理。网上找文档,源码,技术贴,视频,以及自己买书,买开发板,只要是能找到的方法都用上。因为这样一直都是很忙,即便有时忙的毫无头绪,但收获的尽是喜悦和快乐。虽然11年的时候还写一些博客,但最后因为时间上的缘故就没能保持下来。当我自己想想应该记录下自己的学习动态,并给自己以后留下一些学习笔记,我就想起了CSDN博客了。我将今天定位自己博客正式开始书写的第一天。今天我将整理一些关于u-boot的学习笔记,大多是从一些资料整理的知识,和一些自己的理解,有的知识点我会表明出处,以感谢原作者的无私分享。
一、u-boot工程的总体结构:
1、源代码组织
对ARM而言,主要的目录如下:
board 平台依赖存放电路板相关的目录文件,没一套开发板对应一个目录。 如:smdk2410 (arm920t)
cpu 平台依赖存放cpu的相关的文件,每一款cpu对应一个目录。如:arm920t、xscale、i386等目录
lib_arm 通用存放对ARM体系结构通用的文件,主要用于实现ARM平台的通用函数,如软件浮点。
common 通用通用的多功能函数实现,如环境,命令,控制台等。
include 通用头文件和开发板配置文件,所有开发板的配置文件都在configs目录下
lib_generic
通用 通用库函数的实现
net 通用存放网络协议的程序
drivers 通用通用设备驱动程序,主要有以太网接口的驱动,nand驱动。
........
2、makefile简要分析
所有这些目录的编译连接都是由顶层的makfile来确定的。
/*这是一些在开发化境执行的一些阶段,包括config文件的修改,makefile文件的配置,和一些环境变量的书写*/
//以上内容是尚观分享出来的。
我觉得要想具体理解到u-boot,还是那一点就是看源码,这几乎是我们无论任何嵌入式学习中都必须要做的事,也是最能帮你更快速成长的有效途径。
二、u-boot源码分析
(一)u-boot启动时一次调用到的重要函数
1)、start.s
在flash中执行的引导的代码,负责初始化硬件化境,把u-boot从flash加载到RAM中去,然后跳转到lib_arm/board.c中的start_armboot中去执行。
1.1.6版本的start.s流程
1、硬件环境初始化;
进入svc模式;关闭watch dog;屏蔽所有IRQ掩码;设置时钟频率FCLK、HCKK、PCLK;
清I/D cache;
禁止MMU和CACHE;配置memory control;
2、重定位;
如果当前代码不在连接制定的地址上(一般在编译源代码是会有“armlink--ro_base=0x50200000”这句,表示连接地址为0x50200000)则需要把u-boot从当前位置拷贝到RAM制定位置中;
3、建立堆栈,堆栈是进入C语言前必须初始化的;
4、清.bss区
5、跳到start_armboot函数中执行。(lib_arm/board.c)
2)lib_arm/board.c
start_armboot 是u-boot执行的第一个C语言函数,这里与平时我们认为的C语言执行一般第一个函数为
main函数没有冲突,因为只要是在启动文件中指定函数它就可以是你所指定的函数像这里的start_armboot。而不一定必须是main函数。
start_armboot的主要实现功能
1. 全局数据结构的初始化;
2. 调用通用初始化函数 ;
3. 初始化具体设备;
4. 初始化环境变量;
5. 进入主循环;
三、源代码分析
在这一部分由于代码比较多,就不再描述了,可以去百度文库搜索一下u-boot源码分析,这类文档也比较全,希望我们都能强烈的爱上看源码,因为写的好的源码就不仅是一门艺术,更是一种哲学。我个人就超喜欢看Linux 内核的源码。
明天博文:cramfs文件系统的学习。
分享到:
相关推荐
u-boot.bin_tekkaman_2009.11.bz2 参考网站:Tekkaman Ninja ...已经针对mini2440 编译好的U-boot-2009.11 的bin文件在Tekkaman Ninja 的博客中有,可以直接烧入, 链接:u-boot.bin_tekkaman_2009.11.tar.bz2
springboot获取根目录及资源路径及解决jar发布时的出现D:/export-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/static,采用该工具类可在发布成jar时访问到资源文件路径地址
2017/3/9 14:33 0、压缩包的处理: rootroot@cm-System-Product-Name:/home/wwt/a64$ tar zxvf BPI-A64-Android_SourceCode.tar.gz 增加3个编译链 Notice: Please download this file to the correct path ...
U-BOOT源码分析及移植,分析uboot的原理,程序执行流程,以及下那个硬的分析2)lib_arm/board.c: start_armboot是U-Boot执行的第一个C语言函数,完成系统初始化工作,进入主循环,处理用户输入的命令。这里只简要列...
0x40 loader1 -- out/u-boot/idbloader.img 0x4000 loader2 -- out/u-boot/uboot.img 0x6000 atf -- out/u-boot/trust.img 0x8000 boot -- out/u-boot/trust.img 0x40000 rootfs -- out/u-boot/trust.img
u-boot-1.1.6.tar.bz & u-boot-1.1.6_jz2440.patch
U-Boot不仅仅支持嵌入式Linux系统的引导,它还支持NetBS D, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android嵌入式操作系统。其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, ...
嵌入式全套视频-8-课程(内核开发基础)(U-Boot移植)(嵌入式Linux系统构建).rar 嵌入式全套视频-8-课程(内核开发基础)(U-Boot移植)(嵌入式Linux系统构建).rar
本项目示例基于spring boot 最新版本(2.1.9)实现,Spring Boot、Spring Cloud 学习示例,将持续更新…… 在基于Spring Boot、Spring Cloud 分布微服务开发过程中,根据实际项目环境,需要选择、集成符合项目...
s3c-u-boot-1.1.6_rel-4-3-2_20080917.tar.bz2 S3C6410X的U-BOOT源代码 20080917
包括: 1、解锁U-boot的固件openwr-ar71xx-generic-tl-wr741nd-v1-squashfs-factory.bin,功能简单,只为方便刷入不死U-boot 2、适用wr741nd-v1的不死U-boot及其升级版breed 3、刷入工具
u-boot-ar9331-wr720nv3_wr710n.bin TL-WR720n-art.bin 所有不死U-Boot-2015-04-27最后的版 u-boot-tp9343.bin u-boot-qca9558-wr2041nv2.bin u-boot-qca9558-ar8327n.bin u-boot-qca9558-ar8236.bin u-boot-...
u-boot-2010.06 官方下载地址:(地址貌似失效 2021/0527) ftp://ftp.denx.de/pub/u-boot/ /* 无需资源分 */
文件当中详细说明了,u-boot的移植过程
该文件是u-boot分析第一阶段和第二阶段流程图:lowlevel_init和start_armboot,具体分析的文章如下: lowlevel_init:https://blog.csdn.net/zi_yang_/article/details/89182278 start_armboot:...
u-boot 分析 - [嵌入式Linux系统开发技术详解-基于ARM]
u-boot-1.1.6 学习笔记 1、 u-boot-1.1.6 目录结构 . |-- board -->平台依赖,存放电路板相关源文件的目录,例如:dave、smdk2410 等 |-- cpu -->平台依赖,存放与具体CPU 型号相关源文件的目录,例如:arm...
u-boot-1_1_6_start_S代码笔记
做嵌入式开发的,bootloader一般用u-boot 。不会用?? 那就看看这篇文章吧!~强烈推荐做嵌入式开发的看看!~
◆ board:和一些已有开发板有关的文件,比如Makefile和u-boot.lds等都和具体开发板的硬件和地址分配有关。 ◆ common:与体系结构无关的文件,实现各种命令的C文件。 ◆ cpu:CPU相关文件,其中的子目录都是以U-...