- 編譯內(nèi)核
lichee文件夾下霎桅,有build.sh的腳本巾钉,主要內(nèi)容是對(duì)kernel內(nèi)核的編譯瘫镇,out目錄下會(huì)產(chǎn)生已選擇相應(yīng)的img,之后在android編譯的時(shí)候則會(huì)直接從中拷貝進(jìn)行編譯盖溺。 - 編譯android
- 編譯之前漓糙,會(huì)執(zhí)行source build/envsetup.sh和lunch命令,其中l(wèi)unch會(huì)跟一個(gè)參數(shù)表示產(chǎn)品的型號(hào)和eng烘嘱,userdebug之類昆禽。
- 之后運(yùn)行extract-bsp:extract-bsp是一個(gè)腳本函數(shù),在device/softwinner/common/vendorsetup.sh 他也是在lunch的時(shí)候被執(zhí)行的拙友,也就是說如果先不執(zhí)行l(wèi)unch ,extract-bsp是無效的歼郭。這個(gè)腳本的主要作用是將lichee編譯的結(jié)果輸出到device/softwinner/vendor目錄下遗契。
- 打包IMG:上面的extract-esp執(zhí)行完之后,則可以運(yùn)行make -jn(n根據(jù)電腦的配置選擇病曾,我用的是8)牍蜂,第一次編譯的過程非常久,大概1-2個(gè)小時(shí)左右泰涂。編譯結(jié)束后鲫竞,會(huì)在out文件夾下生成很多的img文件這也是為我們的打包做準(zhǔn)備。
- 最后執(zhí)行pack命令逼蒙,進(jìn)行打包从绘,運(yùn)行結(jié)束之后,最后會(huì)在lichee/tools/pack目錄下,一般格式是sun8xxx_android_yourname_uart0.img(其中yourname是自己取的名字)僵井。生成的img文件就可以進(jìn)行固件的燒錄了陕截,燒錄的方式由硬件商提供。
1. android編譯過程
(1) 初始化參數(shù)設(shè)置(初始化編譯環(huán)境):執(zhí)行source build/envsetup.sh(加載指令和分支)
(2) 檢查環(huán)境變量并配置目標(biāo)環(huán)境:lunch 命令
(3) 選擇 lunch:讀取目標(biāo)配置和平臺(tái)信息
(4) 清空輸出目錄:out目錄清掉才能夠重新編譯
(5) 執(zhí)行編譯:make -j16或make -j8
(6) 生成升級(jí)包:使用打包程序生成升級(jí)包
2. 編譯過程及腳本分析
(1) .bulid/envsetup.sh 分析
- 在源碼目錄下通過
. bulid/envsetup.sh
或source bulid/envsetup.sh
來執(zhí)行envsetup.sh文件
注意:將 source 替換成 .(一個(gè)點(diǎn))可以省去一些字符批什,這種簡(jiǎn)寫形式在文檔中更為常用农曲。
說明:在源碼目錄下通過vi bulid/envsetup.sh
命令來查看envsetup.sh文件,envsetup.sh文件內(nèi)容如下(包括各種編譯命令)驻债。
備注:只有執(zhí)行過envsetup.sh文件后才可以把各種編譯命令加載到終端上乳规,之后才可以在終端使用各種編譯命令。通過make命令可以編譯整個(gè)android源碼合呐;mm指令編譯當(dāng)前目錄(單獨(dú)模塊的編譯)暮的;mmm指令就是用來編譯指定目錄(單獨(dú)模塊的編譯);lunch指令設(shè)置編譯目標(biāo)合砂,所謂的編譯目標(biāo)就是生成的鏡像要運(yùn)行在什么樣的設(shè)備上青扔。
問題:執(zhí)行
.bulid/envsetup.sh
命令時(shí),做了什么事情翩伪?
回答:執(zhí)行.bulid/envsetup.sh
命令時(shí)微猖,做了加載編譯命令和加載平臺(tái)信息(分支)兩件事。加載編譯命令后則可以在shell中使用envsetup.sh腳本文件中包含的各種編譯命令缘屹,如下面所示的執(zhí)行lunch
命令獲取所有的分支凛剥;加載平臺(tái)信息后則可以獲取對(duì)應(yīng)的分支。
(2) lunch 分析
- 在源碼目錄下通過
lunch
命令來獲取所有l(wèi)unch(分支)
-
選擇lunch(分支)
- 通過
export
命令來查看當(dāng)前環(huán)境變量
問題:lunch做了什么轻姿?如何增加和刪除一個(gè)lunch犁珠?
回答:通過修改分支的源碼來減少分支,通過復(fù)制分支并修改來增加分支互亮。
3. android源碼編譯
備注:使用make命令make -j16
或make -j8
進(jìn)行源碼編譯犁享。
問題:如何使用android的編譯命令編譯單獨(dú)的模塊?
回答:通過make命令可以編譯整個(gè)android源碼豹休;mm指令編譯當(dāng)前目錄(單獨(dú)模塊的編譯)炊昆;mmm指令就是用來編譯指定目錄(單獨(dú)模塊的編譯)。