framework編譯相關(guān)

重點3部分 ?kernel.img ?system.img recovery.img


在rockdev文件夾下存放了各種版本的固件文件:boot.img misc.img pcba_small_misc.img pcba_whole_misc.img recovery.img system.img upgrade_tool?


kernel編譯 在kernel文件夾下已經(jīng)寫好了kernel的編譯腳本build_kernel.sh ? ? ? 要去看明白理解清楚build_kernel.sh的原理和實現(xiàn)酿联≈障ⅲ可以用vim編輯器打開 用 :p! 關(guān)閉

先用“./build_kernel.sh”命令執(zhí)行一遍查看能編譯的所有kernel版本,然后選取其中的一種版本(去掉末端的_defconfig)用“贞让。build_kernel.sh xxxx”命令來執(zhí)行kernel的編譯 如“./build_kernel.sh rk3126_m755_v30_hd”則編譯出版本為rk3126_m755_v30_hd的kernel,“rk3126_m755_v30_hd”則為"rk_3126_m755_v30_hd_defconfig"去掉“_defconfig”所得到的版本號

例如 rk312x-5.1 ?設(shè)備型號為rk312x 系統(tǒng)版本為5.1的系統(tǒng)源碼中kernel的編譯腳本為:

#!/bin/sh

cd arch/arm/configs/

ls rk312* -1

cd ../../../

if [ ! -n "$1" ] ;then

? ? ? ? ? ? ?echo"缺失板型號信息周崭!"

? ? ? ? ? ? ?exit

else

BOARD_NAME=$1

fi

echo "board name : $BOARD_NAME"

make ${BOARD_NAME}_defconfig -j4

make ${BOARD_NAME}.img -j4

../u-boot/tools/resource_tool/pack_resource.sh ../u-boot/tools/resource_tool/resources/ resource.img resource.img ../u-boot/tools/resource_tool/resource_tool

#cp *.img /mnt/share_win7/rk312x-5.1/

#echo "cp img /mnt/share_win7/rk312x-5.1/ done"

注釋一下:

#!/bin/sh? ? ? -->是對shell的聲明,說明你所用的是那種類型的shell及其路徑所在喳张。

cd arch/arm/configs/ ? -->去到當前目錄下的arch文件夾下的arm文件下的configs文件夾中

ls rk312* -1 ? ? ?-->列出所有以rk312開頭的文件 -1 為每個文件名占一行

cd ../../../ ? ?-->返回到初始目錄即kernel目錄

if [ ! -n "$1" ] ;then ? --> $1是指傳遞給腳本的第一個參數(shù)续镇,判斷使用這個腳本時是否有參數(shù)傳遞進來 [ ]里的是判斷空,如果空蹲姐,條件成立

? ? ? ? ? ?echo"缺失板型號信息磨取!" ? ? -->條件成立運行這個

? ? ? ? ? ? ?exit

else

BOARD_NAME=$1 ? ?-->條件不成立運行這里

fi ? ? -->表示語句塊結(jié)束

echo "board name : $BOARD_NAME" ? -->顯示board name

make ${BOARD_NAME}_defconfig -j4 ? ?--> 啟動4線程編譯

make ${BOARD_NAME}.img -j4? --> 啟動4線程編譯

../u-boot/tools/resource_tool/pack_resource.sh ../u-boot/tools/resource_tool/resources/ resource.img resource.img ../u-boot/tools/resource_tool/resource_tool

#cp *.img /mnt/share_win7/rk312x-5.1/

#echo "cp img /mnt/share_win7/rk312x-5.1/ done"

編譯完成后在kernel文件夾下應(yīng)該會生成resource.img人柿、kernel.img、vmlinux忙厌、System.map凫岖、vmlinux.o、Module.symvers這6個文件逢净。還有多個文件夾里的東西被重寫哥放。


以上為編譯kernel的步驟


編譯完kernel后返回上級目錄

因為每個Android系統(tǒng)可能用到的JDK版本不一致,所以需要先調(diào)用build.sh腳本把環(huán)境變量對應(yīng)的值重新賦值一遍

build.sh腳本里封裝了環(huán)境變量的值的賦值語句

使用“source build.sh”就可以快速地執(zhí)行賦值語句的操作

