当前位置:操作系统 > 安卓/Android >>

adnroid4.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 cleanu
补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,