大坡3D软件开发

因我而不同--用软件来改变世界

Android培训班(104)start_kernel函数1

经历了跟体系结构密切相关的汇编代码之后,就可以进入C语言编写的结构无关的代码了。这个入口的函数是start_kernel函数,它主要更进一步地初始化系统相关的内容,以便系统进入一种服务状态,提供一种虚拟机的服务,提供各种API调用的服务。在start_kernel函数里,需要非常注意的是里面初始化...

2012-04-28 20:29:37

阅读数:3211

评论数:4

Android培训班(103)内核入口汇编3

从前面可知由CPU的初始化函数里把MMU相关寄存器的值保存到r0寄存器,这样就传送给函数__enable_mmu,以便设置到MMU的寄存器里。函数__enable_mmu的代码如下:__enable_mmu: #ifdefCONFIG_ALIGNMENT_TRAP orr r0, r0, #CR...

2012-04-24 21:48:56

阅读数:2186

评论数:0

Android培训班(102)内核入口汇编2

从前面的入口函数可知,内核进入时并没有知道自己到底运行在什么样的CPU里,因此就没有办法知道自己到底调用那个函数来初始化,或者用什么来做正确的工作。为了解决这个问题,就会调用__lookup_processor_type函数来查找CPU的类型。在这个函数里主要是通过预先填写CPUID的信息,跟目前...

2012-04-22 10:18:48

阅读数:2245

评论数:0

Android培训班(101)内核入口汇编1

从上面已经看到movpc,r4语句,就知道把解压后内核的执行地址r4给了pc程序计数器,意味着解压的内核已经把运行控制权交给解压后的内核代码进行运行了。这时内核已经在正确的物理地址上运行,但是它还是未长大的孩子,还有很多东西都没有准备好,比如内存管理、中断管理等等。同时内核还需要再次映射合适的虚拟...

2012-04-21 21:33:10

阅读数:2050

评论数:0

Android培训班(100)内核解压过程13

有了文件的格式,就可以按图索骥,也就是根据文件的格式来分析压缩数据了。但文件格式只是一种存储的格式,还需要算法才可以把数据解压出来,下面就来理解gzip的压缩算法。gzip使用deflate的压缩算法来进行压缩数据,这是一种无损的压缩算法,主要组合LZ77和Huffman的压缩算法。LZ77算法是...

2012-04-17 21:17:21

阅读数:2163

评论数:0

Android培训班(99)内核解压过程12

在函数decompress_kernel里看到调用gunzip函数来解压内核代码,你也许比较好奇,这个gunzip函数里究竟是怎么样把内核代码解压出来的呢?为了深入地理解解压的代码,就得学习gzip文件格式,压缩的原理,才会理解其中的奥秘。现在就先看看gzip的文件格式,如下:2bytes GZ...

2012-04-14 21:38:55

阅读数:1965

评论数:0

Android培训班(98)内核解压过程11

从前面那段代码,就可以看到调用decompress_kernel函数来把内核压缩的代码解压出来,那么你也许问传给解压函数decompress_kernel的四个参数是什么呢?由于ARM里编译时就决定这四个参数是使用四个寄存器来传送,分别为r0,r1,r2,r3等四个寄存器。因此,只需要搞清楚这四个...

2012-04-13 21:49:26

阅读数:2182

评论数:0

Android培训班(97)内核解压过程10

经过上面打开MMU代码之后,就进入了另一个主要环节,就是把压缩的内核代码解压出来,变换回原来可执行代码的模样,这样才可以让CPU理解并执行相应的指令。由于加载压缩的内核就占用了一定的内存空间,如果这个压缩的内核比较大,而物理内存比较小,那么解压后的内核就会把未解压部份的内核数据覆盖,否则就可以采用...

2012-04-11 22:46:18

阅读数:2329

评论数:0

提示
确定要删除当前文章?
取消 删除