然后執(zhí)行“. build/envsetup.sh”語句執(zhí)行當前目錄下的build文件夾下的envsetup.sh腳本文件來以剛剛的賦值進行環(huán)境變量的變更以及一些命令的初始化(雖然有的build.sh腳本里自帶了調(diào)用 .build/envsetup.sh的語句但是為了以防萬一還是執(zhí)行一遍最好)

改變了環(huán)境變量后可以用java -version來查詢當前的jdk版本是否符合需要編譯的系統(tǒng)所需的jdk版本


然后執(zhí)行l(wèi)unch命令來選擇具體的需要生成的設(shè)備型號的信息

回到源碼的根目錄爹土,執(zhí)行命令make -j4對源碼進行編譯甥雕。


另外,也可以對系統(tǒng)中具體某個app進行編譯

先在源碼的根目錄下通過cd命令進入到packages/apps/ ? ?下胀茵,選擇想編譯的app項目,然后輸入mm,就可以編譯了社露。同理,編譯app前跟編譯整個系統(tǒng)前一樣琼娘,要確保jdk版本的一致性峭弟。



系統(tǒng)編譯完成之后 需要執(zhí)行 ./mkimage.sh 生成刷機文件。

參考資料

1脱拼、http://blog.csdn.net/mike8825/article/details/49385797

2瞒瘸、http://blog.csdn.net/kangear/article/details/11840837

進入到/rockdev/下的對應(yīng)的設(shè)備文件夾。

輸入 adb reboot bootloader進入刷機模式

使用 ./upgrade_tool 命令進入刷機操作


1熄浓、選擇設(shè)備的DevNo情臭,重新搜索按R,退出按Q

2赌蔑、再選擇對應(yīng)的命令進行刷機操作





刷機命令

左側(cè)是功能描述俯在,右側(cè)是命令語法。升級相關(guān)操作都在upgrade command列表下娃惯,忘記命令語法可以輸入H進行查看朝巫,清屏輸入CS,退出按Q

a. CD命令:選擇設(shè)備石景,當執(zhí)行的命令有包含設(shè)備重啟操作時,需重新選擇設(shè)備拙吉,當改變操作設(shè)備時需重新選擇

b. SD命令:msc切換到rockusb升級模式潮孽。當切換執(zhí)行成功后,需要重新選擇設(shè)備

c. UL命令:升級loader功能筷黔,當執(zhí)行成功后需要重新選擇設(shè)備

d. DI命令:下載單獨image鏡像到指定扇區(qū)往史,例如升級kernel.img或者system.img都可以直接使用此功能。例如下載kernel.img:DI -kernel.img parameter //如果之前通過di下載過parameter佛舱,則再下載kernel.img時就可以不用指定最后的parameter參數(shù)

e. DB命令:下載boot椎例,在maskrom狀態(tài)下挨决,可以通過此功能,讓maskrom設(shè)備進行Rockusb協(xié)議通訊订歪。

f. EF命令:擦除整個nand flash

g. LF命令:低格保留塊后面區(qū)域脖祈,只有在loader模式下使用

注:DI、UF刷晋、RD盖高、SD、EF眼虱、LF喻奥、DB和RD命令支持命令行方式調(diào)用,例:sudo ./upgrade_tool uf update.img

注:從1.13版本開始DI命令可以支持一次下載多個分區(qū)捏悬,使用方法如下:

? ? ? ? 例如:下載kernel和system

? ? ? ? ?di - k,-s kernel.img,system.img

? ? ? ? ?如果在config.ini文件里面預(yù)先設(shè)置了默認路徑則命令可以簡化為:di -k,-s


3撞蚕、刷機完成后輸入命令 rd 重啟設(shè)備

4、輸入q退出刷機操作



模塊編譯

通過 find xxx -name Android.mk可以查詢xxx文件夾下所有的Android.mk文件

模塊編譯命令分為三種:

一过牙、make 命令 適用于第一次編譯

1甥厦、應(yīng)用層程序(模塊)編譯,通常都是編譯一下apkt文件

? ? ? 查看需要編譯的程序的Android.mk文件抒和,查詢其LOCAL_PACKAGE_NAME變量的值矫渔,然后調(diào)用 make LOCAL_PACKAGE_NAME變量的值,就能對程序(模塊)進行編譯

