158|0

7200

帖子

195

TA的资源

五彩晶圆(高级)

楼主
 

《Linux内核深度解析》第一章 内核引导和初始化学习 [复制链接]

首先来看下UBOOT源码结构图,如下所示,网络上下载的,还是看的比较清晰的,学习第一章,目前我还是用我之前用过的NXP 的IMX6ULL来作为例程来学习

 

 

 

Uboot是德国DDENX软件工程中心开发的引导程序

以IMX6UL为例,第一阶段对应的文件时arch/arm/cpu/armv7/start.S和arch/arm/cpu/armv7/lowlevel_init.S

u-boot启动第一阶段流程图如下所示:

 

 

从标号reset开始的代码如下:

 

第73行代码,主处理器执行函数main

其实整个启动s文件和STM32的S文件还是有些许相似的

 

Lowlevel_init.s如下图所示

 

 

在arch/arm/lib/crt0.S文件中的_main函数中会调用若干个C函数

 

 

 

 

 

board_init_f_alloc_reserve,用于设置内部IRAM

board_init_f_init_reserve,将上述函数划分的存储空间进行清零,把早期malloc区的地址写入到global_data结构体变量的malloc_base成员中去。

再调用board_init_f函数

 

board_init_f函数定义在文件common/board_f.c中

relocate_code重定向技术,可以说也算是Uboot的一个重点了,也就是将uboot自身镜像拷贝到ddr上的另外一个位置的动作。

函数最终调用run_main_loop进入主循环,并陷入死循环,不再返回。

 

 

 

 

cli_init:用于初始化hash shell的一些变量

run_preboot_environment_command:执行预定义的环境变量的命令

bootdelay_process:加载延时处理,一般用于Uboot启动后,有几秒的倒计时,用于进入命令行模式。

cli_loop:命令行模式,主要作用于Uboot的命令行交互。

 

 

 

点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/5 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表