经过上面打开MMU代码之后,就进入了另一个主要环节,就是把压缩的内核代码解压出来,变换回原来可执行代码的模样,这样才可以让CPU理解并执行相应的指令。由于加载压缩的内核就占用了一定的内存空间,如果这个压缩的内核比较大,而物理内存比较小,那么解压后的内核就会把未解压部份的内核数据覆盖,否则就可以采用更简单的方法来解压了,直接写入相应的位置就行了。下面这段代码里,r4是解压内核的开始地址,r5是未解压正在执行的内核文件开始位置,r2是未解压正在执行的内核文件堆栈位置偏移64K的位置。当r4大于等于r2时,就是意味着解压后的内核在目前执行文件后面,因此直接写入就可以,不用考虑覆盖的问题,跳到wont_overwrite标号执行。当r4加上解压后内核的长度小于r5时,就是意味着解压后的内核永远在当前执行内核的前面,因此也直接写入就可以,不用考虑覆盖的问题,跳到wont_overwrite标号执行。其它情况,就需要先考虑把内核解压出来,放到一个临时地方,并不能直接放到r4直接开始位置了,然后再通过解压后的一段代码把临时地方的内核进行重定位操作,才可以再执行。从一段简单的内核代码,就可以看到考虑的条件要面面俱到,否则就会很容易出错的。
/*
*Check to see if we will overwrite ourselves.
* r4 = final kernel address
* r5 = start of this image
* r2 = end of malloc space (and therefore this image)
*We basically want:
* r4 >= r2 -> OK
* r4 + image length <= r5 -> OK
*/
cmp r4,r2
bhs wont_overwrite
sub r3,sp, r5 @ > compressed kernel size
add r0,r4, r3, lsl #2 @ allow for 4x expansion
cmp r0,r5
bls wont_overwrite
mov r5,r2 @ decompress after malloc space
mov r0,r5
mov r3,r7
bl decompress_kernel
add r0,r0, #127 + 128 @ alignment + stack
bic r0,r0, #127 @ align the kernel length
分享到:
相关推荐
Linux内核解压过程
linux 内核启动过程以及挂载android 根文件系统的过程
Android Framework精编内核解析
Android内核剖析 柯元旦 Android内核剖析 柯元旦 Android内核剖析 柯元旦 Android内核剖析 柯元旦 Android内核剖析 柯元旦 Android内核剖析 柯元旦
zImage内核镜像解压过程详解 zImage内核镜像解压过程详解
Android和Linux内核版本对应关系
Android Framework精编内核解析.pdf 百度网盘永久地址
Android内核和驱动篇-Android内核介绍
Android 原生浏览器内核,包名 com.android.webview,内核版本116。 适用版本:Android API 24 及以上版本。 com.android.webview_116.0.5845.163-minAPI24.apk
Android各个版本与Linux内核的关系 获得某个内核分支的方法 获得Android某个版本的源码 查看android版本方法
《Android内核剖析》一书附带的图 附图名称如下: 附图1:Framework基本框架 附图2:Activity中创建窗口的过程 附图3:点击图标启动Activity 附图4:Activity的停止以及内存回收时机 附图5:按键消息获取流程 ...
android Framework精编内核解析
Android framework 系统编译 新版WebView浏览器内核101.0.4951.61
Android x5内核集成demo 解决webview在使用内核时跟h5混合调用时出现的白屏,加载缓慢,vue报错各种兼容问题。在x5内核加载失败时,会切换成系统本身的内核来加载h5内容。如果项目上架Google商店等海外市场运营的,...
Android内核和驱动篇-Android内核介绍.txt
android 内核剖析 柯元旦
基于腾讯X5内核 目前已有功能: 1、文件浏览(支持pdf/ppt/doc/excel/txt) 2、文件上传(JS) 3、文件下载 4、Android与JS交互 5、自定义交互(进度条、下拉回弹) 6、视频播放 1、添加依赖和配置 根目录build....
Android4.0内核源代码,自己用Get获取的Android4.0内核源代码,需要的朋友自己拿去研究。
android手机的内核操作(命令) 1、 进入android手机的内核操作界面 adb Shell 2、 查看andorid根文件系统 #ls 查看全属性 #ls –l 查看所有文件,包括隐藏文件 #ls –a 3、 查看当前运行的所有进程 #ps 4、 查看...