- 浏览: 924578 次
- 性别:
- 来自: 上海
最新评论
-
liu149339750:
我勒个去,搜到你的博客了,关注!
Android make脚本简记 -
ihopethatwell:
楼主,这个修改时间有个问题,退出修改界面就不保存设置的时间了, ...
Android中如何修改系统时间(应用程序获得系统权限) -
flyar520:
你好...我也遇到屏幕半屏刷成黑屏的问题...但是我的时在开机 ...
Android横屏状态下返回到壁纸界面屏幕刷新问题 -
flyar520:
你好...我也遇到屏幕半屏刷成黑屏的问题...但是我的时在开机 ...
Android横屏状态下返回到壁纸界面屏幕刷新问题 -
taowayi:
推荐android一键反编译神器 apkdec
Android apk反编译
Google的Android操作系统已经成功面市,因为Android操作系统是基于Linux-2.6.25内核的,并且目前所有的源代码也都全部开放,因此可以简单地加以分析以方便以后向其他平台的移植工作.
首先需要了解的就是Android的一些基本情况,并下载Android的源代码以方便分析.
Android的官方站点:
Android Source 的官方安装方法:
Android的中文站点:
源代码包的相应联结地址:
我们可以采用Android官方站点推荐方式来下载Android的源代码,也可以从Android中文站点直接下载源代码程序包,随后再更新和同步.
当采用Android官方推荐方式下载或者需要更新你的源代码时,都需要git工具支持, 当你的系统没有安装git或者git版本过低时,建议从下面的地址更新到最新的git包.(Android要求git版本必须大于1.5.4)
给git自动升级的方式:
git clone git://git.kernel.org/pub/scm/git/git.git
如果采用下载源代码包的方式,下载并展开后,在 .repo/repo 目录下有同步执行的文件repo, 你可以将其拷贝到你的PATH所在路径以备使用,例如/usr/bin等等. 或者也可以从Android站点得到最新的repo文件并复制到PATH所在路径.
源代码包解开后,其主目录下存在repo_sync.sh文件, 其主要是执行repo
sync以实现和Android站点同步代码包的目的, 当执行出错后将再一次运行repo
sync命令直到同步正常结束,但原文件包含错误,建议改成下面的程序:(原文件中少了一个空格)
#!/bin/bash
echo "============start repo sync================="
repo sync
while [ $? = 1 ]; do
echo "============sync failed, re-sync again ====="
sleep 3
repo sync
done
echo "============start repo sync================="
repo sync
while [ $? = 1 ]; do
echo "============sync failed, re-sync again ====="
sleep 3
repo sync
done
这样, 运行sh repo_sync.sh就可以自动实现本地代码包的同步和更新动作了.
我在Fedora Core 6上经过同步之后, du -h ./mydroid, 占用空间大约是2.1G
以下为Android官方公布的架构图:
在kernel子目录下存放的就是Android的Linux Kernel了, 通过和标准的Linux 2.6.25 Kernel的对比,我们可以发现,其主要增加了以下的内容:
1. 基于ARM架构增加Gold-Fish平台,相应增加的目录如下:
kernel/arch/arm/mach-goldfish
kernel/include/asm-arm/arch-goldfish
目前Google的基于Gold-Fish的手机为G1手机,明年G2手机将面世。
该手机采用QualComm公司的 高性能处理芯片MSM7201A,该芯片以ARM 11作为Application应用处理器,以ARM926T作为BaseBand主处理器(主要承载GSM/GPRS/EDGE/3G等协议栈处理), 支持JAVA硬加速(ARM本身也自带JAVA硬件处理),包含GPS Processor, 支持2D/3D图形加速(每秒可处理4百万个多边形),另外还支持最大800万像素的Sensor, 支持MPEG 4/H.263/H.264/Real Media等多种Codec。
其中ARM926T采用的主频为274M HZ, ARM11的主频为528MHZ. (MSM7200的ARM11的主频为400M HZ)
因为没有找到MSM7201A的详细DataSheet, 因此可以简单地参考MSM7200的规格:
该手机采用QualComm公司的 高性能处理芯片MSM7201A,该芯片以ARM 11作为Application应用处理器,以ARM926T作为BaseBand主处理器(主要承载GSM/GPRS/EDGE/3G等协议栈处理), 支持JAVA硬加速(ARM本身也自带JAVA硬件处理),包含GPS Processor, 支持2D/3D图形加速(每秒可处理4百万个多边形),另外还支持最大800万像素的Sensor, 支持MPEG 4/H.263/H.264/Real Media等多种Codec。
其中ARM926T采用的主频为274M HZ, ARM11的主频为528MHZ. (MSM7200的ARM11的主频为400M HZ)
因为没有找到MSM7201A的详细DataSheet, 因此可以简单地参考MSM7200的规格:
下面为MSM7200架构图:
2. 增加了yaffs2 FLASH文件系统,相应增加的目录为:
kernel/fs/yaffs2
实际上,Android包经过编译后生成的system.img和ramdisk.img文件就是yaffs2格式的包.
3. 增加了Android的相关Driver,相应目录为:
kernel/drivers/android
主要分为:
Android IPC系统: Binder (binder.c)
Android 日志系统: Logger (logger.c)
Android 电源管理: Power (power.c)
Android 闹钟管理: Alarm (alarm.c)
Android 内存控制台: Ram_console (ram_console.c)
Android 内存控制台: Ram_console (ram_console.c)
Android 时钟控制的gpio: Timed_gpio (timed_gpio.c)
4. 增加了switch处理, 相应的目录为:
kernel/drivers/switch/
5. 增加了一种新的共享内存处理方式, 相应增加的文件为:
kernel/mm/ashmem.c
6. 其他为Linux-2.6.25内核所做的补丁等等,例如BlueTooth, 在此不做详细分析
另外GoldFish平台相关的驱动文件如下:
1. 字符输出设备:
kernel/drivers/char/goldfish_tty.c
2. 图象显示设备: (Frame Buffer)
kernel/drivers/video/goldfishfb.c
3. 键盘输入设备:
kernel/drivers/input/keyboard/goldfish_events.c
4. RTC设备: (Real Time Clock)
kernel/drivers/rtc/rtc-goldfish.c
5. USB Device设备:
kernel/drivers/usb/gadget/android_adb.c
6. SD卡设备:
kernel/drivers/mmc/host/goldfish.c
7. FLASH设备:
kernel/drivers/mtd/devices/goldfish_nand.c
kernel/drivers/mtd/devices/goldfish_nand_reg.h
8. LED设备:
kernel/drivers/leds/ledtrig-sleep.c
9. 电源设备:
kernel/drivers/power/goldfish_battery.c
10. 音频设备:
kernel/arch/arm/mach-goldfish/audio.c
11. 电源管理:
kernel/arch/arm/mach-goldfish/pm.c
12. 时钟管理:
kernel/arch/arm/mach-goldfish/timer.c
下面的链接为Android Kernel和标准Linux-2.6.25包相比较所产生的PATCH包, 其中比较小的other patch包是除了上面列出的增加文件之外所修改的文件细节,供大家参考。
http://blogimg.chinaunix.net/blog/upfile2/090102095410.gz
以下为Android内核启动信息:
Uncompressing Linux.................................................................................... done, booting the kernel.
emulator: emulator window was out of view and was recentred
Linux version 2.6.25-00350-g40fff9a (android-build@apa27.mtv.corp.google.com) (gcc version 4.2.1) #1 Wed Jul 23 18:10:44 PDT 2008
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00003137
Machine: Goldfish
Memory policy: ECC disabled, Data cache writeback
CPU0: D VIVT write-through cache
CPU0: I cache: 4096 bytes, associativity 4, 32 byte lines, 32 sets
CPU0: D cache: 65536 bytes, associativity 4, 32 byte lines, 512 sets
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 24384
Kernel command line: qemu=1 console=ttyS0 android.checkjni=1 android.qemud=ttyS1 android.ndns=2
Unknown boot option `android.checkjni=1': ignoring
Unknown boot option `android.qemud=ttyS1': ignoring
Unknown boot option `android.ndns=2': ignoring
PID hash table entries: 512 (order: 9, 2048 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 96MB = 96MB total
Memory: 94268KB available (2380K code, 445K data, 100K init)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
net_namespace: 152 bytes
android_power_init
android_power_init done
NET: Registered protocol family 16
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 4096 (order: 3, 32768 bytes)
TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
TCP reno registered
checking if image is initramfs... it is
Freeing initrd memory: 136K
goldfish_new_pdev goldfish_interrupt_controller at ff000000 irq -1
goldfish_new_pdev goldfish_device_bus at ff001000 irq 1
goldfish_new_pdev goldfish_timer at ff003000 irq 3
goldfish_new_pdev goldfish_rtc at ff010000 irq 10
goldfish_new_pdev goldfish_tty at ff002000 irq 4
goldfish_new_pdev goldfish_tty at ff011000 irq 11
goldfish_new_pdev smc91x at ff012000 irq 12
goldfish_new_pdev goldfish_fb at ff013000 irq 13
goldfish_new_pdev goldfish_audio at ff004000 irq 14
goldfish_new_pdev goldfish_memlog at ff006000 irq -1
goldfish_new_pdev goldfish-battery at ff014000 irq 15
goldfish_new_pdev goldfish_events at ff015000 irq 16
goldfish_new_pdev goldfish_nand at ff016000 irq -1
goldfish_new_pdev goldfish-switch at ff017000 irq 17
goldfish_new_pdev goldfish-switch at ff018000 irq 18
goldfish_pdev_worker registered goldfish-switch
goldfish_pdev_worker registered goldfish-switch
goldfish_pdev_worker registered goldfish_nand
goldfish_pdev_worker registered goldfish_events
goldfish_pdev_worker registered goldfish-battery
goldfish_pdev_worker registered goldfish_memlog
goldfish_audio_probe
goldfish_pdev_worker registered goldfish_audio
goldfish_pdev_worker registered goldfish_fb
goldfish_pdev_worker registered smc91x
goldfish_pdev_worker registered goldfish_tty
goldfish_pdev_worker registered goldfish_tty
goldfish_pdev_worker registered goldfish_rtc
goldfish_pdev_worker registered goldfish_timer
goldfish_pdev_worker registered goldfish_device_bus
goldfish_pdev_worker registered goldfish_interrupt_controller
ashmem: initialized
Installing knfsd (copyright (C) 1996 okir@monad.swb.de).
yaffs Jul 23 2008 18:10:35 Installing.
io scheduler noop registered
io scheduler anticipatory registered (default)
io scheduler deadline registered
io scheduler cfq registered
allocating frame buffer 320 * 480, got ffc10000
Console: switching to colour frame buffer device 40x30
console [ttyS0] enabled
brd: module loaded
loop: module loaded
nbd: registered device at major 43
smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre <nico@cam.org>
No IRQF_TRIGGER set_type function for IRQ 12 (goldfish)
eth0: SMC91C11xFD (rev 1) at c6800000 IRQ 12 [nowait]
eth0: Ethernet addr: 52:54:00:12:34:56
goldfish nand dev0: size 4000000, page 2048, extra 64, erase 131072
goldfish nand dev1: size 4000000, page 2048, extra 64, erase 131072
goldfish nand dev2: size 4000000, page 2048, extra 64, erase 131072
mice: PS/2 mouse device common for all mice
*** events probe ***
events_probe() addr=0xc6804000 irq=16
events_probe() keymap=qwerty2
input: qwerty2 as /class/input/input0
goldfish_rtc goldfish_rtc: rtc core: registered goldfish_rtc as rtc0
logger: created 64K log 'log_main'
logger: created 64K log 'log_events'
logger: created 64K log 'log_radio'
IPv4 over IPv4 tunneling driver
GRE over IPv4 tunneling driver
TCP cubic registered
NET: Registered protocol family 1
NET: Registered protocol family 17
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
802.1Q VLAN Support v1.8 Ben Greear <greearb@candelatech.com>
All bugs added by David S. Miller <davem@redhat.com>
VFP support v0.3: implementor 41 architecture 1 part 10 variant 9 rev 0
goldfish_rtc goldfish_rtc: setting system clock to 2009-01-02 07:43:01 UTC (1230882181)
Freeing init memory: 100K
init: cannot open '/initlogo.rle'
yaffs: dev is 32505856 name is "mtdblock0"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.0, "mtdblock0"
yaffs: dev is 32505857 name is "mtdblock1"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.1, "mtdblock1"
yaffs: dev is 32505858 name is "mtdblock2"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.2, "mtdblock2"
sh: can't access tty; job control turned off
# init: cannot find '/system/bin/playmp3', disabling 'bootsound'
eth0: link up
warning: `rild' uses 32-bit capabilities (legacy support in use)
init: sys_prop: mis-match msg size recieved: -1 expected: 128
从启动信息可以看出,其主CPU为ARM926EJ-S,并非ARM11 CPU, 说明下载的Emulator内核并非是针对G1手机的,估计只是实现了对ARM926EJ-S CPU的模拟。
以上为Android内核的大致分析,希望能给有兴趣的人员以简单帮助。
发表评论
-
Android systrace
2018-09-12 11:13 1039Understanding Systrace Caution: ... -
Android simpleperf
2018-09-12 11:02 1953Introduction of simpleperf What ... -
Android selinux安全策略
2016-06-21 17:16 4112基础知识 SEAndroid在架构和机制上与SELinux完 ... -
Android wifi captive portal 验证
2016-02-23 20:38 5203只要是国内的用户,基本上刷完5.0版本后如果没挂上V P N, ... -
Android CTS windows环境下测试
2015-09-08 11:36 6460Windows下CTS测试步骤 1.获 ... -
Android 之 日期时间 时区同步
2015-05-13 15:47 6376系统设置--日期和时间-- ... -
虚拟按键 振动效果
2015-05-12 11:50 2129[DESCRIPTION] Setting->情景模式- ... -
Android 签名信息读取
2014-08-22 17:32 1386public void getSingInfo() { ... -
Android UiAutomator 自动化测试
2014-07-04 17:39 10004一、一个BUG引发的问题 ... -
Android 多语言 多地区对应表
2014-05-13 17:09 2153Arabic, Egypt (ar_EG) Arabic, ... -
Android emulated sdcard
2013-08-12 21:46 6172如果要添加 emulated sdcard ,需要一下几个 ... -
#if、#ifdef、#if defined之间的区别
2013-05-17 15:19 58475#if的使用说明 #if的后面接的是表达式 #if ( ... -
Android 动态库死机调试方法
2013-03-05 13:54 4877android系统中调试Java非常容易,一般遇到错误都在 ... -
Android sqlite3 详解
2012-09-13 22:13 2409SQLite库包含一个名字叫做sqlite3的命令行,它可以让 ... -
Android 多语言开发
2012-08-16 18:37 2409第一部分 多语言定制的机制 1、ICU4C简介 ICU4 ... -
Android 添加底层核心服务
2012-06-04 10:52 5819为 Android添加底层核 ... -
Android 之响应的系统设置的事件
2012-05-24 18:17 19811、Configuration类专门用于描述手机设备上的配置信 ... -
Android CRT Screen 电视效果
2012-05-17 11:12 2311Android 2.3 对关屏进行了优化,增加了一种类似于 ... -
android编译dex-preopt
2012-05-11 18:48 5444对于android2.3编译时候选择下面的情况,既可以对dex ... -
Android 移动终端camera 防偷*拍设置
2012-04-26 10:35 1897目前市面上的所有移动终端几乎都有camera应用,但andro ...
相关推荐
### Android内核的简单分析 #### 一、概述 Android作为一个全球范围内广泛应用的移动操作系统,其内核基于Linux-2.6.25版本,并且所有源代码均已开放。这为开发者提供了极大的便利,便于他们深入研究Android内核...
Android内核的深度分析对于理解其系统架构、优化性能、以及开发基于Android的应用具有重要意义。通过对Android内核的学习和研究,开发者可以更好地利用其提供的强大功能,同时也能在遇到问题时,快速定位并解决问题...
至于"Android内核的简单分析"部分,可能涉及了Android内核与标准Linux内核的区别,例如Android特有的服务架构、硬件抽象层(HAL)、Android运行时环境(ART)以及对Android特定功能的支持,如Binder IPC(进程间通信...
### Android内核的简单分析 #### 一、概述 随着Google的Android操作系统的成功发布,其基于Linux-2.6.25内核的特点引起了广泛关注。由于所有源代码的完全开放,这为开发者们提供了宝贵的资源,使得对Android内核...
《Android内核与标准Linux内核对比分析》 Android内核是Google开发的开源移动操作系统Android的核心组成部分,基于Linux 2.6内核,但在针对移动设备的特性上进行了诸多定制化修改。本文旨在深入探讨Android内核与...
通过对Android内核的深入研究,我们可以发现Android不仅仅是在Linux的基础上简单修改而成的操作系统,而是经过了大量的定制和优化,以适应移动设备的特点和需求。无论是从硬件平台的支持、文件系统的选择还是各种...
- **移动设备**:Android操作系统就是基于Linux内核开发的,这使得Linux在移动设备领域也占据了重要的位置。 - **嵌入式系统**:由于其小体积和高灵活性,Linux也被广泛应用于嵌入式系统中,如路由器、智能电视等。 ...
Android内核基于Linux 2.6内核,但并不是简单的继承,而是进行了部分修改和新增。Android内核主要实现了以下几个核心功能: 1. 安全性:增加了额外的安全机制,保护系统免受恶意软件影响。 2. 内存管理:优化内存...
### Android Bugreport 分析:掌握核心技能 在深入解析Android bugreport之前,我们先了解其基本概念。Android bugreport是一个全面的系统日志文件,它包含了大量的系统信息,旨在帮助开发者诊断和解决Android设备...
1. **Android内核**:Android系统基于Linux内核,它是整个操作系统的基石。内核负责管理硬件资源,如处理器、内存、I/O设备,并提供进程管理、内存管理、文件系统、网络协议栈等核心服务。开发者需要理解内核如何与...
《读懂Linux内核源代码》这本书旨在为初学者提供一条清晰的学习路径,并为Android开发人员提供宝贵的知识资源。本文将深入探讨Linux内核开发的重要性、学习方法以及如何有效地分析Linux内核源代码。 #### 二、Linux...
### Android内核剖析之Binder机制详解 #### 一、引言 在Android系统中,Binder作为核心组件之一,主要用于实现跨进程通信(Inter-Process Communication, IPC)。它不仅支持简单的数据传输,还能够进行复杂的对象...
init进程是Android系统中的第一个用户空间进程,它由内核在启动阶段创建。init进程的源码位于/system/core/init/init.c。在init进程的初始化过程中,最重要的一项工作是解析init.rc文件,这是一个脚本文件,用于定义...
- **Alarm 驱动**: 在 Android 中, Alarm 驱动不仅仅是一个简单的定时器, 它更是一个能够管理和调度各种不同类型定时任务的高级驱动。它依赖于 RTC 驱动, 但本身不是 RTC 驱动的一部分, 其主要职责是实现定时闹钟的...
Android内核的简单分析 Android应用开发揭秘 Android应用软件前景分析 android中文文档 Android Application Development Hello, Android 2nd Edition Hello, Android 2nd Edition (November 2009) (ATTiCA)