uboot的启动流程:通用的uboot
ctags -R 在当前目录下生成tags的索引文件
ctrl +] 跳转
ctrl + o 后退
启动代码:arch/arm/cpu/armv7/start.o (.text*)
第一个阶段:
构建异常向量表
||
\/
b reset
设置cpu的工作模式
关闭中断
||
\/
bl cpu_init_cp15
关闭cache TLB 等于MMU相关
关闭MMU
||
\/
bl cpu_init_crit
||
\/
b lowlevel_init
判断uboot的状态,是否是被唤醒?
判断是否已经在内存中运行?
如果不是--->初始化时钟、内存
如果是 -》beq 1f
||
\/
bl uart_asm_init 初始化串口
||
\/
bl _main
初始化C语言运行环境、栈
||
\/
bl board_init_f C语言函数
初始化一些全局变量
gd->bd->bi_boot_params = (PHYS_SDRAM_1 + 0x100UL); 0x40000100 uboot传递参数的地址
遍历init_sequence数组,执行初始化函数。
for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
if ((*init_fnc_ptr)() != 0) {
hang ();
}
}
对高端内存空间的分配
||
\/
对相关寄存器的赋值,决定uboot要搬移的位置和大小。
||
\/
b relocate_code uboot的搬移
搬移代码:
copy_loop:
ldmia r0!, {r9-r10} /* copy from source address [r0] */
stmia r1!, {r9-r10} /* copy to target address [r1] */
cmp r0, r2 /* until source end address [r2] */
blo copy_loop
还要进行符号重定位。
||
\/
清空bss段
143 ldr r0, =__bss_start /* this is auto-relocated! */
ldr r1, =__bss_end__ /* this is auto-relocated! */
mov r2, #0x00000000
copy_loop:
ldmia r0!, {r9-r10} /* copy from source address [r0] */
stmia r1!, {r9-r10} /* copy to target address [r1] */
cmp r0, r2 /* until source end address [r2] */
blo copy_loop
||
\/
第二阶段:进入C语言代码
ldr pc, =board_init_r
for (;;) {
main_loop();
}
uboot任务结束。
Linux 内核:
内核、操作系统
特点:
可以移植,支持的硬件平台广泛
高可扩展性
高可靠性、稳定性
模块化设计:高内聚、低耦合
遵循GPL开源许可协议的,开放系统。
Linux内核版本:
www.kernel.org
次版本号为偶数都是稳定版。
版本选择:
1、支持对应平台
2、比较成熟。
进程管理
内存管理
文件系统
网络协议
设备管理
linux内核源码的目录结构:
平台相关:arch
平台无关:block crypto(加密算法) driver fs ipc
文档:Documentation
内核配置、编译:
配置:
1、导入默认配置
两种方法:
1)cp arch/arm/configs/xxxx_config .config
2) make xxx_defconfig
2、编译
make uImage 生成内核镜像
make modules 生成模块
make dtbs 生成设备树文件
make clean
添加自己的配置:就是操作 .config 文件
make xconfig 需要QT库
make config
make menuconfig 我们需要的,
使用:
[] 有两个选项,Y: 选择, N:不选择 使用空格切换。
< > 有三个选项,Y: 选择, N:不选择 , M: 编译成模块
/ :搜索
添加菜单:修改Kconfig
menu xxx
要添加的菜单:
config FS4412_LED ---》和Makefile关联的名字
tristate "FS4412_LED Deivce Support" 菜单的名字
depends on ARCH_EXYNOS4
help support led device on board
endmenu
tristate: 添加的菜单有三个选项,即 < >
bool : 添加的菜单有两个选项,即 []
depends on: 就是该菜单的显示需要依赖于某一个菜单。
default :设置默认状态 y, n, m
help: 帮助文档,可有可无
source : 需要引用其他菜单。
Armv8架构UBOOT arm uboot流程
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
armv8架构中文手册 armv8-a
AArch64执行状态提供了31个64位通用寄存器,它们可在任意时刻和所有异常级别被访问。 每个寄存器为64位宽且它们通常被称为寄存器X0~X30。每个AArch64 64bit通用寄存器(X0~X30)也有3
armv8架构中文手册 PSTATE ELR 寄存器 执行状态