① MTK 如何配置內核編譯選項
使用make menuconfig ,來配置kernel的選項
a、首先通過下面的方式進入menuconfig, 在project 下輸入:
cd kernel
TARGET_PRODUCT=<project> make menuconfig
在彈出的窗口後,enter < / > 進入查找窗口,輸入要查找的kernel feature名稱
查到該feature後,選擇開啟或者關閉該feature, 保存,退出menuconfig
b、 完成上述配置後,將.config復制到mediatek/config/$project/autoconfig/kconfig/目錄下並重命名為project
然後進行編譯kernel
② MTK的開發環境怎麼搭建
一、開發環境設立
以下表述中提到的相關壓縮包或安裝文件到華禹ftp伺服器下載,部分文件要到群共享裡面下,那裡是最新的。
華禹ftp伺服器:IP:220.113.15.15,帳號為study-bbs.com,密碼為study-bbs0304
P1300的QQ群號: 15762255
P1300_Build_Guide.rar來自ftp伺服器,「華禹\MTK相關部分」目錄下
手機開發板C語言開發視頻.rar來自ftp伺服器,「華禹\MTK相關部分」目錄下
huayu109_ads1.2.rar來自ftp伺服器,「華禹\旋風001手機模塊\1.工具類」目錄下
huayu102_ADS12_Patch_Windows.rar同上
huayu106_perlzip.rar同上
huayu108_SourceInsight3.5.rar同上
huayu101_p1300軟體使用工具及開發指南.rar同上
huayu201_P1300_V1.7_Release.rar文件來自群共享
huayu203_P1300_V1.7_Release_patch.rar文件來自群共享
FlashTool_v3.0844.00.rar文件來自群共享
1、開發主機要求及所需工具:
操作系統:Windows 2000, WinXP. 推薦Windows 2000 with SP2 or later.
編 譯 器:ADS (Arm Developer Suite) v1.2 [Build 842]
Perl解析:ActivePerl, 推薦使用ActivePerl 5.6.1版本
模擬工具:MTK PC Simulator
跟蹤工具:Catcher_L1 v3.10.01,從串口輸出調試信息,只做普通UI應用的話,大致不會用到,用PC模擬工具就好了
燒錄工具:FlashTool_UI v3.1.05 或 FlashTool_v3.0844.00
其他:PL2303_Driver_XP2K v20,這是下載線用到的USB串口驅動,以前機器上裝過PL2303驅動的就不必再裝了
二、開發環境建立過程:
新建一個目錄,英文的好了,否則有些工具不認識中文路徑,這里以E:\MTK_P1300為例說明,下面我用文字和圖片簡單說明下安裝過程,更詳細的安裝過程可以看壓縮文件「手機開發板C語言開發視頻.rar」中的Flash文件「P1300_Build_Env.swf」。
(1)安裝ADS1.2
解壓文件huayu109_ads1.2.rar到某個目錄,比如說解壓到「E:\MTK_P1300」,解壓完後運行「E:\MTK_P1300\ADS1.2\Setup.exe」,一路按下一步,最後安裝License時選定文件「E:\MTK_P1300\ADS1.2\CRACK\ license.dat」,然後接著一路下一步直到安裝完。安裝完後刪掉目錄「E:\MTK_P1300\ADS1.2\」,節省磁碟空間。
(2)安裝ADS補丁
運行huayu102_ADS12_Patch_Windows.rar壓縮文件中的ADS_Patch_Window.exe,這是個自解壓的壓縮文件,選Unzip解壓到上一步ADS的安裝目錄(預設是C:\Program Files\ARM\ADSv1_2),解壓過程中如果問到是否覆蓋,全部選覆蓋好了。
(3)安裝腳本解釋器Perl
直接運行壓縮包huayu106_perlzip.rar裡面擴展名為msi的安裝文件,預設安裝就好,一路Next,呵呵。
上述幾步完成後,編譯環境基本建立,此時可以開一個dos窗(開始菜單->運行->輸入cmd->確定)看一下,安裝正常應該能順利執行以下命令,如下圖:
注意看版本號,應該是ADS1.2 [Build 842],不是的話可能沒打補丁,或補丁打的位置不對,請看第2步ADS補丁部分的說明並重新打一次,直到版本號對為止,哈哈。
這是perl解釋器的運行畫面。
注1:上述安裝過程會自動創建編譯環境所需的環境變數,如果發現編譯不正常了,可能是安裝了其他編譯工具導致沖突,這時建議查看下系統環境變數,把Perl和ADS的安裝目錄調到最前面,同時從path中去掉可能會產生沖突的編譯工具鏈的路徑(例如winavr),如下圖所示(我是安裝到D盤滴,預設是C盤,不過我C盤幾乎被我塞滿了):
如果嫌改path麻煩(因為要用到其他編譯工具鏈的時候還得改回去),還有一種辦法,就是改make.bat批處理,具體見注4中相關說明。
注2: 如果安裝ADS時,改變了默認安裝路徑,需要修改源碼中的設置,源碼目錄樹解壓過程見模擬器編譯環節相關介紹。
1. make\Option.mak
2. ----------------------------------
3. ifeq ($(strip $(COMPILER)),ADS)
4. DIR_ARM= c:\progra~1\arm\adsv1_2 # 修改這里
5. DIR_ARM := $(strip $(DIR_ARM))
6. DIR_TOOL = $(DIR_ARM)\bin
7. DIR_ARMLIB = $(DIR_ARM)\lib
8. DIR_ARMINC = $(DIR_ARM)\include
9. endif
10. ------------------------------------------------
比如改裝到D盤了,這里把紅色部分「c」改成「d」就好了
(4)代碼編輯環境
運行壓縮文件huayu108_Source Insight3.5.rar中的安裝文件安裝即可。至於編輯器,這個看個人喜好了,不過Source Inside看代碼蠻方便的。
(5)PC機模擬器
模擬器MTK PC Simulator是用來在PC上模擬調試用的,要安裝VC6 SP6(同時要安裝Uuicode 靜態和動態庫,沒有裝Unicode庫的可以用「huayu103_MTK模擬器DLL補丁.zip」中的庫,拷到系統目錄「%windir%\system32」下即可)。我機器上的VC是有裝Unicode庫的,沒裝過Unicode庫的如果在模擬器編譯或運行中出現問題,建議重裝下VC6,安裝時勾選Unicode庫,並打上相關補丁到SP6。
模擬器能模擬真機的大部分行為,這樣能給調試帶來很大便利,不需要每次改動都要燒錄。
模擬器要從源碼編譯,解壓壓縮包「huayu201_P1300_V1.7_Release.rar」裡面的文件「HUAYU_P1300_V1.7_Release.rar」到目錄「E:\MTK_P1300」,此時會出現目錄「E:\MTK_P1300\P1300_V1.7_Release」,這就是P1300的代碼目錄樹了;接著打上最新的補丁,解壓壓縮包「huayu203_P1300_V1.7_Release_patch.rar」裡面的壓縮文件「HUAYU_P1300_V1.7_Release_patch.rar」到目錄
「E:\MTK_P1300\P1300_V1.7_Release」,解壓時選擇全覆蓋以替換被修改過的文件,打補丁之前對目錄樹裡面的文件進行修改過的,需要手動再加上去。
編譯PC模擬器之前需要先把剛才上面得到的目錄樹build一次,開一個dos窗,盤符和目錄轉到代碼目錄樹對應的盤符和目錄,例如:
1. E:
2. cd E:\MTK_P1300\P1300_V1.7_Release\
3. make new
注3:第一次make的時候要用「make new」,make new的時間比較長(慢的機器搞不好要2小時以上),編譯過程中間會出現一些文件找不到的信息,只要編譯過程沒意外終止,那些信息可以忽略。編譯日誌文件位置: build\NEOTEL25_06B\log\,要查看編譯過程有啥問題就看這個目錄下的文件了;生成的bin文件位置: build\NEOTEL25_06B\*.bin,下載燒錄就是燒bin文件。
這里順帶介紹下build的命令格式:
make new 清除後重新編譯整個項目
make resgen 重新生成資源
make remake重新編譯鏈接項目
make viewlog xxx 查看模塊xxx的編譯日誌
make查看可以用make選項幫助信息
注4:如果機器上裝了其他gcc編譯工具鏈(比如winavr之類)的話可能要手動改下Path,否則編譯會出錯,修改Path的方法見注1,也可以修改批處理文件「E:\MTK_P1300\P1300_V1.7_Release\make.bat」,在「perl make2.pl %*」之前加上下面兩句:
1. set PERL5LIB=D:\perl\lib
2. set PATH=D:\perl\bin;d:\progra~1\arm\adsv1_2\bin;E:\MTK_P1300\P1300_V1.7_Release\tools;c:\windows\system32;c:\windows;c:\windows\system
注意,上面的路徑是我機器上的,不是預設安裝路徑,要根據自己的實際安裝路徑做修改。
下面開始編譯PC模擬器了,用VC6打開工程文件「E:\MTK_P1300\P1300_V1.7_Release\plutommi\mmi\ PC_Simulator.dsw」,然後開始編譯,編譯時間比較長,具體看機器配置了,這時又可以干點別的啥了,呵呵。
因為模擬器工程涉及文件較多,編譯費時,建議編譯過程中電腦上少開窗口,特別是網路類的,如QQ,有時會發現開QQ後,編譯過程中VC會掛死,呵呵。有可能是開QQ後防火牆過濾網路數據佔用較多系統資源,如果發現VC編譯特別慢或乾脆掛死,可以重啟動一下電腦,只開必要的窗口,然後開始編譯。
如果編譯過程中發現怪異的問題,如:
1. incomingstringiddef.h(120) : error C2059: syntax error : 'constant'
2. 或者
3. error C2065: 'STR_CM_REDIAL' : undeclared identifier
4. 之類
5.
這個時侯你可能需要看一下你VC相關路徑的設置順序,如下圖:
把VC原本的頭文件路徑調整到最前面,我剛開始編譯的時候SDK的頭文件在前面,編譯總是通不過,改一下就好了,庫也一樣都調整下比較保險,呵呵。
(6)Tracer跟蹤工具
解壓文件P1300_Build_Guide.rar到E:\MTK_P1300,然後在文件管理器進入目錄「E:\MTK_P1300\P1300_Build_Guide」,接著解壓Catcher_L1_v3.10.01.zip到當前目錄下的Catcher_L1_v3.10.01子目錄,進入子目錄Catcher_L1_v3.10.01,發送一個Catcher.exe的快捷方式到桌面。
在需要用到TRACE的時候,在代碼中使用函數
void kal_prompt_trace(mole_type mod_id, const kal_char *fmt,...); 列印需要查看的信息,使用Catcher跟蹤查看。
這個有點類似linux的Kernel Debug工具,具體使用方法見文檔《cather使用手冊.doc》,這個文檔可在壓縮包「huayu101_p1300軟體使用工具及開發指南.rar」裡面找到。
(7)燒錄工具
解壓文件「E:\MTK_P1300\P1300_Build_Guide\ FlashTool_UI_exe_v3.1.05.zip」到當前目錄,然後進入目錄「E:\MTK_P1300\P1300_Build_Guide\FlashTool_v3.1.05」,發送一個Flash_tool.exe的快捷方式到桌面好了。
還有個下載工具FlashTool_v3.0844.00.rar,也是不用安裝,解壓後直接用的,據說燒錄速度比上面那個快。
具體使用方法見文檔《flash_tool_MT平台使用教程.doc》,這個文檔可在壓縮包「huayu101_p1300軟體使用工具及開發指南.rar」裡面找到。
(8)USB串口下載線驅動
運行壓縮文件
1. 「E:\MTK_P1300\P1300_Build_Guide\ PL2303_Driver_XP2K_v20.zip」
裡面的可執行文件進行安裝,一路下一步,這里不再贅述。
nucleus實時操作系統MTK手機軟體系統工程和配置簡介
MTK使用了nucleus實時操作系統,在其上做了個內核抽象層的封裝,以適應多種實時操作系統,如oscar、ThreadX、nucleus。整個軟體系統包括nucleus操作系統、平台設備驅動、協議棧、文件系統、WGUI、MMI、J2ME等。在這里MMI部分幾乎包括了操作系統內核、協議棧、文件系統之上的所有部分,其中WGUI也在其中。
MTK的PC模擬版使用VC的編譯器和鏈接器生成,ARM版使用ADS1.2的編譯器和鏈接器生成。因為MTK的整個軟體系統是一個很龐大而且復雜的工程,並且要支持多個MTK的產品系列和多家客戶的客戶化支持,使用集成開發環境(IDE)已經無法勝任,而且很難做到整個工程的自動構建和資源、代碼的生成。所以MTK的軟體系統使用了windows下的GNU開發工具鏈(MinGW)來進行工程的管理、配置和構建,MTK將MinGW放到了第三方工具中。
另外還使用了perl腳本來解析用戶輸入的命令行參數,因此第三方工具中還包含了ActivePerl(windows下的perl解釋器)。不過,整個軟體系統並沒有使用MinGW的全部工具,好象只使用了make這個工具,由幾個Makefile控制了構建的過程,在編譯和鏈接時根據最終生成PC模擬版還是ARM版而分別調用VC的編譯器和鏈接器或ADS1.2的編譯器和鏈接器。
③ mtk平台修改init.rc後如何快速編譯啊
修改init.rc文件後,一般只需要做以下快速編譯即可生成新文件。
./mk bootimage
④ MTK當修改一些代碼時,使用什麼編譯命令可以
1: ./mk n(r) kernel; ./mk bootimage;當修改build-in 到kernel相關代碼時,要使用此命令,具體文件參考如下:
alps/kernel/
alps/mediatek/platform/mt65xx/kernel/
alps/mediatek/source/kernel/
alps/mediatek/coustom/mt65xx/kernel/
alps/mediatek/coustom/common/kernel/
alps/mediatek/coustom/$porject_name$/kernel
...
ps: 由於./mk bootimag是很長的過程, 如果您沒有修改到ramdisk相關的code, 可以參考以下FAQ加快編譯.
只修改kernel的時候, 快速編譯方法: FAQ05444
2: ./mk n(r) k /mole_path 當修改kernel mole相關代碼時,要使用此命令,具體文件參考如下:
alps/mediatek/platform/mt65xx/kernel/drivers/ccci/
alsp/mediatek/platform/mt65xx/gpu/
......
通常看對應文件夾的Makefile就知道是build in到kernel,還是ko,
obj-m += xxx, 表示build成ko mole,
obj-y += xxx, 表示build in到bootimag.
ps: 要特別注意, 如果你new的時候是user版本, 在使用此命令的時候一定要加上
-oTARGET_BUILD_VARIANT=user, 否則會導致將之前new的結果全部刪除,
3: ./mk n pl 當修改preloader相關代碼時,要使用此命令,具體如下:
alps/mediatek/platform/mt65xx/preloader/
alps/mediatek/source/preloader/
alps/mediatek/coustom/mt65xx/preloader/
alps/mediatek/coustom/common/preloader/
alps/mediatek/coustom/$porject_name$/kernle
......
4: ./mk uboot 當修改uboot相關代碼時,要使用此命令,具體如下:
alps/mediatek/platform/mt65xx/uboot/
alps/mediatek/source/uboot/
alps/bootable/bootloader/uboot/
alps/mediatek/coustom/mt65xx/uboot/
alps/mediatek/coustom/common/buoot/
alps/mediatek/coustom/$porject_name$/uboot/
......
5: ./mk systemimage 當修改system相關代碼時使用此命令,具體文件目錄如下:
alps/frameworks/
alps/packages/
alps/vendor/
alps/hardware/
alps/dalvik/
alsp/external
...........
new完一次後, 如果使用這個命令其實很耗時間, 建議參考6的做法,
6: ./mk mm ./mole_path ; 主要build一些moles, 如lib庫, native 可執行程序, jar庫, jar
apk. 相關文件參考如下:
alps/frameworks/base #可以根據修改的某些文件, 進入更細的目錄去build相關庫.
alps/frameworks/native/libs/binder/ #native目錄下有很多相關的lib庫.
alps/frameworks/native/libs/binder/utils/
alps/external #主要是一些native的二進制可執行文件.
ps: build完後可以找到對應的目標文件直接push到手機, 也可以使用./mk snod直接快速打包新的system.img, 然後download. 可參考如下FAQ:
如何加速./mk snod打包: FAQ10299
7: ./mk recoverimage 當修改recover相關代碼時使用此命令,具體如下:
alps/bootable/recovery/
alps/mediatek/customer/$project_name$/recovery/
......
8: ./mk factoryimage: 當修改factory相關代碼時使用此命令,具體如下:
alps/mediatek/coustom/$project_name$/factory/
alps/mediatek/coustom/common/factory/
alps/mediatek/source/factory/
......
9: ./mk secroimage 當修改secro相關代碼時使用此命令,具體如下:
alps/mediatek/source/secro/
alps/mediatek/coustom/$project_name$/secro/
⑤ 如何編譯MTK的模擬器
MTK的emulator是基於MTK平台的codeabse編譯得到用來閉槐模擬真機的虛擬Device,以下是具體的操作步驟:
1. Build MTK SDK Packages
-對於mt6572以前的chip,用如下的命令編譯:
./makeMtk banyan_addon
-從mt6572開始的chip,由於mt6572之後CPU開始支持X86架構,其performace會更好,mt6572之後,建議編譯x86的emulator來使用.
./makeMtk banyan_addon_x86
編譯完成後會在out/host/linux-x86/sdk_addon下生成MTK的SDK包,比如mtk_sdk_api_addon-17.1.zip,(其中17是android api level)
2. 解壓mtk_sdk_api_addon_17.1.zip
將解壓後的mtk_sdk_api_addon-17.1整個文件夾放在android原本的sdk的add-ons目錄下。
3. 拷貝emulator相關的執行文件到android sdk tool下:
- 對ICS 4.0之前的版本:
進 入android-sdk-windows\add-ons\banyan_addon_ALPS.GB.FDD.MP.V1_eng\tools 目錄下,將其中的 emulator.exe 或者 emulator(如果使用Linux的SDK的話)復制出來,覆蓋android-sdk-windows\tools下的相應 emulator.exe
- 對ICS 4.0及之後的版本:
將 mtk_sdk_api_addon-15.1\emulator對應文件夾下的emulator,emulator-arm,emulator-x86 這三支文件替換android原本sdk的tools目錄下的emulator,emulator-arm,emulator-x86這三支文件(建議備 份google原始sdk下的emulator,emulator-arm,emulator-x86,以團亮便後面用到Google emulator)。
4. 創建新的AVD
在Target裡面選擇帶有MediaTek標塌態寬志的,然後啟動這一AVD就可以了
PS:創建AVD時需要同步將SDK的版本升級到相對的android版本,比如JB2對應的android API level 17,則對應SDK的版本也要升級到level 17,否則將在創建AVD的時候將load不出帶MediaTek標志的target
⑥ Yocto編譯傑發或MTK的linux或android時的幾個問題
編譯問題1(audiomanager_7.0.bb的do_configure報錯):
錯誤:CMake Error at Plugins/PluginCommandInterfaceCAPI/cmake/CommonAPI.cmake:352 (message):
| Failed to generate files from FIDL:
手動執行一下:
$ commonapi-generator-linux-x86 -ll verbose -sk Default -d . /data/linux/hz_rs28_bm/sources/神燃build/tmp/work/armv7a-vfp-neon-poky-linux-gnueabi/audiomanager/7.0-r1/audiomanager-7.0/Plugins/PluginCommandInterfaceCAPI/fidl/CommandInterface.fidl
-bash: /data/linux/hz_rs28_bm/sources/src/build/tools/commonapi_tool/commonapi-generator/commonapi-generator-linux-x86: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
解決(需要安裝32位的glibc庫和32位java jre環境):
$ sudo yum install glibc.i686
$ sudo yum install java-1.8.0-openjdk.i686
$ sudo ln -s /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.i386/jre/bin/java /bin/java
$ java -version (保證是32位的java)
編譯問題2(perl_5.20.0.bb的do_package報錯):
錯誤:ERROR: obj failed with exit code 256 (cmd was 『arm-poky-linux-gnueabi-obj』 –only-keep-debug
… generate_uudmap: File format not recognized
解決(tar在1.29版本之後需要exclude在路徑的前面):
sources/meta/poky/bitbake/lib/bb/fetch2/bzr.py
tar_flags = 「–exclude 『.bzr』 –exclude 『.bzrtags'」
修改成:
tar_flags = 「–exclude=』.bzr』 –exclude=』.bzrtags'」
sources/meta/poky/bitbake/lib/bb/fetch2/cvs.py
tar_flags = 「–exclude 『CVS'」
修改成:
tar_flags = 「–exclude=』CVS'」
sources/meta/poky/bitbake/游輪虛lib/bb/fetch2/repo.py
tar_flags = 「–exclude 『.repo』 –exclude 『.git'」
修改成:
tar_flags = 「–exclude=』.repo』 –exclude=』.git'」
sources/meta/poky/bitbake/lib/bb/fetch2/svn.py
tar_flags = 「–exclude 『桐顫.svn'」
修改成:
tar_flags = 「–exclude=』.svn'」
sources/meta/poky/meta/recipes-devtools/quilt/quilt-0.63.inc
tar -cf – bin/ –exclude \*.in | ( cd ${D}${PTEST_PATH} && tar -xf – )
tar -cf – compat/ –exclude \*.in | ( cd ${D}${PTEST_PATH} && tar -xf – )
tar -cf – quilt/ –exclude \*.in | ( cd ${D}${PTEST_PATH} && tar -xf – )
tar -cf – test/ –exclude mail.test –exclude delete.test | ( cd ${D}${PTEST_PATH} && tar -xf – )
修改成:
tar -c –exclude=\*.in bin/ | ( cd ${D}${PTEST_PATH} && tar -xf – )
tar -c –exclude=\*.in compat/ | ( cd ${D}${PTEST_PATH} && tar -xf – )
tar -c –exclude=\*.in quilt/ | ( cd ${D}${PTEST_PATH} && tar -xf – )
tar -c –exclude=mail.test –exclude=delete.test test/ | ( cd ${D}${PTEST_PATH} && tar -xf – && chmod 777 test)
sources/meta/poky/meta/recipes-extended/sed/sed-4.2.2/sed-add-ptest.patch
+ cd $(BUILDDIR); tar -cf – $(TESTDIR) –exclude *.o | ( cd $(DESTDIR) && tar -xf – )
修改成:
+ cd $(BUILDDIR); tar -c –exclude=*.o $(TESTDIR) | ( cd $(DESTDIR) && tar -xf – )
sources/meta/poky/meta/recipes-support/attr/acl.inc
tar -cf – test/ –exclude nfs | ( cd ${D}${PTEST_PATH} && tar -xf – )
修改成:
tar -c –exclude=nfs test/ | ( cd ${D}${PTEST_PATH} && tar -xf – )
sources/meta/poky/meta/recipes-support/attr/attr.inc
tar -cf – test/ –exclude ext | ( cd ${D}${PTEST_PATH} && tar -xf – )
修改成:
tar -c –exclude=ext test/ | ( cd ${D}${PTEST_PATH} && tar -xf – )
sources/meta/poky/meta/recipes-devtools/perl/perl-ptest.inc
tar -cf – * –exclude \*.o –exclude libperl.so –exclude Makefile –exclude makefile –exclude hostperl \
–exclude miniperl –exclude generate_uudmap –exclude patches | ( cd ${D}${PTEST_PATH} && tar -xf – )
修改成:
tar -c –exclude=\*.o –exclude=libperl.so –exclude=Makefile –exclude=makefile –exclude=hostperl \
–exclude=miniperl –exclude=generate_uudmap –exclude=patches * | ( cd ${D}${PTEST_PATH} && tar -x )
編譯問題3(libunwind_1.1.bb的do_compile報錯):
錯誤:make[1]: latex2man: Command not found
解決:
$ sudo yum install texlive-tetex
$ sudo rpm -ivh ~/latex2man-1.18-2.noarch.rpm
編譯問題3(qt5-app_1.0.bb的do_compile報錯):
錯誤(有一批類似的錯誤):ld: cannot find -lgtest
解決:
$ vi atc_linux/application/btate/btate.pro
equals(MY_BUILD_SYSTEM, atc) {
LIBS += -L $(DA_LIBDIR)/lib -lgtest -lpthread -lbluetoothclient -lglobalbus -lappobj -lapputils
} else {
LIBS += -L$(DA_TOP)/application/lib -L$(DA_TOP)/../../sources/build/tmp/work/armv7a-vfp-neon-poky-linux-gnueabi/atc-binarys/1.0-r0/image/usr/lib -lgtest -lpthread -lbluetoothclient -l
globalbus -lappobj -lapputils
}
$ vi atc_linux/application/gps/gps_bin.pro
equals(MY_BUILD_SYSTEM, atc) {
LIBS += -L $(DA_LIBDIR)/lib -lapputils -lglobalbus -lappobj -lgps
} else {
LIBS += -L$(DA_TOP)/application/lib -L$(DA_TOP)/../../sources/build/tmp/work/armv7a-vfp-neon-poky-linux-gnueabi/gpsd/3.10-r0/gpsd-3.10/ -lapputils -lglobalbus -lappobj -lgps
}
$ vi atc_linux/application/dvr/dvr_bin.pro
equals(MY_BUILD_SYSTEM, atc) {
LIBS += -L${DA_TOP}/lib/lib/ -ldvr -ludev -lsurface_atc -lglobalbus -lappobj -lapputils -lstorage_atc -lgps
} else {
LIBS += -L${DA_TOP}/application/lib -L$(DA_TOP)/../../sources/build/tmp/work/armv7a-vfp-neon-poky-linux-gnueabi/gpsd/3.10-r0/gpsd-3.10/ -ldvr -ludev -lsurface_atc -lglobalbus –
lappobj -lapputils -lstorage_atc -lgps
}
$ vi atc_linux/application/dvr/dvr_bin.pro
INCLUDEPATH += ${DA_TOP}/kernel/kernel-3.18/drivers/ \
../common/ \
../utils/ \
../appobj/include/ \
../globalbus/include/ \
../appcommon/include/ \
../storage_atc/ \
../dvr/gps/ \
../gps/include/ \
../gps/includeex/ \
編譯問題4(makall報錯):
報錯:./makall: line 169: mkisofs: command not found
解決:$ sudo yum install mkisofs
編譯問題5(修改ac83xx_systemd_defconfig再編譯時報錯):
報錯:Applying patch remove-selinux-android.patch
patching file system/extras/ext4_utils/make_ext4fs.c
Hunk #1 FAILED at 62.
1 out of 1 hunk FAILED — rejects in file system/extras/ext4_utils/make_ext4fs.c
解決:
$ vi sources/meta/meta-atc/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb
在裡面做個假的do_patch(),bitbake會優先使用本bb文件的do_patch()函數。
do_patch(){
}
編譯問題6(修改ac83xx_systemd_defconfig再編譯時報錯):
報錯:sources/build/tmp/work/armv7a-vfp-neon-poky-linux-gnueabi/qtbase/5.5.0+gitAUTOINC+c619d2daac-r0/git/src/corelib/tools/qregexp.cpp:3947:1: internal compiler error: in add_stores, at var-tracking.c:6000
解決:
$ cd sources/meta/poky/meta/recipes-devtools/gcc/gcc-4.9/
$ wget http://openlinux.windriver.com/overc/sources/core2_64/gcc-4.9.2-r0.1/0062-gcc-var-tracking.c-backport-from-gcc-trunk-r212178.patch
$ vi sources/meta/poky/meta/recipes-devtools/gcc/gcc-4.9.inc
file://0058-gcc-r212171.patch \
file://0059-gcc-PR-rtl-optimization-63348.patch \
file://target-gcc-includedir.patch \
file://0062-gcc-var-tracking.c-backport-from-gcc-trunk-r212178.patch \
其實就是這個文件:
$ cat 0062-gcc-var-tracking.c-backport-from-gcc-trunk-r212178.patch
From Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20M=C3=BCller-Klieser?= <[email protected]>
Date: Tue, 7 Apr 2015 16:15:11 +0200
Subject: [PATCH] gcc/var-tracking.c: backport from gcc trunk r212178
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
resolves a bug seen on cortexa8 building qt5 libraries.
2014-06-30 Joseph Myers <[email protected]>
* var-tracking.c (add_stores): Return instead of asserting if old
and new values for conditional store are the same.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@212178 138bc75d-0d04-0410-961f-82ee72b054a4
Signed-off-by: Stefan Müller-Klieser <[email protected]>
---
gcc/var-tracking.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
index 65d8285..7c38910 100644
--- a/gcc/var-tracking.c
+++ b/gcc/var-tracking.c
@@ -5997,7 +5997,8 @@ add_stores (rtx loc, const_rtx expr, void *cuip)
{
cselib_val *oval = cselib_lookup (oloc, GET_MODE (oloc), 0, VOIDmode);
- gcc_assert (oval != v);
+ if (oval == v)
+ return;
gcc_assert (REG_P (oloc) || MEM_P (oloc));
if (oval && !cselib_preserved_value_p (oval))
--
1.9.1
編譯問題7(修改ac83xx_systemd_defconfig再編譯時報錯):
報錯:libevdev/1.2.2-r0/libevdev-1.2.2/test/test-main.c:24:19: fatal error: check.h: No such file or directory
解決:
$ vi meta/poky/meta/recipes-support/libevdev/libevdev_1.2.2.bb
LIC_FILES_CHKSUM = 「file://COPYING;md5= \
file://libevdev/libevdev.h;endline=21;md5=″
DEPENDS += 「libcheck」
SRC_URI = 「 http://www.freedesktop.org/software/libevdev/ ${BP}.tar.xz」
編譯問題8(修改ac83xx_systemd_defconfig再編譯時報錯):
報錯:python報錯: 『do_rootfs』, lineno: 17, function
Exception: CalledProcessError: Command 『[『』, 『-ks』, …
解決: 沒有實際問題,重新編譯一次即可,可能是機器太忙導致超時,或者某個命令執行不成功。
編譯問題9(preuboot編譯工具問題):
報錯:make: armv7a-mediatek451_001_vfp-linux-gnueabi-gcc: Command not found
解決:
$ vi atc_linux/bootloader/preuboot/Makefile
#CROSS_COMPILE :=armv7a-mediatek451_001_vfp-linux-gnueabi-
CROSS_COMPILE :=arm-poky-linux-gnueabi-
$ vi ../../atc_linux/bootloader/preuboot/driver/mmc/include/linux/list.h
#ifndef NULL
#define NULL 0
#endif