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 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 platform data anymore.
* Moved function initialization to android.c instead of each function file.
* Replaced switches by uevents.
19)、Add PTP variant of MTP USB function.
20)、dequeue request on error in adb_read.
该部分源码augustatek有在linux2.6.32版本的基础上改动更新:
1)、fix usb pm and adb suspend issues.
2)、prevent system suspend when enabling adb.
3)、add android usb adb functions.
4)、system crash if disconnect usb cable during file transfer.
5)、usb cable plug in and out sometimes can cause kernel panic.
3.12. 文件系统部分(UBIFS、Yaffs2)
UBIFS:
源码位置:fs/ubifs/
ubifs源码一直处于更新状态,每个linux内核版本对应的ubifs源码都有变化,从linux2.6.32至linux3.0共有6次merge动作。
The UBI File-System source code git tree has two branches: master and linux-next
Master:contains the most recent stuff which is often incomplete, buggy, or not tested very well.
linux-next:contains more or less stable patches goes to main-line.
该部分源码augustatek有在linux2.6.32版本的基础上改动更新:
1)、Use continuous memory and async mode to resolve “ubifs is bad for sync mode”.
Yaffs2:
源码位置:fs/yaffs2/
Linux 3.0版本在linux2.6.32版本基础上的改动更新:
1)、Don’t force YAFFS_TRACE_ALWAYS for all trace levels.
该部分源码augustatek有在linux2.6.32版本的基础上改动更新:
1)、Update yaffs2 from official site to fix un-expected android system perm issue.
3.13. MTD驱动
Linux3.0版本在linux2.6.32的基础上有针对UBIFS的相关merge动作,此外还有一些针对不同厂商nand的更新改动。
3.14. 显示驱动(Framebuffer)
android2.2至android4.0期间,android对framebuffer部分的改动更新有:
1)、Add fb_edid_add_monspecs for parsing extended edid information.
2)、Put the partial update magic value into the fix_screen struct.
3)、Add support for RGBX 8888 image format.
4)、Fix framebuffer console(Don’t allow non panning updates to bypass the wait for the panel to turn on).
5)、Set the correct pack pattern for XRGB/ARGB.
6)、Add ION Memory Manager.
3.15. 视频驱动(V4L2)
Linux 3.0版本在linux2.6.32版本基础上的改动更新:
1)、增加了对一些camera sensors的支持;
2)、Add a media-bus API for configuring v4l2 subdev pixel and frame formats.
新增的API有
+ enum_mbus_fmt: enumerate pixel formats, provided by a video data source
+ g_mbus_fmt: get the current pixel format, provided by a video data source
+ try_mbus_fmt: try to set a pixel format on a video data source
+ s_mbus_fmt: set a pixel format on a video data source
3.16. 音频驱动(ALSA)
Linux3.0使用版本alsa-driver-1.0.24,android4.0中alsa-lib已不被使用,取而代之的是tinyalsa.
Linux2.6.32使用版本alsa-driver-1.0.21
3.17. Event输入设备驱动
Linux 3.0版本在linux2.6.32版本基础上的改动更新:
1)、增加了对一些input device的支持;
2)、Implement input filters;
+ filter: separates normal event handlers from "filters".
3)、add support for disabling gpios through sysfs;
Now gpio-keys input driver exports 4 new attributes to userland through sysfs: /sys/devices/platform/gpio-keys/keys [ro] /sys/devices/platform/gpio-keys/switches [ro] /sys/devices/platform/gpio-keys/disabled_keys [rw] /sys/devices/platform/gpio-keys/disables_switches [rw]
3.18. Wifi
3.19. Bluetooth

你可能感兴趣的:(android4.0下的linux3.0的变化)