
U-boot
文章平均质量分 76
猪哥-嵌入式
这个作者很懒,什么都没留下…
展开
-
u-boot主要数据结构-- bd
bd 板子数据指针。板子的很多重要参数结构指针,类型定义如下: typedef struct bd_info{ int bi_baudrate; //串口波特率 unsigned long bi_ip_addr; //ip地址 unsigned char bi_enetaddr[6];原创 2017-11-28 16:01:40 · 521 阅读 · 0 评论 -
致远i.mx287开发板u-boot移值(三)start_armboot函数分析
接上述(二)分析,start.S进行关键 外围初始化后, 主要包括SDAM、调试串口、堆栈,代码搬迁后,会 跳转到start_armboot函数中,简单的总结是: (1)进行各种板级初始化。 (2)环境变量初始化。 (3)Nand Flash初始化,这里还是有点存疑的,因为采用Nand flash进行存储代码的话,CPU上电后,有一个内部RAM,不大,有的是4K,有...原创 2019-01-22 21:29:58 · 638 阅读 · 0 评论 -
致远i.mx287开发板u-boot移值(四)main_loop函数
main_loop函数是u-boot各种初始化后,进入的函数, 可以理解成u-boot使命的终点,在这个循环轮询中,第一次实现了,工程师可以与目标板进行交互的接口,工程师可以通过u-boot的命令参数实现各种交互,类似于u-boot的shell终端,当然,如果这里 不想有任何交互,是可以直接进入boot 内核kernel的,一般会有个变量bootdelay,也就是在设定的倒计时时间内,如果...原创 2019-01-22 21:58:16 · 706 阅读 · 0 评论 -
u-boot移值(八)-u-boot的配置过程
U-boot是一个很庞大的程序,这里的“庞大”有多层含义,文件个数庞大(几千个),功能庞大(不亚于一个小型操作系统)、支持种类庞大(多种CPU框架、多种设备驱动),从u-boot的结构就能看出,作者的野心很大,他想做一种引导所有操作系统的bootloader,包含n多常用的驱动,所以程序体量必然特别大,不过,程序本身很庞大,不代表我们全都需要,因为移值的CPU架构是固定的,只需要根据自己的...原创 2019-02-03 09:51:32 · 615 阅读 · 2 评论 -
u-boot移值(七)-启动到引导Kernel流程梳理
结合前六篇文章,总结下u-boot在i.mx28x上的引导流程,以下序号根据程序执行顺序排序:(0)一般程序是放到flash中的,Flash分为Nor Flash和Nand Flash两种,如果是Nor Flash,CPU上电后,Nor flash就相当于内存一样,CPU可以直接访问,并且可以直接在Nor flash上运行。而如果是Nand Flash,ARM内核里有一个4kb的 SR...原创 2019-01-29 22:36:01 · 875 阅读 · 0 评论 -
u-boot的start_armboot函数解析
start_armboot函数是u-boot执行的第一个C函数,在/lib_arm/board.c文件中,很明显,既然是第一个C函数,必然要做很多初始化的工作,自然其中肯定是要包含条件编译的,这一点还是要根据要移值的具体板子的宏定义来实现,我们根据/include/configs/mx28_evk.h),分析如下:void start_armboot (void){ init_fn...原创 2019-02-27 21:32:00 · 558 阅读 · 0 评论 -
u-boot的main_loop函数解析
main_loop()函数是start_armboot函数执行到最后的一条函数,start_armboot进行各种初始化动作后,循环执行main_loop,main_loop函数在/common/main.c中,从该文件名也能知道,该函数才是u-boot最重要的功能实现---引导内核、功能交互,main_loop可以理解为u-boot的shell,通过该函数,程序员可以与u-boot进行交...原创 2019-02-28 21:09:55 · 1894 阅读 · 0 评论 -
u-boot移值(九)-u-boot的编译、链接过程
上一篇文章《u-boot的配置》了解了u-boot的配置过程,配置完成后,我们只需要一条简单的指令:make all 就能实现对u-boot的编译,Makefile也类似于C编程,先包含一些头文件,或者引用一些标志, 我们先来分析哪些文件会先被引用:# load ARCH, BOARD, and CPU configurationinclude $(obj)incl...原创 2019-02-20 22:37:03 · 440 阅读 · 0 评论 -
u-boot 的 init_sequence解析
start_armboot (void)是u-boot开始执行的第一个C函数,该 函数自然要进行各种初始化工作,而init_sequence则是进行各种初始化的 函数数组,该函数定义在/lib_arm/board.c中,如下所示:typedef int (init_fnc_t) (void); //init_fnc_t就是个返回值为int的函数,参数为空init_fnc_t...原创 2019-02-26 22:16:11 · 1619 阅读 · 0 评论 -
u-boot移值(六)命令、添加自定义命令
u-boot包含的功能已经非常多了,不亚于一个小型操作系统,允许程序员与u-boot进行交互, 而交互的背后就是通过命令来实现的,比如u-boot最重要的功能——引导kernel,就是通过bootm命令来实现的,在致远imx287开发板上,该命令为 多次指向完成:#ifdef CONFIG_BOOTCOMMAND "bootcmd=" CONFIG_BOOTCOMMAND "\0...原创 2019-01-27 22:13:40 · 711 阅读 · 0 评论 -
u-boot移值(五)环境变量
u-boot环境 变量可以理解成全局变量,在不改变源码、不用重新编译的情况下,可以使我们通过设置这些环境变量的值来改变u-boot的一些设置,入bootdelay、baudrate等等。在u-boot2008中,通用的环境变量在env_common.c文件中,包含如下:uchar default_environment[] = {#ifdef CONFIG_BOOTARGS "b...原创 2019-01-27 21:36:53 · 790 阅读 · 0 评论 -
u-boot 主要参数解释
env_t *env_ptr = (env_t*) ( &environment[0] ); ( common/env_flash.c ) env_ptr 指向环境参数区,系统启动时,默认的环境参数environment[],定义在 common/environment.c bootdelay---定义执行自动启动的等待秒数 baudrate--定义原创 2017-11-28 16:09:49 · 896 阅读 · 0 评论 -
uboot环境变量的讲解
转自:http://blog.youkuaiyun.com/x_jjt/article/details/50733483一、环境变量的作用于全局变量是相似的,环境变量的生命周期一旦设置好环境变量并保存好,下次开机时还会存在,而全局变量在关机后会消失,只有在下次开机时才会产生一个新的全局变量。 全局变量可能大多数功能是用于进程间通信,而环境变量的作用就不仅仅是通信,而是提供各种程序运行参数,比如说常转载 2017-12-12 21:16:38 · 998 阅读 · 0 评论 -
u-boot主要数据结构之--- 全局数据变量指针 gd
u-boot的主要功能是用于引导OS,但是本身也提供了很多强大的功能,可以通过输入命令行来完成许多的操作,所以它本身也是一个很完备的系统,u-boot的大部分操作都是围绕它自身的数据结构,这些数据结构都是通用的,但是不同的板子初始化这些数据就不一样,所以u-boot的通用代码是依赖这些重要数据结构的,这里说的数据结构其实就是一些全局变量。(1)gd 全局数据变量指针,它保存了u-boot运原创 2017-11-26 22:19:20 · 741 阅读 · 0 评论 -
转:u-boot SPL的理解
uboot分为uboot-spl和uboot两个组成部分。SPL是Secondary Program Loader的简称,第二阶段程序加载器,这里所谓的第二阶段是相对于SOC中的BROM来说的,之前的文章已经有所介绍,SOC启动最先执行的是BROM中的固化程序。BROM会通过检测启动方式来加载第二阶段bootloader。uboot已经是一个bootloader了,那么为什么还多一...转载 2018-06-25 10:51:05 · 505 阅读 · 0 评论 -
u-boot1.1.6之arm920t/start.S
这是学习uboot的必经之路,看似简单,但是包含的内容却一点都不简单,下面的理解只是此时此刻,可能还是会有错。.globl _star_start: b reset ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort ldr pc, _data_abort ld...原创 2018-07-03 21:54:24 · 440 阅读 · 0 评论 -
uboot之 relocate功能代码分析
uboot的relocate功能代码是分析uboot的必经之路,非常巧妙,也非常经典,当然理解起来也有些麻烦:.globl _start_start: b reset ...... ...... ...... ...... ......_TEXT_BASE: .word TEXT_BASE.globl _armboot_start_armboot_start:...原创 2018-07-03 22:38:40 · 1418 阅读 · 0 评论 -
致远i.mx287开发板u-boot移值(一)前言
致远i.mx287开发板u-boot移值(一)前言致远i.mx287开发板u-boot移值(二)start.S分析致远i.mx287开发板u-boot移值(三)start_armboot函数分析致远i.mx287开发板u-boot移值(四)main_loop函数前言: u-boot作为一种常用的用于引导Linux的bootloader,用途是很广泛的,而且其兼容性比...原创 2019-01-21 21:37:14 · 2005 阅读 · 0 评论 -
致远i.mx287开发板u-boot移值(二)start.S分析
备注:下面的描述中n-xxx代表原生u-boot,z-xxx则代表致远的移值u-boot,例如 n-start.S代表原生态u-boot中的start.S文件,而z-start.S则代表致远的u-boot中的start.S. 程序先执行start.S(u-boot\cpu\arm926ejs) 这一点,z-start.S和n-start.S...原创 2019-01-21 21:58:19 · 818 阅读 · 0 评论 -
u-boot向Linux内核传递参数tag原理分析
U-boot最主要的功能是引导OS,目前对Linux支持的相对比较好,“引导”的意义不仅仅是拷贝内核,运行内核,还要给内核kernel传递板子的相关参数,打个比方,u-boot相当于是一名专业功底深厚的 “接待员”,他会先初始化好一些外围设备,比如说串口,SDRAM、Nand Flash、MMC等,初始化这些 外围设备也是为了最终迎接Kernel的到来,比如初始化串口,自然是为了调试打印,...原创 2019-03-03 22:54:10 · 1438 阅读 · 2 评论