Linux Kernel for Android 4.0 --- 初稿 2011-11-25 1. android 4.0 system be released 2011-10-19上午10点,google发布了代号为Ice Cream Sandwich(简称ICS,冰淇淋三明治)的android4.0系统。十大特性: … 4)、 同步升级Linux内核 更新3.0以上版本 … 2. linux kernel 3.0 源码下载:ftp://ftp.kernel.org/pub/linux/kernel/v3.0/ 2.1.发布时间:2011-07-21 2.2.版本号变化:Linux2.6.39 ----》 linux3.0 无里程碑式的变化。一种说法是为了纪念Linux 20年,迈向第3个10年。 2.3.主要新特性如下: 更新日志:http://kernelnewbies.org/Linux_3.0 1)、Btrfs文件系统自动碎片整理、性能改进和检查; Btrfs(Butter FS),目标在取代Linux目前的ext3文件系统,改善ext3的限制,特别是单一文件的大小,总文件系统大小及加入文件校验和。已在Ubuntu10.10、openSUSE11.3和Fedora 16中得到了应用。 2)、支持sendmmsg()系统调用(syscall); 一个批处理sendmsg()系统调用,UDP发送性能提升20%,接口发送性能提30%. 3)、XEN dom0 支持; Xen 是一个高性能的虚拟化解决方案,可提升虚拟机性能。 4)、增加 Cleancache 支持; 封装的相关内核API,目前内核中主要在ext3、ext4、btrfs、ocsfs2等文件系统部分相关代码中有调用。 5)、Berkeley 即时包过滤器; 配合libpcap/tcpdump提升包过滤规则的运行效率。 6)、无线广域网(WLAN)唤醒支持; 7)、实现非特殊授权的 ICMP_ECHO (ping 命令); 8)、支持setns()系统调用(syscall); 更好地命名空间管理。 9)、高精度计时器Alarm-timers的支持 可以在通过 RTC 设备唤醒挂起状态的系统。The concept for Alarm-timers was inspired by the Android Alarm driver, and the interface to userland uses the POSIX clock and timers interface. 3. Linux Kernel for Android Android基于linux,但其linux内核跟标准的linux内核有所差异。 1)、android没有使用linux的X窗口系统; 2)、android没有采用glibc作为C库,另开发了一套Bionic Libc来代替glibc; 3)、增加了一些android专用的驱动程序 Android对标准linux内核及驱动的增强改进部分: 3.1. Android Alarm 用于将设备从睡眠状态唤醒,同时提供一个在设备睡眠时仍会运行的基准。 源码位置:drives/rtc/alarm.c 设备节点名:/dev/alarm 该部分code,Linux 3.0版本在linux2.6.32版本的基础上有2次改动更新: 1)、Don"t use save_time_delta. 2)、Update hrtimer if alarm at the head of the queue is reprogrammed. 3.2. Ashmem(匿名共享内存) 为进程间提供大块共享内存。相比于malloc等传统的内存分配机制,其优势是通过内核驱动提供了辅助内核的内存回收算法机制。 源码位置:kernel/mm/ashmem.c 设备节点名:/dev/ashmem Linux 3.0版本在linux2.6.32版本的基础上有5次改动更新: 1)、Implement read in ashmem driver. 2)、Fix ASHMEM_SET_PROT_MASK. 3)、Update arguments of shrinker for 2.6.35. 4)、Support lseek in ashmem driver. 5)、Fix arguments to ashmem_shrink. 3.3. Low Memory Killer(低内存管理) 根据需要杀死进程以释放需要的内存。 源码位置:drivers/staging/android/lowmemorykiller.c Linux 3.0版本在linux2.6.32版本的基础上有9次改动更新: 1)、Don"t try to kill the same pid over and over. 2)、Substantially reduce overhead during reclaim. 3)、Fix task_struct leak. 4)、Remove bitrotted codepath. 5)、Update arguments of shrinker for 2.6.35. 6)、Don"t unregister notifier from atomic context. 7)、Don"t wait more than one second for a process to die. 8)、Ignore shmem pages in page-cache. 9)、Fix arguments to lowmem_shrink. 3.4. Logger(日志设备) 为方便android应用开发过程中使用log信息来调试程序。 源码位置:drivers/staging/android/logger.c 设备节点名:/dev/log/main /dev/log/event /dev/log/radio Linux 3.0版本在linux2.6.32版本的基础上无改动更新。 3.5. Android PMEM 向用户空间提供连续的物理内存区域(DSP这类设备只能工作在连续的物理内存上)。 源码位置:drivers/misc/pmem.c 该部分源码augustatek有在linux2.6.32版本的基础上改动更新: 1)、add pmem node create/destroy entries. 2)、change dsp mem map. 3)、add 7700 support. 3.6. switch 用于检测一些开关量(耳塞插入、USB设备插入等)。 源码位置:drivers/switch/switch_class.c drivers/switch/switch_gpio.c Linux 3.0版本在linux2.6.32版本的基础上无改动更新。 3.7. Timed GPIO 将普通的GPIO驱动和内核定时器进行绑定,实现受时钟控制的GPIO. 源码位置:drivers/staging/android/timed_gpio.c drivers/staging/android/timed_output.c Linux 3.0版本在linux2.6.32版本的基础上有1次改动更新: 1)、Properly discard invalid timeout values. 3.8. Android Ram Console 为了提供调试功能,将调试日志信息写入Ram Console设备里,该设备是一个基于Ram的buffer. 源码位置:drivers/staging/android/ram_console.c Linux 3.0版本在linux2.6.32版本的基础上无改动更新。 3.9. Android Binder 是OpenBinder的Linux实现,为android系统运行提供进程间的通信机制。 Binder驱动源码位置:drivers/staging/android/binder.c 设备节点名:/dev/binder Linux 3.0版本在linux2.6.32版本基础上的改动更新: 1)、Use seq_file for debug interface. 2)、Move debugging information from products to debugfs. 3)、Create dedicated workqueue for binder deffered work. 4)、Fix memory corruption via page aliasing.