在这里 http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Porting-Android-to-a-new-device/ 发现一篇分析Android kernel与标准kernel的差异的文章,但是,作者用的是2.6.25的内核,我发现在Android2.6.29内核中,与之前相比,有了很多改变,因此在上面link中的文章的基础上,重新分析了2.6.29版本的Android kernel和标准kernel的区别。
总的区别可以归纳如下:
ARCH -- 这是Android修改了arch/arm下面的一些文件:
arch/arm:
Chg: arch/arm/kernel/entry-armv.S
Chg: arch/arm/kernel/module.c
Chg: arch/arm/kernel/process.c
Chg: arch/arm/kernel/ptrace.c
Chg: arch/arm/kernel/setup.c
Chg: arch/arm/kernel/signal.c
Chg: arch/arm/kernel/traps.c
Chg: arch/arm/mm/cache-v6.S
Chg: arch/arm/vfp/entry.S
Chg: arch/arm/vfp/vfp.h
Chg: arch/arm/vfp/vfphw.S
Chg: arch/arm/vfp/vfpmodule.c
Goldfish -- 这是Android为了模拟器所开发的一个虚拟硬件平台。Goldfish执行arm926T指令(在2.6.29中,goldfish也支持ATMv7指令),但是在实际的设备中,该虚拟平台的文件不会被编译。
arch/arm/mach-goldfish:
New: arch/arm/mach-goldfish/audio.c
New: arch/arm/mach-goldfish/board-goldfish.c
New: arch/arm/mach-goldfish/pdev_bus.c
New: arch/arm/mach-goldfish/pm.c
New: arch/arm/mach-goldfish/switch.c
New: arch/arm/mach-goldfish/timer.c
YAFFS2 -- 和PC把文件存储在硬盘上不一样, 移动设备一般把Flash作为存储设备。尤其是NAND flash应用非常广泛(绝大多数手机用的都是NAND flash,三星的一些手机使用的是OneNAND)。NAND flash具有低成本和高密度的优点。
YAFFS2 是“Yet Another Flash File System, 2nd edition" 的简称。 它提供在Linux内核和NAND flash设备 之前高效率的接口。 YAFFS2并没有包含在标准的Linux内核中, Google把它添加到了Android的kernel
fs/yaffs2:
New: fs/yaffs2/devextras.h
New: fs/yaffs2/Kconfig
New: fs/yaffs2/Makefile
New: fs/yaffs2/moduleconfig.h
New: fs/yaffs2/yaffs_checkptrw.c
New: fs/yaffs2/yaffs_checkptrw.h
New: fs/yaffs2/yaffs_ecc.c
New: fs/yaffs2/yaffs_ecc.h
New: fs/yaffs2/yaffs_fs.c
New: fs/yaffs2/yaffs_getblockinfo.h
New: fs/yaffs2/yaffs_guts.c
New: fs/yaffs2/yaffs_guts.h
New: fs/yaffs2/yaffsinterface.h
New: fs/yaffs2/yaffs_mtdif1.c
New: fs/yaffs2/yaffs_mtdif1.h
New: fs/yaffs2/yaffs_mtdif2.c
New: fs/yaffs2/yaffs_mtdif2.h
New: fs/yaffs2/yaffs_mtdif.c
New: fs/yaffs2/yaffs_mtdif.h
New: fs/yaffs2/yaffs_nand.c
New: fs/yaffs2/yaffs_nandemul2k.h
New: fs/yaffs2/yaffs_nand.h
New: fs/yaffs2/yaffs_packedtags1.c
New: fs/yaffs2/yaffs_packedtags1.h
New: fs/yaffs2/yaffs_packedtags2.c
New: fs/yaffs2/yaffs_packedtags2.h
New: fs/yaffs2/yaffs_qsort.c
New: fs/yaffs2/yaffs_qsort.h
New: fs/yaffs2/yaffs_tagscompat.c
New: fs/yaffs2/yaffs_tagscompat.h
New: fs/yaffs2/yaffs_tagsvalidity.c
New: fs/yaffs2/yaffs_tagsvalidity.h
New: fs/yaffs2/yportenv.h
Bluetooth -- Google为Bluetooth打上了patch,fix了一些Bluetooth的bug
drivers/bluetooth:
Chg: drivers/bluetooth/bfusb.c
Chg: drivers/bluetooth/bt3c_cs.c
Chg: drivers/bluetooth/btusb.c
Chg: drivers/bluetooth/hci_h4.c
Chg: drivers/bluetooth/hci_ll.c
Scheduler -- 对于Scheduler的改变非常小,我对它并没有去研究。
Chg: kernel/sched.c
New Android Functionality -- 除了fix一些bug以及其他一些小的更改,Android增加了一些新的功能,介绍如下:
IPC Binder -- The IPC Binder is an Inter-Process Communication (IPC) mechanism. It allows processes to provide services to other processes via a set of higher-level APIs than are available in standard Linux. An Internet search indicated that the Binder concept originated at Be, Inc., and then made its way into Palm's software, before Google wrote a new Binder for Android.
New: drivers/staging/android/binder.c
Low Memory Killer -- Android adds a low-memory killer that, each time it's called, scans the list of running Linux processes, and kills one. It was not clear in our cursory examination why Android adds a low-memory killer on top of the already existing one in the standard Linux kernel.
New: drivers/staging/android/lowmemorykiller.c
Ashmem -- Ashmem is an Anonymous SHared MEMory system that adds interfaces so processes can share named blocks of memory. As an example, the system could use Ashmem to store icons, which multiple processes could then access when drawing their UI. The advantage of Ashmem over traditional Linux shared memory is that it provides a means for the kernel to reclaim these shared memory blocks if they are not currently in use. If a process then tries to access a shared memory block the kernel has freed, it will receive an error, and will then need to reallocate the block and reload the data.
New: mm/ashmem.c
RAM Console and Log Device -- To aid in debugging, Android adds the ability to store kernel log messages to a RAM buffer. Additionally, Android adds a separate logging module so that user processes can read and write user log messages.
New: drivers/staging/android/ram_console.c
Android Debug Bridge -- Debugging embedded devices can best be described as challenging. To make debugging easier, Google created the Android Debug Bridge (ADB), which is a protocol that runs over a USB link between a hardware device running Android and a developer writing applications on a desktop PC.
drivers/usb/gadget:
New: drivers/usb/gadget/android.c
Chg: drivers/usb/gadget/composite.c
Chg: drivers/usb/gadget/f_acm.c
New: drivers/usb/gadget/f_acm.h
New: drivers/usb/gadget/f_adb.c
New: drivers/usb/gadget/f_adb.h
New: drivers/usb/gadget/f_mass_storage.c
New: drivers/usb/gadget/f_mass_storage.h
Android also adds a new real-time clock, switch support, and timed GPIO support. We list the impacted files for these new modules at the end of this document.
Power Management -- Power management is one of the most difficult pieces to get right in mobile devices, so we split it out into a group separate from the other pieces. It's interesting to note that Google added a new power management system to Linux, rather than reuse what already existed. We list the impacted files at the end of this document.
kernel/power:
New: kernel/power/consoleearlysuspend.c
New: kernel/power/earlysuspend.c
New: kernel/power/fbearlysuspend.c
Chg: kernel/power/main.c
Chg: kernel/power/power.h
Chg: kernel/power/process.c
New: kernel/power/userwakelock.c
New: kernel/power/wakelock.c
Miscellaneous Changes -- In addition to the above, we found a number of changes that could best be described as, 'Miscellaneous.' Among other things, these changes include additional debugging support, keypad light controls, and management of TCP networking.
附: 差异表:
- arch/arm:
- Chg: arch/arm/kernel/entry-armv.S
- Chg: arch/arm/kernel/module.c
- Chg: arch/arm/kernel/process.c
- Chg: arch/arm/kernel/ptrace.c
- Chg: arch/arm/kernel/setup.c
- Chg: arch/arm/kernel/signal.c
- Chg: arch/arm/kernel/traps.c
- Chg: arch/arm/mm/cache-v6.S
- Chg: arch/arm/vfp/entry.S
- Chg: arch/arm/vfp/vfp.h
- Chg: arch/arm/vfp/vfphw.S
- Chg: arch/arm/vfp/vfpmodule.c
- arch/arm/mach-goldfish:
- New: arch/arm/mach-goldfish/audio.c
- New: arch/arm/mach-goldfish/board-goldfish.c
- New: arch/arm/mach-goldfish/pdev_bus.c
- New: arch/arm/mach-goldfish/pm.c
- New: arch/arm/mach-goldfish/switch.c
- New: arch/arm/mach-goldfish/timer.c
- block:
- Chg: block/blk-core.c
- Chg: block/genhd.c
- drivers/base/power:
- Chg: drivers/base/power/main.c
- drivers/bluetooth:
- Chg: drivers/bluetooth/bfusb.c
- Chg: drivers/bluetooth/bt3c_cs.c
- Chg: drivers/bluetooth/btusb.c
- Chg: drivers/bluetooth/hci_h4.c
- Chg: drivers/bluetooth/hci_ll.c
- drivers/char:
- New: drivers/char/dcc_tty.c
- New: drivers/char/goldfish_tty.c
- Chg: drivers/char/mem.c
- drivers/cpufreq:
- Chg: drivers/cpufreq/cpufreq_conservative.c
- Chg: drivers/cpufreq/cpufreq_ondemand.c
- drivers/i2c:
- New: drivers/i2c/chips/pca963x.c
- drivers/input:
- Chg: drivers/input/evdev.c
- Chg: drivers/input/input.c
- New: drivers/input/keyboard/goldfish_events.c
- New: drivers/input/keyreset.c
- New: drivers/input/misc/gpio_axis.c
- New: drivers/input/misc/gpio_event.c
- New: drivers/input/misc/gpio_input.c
- New: drivers/input/misc/gpio_matrix.c
- New: drivers/input/misc/gpio_output.c
- New: drivers/input/misc/keychord.c
- New: drivers/input/touchscreen/synaptics_i2c_rmi.c
- drivers/leds:
- New: drivers/leds/ledtrig-sleep.c
- drivers/misc:
- New: drivers/misc/apanic.c
- New: drivers/misc/kernel_debugger.c
- New: drivers/misc/pmem.c
- New: drivers/misc/qemutrace
- New: drivers/misc/uid_stat.c
- New: drivers/misc/wl127x-rfkill.c
- drivers/mmc:
- Chg: drivers/mmc/card/block.c
- Chg: drivers/mmc/core/bus.c
- Chg: drivers/mmc/core/core.c
- Chg: drivers/mmc/core/debugfs.c
- Chg: drivers/mmc/core/sd.c
- Chg: drivers/mmc/core/sdio_bus.c
- Chg: drivers/mmc/core/sdio.c
- Chg: drivers/mmc/core/sdio_io.c
- New: drivers/mmc/host/goldfish.c
- drivers/mtd:
- New: drivers/mtd/devices/goldfish_nand.c
- New: drivers/mtd/devices/goldfish_nand_reg.h
- Chg: drivers/mtd/nand/nand_base.c
- drivers/net:
- New: drivers/net/pppolac.c
- New: drivers/net/pppopns.c
- drivers/power:
- New: drivers/power/goldfish_battery.c
- drivers/rtc:
- New: drivers/rtc/alarm.c
- Chg: drivers/rtc/class.c
- New: drivers/rtc/rtc-goldfish.c
- drivers/serial:
- Chg: drivers/serial/serial_core.c
- drivers/staging/android:
- New: drivers/staging/android/binder.c
- New: drivers/staging/android/lowmemorykiller.c
- New: drivers/staging/android/ram_console.c
- New: drivers/staging/android/timed_gpio.c
- New: drivers/staging/android/timed_gpio.h
- New: drivers/staging/android/timed_output.c
- New: drivers/staging/android/timed_output.h
- drivers/switch:
- New: drivers/switch/switch_class.c
- New: drivers/switch/switch_gpio.c
- drivers/usb/gadget:
- New: drivers/usb/gadget/android.c
- Chg: drivers/usb/gadget/composite.c
- Chg: drivers/usb/gadget/f_acm.c
- New: drivers/usb/gadget/f_acm.h
- New: drivers/usb/gadget/f_adb.c
- New: drivers/usb/gadget/f_adb.h
- New: drivers/usb/gadget/f_mass_storage.c
- New: drivers/usb/gadget/f_mass_storage.h
- drivers/video:
- New: drivers/video/goldfishfb.c
- fs:
- Chg: fs/exec.c
- Chg: fs/fat/cache.c
- Chg: fs/fat/dir.c
- Chg: fs/fat/fatent.c
- Chg: fs/fat/fat.h
- Chg: fs/fat/file.c
- Chg: fs/fat/inode.c
- Chg: fs/fat/misc.c
- Chg: fs/fat/namei_msdos.c
- Chg: fs/fat/namei_vfat.c
- Chg: fs/fs-writeback.c
- Chg: fs/partitions/check.c
- Chg: fs/proc/base.c
- fs/yaffs2/:
- kernel:
- Chg: kernel/cgroup.c
- Chg: kernel/cgroup_freezer.c
- Chg: kernel/cpuset.c
- Chg: kernel/exit.c
- Chg: kernel/fork.c
- Chg: kernel/futex.c
- Chg: kernel/panic.c
- Chg: kernel/posix-cpu-timers.c
- Chg: kernel/printk.c
- Chg: kernel/ptrace.c
- Chg: kernel/sched.c
- Chg: kernel/sysctl.c
- Chg: kernel/time/tick-sched.c
- kernel/power:
- New: kernel/power/consoleearlysuspend.c
- New: kernel/power/earlysuspend.c
- New: kernel/power/fbearlysuspend.c
- Chg: kernel/power/main.c
- Chg: kernel/power/power.h
- Chg: kernel/power/process.c
- New: kernel/power/userwakelock.c
- New: kernel/power/wakelock.c
- lib:
- Chg: lib/genalloc.c
- mm:
- New: mm/ashmem.c
- Chg: mm/mmap.c
- Chg: mm/page_alloc.c
- Chg: mm/shmem.c
- net:
- Chg: net/bluetooth/af_bluetooth.c
- Chg: net/bluetooth/cmtp/core.c
- Chg: net/bluetooth/hci_conn.c
- Chg: net/bluetooth/hci_core.c
- Chg: net/bluetooth/hci_event.c
- Chg: net/bluetooth/hci_sysfs.c
- Chg: net/bluetooth/l2cap.c
- Chg: net/bluetooth/rfcomm/core.c
- Chg: net/bluetooth/rfcomm/sock.c
- Chg: net/bluetooth/sco.c
- Chg: net/core/dev.c
- Chg: net/ipv4/af_inet.c
- Chg: net/ipv4/devinet.c
- New: net/ipv4/sysfs_net_ipv4.c
- Chg: net/ipv4/tcp_ipv4.c
- Chg: net/ipv6/af_inet6.c
- Chg: net/rfkill/rfkill.c
- Chg: net/socket.c
- security:
- Chg: security/commoncap.c
- Chg: security/security.c