(一):寫在前面
在上面乙個小節當中,我們學習了將cm移植到我們自己的裝置的上半部分,這裡,我們將下半部分學習一下,並嘗試講cm移植到乙個平板上去。
(二):承接上文
device_[codename].mk
檔案device_[codename].mk
包含關於構建哪乙個android包,去**複製指定檔案和包或者是在整個編譯階段要設定的指定屬性等的指令。
該檔案可以在編譯階段被用來講重要檔案複製到ramdisk中。
舉個列子:
$(
local_path)/sbin/offmode_charging:recovery/root/sbin/offmode_charging \
這會將檔案offmode_charging二進位制複製到位於ramdisk中的sbin
資料夾中。
kernel
這個就是乙個簡單的預編譯的核心映象或者是乙個你將要編譯的核心,用於啟動裝置。核心的格式可能是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_-userdebug
然後構建乙個測試的recovery映象
為了能僅僅構建recovery,設定lunch
唯一乙個常規構建,並且使用make recoveryimage
。
有用的技巧
這裡不必說很多,但是一定要保證白執行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
資料夾中,並將他們放到合適的位置。同樣,可以參考其他裝置的原始碼。乙個例子檔名稱可能是boardconfi**endor.mk
。
確保剛剛建立的makefile在你的主boardconfig.mk
中被包含了,也就是使用命令-include vendor/[vendor]/[codename]/boardconfi**endor.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
新增xml
在你的device_[codename].mk
檔案中,很有可能存在像下面這樣的**:
device_package_overlays :=\
device/[vendor]/[codename]/overlay
舉個例子:假設你想覆蓋一些標準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移植到你的裝置上是不太可能的,中間可能會出現很多意向不到的問題,我們就可以根據出現的問題和這兩篇文章就行修改來正確滿足我們的需求。光看文章是不夠的,我們抓緊開始乙個裝置的移植吧。
祝你好運。
如何將STL5 2 1移植到VC 6 0
3.設定環境變數,使得環境變數path中包含c program files microsoft visual studio 9.0 vc bin 4.用任意編輯器開啟c programfiles microsoft visual studio vc98 bin vcvars32.bat,把 stlp...
如何將FreeRTOS移植到飛思卡爾K60?
想研究os已久,uc os和freertos對個人來說都是免費的os,但是uc os如果用於如果將用於商業產品那麼還是需要付版權費,考慮到未來工作老闆肯定希望使用穩定 免費的os,而freertos穩定性也還不錯,而且最近正在做四軸看國外crazyfile程式是發現裡面有用freertos看起來還挺...
如何將網域名稱繫結到hexo
1.擁有乙個githubname.github.io可以正常訪問的網域名稱,如我的github部落格 2.購買網域名稱,個人推薦阿里雲,首年年費比較便宜,適合個人折騰,部落格建議com,me,info,pro 專家 mobi kindle電子書的格式 再不濟可以選擇tech,cc之類的,國外可以參考...