Android kernel启动
来源:互联网 发布:apache 泛解析配置 编辑:程序博客网 时间:2024/06/04 22:40
简单学习下,kernel启动;
boot.img包括boot header /kernel /ramdisk /second stage (其中前3项是必须的,最后一项是可选的)mkbootimg.c
ramdisk.img在kernel启动过程中充当着第一阶段的文件系统,是一个CPIO格式打成的包。通俗上来讲他就是我们将生成的root目录,用CPIO方式进行了打包,然后在kernel启动过程中会被mount作为文件系统,当kernel启动完成以后会执行init,然后将system.img再mount进来作为Android的文件系统
过程:
1.bootloader会从boot.img的分区中将kernel和ramdisk分别读入RAM上面定义的地址中,然后就会跳到ZTEXTADDR开始执行
(ZTEXTADDR boot.img运行时候zImage的起始地址,即kernel解压代码的地址)
2.bootloader将IMG载入RAM以后,并跳到zImage的地址开始解压
(ZRELADDR,就是解压后的kernel应该放在哪。这个参数一般都是arch/arm/mach-xxx下面的Makefile.boot来提供)
解压的source就是/arch/arm/boot/compressed/head.S
因为没有将kernel解压在要求的地址,所以必须重定向,说穿了就是要将解压的kernel拷贝到正确的地址,因为正确的地址与zImage的地址是重合的,而要拷贝我们又要执行zImage的重定位代码,所以这里首先将重定位代码reloc_start拷贝到vmlinx上面,然后再将vmlinx拷贝到正确的地址并覆盖掉zImage。
vmlinx拷贝到正确的地址了,拷贝到正确的位置以后,就将kernel的首地址赋给PC,然后就跳转到真正kernel启动的过程
另外现在解压的代码head.S和misc.c一般都会以PIC的方式来编译,这样载入RAM在任何地方都可以运行,这里涉及到两次冲定位的过程
3.kernel启动以前的汇编之后我们来看看正式的c语言启动代码,也就是我们的start_kernel函数
setup_arch(&command_line);
/* 这是一个重量级的函数了,会比较仔细地分析一下,主要完成了4个方面的工作,一个就是取得MACHINE和PROCESSOR的信息然或将他们赋值给kernel相应的全局变量,然后呢是对boot_command_line和tags接行解析,再然后呢就是memory、cach的初始化,最后是为kernel的后续运行请求资源。 */
setup_arch和前面的head.S,head-common.S,proc-v6.S,board-msm7x27.c是紧密联系在一起的http://linfengdu.blog.163.com/blog/static/11771073201110351053219/?suggestedreading&wumii
http://linfengdu.blog.163.com/blog/static/11771073201110345847553/
- Android kernel启动
- android kernel启动部分代码
- 【转】Android kernel启动流程
- Android启动流程 -- linux kernel
- android 在kernel中获取启动kernel命令行的参数
- Linux kernel起来后Android启动过程
- Android arm linux kernel启动流程
- Android 启动性能优化 - kernel篇
- Android arm linux kernel启动流程
- Android 启动性能优化 - kernel篇
- Android arm linux kernel启动流程
- android kernel 启动的init加打印
- Android 启动性能优化 - kernel篇
- Android 启动性能优化 - kernel篇
- Android系统从kernel启动过程
- Android 启动性能优化 - kernel篇
- Android arm linux kernel启动流程(一)
- Android arm linux kernel启动流程(二)
- 关于QTP中Active Screen无法显示
- 搭建V8代码的阅读兼开发环境
- textarea写入的文本存入数据库后格式出错
- 四极管:快速烧写
- ASIHTTPRequest使用指南---<<翻译稿>>
- Android kernel启动
- 4个经典案例:国外社交媒体是这样病毒性营销的
- SQLite 入门教程(二)创建、修改、删除表
- Android中Camera的调用流程
- 在Nhibernate中执行Oracle语句查询自动增长列数据
- 用ADO操作ORACLE的BLOB字段
- Unity3D中JavaScript与C#对比
- SQLite 入门教程(三)好多约束 Constraints
- GestureDetector.OnGestureListener 详解