2摧莽、編譯框架層和系統(tǒng)運行庫源碼

? ? ? 對于框架層和系統(tǒng)運行庫庙洼,需要查看的是Android.mk文件的LOCAL_MODULE變量的值,然后調(diào)用make LOCAL_MODULE變量的值,就能對此框架層或系統(tǒng)運行庫進行編譯镊辕。

二油够、mmm命令 適用于第二次以及之后編譯使用

? ? ? ?用于在源碼根目錄下編譯指定模塊,參數(shù)為模塊的相對路徑征懈。比如要編譯應(yīng)用Phone的源碼石咬。需要在根目錄下執(zhí)行命令“mmm packages/apps/phone”

三、mm命令 使用于第二次以及之后編譯使用

? ? ? ? 用于在需要編譯的模塊的根目錄下進行編譯卖哎。例如要編譯應(yīng)用Phone的源碼鬼悠。需要先cd到Phone源碼的根目錄下然后執(zhí)行“mm”命令即可

注:mmm和mm命令必須在執(zhí)行“.build/envsetup.sh”之后才能使用,并且只編譯發(fā)生變化的文件亏娜。如果要編譯模塊的所有文件焕窝,需要-B選項,例如mm? -B维贺。


Android源碼編譯之后它掂,對于一個系統(tǒng)再重新編譯所需要做的清理工作:

1、在源碼的根目錄下溯泣,make clean

2虐秋、進入kernel目錄下榕茧,執(zhí)行make mrproper

3、再重新從內(nèi)核開始進行編譯客给。


OTA升級:

OTA分析:

http://blog.csdn.net/myarrow/article/details/8110110


各種參考資料:

http://blog.csdn.net/baiyongtask/article/details/43154715

http://blog.chinaunix.net/uid-26926660-id-3216956.html

http://www.reibang.com/p/367f0886e62b

http://www.reibang.com/p/3922ec229077

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末用押,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子起愈,更是在濱河造成了極大的恐慌只恨,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抬虽,死亡現(xiàn)場離奇詭異官觅,居然都是意外死亡,警方通過查閱死者的電腦和手機阐污,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門休涤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人笛辟,你說我怎么就攤上這事功氨。” “怎么了手幢?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵捷凄,是天一觀的道長。 經(jīng)常有香客問我围来,道長跺涤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任监透,我火速辦了婚禮桶错,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘胀蛮。我一直安慰自己院刁,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布粪狼。 她就那樣靜靜地躺著退腥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪再榄。 梳的紋絲不亂的頭發(fā)上阅虫,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音不跟,去河邊找鬼。 笑死米碰,一個胖子當著我的面吹牛窝革,可吹牛的內(nèi)容都是我干的购城。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼虐译,長吁一口氣:“原來是場噩夢啊……” “哼瘪板!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起漆诽,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤侮攀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后厢拭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兰英,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年供鸠,在試婚紗的時候發(fā)現(xiàn)自己被綠了畦贸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡楞捂,死狀恐怖薄坏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寨闹,我是刑警寧澤胶坠,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站繁堡,受9級特大地震影響沈善,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜帖蔓,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一矮瘟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧塑娇,春花似錦澈侠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至写妥,卻和暖如春拳球,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背珍特。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工祝峻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓莱找,卻偏偏與公主長得像酬姆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子奥溺,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • feisky云計算辞色、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,815評論 0 5
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 2,693評論 0 3
  • 從字足跡能看出寫字人的性格。 我們常在信件和文件上簽名浮定,殊不知相满,筆跡是能展示寫字人的個性。不過桦卒,筆跡總歸是后天形成...
    Nancypower閱讀 348評論 2 0
  • 知乎看到一句話立美,感覺說的挺對。就收藏一下: 大意是闸盔,當一個遇到挫折時悯辙,別人的心靈雞湯,正能量迎吵,是沒什么用的躲撰。因為你...
    買饅頭停用卸載閱讀 293評論 0 0
  • http是一種無狀態(tài)協(xié)議; 我們先探討用戶登陸的整個過程: 1击费、網(wǎng)頁顯示登陸頁面拢蛋,用戶輸入用戶名和密碼等信息,這時...
    bellchen閱讀 338評論 2 5