`
mintelong
  • 浏览: 392218 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android内核的简单分析

阅读更多
Android内核的简单分析
mintelong (vkafei@hotmail.com)

   Google的Android操作系统已经成功面市,因为Android操作系统是基于Linux-2.6.25内核的,并且目前所有的源代码也都全部开放,因此可以简单地加以分析以方便以后向其他平台的移植工作.

   首先需要了解的就是Android的一些基本情况,并下载Android的源代码以方便分析.

   Android的官方站点:

   http://www.android.com/

   Android Source 的官方安装方法:

   http://source.android.com/download



   Android的中文站点:

   http://www.androidin.com/


   源代码包的相应联结地址:
 
   http://www.androidin.com/bbs/viewthread.php?tid=2337



   我们可以采用Android官方站点推荐方式来下载Android的源代码,也可以从Android中文站点直接下载源代码程序包,随后再更新和同步.
 
   当采用Android官方推荐方式下载或者需要更新你的源代码时,都需要git工具支持, 当你的系统没有安装git或者git版本过低时,建议从下面的地址更新到最新的git包.(Android要求git版本必须大于1.5.4)

   http://git.or.cz/

   给git自动升级的方式:

   git clone git://git.kernel.org/pub/scm/git/git.git

    
   如果采用下载源代码包的方式,下载并展开后,在 .repo/repo 目录下有同步执行的文件repo, 你可以将其拷贝到你的PATH所在路径以备使用,例如/usr/bin等等. 或者也可以从Android站点得到最新的repo文件并复制到PATH所在路径.

   wget http://android.git.kernel.org/repo

   源代码包解开后,其主目录下存在repo_sync.sh文件, 其主要是执行repo sync以实现和Android站点同步代码包的目的, 当执行出错后将再一次运行repo sync命令直到同步正常结束,但原文件包含错误,建议改成下面的程序:(原文件中少了一个空格)

#!/bin/bash
echo "============start repo sync================="
repo sync
while [ $? = 1 ]; do
echo "============sync failed, re-sync again ====="
sleep 3
repo sync
done


   这样, 运行sh repo_sync.sh就可以自动实现本地代码包的同步和更新动作了.

   我在Fedora Core 6上经过同步之后, du -h ./mydroid, 占用空间大约是2.1G

   以下为Android官方公布的架构图:

 




   在kernel子目录下存放的就是Android的Linux Kernel了, 通过和标准的Linux 2.6.25 Kernel的对比,我们可以发现,其主要增加了以下的内容:



   1. 基于ARM架构增加Gold-Fish平台,相应增加的目录如下:

      kernel/arch/arm/mach-goldfish

      kernel/include/asm-arm/arch-goldfish





      目前Google的基于Gold-Fish的手机为G1手机,明年G2手机将面世。

      该手机采用QualComm公司的高性能处理芯片MSM7201A,该芯片以ARM 11作为Application应用处理器,以ARM926T作为BaseBand主处理器(主要承载GSM/GPRS/EDGE/3G等协议栈处理),支持JAVA硬加速(ARM本身也自带JAVA硬件处理),包含GPS Processor, 支持2D/3D图形加速(每秒可处理4百万个多边形),另外还支持最大800万像素的Sensor, 支持MPEG 4/H.263/H.264/Real Media等多种Codec。

      其中ARM926T采用的主频为274M HZ, ARM11的主频为528MHZ. (MSM7200的ARM11的主频为400M HZ)

      因为没有找到MSM7201A的详细DataSheet, 因此可以简单地参考MSM7200的规格:


      MSM7200_DataSheet.pdf


      下面为MSM7200架构图:

       




   2. 增加了yaffs2 FLASH文件系统,相应增加的目录为:

      kernel/fs/yaffs2

      实际上,Android包经过编译后生成的system.img和ramdisk.img文件就是yaffs2格式的包.
  

   3. 增加了Android的相关Driver,相应目录为:

      kernel/drivers/android 


      主要分为:

           Android IPC系统:       Binder (binder.c)

           Android 日志系统:       Logger (logger.c)

           Android 电源管理:       Power (power.c)

           Android 闹钟管理:       Alarm  (alarm.c)

           Android 内存控制台:     Ram_console (ram_console.c)

           Android 时钟控制的gpio: Timed_gpio (timed_gpio.c)


   4. 增加了switch处理, 相应的目录为:

      kernel/drivers/switch/  


   5. 增加了一种新的共享内存处理方式, 相应增加的文件为:

      kernel/mm/ashmem.c 

         
   6.  其他为Linux-2.6.25内核所做的补丁等等,例如BlueTooth, 在此不做详细分析






 
   另外GoldFish平台相关的驱动文件如下:

   1. 字符输出设备:

      kernel/drivers/char/goldfish_tty.c   

   2. 图象显示设备: (Frame Buffer)

      kernel/drivers/video/goldfishfb.c

   3. 键盘输入设备:

      kernel/drivers/input/keyboard/goldfish_events.c

   4. RTC设备: (Real Time Clock)

      kernel/drivers/rtc/rtc-goldfish.c

   5. USB Device设备:

      kernel/drivers/usb/gadget/android_adb.c

   6. SD卡设备:

      kernel/drivers/mmc/host/goldfish.c
    
   7. FLASH设备:

      kernel/drivers/mtd/devices/goldfish_nand.c

      kernel/drivers/mtd/devices/goldfish_nand_reg.h

   8. LED设备:

      kernel/drivers/leds/ledtrig-sleep.c

   9. 电源设备:

      kernel/drivers/power/goldfish_battery.c

   10. 音频设备:

       kernel/arch/arm/mach-goldfish/audio.c

   11. 电源管理:

       kernel/arch/arm/mach-goldfish/pm.c

   12. 时钟管理:

       kernel/arch/arm/mach-goldfish/timer.c



   下面的链接为Android Kernel和标准Linux-2.6.25包相比较所产生的PATCH包, 其中比较小的other patch包是除了上面列出的增加文件之外所修改的文件细节,供大家参考。

   http://blogimg.chinaunix.net/blog/upfile2/090102095410.gz


   以下为Android内核启动信息:

Uncompressing Linux.................................................................................... done, booting the kernel.
emulator: emulator window was out of view and was recentred

Linux version 2.6.25-00350-g40fff9a (android-build@apa27.mtv.corp.google.com) (gcc version 4.2.1) #1 Wed Jul 23 18:10:44 PDT 2008
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00003137
Machine: Goldfish
Memory policy: ECC disabled, Data cache writeback
CPU0: D VIVT write-through cache
CPU0: I cache: 4096 bytes, associativity 4, 32 byte lines, 32 sets
CPU0: D cache: 65536 bytes, associativity 4, 32 byte lines, 512 sets
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 24384
Kernel command line: qemu=1 console=ttyS0 android.checkjni=1 android.qemud=ttyS1 android.ndns=2
Unknown boot option `android.checkjni=1': ignoring
Unknown boot option `android.qemud=ttyS1': ignoring
Unknown boot option `android.ndns=2': ignoring
PID hash table entries: 512 (order: 9, 2048 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 96MB = 96MB total
Memory: 94268KB available (2380K code, 445K data, 100K init)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
net_namespace: 152 bytes
android_power_init
android_power_init done
NET: Registered protocol family 16
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 4096 (order: 3, 32768 bytes)
TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
TCP reno registered
checking if image is initramfs... it is
Freeing initrd memory: 136K
goldfish_new_pdev goldfish_interrupt_controller at ff000000 irq -1
goldfish_new_pdev goldfish_device_bus at ff001000 irq 1
goldfish_new_pdev goldfish_timer at ff003000 irq 3
goldfish_new_pdev goldfish_rtc at ff010000 irq 10
goldfish_new_pdev goldfish_tty at ff002000 irq 4
goldfish_new_pdev goldfish_tty at ff011000 irq 11
goldfish_new_pdev smc91x at ff012000 irq 12
goldfish_new_pdev goldfish_fb at ff013000 irq 13
goldfish_new_pdev goldfish_audio at ff004000 irq 14
goldfish_new_pdev goldfish_memlog at ff006000 irq -1
goldfish_new_pdev goldfish-battery at ff014000 irq 15
goldfish_new_pdev goldfish_events at ff015000 irq 16
goldfish_new_pdev goldfish_nand at ff016000 irq -1
goldfish_new_pdev goldfish-switch at ff017000 irq 17
goldfish_new_pdev goldfish-switch at ff018000 irq 18
goldfish_pdev_worker registered goldfish-switch
goldfish_pdev_worker registered goldfish-switch
goldfish_pdev_worker registered goldfish_nand
goldfish_pdev_worker registered goldfish_events
goldfish_pdev_worker registered goldfish-battery
goldfish_pdev_worker registered goldfish_memlog
goldfish_audio_probe
goldfish_pdev_worker registered goldfish_audio
goldfish_pdev_worker registered goldfish_fb
goldfish_pdev_worker registered smc91x
goldfish_pdev_worker registered goldfish_tty
goldfish_pdev_worker registered goldfish_tty
goldfish_pdev_worker registered goldfish_rtc
goldfish_pdev_worker registered goldfish_timer
goldfish_pdev_worker registered goldfish_device_bus
goldfish_pdev_worker registered goldfish_interrupt_controller
ashmem: initialized
Installing knfsd (copyright (C) 1996 okir@monad.swb.de).
yaffs Jul 23 2008 18:10:35 Installing.
io scheduler noop registered
io scheduler anticipatory registered (default)
io scheduler deadline registered
io scheduler cfq registered
allocating frame buffer 320 * 480, got ffc10000
Console: switching to colour frame buffer device 40x30
console [ttyS0] enabled
brd: module loaded
loop: module loaded
nbd: registered device at major 43
smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre <nico@cam.org>
No IRQF_TRIGGER set_type function for IRQ 12 (goldfish)
eth0: SMC91C11xFD (rev 1) at c6800000 IRQ 12 [nowait]
eth0: Ethernet addr: 52:54:00:12:34:56
goldfish nand dev0: size 4000000, page 2048, extra 64, erase 131072
goldfish nand dev1: size 4000000, page 2048, extra 64, erase 131072
goldfish nand dev2: size 4000000, page 2048, extra 64, erase 131072
mice: PS/2 mouse device common for all mice
*** events probe ***
events_probe() addr=0xc6804000 irq=16
events_probe() keymap=qwerty2
input: qwerty2 as /class/input/input0
goldfish_rtc goldfish_rtc: rtc core: registered goldfish_rtc as rtc0
logger: created 64K log 'log_main'
logger: created 64K log 'log_events'
logger: created 64K log 'log_radio'
IPv4 over IPv4 tunneling driver
GRE over IPv4 tunneling driver
TCP cubic registered
NET: Registered protocol family 1
NET: Registered protocol family 17
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
802.1Q VLAN Support v1.8 Ben Greear <greearb@candelatech.com>
All bugs added by David S. Miller <davem@redhat.com>
VFP support v0.3: implementor 41 architecture 1 part 10 variant 9 rev 0
goldfish_rtc goldfish_rtc: setting system clock to 2009-01-02 07:43:01 UTC (1230882181)
Freeing init memory: 100K
init: cannot open '/initlogo.rle'
yaffs: dev is 32505856 name is "mtdblock0"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.0, "mtdblock0"
yaffs: dev is 32505857 name is "mtdblock1"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.1, "mtdblock1"
yaffs: dev is 32505858 name is "mtdblock2"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.2, "mtdblock2"
sh: can't access tty; job control turned off
# init: cannot find '/system/bin/playmp3', disabling 'bootsound'
eth0: link up
warning: `rild' uses 32-bit capabilities (legacy support in use)
init: sys_prop: mis-match msg size recieved: -1 expected: 128

  从启动信息可以看出,其主CPU为ARM926EJ-S,并非ARM11 CPU, 说明下载的Emulator内核并非是针对G1手机的,估计只是实现了对ARM926EJ-S CPU的模拟。

   以上为Android内核的大致分析,希望能给有兴趣的人员以简单帮助。 
分享到:
评论

相关推荐

    Android内核的简单分析 Android 内核

    Android内核的简单分析 Android内核的简单分析 Android内核的简单分析

    Android内核的简单分析.rar

    Android内核的简单分析,很新的android资料

    Android内核的简单分析+Android+内核

    Google 的Android 操作系统已经成功面市,因为Android 操作系统是基于Linux-2.6.25 内核的,并且目前所有的源代码也都全部开放,因此可以简单地加以分析以方便以后向 其他平台的移植工作.

    一个公司上千元的Android培训资料.part2

    Android内核的简单分析 Android应用开发揭秘 Android应用软件前景分析 android中文文档 Android Application Development Hello, Android 2nd Edition Hello, Android 2nd Edition (November 2009) (ATTiCA)

    一个公司上千元的Android培训资料.part1

    Android内核的简单分析 Android应用开发揭秘 Android应用软件前景分析 android中文文档 Android Application Development Hello, Android 2nd Edition Hello, Android 2nd Edition (November 2009) (ATTiCA)

    Android操作系统移植及应用研究

     其次,介绍了Devkit8000开发板的硬件资源,采用了先将Linux内核移植到Devkit8000开发板上,然后制作Android内核补丁打到Linux内核上的方式,把Android系统移植到了Devkit8000开发板上,具体工作包括制作交叉编译工具链...

    Android 初学中阶高阶书籍_集合打包2

    Android系统概述,Android系统的开发综述,Android的Linux内核与驱动程序,Android的底层库和程序,Android的JAVA虚拟机 和JAVA环境,Android的GUI系统,Android的Audio系统,Android的Video 输入输出系统,Android的多媒体...

    Android 初学中阶高阶书籍_集合打包3

    Android系统概述,Android系统的开发综述,Android的Linux内核与驱动程序,Android的底层库和程序,Android的JAVA虚拟机 和JAVA环境,Android的GUI系统,Android的Audio系统,Android的Video 输入输出系统,Android的多媒体...

    Android核心分析.pdf

    深入剖析Android的内核机制。我的研究分析是从设计者的意图出发,从抽象的甚至从哲学的高度,从最简单的系统原型开始,从设计猜想开始,而不是一开始就从代码分析展开。首先理解Android大的运行框架,主干流程,系统...

    Android的设计与实现(卷1)

    它由资深android内核专家亲自执笔,从源代码角度,系统、深入、透彻剖析android系统框架层(framework)的设计思想和实现原理,为android应用工程师和系统工程师解决实际工作中的各种难题提供了原理性的指导。...

    新版Android开发教程.rar

    也有分析认为,谷歌并不想做一个简单的手机终端制造商或者软件平台开发商,而意在一统传统互联网和 移 动互联网。----------------------------------- Android 编程基础 4 Android Android Android Android 手机新...

    一个公司上千元的Android培训资料.part3

    Android内核的简单分析 Android应用开发揭秘 Android应用软件前景分析 android中文文档 Android Application Development Hello, Android 2nd Edition Hello, Android 2nd Edition (November 2009) (ATTiCA)

    一个公司上千元的Android培训资料.part4

    Android内核的简单分析 Android应用开发揭秘 Android应用软件前景分析 android中文文档 Android Application Development Hello, Android 2nd Edition Hello, Android 2nd Edition (November 2009) (ATTiCA)

    深入理解Android:卷I--详细书签版

     本书是在分析Android源码的基础上展开的,而源码文件所在的路径一般都很长,例如,文件AndroidRuntime.cpp的真实路径就是framework/base/core/jni/AndroidRuntime.cpp。为了书 写方便起见,我们在各章节开头把该...

    ARM Cortex-A8和Android 4.x联动报警系统

    第二部分内容,先简单讲解Android系统移植相关原理,然后一步步手把手教大家如何进行Linux内核移植、Android源码编译、以及Android到Cortex A8开发板的移植;第三部分内容,先教大家如何搭建裸机开发环境,然后带领...

    信息安全_4Linux内核的花花世界.pptx

    尤其是android内核提权的发展也影响到了Linux内核的提权技术发展,本议题对最新Linux内核提权技术的一些回顾总结,分析以及Linux内核提权在嵌入式设备如MIPS架构上的应用的简单介绍。 Agenda 背景介绍 强网杯实例...

    Android 资料, 大约十来篇,网上收集

    Android Emulator User Guide_v1...Android内核的简单分析.pdf Android数据存取之Preferences.pdf Android系统架构.pdf Android应用框架原理与程序设计.pdf Binder机制的各个部分.pdf Windows上建立AndRoid开发环境.pdf

    Android 4游戏编程入门经典

     4.1.7 10个简单步骤建立android游戏项目  4.1.8 市场过滤器  4.1.9 定义游戏图标  4.2 android api基础  4.2.1 创建测试项目  4.2.2 活动的生命周期  4.2.3 处理输入设备  4.2.4 文件处理  4.2.5 音频编程...

    Android传感器MotionSensor开发实验.pdf

    4.Android 系统平台架构分析 系统平台架构分析 Android 平台由Linux内核、中间件、应⽤程序平台和应⽤软件组成,其系统架构如下图所⽰: 从图中我们可以看到整个安卓系统由Linux核⼼层、库、安卓运⾏时、应⽤程序...

Global site tag (gtag.js) - Google Analytics