android 架构

    技术2024-06-21  69

    Android系统构架分析

    作者:Android手机网原创】   来源:www.android123.com    Android开发网,轻松学Android软件开发 Android论坛有问必答,经验分享、软件游戏下载

      Android是基于Linux内核的手机操作系统,它的系统构架主要分为三个层面。内核层、系统库、应用程序。我们从最下方的底层往上方高层开始分析。

      一、Linux Kernel内核层

      包含了显示驱动、摄像头驱动、蓝牙驱动、闪存驱动、IPC管道通讯驱动、USB串口驱动、键盘驱动、Wifi无线驱动、音频驱动和电源管理驱动,当然最下层是Linux系统核心驱动主要协调CPU处理和内存管理。

      二、Libraries系统库

     Surface Manger管理库、媒体播放库、SQLite数据库引擎、OpenGL ES图形引擎、FreeType引擎、Webkit浏览器引擎、SGL图形引擎、SSL安全套接字层引擎、Libc库以及Android Dalvik虚拟机运行库。

     三、应用程序框架库

      这个层面主要是系统管理类库,设计Activity Manger显示管理、Windows Manger窗口管理、Content Providers内容提供、View System显示系统基类、Notification Mnager消息通知、Package Manger程序包管理、Telphony Manger电话管理、Rescource Manger资源管理、Location Mnager定位管理和XMPP服务。最终通过这些管理类开发出实际的程序,如Home桌面、Contacts联系人、Phone拨打电话、Browser浏览器等

      最终的Android系统框架图如下:

    Android内核和驱动篇-Android内核介绍

    http://www.easyandroid.com

    http://www.easyandroid.com/bbs/viewthread.php?tid=64

    节选自EasyAndroid.com原创图书,敬请期待已经有一些的文章介绍Android内核了,本系列篇将从Linux内核的角度来分析Android的内核,希望给初学者提够有用的信息。本章将简单的介绍Android内核的全貌,起到一个抛砖引玉的作用。从下一篇开始将详细介绍每一个Android内核驱动程序及其作用。Android内核是基于Linux 2.6内核的(目前最新开发版本是2.6.31),它是一个增强内核版本,除了修改部分Bug外,它提供了用于支持Android平台的设备驱动,其核心驱动主要包括:Android Binder,基于OpenBinder框架的一个驱动,用于提供Android平台的进程间通讯(IPCinter-process communication)。    源代码位于drivers/staging/android/binder.cAndroid电源管理(PM,一个基于标准Linux电源管理系统的轻量级的Android电源管理驱动,针对嵌入式设备做了很多优化。    源代码位于kernel/power/earlysuspend.c                        kernel/power/consoleearlysuspend.c                        kernel/power/fbearlysuspend.c                        kernel/power/wakelock.c                        kernel/power/userwakelock.c低内存管理器(Low Memory Killer,相对于Linux标准OOMOut Of Memory)机制更加灵活,它可以根据需要杀死进程来释放需要的内存。    源代码位于drivers/staging/android/lowmemorykiller.c匿名共享内存(ashmem,为进程间提供大块共享内存,同时为内核提供回收和管理这个内存的机制。    源代码位于mm/ashmem.cAndroid PMEMPhysicalPMEM用于向用户空间提供连续的物理内存区域,DSP和某些设备只能工作在连续的物理内存上。    源代码位于drivers/misc/pmem.cAndroid Logger,一个轻量级的日志设备,用于抓取Android系统的各种日志。    源代码位于drivers/staging/android/logger.cAndroid Alarm,提供了一个定时器用于把设备从睡眠状态唤醒,同时它也提供了一个即使在设备睡眠时也会运行的时钟基准,    源代码位于drivers/rtc/alarm.cUSB Gadget驱动,一个基于标准Linux USB gadget驱动框架的设备驱动,AndroidUSB驱动是基于gaeget框架的,    源代码位于drivers/usb/gadget/Android Ram Console,为了提供调试功能,Android允许将调试日志信息写入一个被称为RAM Console的设备里,它是一个基于RAMBuffer    源代码位于drivers/staging/android/ram_console.cAndroid timed device,提供了对设备进行定时控制功能,目前支持vibratorLED设备。    源代码位于drivers/staging/android/timed_output.c(timed_gpio.c)Yaffs2文件系统Android采用Yaffs2作为MTD nand flash文件系统,源代码位于fs/yaffs2/目录下。Yaffs2是一个快速稳定的应用于NANDNOR Flash的跨平台的嵌入式设备文件系统,同其他Flash文件系统相比,Yaffs2使用更小的内存来保存他的运行状态,因此它占用内存小;Yaffs2的垃圾回收非常简单而且快速,因此能达到更好的性能;Yaffs2在大容量的NAND Flash上性能表现尤为明显,非常适合大容量的Flash存储。Android内核添加或修改的文件很多,下面的列表描述了Android Emulator内核的文件:

    drivers/misc/kernel_debugger.cdrivers/misc/pmem.cdrivers/misc/qemutrace/qemu_trace_sysfs.cdrivers/misc/qemutrace/qemu_trace.cdrivers/misc/qemutrace/qemu_trace.hdrivers/misc/uid_stat.cdrivers/staging/android/lowmemorykiller.cdrivers/staging/android/logger.cdrivers/staging/android/timed_output.hdrivers/staging/android/ram_console.cdrivers/staging/android/timed_gpio.cdrivers/staging/android/logger.hdrivers/staging/android/binder.hdrivers/staging/android/binder.cdrivers/staging/android/timed_output.cdrivers/staging/android/timed_gpio.hdrivers/rtc/alarm.cdrivers/rtc/rtc-goldfish.cdrivers/net/pppolac.cdrivers/net/ppp_mppe.cdrivers/net/pppopns.cdrivers/video/goldfishfb.cdrivers/switch/switch_class.cdrivers/switch/switch_gpio.cdrivers/char/dcc_tty.cdrivers/char/goldfish_tty.cdrivers/watchdog/i6300esb.cdrivers/input/misc/gpio_event.cdrivers/input/misc/gpio_input.cdrivers/input/misc/gpio_output.cdrivers/input/misc/keychord.cdrivers/input/misc/gpio_axis.cdrivers/input/misc/gpio_matrix.cdrivers/input/keyreset.cdrivers/input/keyboard/goldfish_events.cdrivers/input/touchscreen/synaptics_i2c_rmi.cdrivers/usb/gadget/android.cdrivers/usb/gadget/f_adb.hdrivers/usb/gadget/f_mass_storage.hdrivers/usb/gadget/f_adb.cdrivers/usb/gadget/f_mass_storage.cdrivers/mmc/host/goldfish.cdrivers/power/goldfish_battery.cdrivers/leds/ledtrig-sleep.cdrivers/mtd/devices/goldfish_nand_reg.hdrivers/mtd/devices/goldfish_nand.ckernel/power/earlysuspend.ckernel/power/consoleearlysuspend.ckernel/power/fbearlysuspend.ckernel/power/wakelock.ckernel/power/userwakelock.ckernel/cpuset.ckernel/cgroup_debug.ckernel/cgroup.cmm/ashmem.cinclude/linux/ashmem.hinclude/linux/switch.hinclude/linux/keychord.hinclude/linux/earlysuspend.hinclude/linux/android_aid.hinclude/linux/uid_stat.hinclude/linux/if_pppolac.hinclude/linux/usb/android.hinclude/linux/wifi_tiwlan.hinclude/linux/android_alarm.hinclude/linux/keyreset.hinclude/linux/synaptics_i2c_rmi.hinclude/linux/android_pmem.hinclude/linux/kernel_debugger.hinclude/linux/gpio_event.hinclude/linux/wakelock.hinclude/linux/if_pppopns.hnet/ipv4/sysfs_net_ipv4.cnet/ipv4/af_inet.cnet/ipv6/af_inet6.cnet/bluetooth/af_bluetooth.csecurity/commoncap.cfs/proc/base.c

    Android内核配置Android是基于Linux的,对于一个新的设备,我们首先要编译一个支持AndroidKernel,那么如何使你的Kernel Android化呢?除了要移植前面提到的驱动之外,就是如何配置你的Kernel来支持Android平台,这可以参考Goldfish的内核配置文件 - arch/arm/configs/goldfish_defconfig一般来说,我们会基于一个平台标准内核配置选项来配置Android内核,你可以根据具体的硬件平台来选择Android内核的配置选项,可以参考下面的Android内核配置列表:一般需要支持的内核选项

    ANDROID_PARANOID_NETWORKASHMEMCONFIG_FB_MODE_HELPERSCONFIG_FONT_8x16CONFIG_FONT_8x8CONFIG_YAFFS_SHORT_NAMES_IN_RAMDABEARLYSUSPENDFBFB_CFB_COPYAREAFB_CFB_FILLRECTFB_CFB_IMAGEBLITFB_DEFERRED_IOFB_TILEBLITTINGHIGH_RES_TIMERSINOTIFYINOTIFY_USERINPUT_EVDEVINPUT_GPIOINPUT_MISCLEDS_CLASSLEDS_GPIOLOCK_KERNELLkOGGERLOW_MEMORY_KILLERMISC_DEVICESNEW_LEDSNO_HZPOWER_SUPPLYPREEMPTRAMFSRTC_CLASSRTC_LIBSWITCHSWITCH_GPIOTMPFSUID_STATUID16USB_FUNCTIONUSB_FUNCTION_ADBUSER_WAKELOCKVIDEO_OUTPUT_CONTROLWAKELOCKYAFFS_AUTO_YAFFS2YAFFS_FSYAFFS_YAFFS1YAFFS_YAFFS2

    但是Android推荐不要支持下面两个功能:CONFIG_YAFFS_DISABLE_LAZY_LOADDNOTIFY配置好后,就可以用Toolchain来编译内核了。编译内核比较简单,以Emulatorkernel为例:    - git clone git://android.kernel.org/kernel/common.git kernel-emulator    - cd kernel-emulator    - export ARCH=arm    - export CROSS_COMPILE=arm-eabi-    - export PATH=<CROSS_COMPIL_TOOLCHAIN_PATH_DIR> PATH    - make goldfish_defconfig    - make

     

    最新回复(0)