Android培训班(104)start_kernel函数1

经历了跟体系结构密切相关的汇编代码之后,就可以进入C语言编写的结构无关的代码了。这个入口的函数是start_kernel函数,它主要更进一步地初始化系统相关的内容,以便系统进入一种服务状态,提供一种虚拟机的服务,提供各种API调用的服务。在start_kernel函数里,需要非常注意的是里面初始化函数的顺序,这些初始化函数不能随便调换初始化顺序,否则就会导致系统运行出错。由于这个函数的内容非常多,...
阅读(2899) 评论(4)

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

从前面可知由CPU的初始化函数里把MMU相关寄存器的值保存到r0寄存器,这样就传送给函数__enable_mmu,以便设置到MMU的寄存器里。函数__enable_mmu的代码如下:__enable_mmu: #ifdefCONFIG_ALIGNMENT_TRAP orr r0, r0, #CR_A #else bic r0, r0, #CR_A #endif #ifdefCONFIG_CPU...
阅读(1967) 评论(0)

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

从前面的入口函数可知,内核进入时并没有知道自己到底运行在什么样的CPU里,因此就没有办法知道自己到底调用那个函数来初始化,或者用什么来做正确的工作。为了解决这个问题,就会调用__lookup_processor_type函数来查找CPU的类型。在这个函数里主要是通过预先填写CPUID的信息,跟目前获取到CPUID进行比较,如果能从预先定义的数组里找到一样的CPUID,说明就找到合适的初始化函数了。...
阅读(1964) 评论(0)

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

从上面已经看到movpc,r4语句,就知道把解压后内核的执行地址r4给了pc程序计数器,意味着解压的内核已经把运行控制权交给解压后的内核代码进行运行了。这时内核已经在正确的物理地址上运行,但是它还是未长大的孩子,还有很多东西都没有准备好,比如内存管理、中断管理等等。同时内核还需要再次映射合适的虚拟地址,以便打开MMU访问内核所有的代码和数据。从这里开始正式进入内核运行起点,是从文件kernel/a...
阅读(1812) 评论(0)

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

有了文件的格式,就可以按图索骥,也就是根据文件的格式来分析压缩数据了。但文件格式只是一种存储的格式,还需要算法才可以把数据解压出来,下面就来理解gzip的压缩算法。gzip使用deflate的压缩算法来进行压缩数据,这是一种无损的压缩算法,主要组合LZ77和Huffman的压缩算法。LZ77算法是基于这样的思路:当一串字符中,如果后面的字符串已经在前面出现,那么后面的字符串只需要使用前面的位置和长...
阅读(1887) 评论(0)

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

在函数decompress_kernel里看到调用gunzip函数来解压内核代码,你也许比较好奇,这个gunzip函数里究竟是怎么样把内核代码解压出来的呢?为了深入地理解解压的代码,就得学习gzip文件格式,压缩的原理,才会理解其中的奥秘。现在就先看看gzip的文件格式,如下:2bytes GZIP标志字节:0x1f,0x8b (\037 \213) 1byte 压缩方法:(0..7 re...
阅读(1764) 评论(0)

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

从前面那段代码,就可以看到调用decompress_kernel函数来把内核压缩的代码解压出来,那么你也许问传给解压函数decompress_kernel的四个参数是什么呢?由于ARM里编译时就决定这四个参数是使用四个寄存器来传送,分别为r0,r1,r2,r3等四个寄存器。因此,只需要搞清楚这四个寄存器是什么样的内容,就知道传送给函数什么值了。从代码上看到r0的值与r2、r5的值一样,都是指向栈后...
阅读(1878) 评论(0)

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

经过上面打开MMU代码之后,就进入了另一个主要环节,就是把压缩的内核代码解压出来,变换回原来可执行代码的模样,这样才可以让CPU理解并执行相应的指令。由于加载压缩的内核就占用了一定的内存空间,如果这个压缩的内核比较大,而物理内存比较小,那么解压后的内核就会把未解压部份的内核数据覆盖,否则就可以采用更简单的方法来解压了,直接写入相应的位置就行了。下面这段代码里,r4是解压内核的开始地址,r5是未解压...
阅读(2104) 评论(0)
    个人资料
    • 访问:5574798次
    • 积分:72912
    • 等级:
    • 排名:第25名
    • 原创:1584篇
    • 转载:61篇
    • 译文:11篇
    • 评论:2082条
    文章存档
    最新评论