android4.0下的linux3.0的变化
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 wo