Android系统移植与调试之-------Amlogic方案编译步骤
1.?拷貝Amlogic的SourceCode
切換目錄到??/home/roco/work/amlogic/SourceCode/mx0831-0525下將mx0831-0525.tgz拷貝到??/home/pyou/?目錄下,解壓,生成mx0831-0525目錄。此目錄就是將來的工作目錄。??tar.bz2?命令:?tar?-jxvf??*.tar.bz2
2.?配置環境變量
2.1?準備工作
切換目錄到?/home/roco/work/amlogic/Document中,拷貝amlogic-tool.zip到?/home/pyou下解壓生成?amlogic-tool目錄
該目錄下有以下3個壓縮文件
1. arm-2010q1-188-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
2. arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu1.tar.bz2
3. gnutools-arc2.3-p0-ubuntu-9.04-2010-5-10.tar.bz2
由于前面兩個解壓的目錄相同,所以新建一個目錄188,并將arm-2010q1-188-arm-none-eabi-i686-pc-linux-gnu.tar.bz2移到188目錄下,解壓生成目錄/amlogic-tool/188/arm-2010q
切換目錄到/amlogic-tool,分別解壓gnutools-arc2.3-p0-ubuntu-9.04-2010-5-10.tar.bz2文件和arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu1.tar.bz2?文件,生成目錄/amlogic-tool/arm-2010q1和目錄/amlogic-tool/opt
2.2?修改.bashrc?文件添加環境變量
切換目錄到?/home/pyou目錄下,使用ll命令查文件列表,然后使用vim命令修改.bashrc?文件,在該文件最后添加環境變量。如下所示:
PATH="$PATH:/home/pyou/amlogic-tool/188/arm-2010q1/bin:/home/pyou/amlogic-tool/arm-2010q1/bin:/home/pyou/amlogic-tool/opt/gnutools/arc2.3-p0/elf32-4.2.1/bin:/home/pyou/amlogic-tool/opt/gnutools/arc2.3-p0/uclibc-4.2.1/bin"
3.?編譯u-boot
切換目錄到~/mx0831-0525/uboot目錄下
使用make?help?|grep?roco?查看項目配置,查看命令列表,然后再命令列表中查找到make?m6_roco_1212_config命令并使用該命令進行編譯,編譯完后再使用make命令進行編譯,在~/mx0831-0525/uboot/build目錄下會生成u-boot.bin文件
1.?make?m6_roco_1212_config
2.?Make
3.?cp?build/u-boot.bin??../device/other/TBDG1073
4.?編譯項目
切換目錄至~/mx0831-0525
4.1?使用source?build/envsetup.sh命令
這個命令是用來將envsetup.sh里的所有用到的命令加載到環境變量里去,我們來分析下它。
envsetup.sh里的主要命令如下:
function?help()?#?顯示幫助信息
function?get_abs_build_var()#?獲取絕對變量
function?get_build_var()#?獲取絕對變量
function?check_product()#?檢查product
function?check_variant()#?檢查變量
function?setpaths() ?#?設置文件路徑
function?printconfig()#?打印配置
function?set_stuff_for_environment() ??#?設置環境變量
function?set_sequence_number() ????#?設置序號
function?settitle() ?#?設置標題
function?choosetype() ?#?設置type
function?chooseproduct() ??#?設置product
function?choosevariant() ??#?設置variant
function?tapas() ??#?功能同choosecombo
function?choosecombo() ??#?設置編譯參數
function?add_lunch_combo() ??#?添加lunch項目
function?print_lunch_menu() ?#?打印lunch列表
function?lunch()#?配置lunch
function?m()#?make?from?top
function?findmakefile() ?#?查找makefile
function?mm() ?#?make?from?current?directory
function?mmm() ??#?make?the?supplied?directories
function?croot()#?回到根目錄
function?cproj()
function?pid()
function?systemstack()
function?gdbclient()
function?jgrep()#?查找java文件
function?cgrep() ??#?查找c/cpp文件
function?resgrep()
function?tracedmdump()
function?runhat()
function?getbugreports()
function?startviewserver()
function?stopviewserver()
function?isviewserverstarted()
function?smoketest()
function?runtest()
function?godir?()?#?跳到指定目錄?405
?#?add_lunch_combo函數被多次調用,就是它來添加Android編譯選項
?#?Clear?this?variable.??It?will?be?built?up?again?when?the?vendorsetup.sh
?406?#?files?are?included?at?the?end?of?this?file.
?#?清空LUNCH_MENU_CHOICES變量,用來存在編譯選項
?407?unset?LUNCH_MENU_CHOICES
?408?function?add_lunch_combo()???
?409?{
?410?????local?new_combo=$1?????????#?獲得add_lunch_combo被調用時的參數
?411?????local?c
?????#?依次遍歷LUNCH_MENU_CHOICES里的值,其實該函數第一次調用時,該值為空
?412?????for?c?in?${LUNCH_MENU_CHOICES[@]}?;?do?
?413?????????if?[?"$new_combo"?=?"$c"?]?;?then????#?如果參數里的值已經存在于LUNCH_MENU_CHOICES變量里,則返回
?414?????????????return
?415?????????fi
?416?????done
?????#?如果參數的值不存在,則添加到LUNCH_MENU_CHOICES變量里
?417?????LUNCH_MENU_CHOICES=(${LUNCH_MENU_CHOICES[@]}?$new_combo)
?418?}
#?這是系統自動增加了一個默認的編譯項?generic-eng
?420?#?add?the?default?one?here
?421?add_lunch_combo?generic-eng????#?調用上面的add_lunch_combo函數,將generic-eng作為參數傳遞過去
?422?
?423?#?if?we're?on?linux,?add?the?simulator.??There?is?a?special?case
?424?#?in?lunch?to?deal?with?the?simulator
?425?if?[?"$(uname)"?=?"Linux"?]?;?then
?426?????add_lunch_combo?simulator
?427?fi
#?下面的代碼很重要,它要從vendor目錄下查找vendorsetup.sh文件,如果查到了,就加載它
1037?#?Execute?the?contents?of?any?vendorsetup.sh?files?we?can?find.
1038?for?f?in?`/bin/ls?vendor/*/vendorsetup.sh?vendor/*/build/vendorsetup.sh?2>?/dev/null`
1039?do
1040?????echo?"including?$f"
1041????.?$f???????#?執行找到的腳本,其實里面就是廠商自己定義的編譯選項
1042?done
1043?unset?f
envsetup.sh其主要作用如下:
1.?加載了編譯時使用到的函數命令,如:help,lunch,m,mm,mmm等
2.?添加了兩個編譯選項:generic-eng和simulator,這兩個選項是系統默認選項
3.?查找vendor/<-廠商目錄>/和vendor/<廠商目錄>/build/目錄下的vendorsetup.sh,如果存在的話,加載執行它,添加廠商自己定義產品的編譯選項
?其實,上述第3條是向編譯系統添加了廠商自己定義產品的編譯選項,里面的代碼就是:add_lunch_combo?xxx-xxx。
根據上面的內容,可以推測出,如果要想定義自己的產品編譯項,簡單的辦法是直接在envsetup.sh最后,添加上add_lunch_combo?myProduct-eng,當然這么做,不太符合上面代碼最后的本意,我們還是老實的在vendor目錄下創建自己公司名字,然后在公司目錄下創建一個新的vendorsetup.sh,在里面添加上自己的產品編譯項
?
| #mkdir?vendor/farsight/ #touch?vendor/farsight/vendorsetup.sh #echo?"add_lunch_combo?fs100-eng"?>?vendor/farsight/vendorsetup.sh |
?
這樣,當我們在執行source?build/envsetup.sh命令的時候,可以在shell上看到下面的信息:
?
| including?vendor/farsight/vendorsetup.sh |
4.2?使用lunch命令
按數字17,因為該項目是17對應的項目TBG1073-user?。
lunch命令是envsetup.sh里定義的一個命令,用來讓用戶選擇編譯項,來定義Product和編譯過程中用到的全局變量。
我們一直沒有說明前面的fs100-eng是什么意思,現在來說明下,fs100是我定義的產品的名字,eng是產品的編譯類型,除了eng外,還有user,?userdebug,分別表示:
eng:?工程機,
user:最終用戶機
userdebug:調試測試機
tests:測試機?
由此可見,除了eng和user外,另外兩個一般不能交給最終用戶的,記得m8出來的時候,先放出了一部分eng工程機,然后出來了user機之后,可以用工程機換。
?
那么這四個類型是干什么用的呢?其實,在main.mk里有說明,在Android的源碼里,每一個目標(也可以看成工程)目錄都有一個Android.mk的makefile,每個目標的Android.mk中有一個類型聲明:LOCAL_MODULE_TAGS,這個TAGS就是用來指定,當前的目標編譯完了屬于哪個分類里。
?
????PS:Android.mk和Linux里的makefile不太一樣,它是Android編譯系統自己定義的一個makefile來方便編譯成:c,c++的動態、靜態庫或可執行程序,或java庫或android的程序,
4.3?使用make?custom1?命令
清除make?clean
打補丁make?custom1
打完補丁后記得執行以下命令
find?.?-name?*.xml.orig?|?xargs?rm?
find?.?-name?*.xml.reg?|?xargs?rm
????????find?.?-name?*.xml.rej?|?xargs?rm
4.4?使用make?otapackage?–j8?命令
執行完該命令后會在out/target/product/TBDG1073/目錄下生成一些zip升級壓縮包,如:out/target/product/TBDG1073/TBDG1073-ota-20130708.v016.zip??
生成的目標平臺的相關的文件在out/target/product/board_name/中(board_name要與目標平臺相匹配)。
| 目錄或文件 | 描述 |
| gxxref-ota-eng.[linux?user?name].zip | 升級包 |
| obj/ | 存放中間文件的目錄 |
| recovery/ | recovery的rootfs目錄,和ramdisk.img相對應 |
| res-package.img | uboot使用的一些資源(充電圖片等) |
| root/ | 正常啟動的rootfs目錄,和ramdisk-recovery.img相對應 |
| symbols/ | 存放符號表的目錄 |
| system/ | 存放大多數目標文件的目錄 |
| u-boot.bin | uboot,就是自己項目目錄下的uboot文件 |
| boot.img | 正常啟動的鏡像, 由header+kernel(uImage)+ramdisk.img構成 |
| recovery.img | recovery模式啟動的鏡像, 由header+kernel(uImage)+ramdisk-recovery.img構成 |
==================================================================================================
? 作者:歐陽鵬 ?歡迎轉載,與人分享是進步的源泉!
? 轉載請保留原文地址:http://blog.csdn.net/ouyang_peng
==================================================================================================
轉載于:https://www.cnblogs.com/ouyangpeng/p/8538349.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Android系统移植与调试之-------Amlogic方案编译步骤的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 真实世界:使用WCF扩展记录服务调用时间
- 下一篇: 网络电话---异常处理01