(一):寫在前面html
在上面一個小節當中,咱們學習了將CM移植到咱們本身的設備的上半部分,這裏,咱們將下半部分學習一下,並嘗試講CM移植到一個平板上去。linux
(二):承接上文android
device_[codename].mk
git
文件device_[codename].mk
包含關於構建哪個Android包,去哪裏複製指定文件和包或者是在整個編譯階段要設置的指定屬性等的指令。web
該文件能夠在編譯階段被用來說重要文件複製到ramdisk中。ruby
$OUT/recovery/root
中。舉個列子:markdown
$(LOCAL_PATH)/sbin/offmode_charging:recovery/root/sbin/offmode_charging \
這會將文件offmode_charging二進制複製到位於ramdisk中的sbin
文件夾中。架構
kernel
app
這個就是一個簡單的預編譯的內核鏡像或者是一個你將要編譯的內核,用於啓動設備。內核的格式多是zImage或者是uImage,這個依賴於你的設備架構的要求。框架
cm.mk
在這個文件中你須要去作一些改動來集成lunch
,brunch
,breakfast
命令,以便你的設備可以在列表中展示出來,而且可以正確編譯。
你也須要去設置一些變量來表示應該使用多大的閃存,手機設備仍是平板設備等等。
有些設置不只僅用於編譯recovery,你也能夠如今去設置,由於一旦recovery構建成功而且正常運行,這裏的設置是很是重要的。最好的方式就是去查看類似的設備是如何設置的。
recovery.fstab
recovery.fstab
文件定義了文件系統掛載點,文件系統類型,還有你的設備中的每個分區的快設備。他的工做和linux系統中的/etc/fstab
是同樣的。
舉個例子:
/system ext4 /dev/block/mmcblk0p32
該命令設置位於mmcblk0p32的快設備以ext4
文件系統的方式掛在到/system
中。
全部的掛載點應該存在於該文件中,信息的正確性是很是重要的。假如一個recovery falsh被寫到錯誤的位置,將會發生難以預料的錯誤。
vendorsetup.sh
當vendor.sh
運行的時候,vendorsetup.sh
被調用。他被用來說非標準的lunch
組合添加到lunch
菜單中。
爲了向lunch菜單中添加你的設備:
add_lunch_combo cm_<codename>-userdebug
爲了能僅僅構建recovery,設置lunch
惟一一個常規構建,而且使用make recoveryimage
。
有用的技巧 若是你有fastboot,你能夠嘗試使用他講recovery鏡像安裝到recovery分區。也有其餘方法來安裝recovery,例如使用`dd`命令。
這裏沒必要說不少,可是必定要保證白運行CM以前,必定要確保recovery正常工做。一個100%正常工做的recovery模式是運行android系統以前必須的條件。
若是有必要,調整recovery_ui.cpp
你可能發現了,雖然recovery鏡像運行了,有一些物理按鍵,例如聲音按鍵和電源按鍵可能不能正常工做。
你可能須要去調整GPIO數值來使得按鍵被識別。類似的,你可能須要include/exclude選項或者是修改其餘UI元素。
爲了這樣作,你可能須要去建立而且編輯/device/[vendor]/[codename]/recovery/recovery_ui.cpp
。
有用的提示 你的設備的GPIO可能在內核源碼中找到。
向vendor/
目錄中添加塊
一旦咱們構建了能夠正常運行的recovery,咱們就能夠去構建CM系統了。
咱們須要作的第一件事情就是獲取全部的屬性,二進制塊到vendor/
目錄下面,同時也須要.mk
文件來包含他們。
下面是必須的三個步驟:
extract-files.sh
和setup-makediles.sh
腳本使用adb
將塊文件從你的設備中拉下來,而後將他們放到/vendor/
目錄中。.mk
文件在編譯期間複製這些文件到$OUT
文件夾中,並將他們放到合適的位置。一樣,能夠參考其餘設備的源碼。一個例子文件名稱多是BoardConfigVendor.mk
。BoardConfig.mk
中被包含了,也就是使用命令-include vendor/[vendor]/[codename]/BoardConfigVendor.mk
。device/
目錄
既然咱們有了一個正常工做的recovery,咱們來修改位於device/
文件夾中的文件。一樣,參考其餘類似設備的源碼。
從製造商&供應商那裏獲取幫助
不少生產該平臺的生產廠商會提供wiki,文檔和例子代碼,這些均可以幫助以完成你的移植。你會發現一些公司對開發社區可能很是友好。下面是一些OEMS。
OEM | 平臺 | 倉庫/資源 |
---|---|---|
各類 | Google’s Git Repository,Nexus binary blobs | |
HTC | 各類 | Dev Center |
HP | 各類 | HP OPEN SOURCE |
Lenovo | 各類 | Lenovo Smartphones (Search your device) |
LG | 各類 | LG Open Source Code Distribution |
Motorola | 各類 | Motorola Open Source Center |
Nvidia | Tegra | Tegra’s GitWeb |
Qualcomm | MSM/QSD | Code Aurora Forum |
Samsung | 各類 | Samsung Open Source Release Center |
Texas Instruments | OMAP | www.omapzoom.com,Omappedia |
有的時候,若是你有問題須要諮詢,你能夠經過email或者是支持論壇來詢問開發者。
在你的device_[codename].mk
文件中,頗有可能存在像下面這樣的代碼:
DEVICE_PACKAGE_OVERLAYS := \ device/[vendor]/[codename]/overlay
他所完成的工做就是數字overlay/
文件夾來容許你覆蓋僅僅用於該設備的Android框架或者是APP的任何XML文件。爲了這樣作,咱們須要建立一個目錄結構,該結構反射指向一個XML文件的路徑,從你的源碼的根開始。而後把該文件放到你想覆蓋的地方。
舉個例子:假設你想覆蓋一些標準Android設置。在frameworks/base/core/res/res/values/config.xml
文件中查看。而後將他複製到device/[vendor]/[codename]/overlay/frameworks/base/core/res/res/values/config.xml
文件中。如今你的版本將會使用。你僅僅須要要把你想覆蓋的設置包含進去就好了–不是全部的,因此你能夠削減文件來從默認的設置中修改。
你能夠覆蓋任何XML文件,包括layouts,settings,preferences,translations等。
若是以前你使用的是預構建的內核,你可能想要構建本身的內核。
後面咱們有一片文章專門講解如何修改BoardConfig.mk
文件。
經過兩篇文章就能把CM移植到你的設備上是不太可能的,中間可能會出現不少意向不到的問題,咱們就能夠根據出現的問題和這兩篇文章就行修改來正確知足咱們的需求。光看文章是不夠的,咱們抓緊開始一個設備的移植吧。
祝你好運。