MTK Modem编译
附上MTK FAQ:
[DESCRIPTION]
有些客戶反饋modem編譯步驟比較復雜,這里對release note里的內容做了一些歸納。
編譯modem可以先參考如下內容,更多細節可以參考release note。
?
[SOLUTION]
Step 1: 配置環境
按照release note -->Build Environment Info, 配置編譯環境。
注意:tool要使用要求的版本,其它版本MTK內部沒有測試過,很可能會出現編譯報錯。
Step 2: 編譯命令
./m [Project makefile name] new
Ex:
./m "TK_MD_BASIC(LWCTG_67xx).mak" new
Step 3: 執行modemRenameCopy.pl腳本
In ALPS codebase, run command:
perl device/mediatek/build/build/tools/modemRenameCopy.pl [Modem Codebase Path] [Modem Project Makefile Name]
Ex:
perl device/mediatek/build/build/tools/modemRenameCopy.pl ~currUser/MOLY_codebase/mcu TK_XXX_MODEM
注意:
執行modemRenameCopy.pl腳本,這個步驟一定不能漏掉。它的作用是把所有需要拷貝到AP端的文件收集到temp_modem文件夾中(modem codebase根目錄下),并且還會生成一個Android.mk文件。
Step 4:拷貝modem image到AP
執行modemRenameCopy.pl腳本之后,需要把temp_modem文件夾拷貝到AP。AP端路徑:
M0之前版本:alps/vendor/mediatek/proprietary/custom/${project}/modem/[temp_modem]
M0以及之后版本:alps/vendor/mediatek/proprietary/modem/[temp_modem]
?
[temp_modem]文件夾拷貝到AP端之后,文件夾名可以自行更改,如${modem}:
alps/vendor/mediatek/proprietary/modem/${modem}
Step 5:編譯APPS
Apps是跟modem code一起release的。APPS同樣需要先編譯,然后把編譯生成的文件拷貝到AP端.
注意:
編譯APPS之前,需要安裝Android NDK。下載地址請參考release note -->Build_Configure_Modem--->[2. Build MD APPS library & binary]
?
編譯命令:
./build.sh clean,build,pack all [modem chip generation config file]
Ex:
./build.sh clean,build,pack all GEN93_USER
?
Step 6:把編譯APPS生成的文件拷貝到AP
解開生成的*.tar.bz2,拷貝如下:
init_rc/, 拷貝到alps/vendor/mediatek/proprietary/modem/${modem}/init_rc/
sepolicy/,拷貝到alps/vendor/mediatek/proprietary/modem/${modem}/sepolicy/
makefile/,拷貝到alps/vendor/mediatek/proprietary/modem/${modem}/makefile/
libs/, 拷貝到alps/vendor/mediatek/proprietary/modem/${modem}/libs/
?
Step 7:Configure in ALPS
? ? ? ? 1. alps/device/${company}/${project}/ProjectConfig.mk
? ? ? ? ? ? CUSTOM_MODEM =?${modem}
? ? ? ? 2. 把alps/device/mediatek/build/build/tools/modem/modem_Android.mk
? ? ? ? ? ? 拷貝到 ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? alps/vendor/mediatek/proprietary/modem/Android.mk ?(跟${modem}在同一級目錄)
?
PS:從step 2開始可以參考release note -->Build_Configure_Modem.?
?
再附上網友實際操作:
一.MTK Modem原碼編譯說明
1. 編譯環境,我們本地使用虛擬機安裝Ubuntu系統來編譯代碼。
2. 使用repo命令或者腳本從服務器上下載項目modem代碼到Ubuntu本地。
??類似于下載AP代碼,進入Jenkins的modem編譯輸出文件:
??底版本分支:
/bin/repo init -u ssh://192.168.1.161:29418/MTK/manifest -b master -m Mtk_Vendor_6763_8.0_Cta_Modem.xml ?--no-repo-verify
??差異化代碼分支:
/bin/repo init -u ssh://192.168.1.161:29418/XTHINK/manifest -b master -m H32_8.1_Comm_Modem.xml ?--no-repo-verify
?~/repo/repo sync -c -q -j8;同步代碼
3. 在mcu\common\tools\下面新建GCC\MIPS\4.9.2\linux目錄,把GCC工具解壓后拷貝到目錄下mcu\common\tools\GCC\MIPS\4.9.2\linux,GCC工具可以在如下地址獲取:\\192.168.1.160\ShareDocuments\Software\編譯資料\modem編譯需要工具\Codescape.GNU.Tools.Package.2016.05-08.for.MIPS.MTI.Bare.Metal.CentOS-5.x86_64.tar(因為服務器上下載的代碼沒有 GCC和NDK)
4. 在目錄下modem\mcu\ 通過命令執行m腳本啟動編譯,編譯命令為:
./m "TK_MD_BASIC(LWCTG_R2_6763).mak" new,其中第二個參數根據項目平臺和網絡制式配置來選擇,可以從目錄mcu\make\projects下選擇不同的編譯mak文件。(如果之前有編譯就./m "TK_MD_BASIC(LWCTG_R3_6739).mak" clean再new)
本次編譯結果:
?
第二個參數
.mak文件可以參考modem編譯參數配置:
5. 第4步執行完成之后,在Android原碼目錄device\mediatek\build\build\tools\ 下執行命令來重命令打包modem鏡像,在Linux環境下進入如上Android目錄,執行命令./modemRenameCopy.pl ~/code/android_source/mtk/modemcode/p56a/modem/mcu "TK_MD_BASIC(LWCTG_R2_6763).mak",然后在modem代碼目錄modem\mcu\temp_modem下會生成新的modem鏡像文件。(注意文件路徑)
本次編譯結果:
結果存放位置:
將md1bin.img修改成md1img.img和md1dsp.img一起放入到版本目錄中,就可以用于刷機
?
對于9.0項目需要增加如下步驟:
6. ?把NDK工具拷貝到modem目錄modem\apps\NDK\android-ndk-r14b下,然后在目錄modem\apps下執行命令./build.sh clean,build,pack all GEN93_USER來編譯app。NDK工具獲取地址:\\192.168.1.160\ShareDocuments\Software\編譯資料\modem編譯需要工具\android-ndk-r14b-linux-x86_64.zip
在apps目錄下面新建NDK,解壓android-ndk-r14b-linux-x86_64.zip得到android-ndk-r14b目錄
?
?
編譯完成,生成GEN93_USER\rel
本次編譯結果:
?
結果存放在:
?
7. 最后把第5步生成的modem\mcu\temp_modem目錄下和第6步modem\apps\build\GEN93_USER\rel目錄下所有的文件拷貝到Android原碼目錄vendor\mediatek\proprietary\modem\P32A_modem 下,然后在全編譯一次Android原碼在out目錄下就包含了modem鏡像,可以使用MTK刷機工具flash_tool燒錄完整的軟件版本了。
??
目錄A95C里面的文件是虛擬機編譯modem的結果,和服務器上編譯的modem結果是完全一樣的,服務器上編譯的modem版本結果仍然需要放到AP代碼的modem目錄中全編才能集成到版本中。
有第7步驟的話,之前temp_modem里面的md1bin.img就不需要再修改名字。
結果得到modem文件?
以后基本的修改都集中在修改射頻參數:?
8. 在編譯過程中可能遇到的一些錯誤可以參考WiKi上的資料http://192.168.1.163:8090/pages/viewpage.action?pageId=819250
二.MTK射頻調試流程和遇到的問題
1. MTK射頻相關的原碼在目錄modem\mcu\pcore\custom\modem下,把該目錄下的原碼提供給硬件沈工,由他根據射頻設計原理圖和相關器件配置來修改添加RF 相關的驅動,每個頻段都調試完之后就可以了。
2. 在Android側修改手機所支持的網絡制式能力配置,在Android側device\xthink\P33A\ProjectConfig.mk、kernel-4.4\arch\arm\configs\p33a_bsp_1g_defconfig、vendor\mediatek\proprietary\bootable\bootloader\lk\project\P33A.mk按照下圖的位置來進行手機網絡能力的配置,先確定手機是多少的模式M,然后再配置最左邊的。
?
?
注意:
device\xthink\H56A\ProjectConfig.mk
和vendor\mediatek\proprietary\bootable\bootloader\lk\project\H58A.mk中的MTK_PROTOCOL1_RAT_CONFIG要保持一致。
\mydroid\vendor\mediatek\proprietary\bootable\bootloader\lk\make\ rat_config.mk
?具體的路徑是mydroid\vendor\mediatek\proprietary\bootable\bootloader\lk\make\rat_config.mk
以H33D為例,說明新增一個項目modem代碼的修改。
需要確定modem上傳到那個分支,確定是否存在,否在需要找系統人員新建。
(1)從gerrit上面拉取modem的差異化代碼
???
?
?
?
這里的checkout也實現了代碼的下載功能。
?
重要的一步,掛鉤子。然后其他的修改步驟就跟AP的修改一樣的了。
掛鉤子scp -P 29418 -p 192.168.32.218:hooks/commit-msg .git/hooks
??????scp -P 29418 -p 192.168.1.161:hooks/commit-msg .git/hooks
修改代碼
git add .
git commit -s -m
git push --no-thin origin HEAD:refs/for/
3. RF調試之前,先把MTK底版本原碼不加入修改先編譯后燒錄手機,看看MTK底版本能否正常加載使用modem。之前項目就發生過MTK modem原碼無法正常使用的情況,后來發現是底版本Band71使能之后和芯片設計不匹配導致的問題。經常遇到的modem無法加載的問題比較多的是RF 驅動一些器件參數配置不正確導致的問題,這個需要和硬件沈工檢查排錯。
4. 在ProjectConfig.mk中配置modem編譯的宏CUSTOM_MODEM = P32A_modem的配置一定要與vendor\mediatek\proprietary\modem\P32A_modem目錄名稱一致,否則也會出現modem異常問題。
5. 之前MT6739平臺配置了一套軟件版本兼容多個項目主板的DRDI功能,如果在各個制式的DRDI相關配置不正確也會導致modem異常問題。
6. MTK相關NV的操作可以參考WiKi文檔鏈接如下:
http://192.168.1.163:8090/pages/viewpage.action?pageId=1999041
http://192.168.1.163:8090/pages/viewpage.action?pageId=2883589
三.高通MBN配置
1. MBN (Modem Binary)文件實際上是一組重要NV/EFS和策略管理器設置,用于正確配置UE,以滿足運營要求或實驗室測試和認證要求。簡單來說,其實就是一個配置文件,里面有很多非常重要的NV/EFS配置,以及policy manager 的一些設置,這些配置能夠使手機滿足特定運營商網絡的操作需求,總而言之是和運營商相關的配置文件。MBN再加上高通開發的MCFG框架,能夠實現單一modem軟件版本配上不同的MBN對不同運營商網絡支持。
2. 軟件MBN文件存放在modem代碼modem_proc\mcfg\configs\mcfg_sw\generic目錄下,里面包含了高通配置的主要運營商的MBN文件,用來適配不同運營商的網絡配置需求。在modem原碼modem_proc\mcfg\mcfg_gen\generic目錄下存放有生成MBN文件的資源文件MCFG_SW_Items_List_Macro.excel,這個Excel文檔里面保存了需要配置的NV/EFS,如果需要新增NV或者EFS項,可以在Excel文檔里面添加,新增NV項格式保持和原始的一致就可以,修改或者添加完配置后必須要手動增加MBN版本號一般是在原來版本號基礎上+1就可以,也可以參考高通文檔80-n557,這個Excel第一頁有按鈕,選擇點擊Generate Sources and Build MBN Files 該按鈕就可以配置生成MBN文件了,生成的MBN文件保存在modem_proc\mcfg\configs\mcfg_sw\generic下面。
3. 高通平臺在軟件版本中通過升級MBN文件來更改NV/EFS配置,升級原理是利用高通qmi-pdc架構來實現update,升級之前需要先把新MBN文件制作好,并且新制作的MBN版本號要比手機中已經存在的MBN版本號高,把新生產的MBN文件放在modem_proc\mcfg\configs\mcfg_sw\generic對應運營商目錄下重新編譯modem,再重新編譯一個完整的軟件包,燒錄新軟件版本,手機開機獲取modem已經加載的MBN版本號,再與Android側保存的MBN版本號進行比較,如果Android側的版本號比modem已經加載的MBN版本號要高,則立馬執行MBN升級,把Android側的MBN文件load到modem并且refresh modem系統激活新MBN。其中可以通過modem 側AMSS\modem_proc\mcfg\configs\mcfg_sw\generic目錄下得mbn_ota.txt文件來控制需要升級哪些運營商的MBN文件。如果是臨時驗證MBN是否生效,可以通過高通工具PDC 來load并且激活MBN來驗證,當NV71546=7時高通MBN 自動根據SIM卡IIN號來激活MBN配置。
4. MBN使用注意事項,當手機熔絲后,加載的MBN文件需要進行簽名。MBN配置資源Excel文檔中NV格式要正確,EFS文件的拷貝需要配置正確的文件路徑。
四.高通QCN
1. 項目最原始的qcn文件是從高通原碼中選擇一個與項目主板比較接近的射頻卡驅動(GPIO配置相近、頻段配置相近),并將該射頻卡驅動對應的QCN作為基礎QCN文件,硬件加入靜態射頻NV項以及頻段配置后可以作為一個QCN配置文件,后續軟件相應NV的修改可以通過QXDM修改后從手機中把QCN備份出來就可以了。
2. QCN tar包制作流程:
2.1 先在modem代碼中定義打開宏FEATURE_EFS_ENABLE_FACTORY_IMAGE_SECURITY_HOLE并編譯modem。
2.2 拿一臺機器先使用fastboot erase命令擦除手機中已經存在的qnc數據,使用QPST工具燒錄制作好的QCN文件,手機連接電腦打開diag端口,在PC命令終端進入modem側 modem_proc/core/storage/tools目錄下,執行perl efsreadimage.pl -z命令,該命令會在當前目錄下生成fs_image.tar.gz,將fs_image.tar.gz拷到modem_proc/core/storage/tools/qdst目錄下,在linux環境下執行python QDSTMBN.py fs_image.tar.gz ,完成后,同目錄下會生成fs_image.tar.gz.mbn文件。
2.3 在PC端本地新建一文件夾create_efs,在modem側將modem_proc\build\ms\bin\AAAAANAZ\efs_image_meta.bin文件,fs_image.tar.gz.mbn文件和\modem_proc\core\bsp\efs_image_header\tools\所有文件拷到create_efs,在windows命令窗口下執行efs_image_create.py ?efs_image_meta.bin ?fs_image.tar.gz.mbn,命令執行成功將在該目錄下生成最終的QCN Tar包fs_image.tar.gz.mbn.img文件。
3. 在軟件版本編譯時執行modem鏡像文件拆包腳本后,在生成的下載分區文件rawprogram0.xml中將制作好的QCN tar包fs_image.tar.gz.mbn.img加入到fsg分區,這樣就可以通過下載軟件來燒錄QCN文件。
總結
以上是生活随笔為你收集整理的MTK Modem编译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分子动力学软件-OVITO
- 下一篇: 招商银行/招银网络科技面经、答案