uboot分析
来源:互联网 发布:2016网络流行名字大全 编辑:程序博客网 时间:2024/05/16 09:13
uboot
uboot的目的是启动内核
其中需要做2个动作
1 将内核从flash读出到内存
uboot启动时候依赖于两条条启动命令 boot CMD, 这两条boot命令可以在串口通过命令查看 nand read.jffs2 bootm
读内核时用 do_nand 函数来实现
嵌入式中使用如下定义了flash的分区,例如:
#define MTDPARTS_DEFAULT "mtdparts=nandflash0:256k@0(bios)," \
"128k(params)," \
"128k(toc)," \
"256k(eboot)," \
"1792k(logo)," \
"3m(kernel)," \
"-(root)"
有分区即可知道哪里存放内核,即可读相应位置
2 bootm
uboot启动的内核是uimage
uimage是一个头部+真正的内核,头部里面放置了内核的加载地址和入口偏移地址,通过分析头部信息即可进入执行内核
bootm在处理uimage时候会先去解析头部从而做成相应动作
2.1 传递启动参数
在某个地址按某种格式存放数据这种数据格式叫 struct tag
例如代码:
static struct tag *params;
static void setup_start_tag (bd_t *bd)
{
params = (struct tag *) bd->bi_boot_params;
params->hdr.tag = ATAG_CORE;
params->hdr.size = tag_size (tag_core);
params->u.core.flags = 0;
params->u.core.pagesize = 0;
params->u.core.rootdev = 0;
params = tag_next (params);
}
当这个函数执行完成之后,uboot放参数的位置就放置好了函数里面列出的各种参数,接下来还会进行一系列的参数放置
setup_memory_tags
setup_commandline_tag
setup_end_tag
2.2 跳到入口地址去执行
theKernel (0, bd->bi_arch_number, bd->bi_boot_params);
第二个参数是开发板子的型号,第三个参数是参数地址
-------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
- uboot分析
- Uboot分析
- uboot分析
- uboot分析
- uboot分析
- uboot分析
- uboot分析
- uboot分析
- Uboot分析
- UBOOT分析
- uboot 之uboot.lds分析
- uboot 之uboot.lds分析
- uboot 之uboot.lds分析
- uboot 之uboot.lds分析
- uboot 之uboot.lds分析
- uboot分析之uboot启动过程分析
- uboot分析之uboot启动内核分析
- UBOOT启动过程分析
- 是男人就下100层【第一层】——高仿微信界面(7)
- quartz在集群环境下的解决方案
- 编码器设计
- ngx_event_pipe_read_upstream分析
- 点击小游戏来练习二位数组和动态生成winform 按钮
- uboot分析
- 第一次学c语言
- NYOJ 623 A*B Problem II
- HDU1394 Minimum Inversion Number(线段树)
- 朱清时——物理学步入禅境:缘起性空-(技术工作者上升到哲学思维)
- c++基础
- Struts2中的模块包含
- linux下安装oracle后重启无法登录数据库ORA-01034:ORACLE not available的解决方案
- Stack ---- Implementation in C and Python