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 inte易做图ce to userland uses the POSIX clock and timers inte易做图ce.
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 inte易做图ce.
2)、Move debugging information from products to debugfs.
3)、Create dedicated workqueue for binder deffered work.
4)、Fix memory corruption via page aliasing.
3.10. Android电源管理(PM)
电源管理是实现低功耗的一种方式,是从应用程序到内核框架,再到设备驱动和硬件设备都要系统考虑的一个系统工程。
源码位置:kernel/power/
Linux 3.0版本在linux2.6.32版本基础上的改动更新:
1)、Fix operator precedence bug.
2)、call __get_wall_to_monotonic() instead of using wall_to_monotonic.
3)、use get_xtime_and_monotonic_and_sleep_offset in get_expired_time.
4)、Free memory bitmaps if opening /dev/snapshot fails.
5)、Merge commit ‘v3.0-rc5’.
该部分源码augustatek有在linux2.6.32版本的基础上改动更新:
1)、Add sleep in suspend().
2)、Add arm power down support.
3)、remove the sleep to solve “wakeup too long”.
3.11. USB Gadget驱动
源码位置:drivers/usb/gadget/android.c
drivers/usb/gadget/f_adb.c
drivers/usb/gadget/f_accessory.c (new file)
drivers/usb/gadget/f_mtp.c (new file)
drivers/usb/gadget/f_mass_storage.c
Linux 3.0版本在linux2.6.32版本基础上的改动更新:
1)、Add userspace notifications for USB state changes.
2)、Remove unused function android_usb_set_connected().
3)、Add usb_composite_force_reset utility to force enumeration.
4)、Fix section mismatch warning.
5)、Disable MTP when RNDIS function is enabled.
6)、Remove WAKEUP flag from bmAttributes.
7)、Fixed Android gadget function discovery & product matching.
8)、android Fix gadget descriptor compliance for IAD's.
9)、Support switching vendor ID when configuration changes.
10)、Fix problem switching vendor IDs.
11)、New gadget driver for android USB accesories.
12)、Misc improvements and cleanup:
- Add URI string.
- Replace type string with a description string.
- Add a control call to retrieve accessory protocol version (currently 1).
- Driver read() and write() calls now fail after USB disconnect until driver file is closed and reopened.
- Misc cleanup work
13)、Clear accessory strings when USB is disconnected.
14)、Clear previous strings on ACCESSORY_GET_PROTOCOL.
15)、Clear disconnected flag when driver file is opened.
16)、Add string for accessory's unique serial number.
17)、Set bNumEndpoints to correct value of 2.
18)、Update android gadget driver.
* Functions and the device descriptor are configured from user space:
echo 0 > /sys/class/android_usb/android0/enable
echo adb,acm > /sys/class/android_usb/android0/functions
echo 2 > /sys/class/android_usb/android0/f_acm/instances
echo 1 > /sys/class/android_usb/android0/enable
* Driver does not require p
补充:移动开发 , Android ,