没有合适的资源?快使用搜索试试~ 我知道了~
首页android 的linux 内核修改
资源详情
资源评论
资源推荐
Android 1.0 内核与 Linux 标准内 核比较报告
Godspeed1989
11/2011
1 . 引言 ........................................................................................................................................... 3
2 . Makefile 文件 .......................................................................................................................... 3
3 . init 目录 .................................................................................................................................. 3
4 . arch 目录 .................................................................................................................................. 4
4.1 改动 arch/arm/Makefile 文件 ....................................................................................... 4
4.2 改动 arch/arm/Kconfig 文件 ......................................................................................... 4
4.3 arch/arm/configs/goldfish_defconfig 文件 ............................................................ 5
4.4 arch/arm/kernel 目录 .................................................................................................... 5
4.5 arch/arm/mach-goldfish 目录 ...................................................................................... 6
5 . include 目录 ............................................................................................................................ 6
5.1 include/asm-arm 目录 .................................................................................................... 6
5.2 include/linux 目录 ........................................................................................................ 7
5.3 include/net 目录 ............................................................................................................ 8
6 . scripts/ 目录 ........................................................................................................................... 9
6.1 改动 kallsyms.c 文件 ..................................................................................................... 9
7 . mm/ 目录 ................................................................................................................................... 10
7.1 改动 mm/Makefile 文件 ................................................................................................. 10
7.2 改动 mm/mmap.c 文件 ..................................................................................................... 10
7.3 加入 mm/ashmem.c 文件 ................................................................................................. 11
7.4 改动 mm/shmem.c 文件 ................................................................................................... 11
7.5 改动 mm/tiny-shmem.c 文件 ......................................................................................... 11
7.6 改动 mm/filemap.c 文件 ............................................................................................... 11
8 . drivers/ 目录 ......................................................................................................................... 11
8.1 改动 drivers/Makefile 文件 ....................................................................................... 11
8.2 改动 drivers/Kconfig 文件 ......................................................................................... 12
8.3 drivers/android 目录 .................................................................................................. 12
8.4 drivers/char 目录 ........................................................................................................ 12
8.5 drivers/input 目录 ...................................................................................................... 13
8.6 drivers/leds 目录 ........................................................................................................ 13
8.7 drivers/misc 目录 ........................................................................................................ 13
8.8 drivers/mmc 目录 .......................................................................................................... 14
8.9 drivers/mtd 目录 .......................................................................................................... 14
8.10 drivers/power 目录 .................................................................................................... 14
8.11 drivers/rtc 目录 ........................................................................................................ 14
8.12 drivers/switch 目录 .................................................................................................. 14
8.13 drivers/video 目录 .................................................................................................... 15
9 . kernel/ 目录 ........................................................................................................................... 15
9.1 kernel/power/ 目录 ....................................................................................................... 15
9.2 kernel/time/ 目录 ......................................................................................................... 15
9.3 改动 kernel/exit.c 文件 ............................................................................................. 16
9.4 改动 kernel/fork.c 文件 ............................................................................................. 16
9.5 改动 kernel/hrtimer.c 文件 ....................................................................................... 16
9.6 改动 kernel/panic.c 文件 ........................................................................................... 16
9.7 改动 kernel/printk.c 文件 ......................................................................................... 16
9.8 改动 kernel/sched.c 文件 ........................................................................................... 16
9.9 改动 kernel/sched_fair.c 文件 ................................................................................. 16
9.10 改动 kernel/softirq.c 文件 ..................................................................................... 16
10 . net/ 目录 ............................................................................................................................... 17
10.1 net/bluetooth 目录 .................................................................................................... 17
10.2 net/ipv4 目录 .............................................................................................................. 18
10.3 net/ipv6 目录 .............................................................................................................. 18
11 . fs/ 目录 ................................................................................................................................. 18
11.1 fs/Makefile 文件 ........................................................................................................ 18
11.2 fs/Kconfig 文件 .......................................................................................................... 18
11.3 fs/exec.c 文件 ............................................................................................................ 18
11.4 fs/inotify_user.c 文件 ............................................................................................ 19
11.5 fs/yaffs2 目录 ............................................................................................................ 19
11.6 fs/fat 目录 .................................................................................................................. 20
11.7 fs/proc 目录 ................................................................................................................ 21
12 . 未被改变的部分 ................................................................................................................... 21
13. Reference ............................................................................................................................... 23
1
1
1
1
. 引言
本报告意在比较 Android 1.0 内核与 Linux 标准版内核的差异,选用 的
Android 内核为 kernel-2.6.25-android-1.0_r1.tar.gz ,选用的 Linux 标准内
核为 linux-2.6.25.atr.gz 。
报告 以逐目录比较的顺序进行,不会涉及十分详细的源码讲解。
2 . Makefile 文件
该文件是整个内核的编译文件,决定了内核的编译过程。
文件中有两处改动。
SUBARCH := $(shell uname -m | \
sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
-e s/arm.*/arm/ -e s/sa110/arm/ \
-e s/s390x/s390/ -e s/parisc64/parisc/ \
-e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
-e s/sh.*/sh/ )
+SUBARCH := arm
环境变量
ARCH
决定了目标内核的运行架构 。 环境变量
SUBARCH
的作
用是,当环境变量
ARCH
没有被设定的时候,便采用
SUBARCH
指示的架
构进行内核的编译 。 可以看出 , 默认情况下
SUBARCH
被设定的是正在运行
内核编译任务的主机所运行的架构。
CROSS_COMPILE ?= arm-eabi-
arm-eabi-
arm-eabi-
arm-eabi-
指定了所使用交叉编译器的前缀为 arm-eabi- ,默认情况下该环境变量
没有被设定 。这样的话,编译时会试着用 arm-eabi- gcc 等工具进行编译 。
3 . init 目录
该个目录中包含了内核的初始化代码 。 包括 main.c 、 创建早期用户空间的代
码以及其他初始化代码。
本 目录下仅仅对 Kconfig 文件进行了两处的添 加。
+config PANIC_TIMEOUT
+ int "Default panic timeout"
+ default 0
+ help
+ Set default panic timeout.
在 Kconfig 文件中 config 关键字定义了一个新的内核选项的菜单项,以上
改动 增加了 PANIC_TIMEOUT 选项的定义 , 用于设定内核 panic 后重启动的等待时
间。
+ config ASHMEM
+ bool "Enable Android's Shared Memory Subsystem"
+ default n
+ depends on SHMEM || TINY_SHMEM
+ help
+ The ashmem subsystem is a new shared memory allocator,
+ similar to POSIX SHM but with different behavior and
+ sporting a simpler file-based API.
Androi d 内核 加入 了 Androi d 共享内存子系统 , 这种共享内存的机制 与 POSI X
共享内存的机制相似,但表现和 API 不同。 该子系统 在 / dev 目录下对应的设备
文件为 /dev/ashmem , 相比于 malloc 和 anonymous/named mmap 等传统的内存分
配机制,其优势是通过内核驱动提供了辅助内核的内存回收算法机制
(pin/unpin) 。
什么是 pin 和 unpin 呢 ? 具体来讲 , 就是当使用 a shmem 分配了一块内存 后
,
但其中某些部分却不会被使用时,那么就可以将这块内存 unpin 掉。 unpin 后
,
内核可以将它对应的物理页面回收, 以作他用 。 具体的实现方法会在后面提到 。
4 . arch 目录
所有与体系结构相关的代码都在这个目录以及 include/asm-* 目录中 , Linu x
支持的每种体系结构在 arch 目录下都有对应的子目录。
Android 内核与标准内核仅仅是 在 arch/arm 这个子目录 中 存在差异。
4 .1 改动 arch/arm/Makefile 文件
文件中仅仅加入了一行:
machine-$(CONFIG_ARCH_AAEC2000) := aaec2000
+machine-$(CONFIG_ARCH_GOLDFISH) := goldfish
machine-$(CONFIG_ARCH_REALVIEW) := realview
用于 对 G oldfish 这种 架构 的支持。
Goldfish 是一种虚拟的 ARM 处理器,在 A ndroid 的仿真环境中使用。
在 L inux 的内核中, Goldfish 作为 ARM 体系结构的一种 “ 机器 ” 。
Goldfish
架构 运行
arm926t
指令集
(arm926t
属于
armv5
构架
)
,并且仿真
了输入
/
输出,比如 键盘 输入和
LCD
输出。这个模拟器其实是在
qemu
之上
开发的,输入
/
输出基于
libSDL
。
4 .2 改动 arch/arm/ K config 文件
文件有四处修改。
+ config HAVE_LATENCYTOP_SUPPORT
+ bool
+ default y if !SMP
以上改动加入 HAVE_LATENCYTOP_SUPPORT 选项,该选项表示了内核对遗
产系统的支持。
+ config ARCH_GOLDFISH
+ bool "Goldfish"
+ select GENERIC_TIME
+ select GENERIC_CLOCKEVENTS
+ help
+ Support for Goldfish Virtual Platform.
内核对
Goldfish
虚拟平台支持的选项。
+ source "arch/arm/mach-goldfish/Kconfig"
上面这句 sources 语句在 Kconfig 目录树 中 加入 了 mach-goldfish 目录
下的 Kconfig 文件。
+source "drivers/switch/Kconfig"
source "drivers/rtc/Kconfig"
source "drivers/dma/Kconfig"
+source "drivers/android/Kconfig"
上面两处改动在 Kconfig 目录树 中 加入 了 drivers/switch 和
drivers/android 目录下的 Kconfig 文件。
4.3 arch/arm/configs/goldfish_defconfig 文件
加入的 这个配置文件在编译内核时用 会被 到。
当渐入命令后
make goldfish_defconfig
内核会使用 G oldfish 架构的默认 配置 来 配置内核。
对于不清楚怎么配置内核开发者 , 为保险起见 应用 goldfish_defconfi g
进行默认配置 。运行此句后,会生成 .config 文件 ,接下来便可直接 生成内
核镜像了 。
4.4 arch/arm/kernel 目录
该目录 Android 内核对 entry-armv.S 、 process.c 、 signal.c 、
stackstrace.c 四个文件进行了修改。
· 改动 arch/arm/kernel/entry-armv.S ,加入了宏定义
+ #ifdef CONFIG_QEMU_TRACE
+ /*
+ mcr p15, 0, r0, c15, c0, 0 @ signal contexts witch
+ */
+ #endif
加入的语句是被注释的 , 没有意义 , 似乎是为了模拟器 qemu 进行调试跟
踪所使用? arm mcr 指令属于操作协处理器命令 , 具体的意义是 “ 用于将 AR M
处理器寄存器中的数据传送到协处理器寄存器中 ” 。
· 改动 arch/arm/kernel/process.c ,加入了 dump_task_regs 函数
+ /*
+ * Capture the user space registers
+* if the task is not running (in user space)
+ */
+ int dump_task_regs(struct task_struct *tsk,
+ elf_gregset_t *regs)
+ {
+ struct pt_regs ptregs = *task_pt_regs(tsk);
+ elf_core_copy_regs(regs, &ptregs);
+ return 1;
+ }
剩余22页未读,继续阅读
chenrui_ralph
- 粉丝: 1
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0