转自: hknote 及 Ophone8 作者: Wanan.’s 及 O友
今天要来分析一下Android文件系统的/system目录的结构。
/system目录是在Android文件系统占有及其重要的位置,基本上所有的工具和应用程序都在这个目录下,我看来是一个真正的rootfs。他在Android手机中存放在nandflash的mtd3中,是一个yaffs2文件系统,在启动时被挂载在root的/system目录下,其中包含有:
# pwd && ls -a -l /system drwxr-xr-x root 208 1970-01-01 08:00 xbin drwxr-xr-x root root 1970-01-01 08:00 modules drwxr-xr-x root root 2008-08-01 20:00 framework drwxr-xr-x root root 2008-08-01 20:00 fonts drwxr-xr-x root root 2008-08-01 20:00 etc -rw-r–r– root root 2197 2008-08-01 20:00 build.prop drwxr-xr-x root root 2008-08-01 20:00 media drwxr-xr-x root shell 2008-08-01 20:00 bin drwxr-xr-x root root 2008-08-01 20:00 usr drwxr-xr-x root root 2008-08-01 20:00 app drwxr-xr-x root root 2008-09-06 22:45 lost found drwxr-xr-x root root 2008-08-01 20:00 lib drwxr-xr-x root root 2008-08-01 20:00 sd -rw-r–r– root root 145 2008-08-01 20:00 init.rc
下面逐个分析其中的目录: xbin :下放了很多系统管理工具,这些工具不是到toolbox的链接,每个都是可执行程序。如果你看到这些命令你会发现他们根本不常用,他们都是为系统管理员准备的,是一些系统管理和配置工具。这个文件夹的作用相当于标准Linux文件系统中的/sbin。我的手机此目录下有busybox,肯定是改过的,应该是激活成功教程者加上的。 modules:使用来存放内核模块(主要是fs和net)和模块配置文件的地方。 framework: 是JAVA平台的一些核心文件,属于JAVA平台系统框架文件。里面的文件都是.jar和.odex文件。 备注:什么是odex文件? odex是被优化过的JAVA程序文件,体积通常是.jar的4倍左右。执行效率比.jar高。 fonts :很显然,这是字体库文件的存放目录。 etc :这里存放了系统中几乎所有的配置文件,根目录下的/etc就链结于此。 build.prop :是一个属性文件,在Android系统中.prop文件很重要,记录了系统的设置和改变,类似于/etc中的文件。 media :里面主要是存放了系统的铃声的,分为 notifications(通知)、ui(界面)、alarms(警告)和ringtones(铃声),里面都是.ogg音频文件。 bin :众所周知,是存放用户常用的工具程序的,其中大部分是到toolbox的链接(类似嵌入式Linux中的busybox)。toolbox应该是google简化版的busybox,我还没深入研究过。 usr :用户的配置文件,如键盘布局、共享、时区文件等等。您可以cat 来看看。 app :顾名思义,存放的是Android系统自带的JAVA应用程序。 lost found :yaffs文件系统固有的,类似回收站的文件夹,只有是yaffs文件系统都会有。 lib :存放几乎所有的共享库(.so)文件。 sd :SD卡中的EXT2分区的挂载目录 init.rc :一个初始化脚本,用于将/system/modules和/system/xbin挂载为cramfs,避免系统被无意破坏。
*************************************************************************************** 以下内容来的 O友时间 , 虽然发布的时间较早了 , 还是有很大的参考价值的. systemapp 这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是data文件夹中。下面是详细的介绍: systemappAlarmClock.apk 闹钟 systemappAlarmClock.odex systemappBrowser.apk 浏览器 systemappBrowser.odex systemappBugreport.apk Bug报告 systemappBugreport.odex systemappCalculator.apk 计算器 systemappCalculator.odex systemappCalendar.apk 日历 systemappCalendar.odex systemappCalendarProvider.apk 日历提供 systemappCalendarProvider.odex systemappCamera.apk 照相机 systemappCamera.odex systemappcom.amazon.mp3.apk 亚马逊音乐 systemappContacts.apk 联系人 systemappContacts.odex systemappDownloadProvider.apk 下载提供 systemappDownloadProvider.odex systemappDrmProvider.apk DRM数字版权提供 systemappDrmProvider.odex systemappEmail.apk 电子邮件客户端 systemappEmail.odex systemappFieldTest.apk 测试程序 systemappFieldTest.odex systemappGDataFeedsProvider.apk GoogleData提供 systemappGDataFeedsProvider.odex systemappGmail.apk Gmail电子邮件 systemappGmail.odex systemappGmailProvider.apk Gmail提供 systemappGmailProvider.odex systemappGoogleApps.apk 谷歌程序包 systemappGoogleApps.odex systemappGoogleSearch.apk 搜索工具 systemappGoogleSearch.odex systemappgtalkservice.apk GTalk服务 systemappgtalkservice.odex systemappHTMLViewer.apk HTML查看器 systemappHTMLViewer.odex systemappIM.apk 即使通讯组件包含MSN、yahoo通 systemappImCredentialProvider.apk systemappImProvider.apk systemappImProvider.odex systemappLauncher.apk 启动加载器 systemappLauncher.odex systemappMaps.apk 电子地图 systemappMaps.odex systemappMediaProvider.apk 多媒体播放提供 systemappMediaProvider.odex systemappMms.apk 短信、彩信 systemappMms.odex systemappMusic.apk 音乐播放器 systemappMusic.odex systemappMyFaves.apk T-Mobile MyFaves程序 systemappMyFaves.odex systemappPackageInstaller.apk apk安装程序 systemappPackageInstaller.odex systemappPhone.apk 电话拨号器 systemappPhone.odex systemappSettings.apk 系统设置 systemappSettings.odex systemappSettingsProvider.apk 设置提供 systemappSettingsProvider.odex systemappSetupWizard.apk 设置向导 systemappSetupWizard.odex systemappSoundRecorder.apk 录音工具 systemappSoundRecorder.odex systemappStreet.apk 街景地图 systemappStreet.odex systemappSync.apk 同步程序 systemappSync.odex systemappTalk.apk 语音程序 systemappTalk.odex systemappTelephonyProvider.apk 电话提供 systemappTelephonyProvider.odex systemappUpdater.apk 更新程序 systemappUpdater.odex systemappVending.apk 制造商信息 systemappVending.odex systemappVoiceDialer.apk 语音拨号器 systemappVoiceDialer.odex systemappYouTube.apk Youtube视频 systemappYouTube.odex
*************************************
systembin 这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux系统自带的组件,Android手机网就主要文件做下简单的分析介绍: systembinakmd systembinam systembinapp_process 系统进程 systembindalvikvm Dalvik虚拟机宿主 systembindbus-daemon 系统BUS总线监控 systembindebuggerd 调试器 systembindebug_tool 调试工具 systembindexopt DEX选项 systembindhcpcd DHCP服务器 systembindumpstate 状态抓取器 systembindumpsys 系统抓取器 systembindvz systembinfillup systembinflash_image 闪存映像 systembinhciattach systembinhcid HCID内核 systembinhostapd systembinhostapd_cli systembinhtclogkernel systembininput systembininstalld systembinitr systembinlinker systembinlogcat Logcat日志打印 systembinlogwrapper systembinmediaserver systembinmonkey systembinmountd 存储挂载器 systembinnetcfg 网络设置 systembinping Ping程序 systembinplaymp3 MP3播放器 systembinpm 包管理器 systembinqemud QEMU虚拟机 systembinradiooptions 无线选项 systembinrild RIL组件 systembinsdptool systembinsdutil systembinservice systembinservicemanager 服务管理器 systembinsh systembinssltest SSL测试 systembinsurfaceflinger 触摸感应驱动 systembinsvc 服务 systembinsystem_server systembintelnetd Telnet组件 systembintoolbox systembinwlan_loader systembinwpa_cli systembinwpa_supplicant systemetc 从文件夹名称来看保存的都是系统的配置文件,比如APN接入点设置等核心配置。 systemetcapns-conf.xml APN接入点配置文件 systemetcAudioFilter.csv 音频过滤器配置文件 systemetcAudioPara4.csv systemetcbookmarks.xml 书签数据库 systemetcdbus.conf 总线监视配置文件 systemetcdhcpcd systemetcevent-log-tags systemetcfavorites.xml 收藏夹 systemetcfirmware 固件信息 systemetcgps.conf GPS设置文件 systemetchcid.conf 内核HCID配置文件 systemetchosts 网络DNS缓存 systemetcinit.goldfish.sh systemetclocation 定位相关 systemetcmountd.conf 存储挂载配置文件 systemetcNOTICE.html 提示网页 systemetcpermissions.xml 权限许可 systemetcpvplayer.conf systemetcsecurity systemetcwifi WLAN相关组件 systemetcdhcpcddhcpcd-hooks systemetcdhcpcddhcpcd-run-hooks systemetcdhcpcddhcpcd.conf systemetcdhcpcddhcpcd-hooks 1-test systemetcdhcpcddhcpcd-hooks20-dns.conf systemetcdhcpcddhcpcd-hooks95-configured systemetcfirmwarebrf6300.bin systemetclocationgps [page_break] systemetclocationgpslocation 定位相关 systemetclocationgpsnmea GPS数据解析 systemetclocationgpsproperties systemetcsecuritycacerts.bks systemetcsecurityotacerts.zip OTA下载验证 systemetcwifiFw1251r1c.bin systemetcwifitiwlan.ini systemetcwifiwpa_supplicant.conf WPA验证组件 systemfonts 字体文件夹,除了标准字体和粗体、斜体外可以看到文件体积最大的可能是中文字库,或一些unicode字库,从T-Mobile G1上可以清楚的看到显示简体中文正常,其中DroidSansFallback.ttf文件大小 systemfontsDroidSans-Bold.ttf systemfontsDroidSans.ttf systemfontsDroidSansFallback.ttf systemfontsDroidSansMono.ttf systemfontsDroidSerif-Bold.ttf systemfontsDroidSerif-BoldItalic.ttf systemfontsDroidSerif-Italic.ttf systemfontsDroidSerif-Regular.ttf systemframework framework主要是一些核心的文件,从后缀名为jar可以看出是是系统平台框架。 systemframeworkam.jar systemframeworkam.odex systemframeworkandroid.awt.jar AWT库 systemframeworkandroid.awt.odex systemframeworkandroid.policy.jar systemframeworkandroid.policy.odex systemframeworkandroid.test.runner.jar systemframeworkandroid.test.runner.odex systemframeworkcom.google.android.gtalkservice.jar GTalk服务 systemframeworkcom.google.android.gtalkservice.odex systemframeworkcom.google.android.maps.jar 电子地图库 systemframeworkcom.google.android.maps.odex systemframeworkcore.jar 核心库,启动桌面时首先加载这个 systemframeworkcore.odex systemframeworkext.jar systemframeworkext.odex systemframeworkframework-res.apk systemframeworkframework-tests.jar systemframeworkframework-tests.odex systemframeworkframework.jar systemframeworkframework.odex systemframeworkinput.jar 输入库 systemframeworkinput.odex systemframeworkitr.jar systemframeworkitr.odex systemframeworkmonkey.jar systemframeworkmonkey.odex systemframeworkpm.jar 包管理库 systemframeworkpm.odex systemframeworkservices.jar systemframeworkservices.odex systemframeworkssltest.jar systemframeworkssltest.odex systemframeworksvc.jar 系统服务 systemframeworksvc.odex
*************************************
systemlib
lib目录中存放的主要是系统底层库,如平台运行时库。 systemliblibaes.so systemliblibagl.so systemliblibandroid_runtime.so Android运行时库 systemliblibandroid_servers.so 系统服务组件 systemliblibaudio.so 音频处理 systemliblibaudioeq.so EQ均衡器 systemliblibaudioflinger.so 音频过滤器 systemliblibbluetooth.so 蓝牙组件 systemliblibc.so systemliblibcamera.so 超相机组件 systemliblibcameraservice.so systemliblibcorecg.so systemliblibcrypto.so 加密组件 systemliblibctest.so systemliblibcutils.so systemliblibdbus.so systemliblibdl.so systemliblibdrm1.so DRM解析库 ………………..
*********************************************
systemmedia [page_break] 铃声音乐文件夹,除了常规的铃声外还有一些系统提示事件音 systemmediaaudio systemmediaaudioalarms 闹铃音 systemmediaaudionotifications 提示音 systemmediaaudioringtones 铃声 systemmediaaudioui 界面操作事件音 ……
systemsounds 默认的音乐测试文件,仅有一个test.mid文件,用于播放测试的文件。 systemsoundstest.mid systemusr 用户文件夹,包含共享、键盘布局、时间区域文件等。 ……
**********************************
Android Internal – system directories
您应该已经知道,Android的核心操作系统是 Linux (现在用的版本是 2.6.25)。因此内部的文件系统,与系统目录等,也和 Linux 脱不了关系。要如何观察这些系统目录,到底藏了什么秘密呢?
在 Eclipse环境中,你可以用 DDMS来观察。不过这个 DDMS在我的计算机上的执行速度,实在太慢了。我个人的偏好是,直接用 adb shell来观察。启动 adb shell的用法如下:1.在 Windows中,开启一个命令行窗口(或执行 cmd.exe这个程序)
2. cd <android-sdk-install_path>/tools
3. adb shell
当你看到这个 #提示字符时,就表示你已经进入仿真器的系统。接下来,你就可以用 Linux上的指令来浏览这些目录。像是 cd, ls, pwd, cat, rm等等。
这里面,有几个目录是和 Android相关的,我特地将他整理下来,供你参考。/system/app
预加载应用程序执行文件 (*.apk),都是放在这。像是 Alarm Clock, Browser, Contacts, Maps,… 等等。
用 DDMS观察的话,目录内的内容,就像下面这样:
/system/framework
这会放 Android系统的核心链接库。像是 core.jar, framework-res.apk, com.google.android.gtalkservice.jar,…等等。疑,1.0r1不是已经将 gtalk等相关 APIs移除了吗?怎么他的链接库还在?虽然许多链接库都是以 jar结尾的,不过里面 Java classes还是以 dex格式存在着。/system/media/audio/(notification, alarms, ringtones, ui)
这里放系统的声音文件,像是闹铃声,来电铃声等等。这些声音档,多是 ogg格式。/data/anr/traces.txt
当你的应用程序发生 ANR (Application is Not Responding)错误时,Android会自动将问题点的 code stack list写在这个档案内,你直接用 cat命令就可以看他的内容。/data/app
/system/app放的是系统预载的应用程序执行文件。而这里放的是用户自己安装的应用程序执行文件 (*.apk)。/data/data/<app-package-name>
当你在程序中用 Context.openFileOutput()所建立的档案,都放在这个目录下的 files子目录内。而用 Context.getSharedPreferences()所建立的 preferences檔 (*.xml),则是放在 shared_pref这个子目录中。/data/location/gps
这里看起来,应该是给 GPS location provider用的。其中的 properties档案的内容如下:
requiresNetwork false
requiresSatellite false
requiresCell false
hasMonetaryCost false
supportsAltitude true
supportsBearing true
supportsSpeed true
repeat true
accuracy 100
powerRequirement 1
没猜错的话,这应该是用来描述 GPS location provider有那些功能的。/data/system/location/location.gps
这个档案也是个一般文本文件。主要是记录最后的经纬度坐标。LocationManager.getLastKnownLocation()就在来这抓值的。/data/property/persist.sys.timezone
这个档案也是个一般文本文件。主要是记录目前系统所使用的时区。在我的仿真器上,他记录着 Asia/Taipei这个字符串。
最后,下面这两个指令,也很好用。他可以帮你将外部档案,复制到仿真器的系统档案目录内,也可以将仿真器内的档案,复制到外部系统上。adb push <local> <remote> – copy file/dir to device
adb pull <remote> <local> – copy file/dir from device
******************************************* 1、android文件系统的结构 android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。其中, ramdisk.img是emulator的文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,emulator加载这3个映像文件后,会把 system和 userdata分别加载到 ramdisk文件系统中的system和 userdata目录下。因此,我们可以把ramdisk.img里的所有文件复制出来,system.img和userdata.img分别解压到 ramdisk文件系统中的system和 userdata目录下。 2、分离android文件系统出来 system.img,ramdisk.img,userdata.img映像文件是采用cpio打包、gzip压缩的,可以通过file命令验证: file ramdisk.img,输出: ramdisk.img: gzip compressed data, from Unix, last modified: Wed Mar 18 17:16:10 2009 Android源码编译后除了生成system.img,userdata.img之外还生成system和 userdata文件夹,因此不需要解压它们。Android源码编译后还生成root文件夹,其实root下的文件与 ramdisk.img 里的文件是一样的,不过这里还是介绍怎样把 ramdisk.img解压出来: 将ramdisk.img复制一份到任何其他目录下,将其名称改为ramdisk.img.gz,并使用命令 gunzip ramdisk.img.gz 然后新建一个文件夹,叫ramdisk吧,进入,输入命令 cpio -i -F ../ramdisk.img 这下,你就能看见并操作ramdisk里面的内容了。 然后把Android源码编译后生成的system和 userdata里的文件复制到 ramdisk/system和 ramdisk/userdata下。这样就得到一个文件系统了。 3、使用网络文件系统方式挂载android文件系统 因此,我们需要建立/nfsroot目录,再建立/nfsroot/androidfs目录,把刚才的android文件系统改名为androidfs,并链接到/nfsroot/androidfs 4、android内核引导文件系统 android内核挂载/nfsroot/androidfs之后,根据init.rc,init.goldfish.rc来初始化并装载系统库、程序等直到开机完成。init.rc脚本包括了文件系统初始化、装载的许多过程。init.rc的工作主要是: 1)设置一些环境变量 2)创建system、sdcard、data、cache等目录 3)把一些文件系统mount到一些目录去,如,mount tmpfs tmpfs /sqlite_stmt_journals 4)设置一些文件的用户群组、权限 5)设置一些线程参数 6)设置TCP缓存大小
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/181648.html原文链接:https://javaforall.cn