1.Android系統分區
2.根文件系統目錄結構
cache :是緩存臨時文件夾,
etc :指向 /system/etc ,衆所周知的配置文件存放目錄
system :是Android根文件系統中一個很重要的目錄,系統中的大部分東西都在這裏了
sys:用於掛載 sysfs文件系統。。
proc :/proc 文件系統下的多種文件提供的系統信息不是針對某個特定進程的,而是能夠在整個系統範圍的上下文中使用。
mnt:U盤等外部存儲設備掛載路徑
data :存放用戶安裝的軟件以及各種數據。
dev :設備節點文件的存放地。
tmp:寫權限最近在做一個項目,需要應用將一個程序(比如testcmd)放到/data/local/tmp中執行。
storage:外部SD卡所在目錄
Init: 是系統啓動到文件系統的時候第一個運行的程序
init.rc :系統初始化腳本
Android中的內核啓動後,kernel會啓動第一個用戶級別的進程:init,它是一個由內核啓動的用戶級進程。內核自行啓動(已經被載入內存,開始運行,並已初始化所有的設備驅動程序和數據結構等)之後,就通過啓動一個用戶級程序init的方式,完成引導進程。init始終是第一個進程。
2.2.2---init 進程
Init源碼位置:JB目錄下system/core/init/init.c中。
Init作用:
(1)、 創建一些linux根文件系統中的目錄
(2)、讀取並且解析init.rc文件
(3)、讀取並且解析硬件相關的init.magellanbroad.rc腳本文件
(4)、初始化動態設備管理,設備文件有變化時反應給內核
(5)、啓動系統屬性服務: system property service
(6)、啓動init.rc中定義的boot 等各種action和service.
………
2.2.2---system目錄結構
System 目錄結構分析
\system\app
這個裏面主要存放的是常規下載的應用程序,可以看到都是以APK格式結尾的文件, 在這個文件夾下的程序爲系統默認的組件,自己安裝的軟件將不會出現在這裏,而是\data\app。
\system\bin
這個目錄下的文件都是系統的本地程序,從bin文件夾名稱可以看出是binary二進制的程序,裏面主要是Linux系統自帶的組件
\system\etc
從文件夾名稱來看保存的都是系統的配置文件
\system\fonts
字體文件夾,除了標準字體和粗體、斜體外可以看到文件體積最大的可能是中文字庫
\system\framework
framework主要是一些核心的文件,從後綴名爲jar可以看出是是系統平臺框架
\system\lib
lib目錄中存放幾乎所有的共享庫(.so)文件
\system\media
鈴聲音樂文件夾,除了常規的鈴聲外還有一些系統提示事件音
\system\xbin
系統員管理工具
build.prop
系統全局屬性
……..
…….
特別說明:
build.prop 是一個屬性文件,在Android系統中.prop文件很重要,記錄了系統的設置和改變,類似於/etc中的文件。
1、查看build.prop
#getprop
……
[ro.secure]: [0]
[ro.serialno]: []
[ro.sf.lcd_density]: [160]
[ro.wifi.channels]: [14]
[service.adb.tcp.port]: [5555]
[service.bootanim.exit]: [1]
[sys.boot_completed]: [1]
[sys.usb.config]: [adb]
…..
# getprop ro.sf.lcd_density //查看單個屬性
2、設置屬性
#setprop ro.sf.lcd_density 240
一、替換android系統文件
分別可通過U盤copy 和adb push等方式替換
U盤裏放需要替換的文件
1、 U盤插進板子USB接口、usb會自動mount在系統跟目錄的/mnt/udisk目錄下
2、 先刪除掉系統中需要替換的文件
3、 命令cp 相應文件到自己的目錄
adb push方式
1、 adb連接設備
2、 adb push 本地替換文件目錄 android系統相關目錄
ps:替換android 系統apk(atv.apk)
1、 系統apk 存放在/system/app目錄下,系統system分區默認爲只讀的,首選需要重新mountsystem 目錄 成爲可讀寫
#mount –o remount rw /system
2、 刪除atv.apk
#rm /system/app/atv.apk
如需爲了push進系統的apk裏面生效我們還需刪除掉apk在/data/data目錄下生成的相應數據
#pm install com.realtek.atv
3、 push 新的apk進系統
#adb push d:\atv.apk /system/app
二、 android 獨立模塊的編譯(apk、so、jar檔等)
android的編譯命令有m mm mmm等三個編譯命令
m:編譯所有的模塊
mm:編譯當前目錄下的模塊,當前目錄下要有Android.mk文件
mmm:編譯指定路徑下的模塊,指定路徑下要有Android.mk文件
想使用這些命令,首先需要在android源碼根目錄執行.build/envsetup.sh 腳本設置環境
#source ./build/envsetup.sh或者#. build/envsetup.sh
Ps:
1、編譯apk Y:\Workspace\kernel\android\JB\device\realtek\app\atv
phoenix@rtkPhoenix:~/Workspace/kernel/android/JB$ TARGET_PRODUCT=magellan_tv010 mmm ./device/realtek/apps/Atv/
將會在下面的目錄下生成atv.apk
Y:\Workspace\kernel\android\JB\out\target\product\magellan_tv010\system\app/atv.apk
2、編譯jar檔Y:\Workspace\kernel\android\JB\frameworks\base\services\java
phoenix@rtkPhoenix:~/Workspace/kernel/android/JB$ TARGET_PRODUCT=magellan_tv010 mmm ./ frameworks/base/services/java
將會在下面的目錄下生成services.jar
Y:\Workspace\kernel\android\JB\out\target\product\magellan_tv010\system\framework\ services.jar
爲了每次都要輸入TARGET_PRODUCT對應的產品編號可以做如下操作:
phoenix@rtkPhoenix:~/Workspace/kernel/android/JB$lunch
You're building on Linux
Lunch menu... pick a combo:
……
13.rtk_magellan_tv001-eng
14. magellan_tv010-eng
…….
Which would you like? [full-eng] 14
….
phoenix@rtkPhoenix:~/Workspace/kernel/android/JB$