1. 程式人生 > >Android編譯打包燒錄

Android編譯打包燒錄

640?wx_fmt=png

今日科技快訊

近日,有訊息稱阿里體育A輪融資估值70億元。阿里體育集團成立於2015年9月,由阿里巴巴控股,新浪和雲峰基金共同出資。成立之初,即成為國際足聯俱樂部世界盃2015-2022年的獨家冠名贊助商。去年1月,阿里體育又將美國職業橄欖球大聯盟NFL在中國的轉播權納入囊中。

作者簡介

本篇作者 Nipuream,陸陸續續投了好幾篇稿,算是作者裡的老司機了。今天,他將分享編譯Android原始碼並寫入硬體裝置的過程,感興趣的朋友可以仔細看看。 

Nipuream 的部落格地址:

http://blog.csdn.net/yanghuinipurean

搭建環境

16年底,從深圳轉戰到杭州,當然也重新換了份工作,記得剛來的時候非常的辛苦,因為10月份廣東還是比較熱的,到杭州這邊好冷,那時候嚴重的不適應,很嚴重的感冒… 這段時間嘗試去了解了下原始碼,還是收穫很多的,現在努力學習cpp中,準備往這方面轉了。因為新公司都是在原始碼上編譯的,所以或多或少也學習研究了下,記得剛開始下載Android原始碼的時候,那個蛋疼,折騰了我一個多星期,現在寫篇文章總結下。

安裝ubuntu系統

我選擇的是在window上安裝虛擬機器,我知道好多人用mac去編譯,窮屌絲也有窮屌絲的門路,錢不是我們阻止我們學習的障礙,充分利用window和linux各自的優勢,我覺得並不比mac遜色多少。安裝好了如下圖所示:

640?wx_fmt=png

安裝相應的庫支援

sudo apt-get install Git-core gnupg flex bison gperf build-essential zip curl zliblg-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev

根據我慘痛的經歷,一般編譯不成功基本都是環境有問題,程式碼有問題的可能性是非常的小的。如果有些庫安裝不了,使用 sudo apt-get update

一下,如果還是不行,就得自行搜尋解決一下了。另外還要安裝交叉編譯器和jdk,其中如果對交叉編譯器不明白的或者不知道如何配置的請看這篇文章

arm-linux-gcc搭建過程圖解

http://www.linuxidc.com/Linux/2013-06/85902.htm

其中jdk需要注意的是在android5.0之後就要使用openjdk了,具體原因就是因為Oracle和google的那場官司了,使用命令 apt-get install openjdk-7-jdk.安裝完成之後得配置下環境變數,可以在 etc/profile 或者是 ~/.bashrc檔案最後輸入:

640?wx_fmt=png

配置成功後,應該如下圖所示:

640?wx_fmt=png

另外,交叉編譯器安裝成功之後,要將Linux根目錄的Makefile檔案中cpu架構改成arm的,如下圖所示:

640?wx_fmt=png

編譯

編譯linux

執行build.sh config配置環境:

640?wx_fmt=png

然後直接執行 ./build.sh 命令開始編譯

640?wx_fmt=png

編譯Android

首先要切換到我們的android目錄下,然後執行envsetup.sh指令碼配置我們的環境,然後選擇我們要編譯的分支,具體步驟如圖:

640?wx_fmt=png

接下來,我們要把 linux 編譯好的 uboot 和 kenel 拷貝到我們 android 目錄下,因為我們已經執行過我們的 envsetup.sh 指令碼了,而 envsetup.sh 指令碼又執行了我們的 device/softwinner/common/vendorsetup.sh 指令碼,vendorsetup.sh 的指令碼中有個函式叫做 extract-bsp(),我們來看下這個函式:

640?wx_fmt=png

可以看到從 linux 目錄拷貝 kernel 和一些 modules,需要主要的是 get_lichee_out_dir() 函式,Linux 目錄一定要放在android目錄上層目錄下,自己檢視原始碼即可。

接下來,我們便可以執行我們的make命令來編譯我們的android系統了,make後面可以帶個引數表示執行編譯的執行緒條數,如果 make -j8,後面的數字一般都是你電腦cpu的核數乘以2。

640?wx_fmt=png

我的電腦是6核的,所以我可以用 make -j12,但是我就使用了 make -j8,整個編譯的過程很漫長,中途可能會報錯,報錯的原因90%以上都是環境沒有配置好,大概一般的3個小時50分鐘左右就會編譯結束,當然這個時間也是根據你計算機cpu的能力的,像用公司的編譯伺服器編譯,只需要十幾分鍾…

編譯成功後,我們使用 vendorsetup.sh 腳本里面的 pack函式 將編譯出來的映象檔案打包成 rom,如圖所示,紅色部分表示生成的路徑。

640?wx_fmt=png

燒錄

具體每個廠商都會提供燒錄軟體的,即使沒有提供也會把燒錄的步驟的指令碼發給你的,比如芯靈圖家的A33板子就是用 PhoenixSuit 燒錄的,我們公司的是在 fastboot 模式下,燒錄rom的。按照具體的步驟做就行了,接下來發張將自己編譯過的 android6.0系統 燒錄到硬體的效果圖,很是有成就感,有麼有。

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

訪問虛擬機器

畢竟是兩個系統,操作起來也不是很方面,檔案互訪有很多方案,但是我覺得基於 samba 服務是最方便的,window本身就集成了samba服務,所以只需要在ubuntu系統上安裝下即可,首先 sudo apt-get install samba,安裝完成之後,敲入命令 vim /etc/samba/smb.conf , 在這個檔案末尾新增幾句話,如圖所示:

640?wx_fmt=png

接下來設定 root 的密碼,敲入命令 smbpasswd -a root ,然後重新啟動samba服務, service smb restart,檢視samba程序是否啟動 ps -ef。注意有點非常的重要,我們需要設定虛擬機器網路為橋接模式,這樣就會自動獲取ip連線網路了。最後在window上對映我們Linux的磁碟,如圖所示:

640?wx_fmt=png

640?wx_fmt=png

輸入我們虛擬機器的ip就行了,進入Z盤就很方便的訪問我們linux中的檔案系統了。可以看到這就是我們的Linux檔案系統的根目錄。當然你也可以通過ssh訪問我們的linux,下面是我通過Xshell訪問我們的虛擬機器。

640?wx_fmt=png

更多

每天學習累了,看些搞笑的段子放鬆一下吧。關注最具娛樂精神的公眾號,每天都有好心情。

640?wx_fmt=gif

如果你有好的技術文章想和大家分享,歡迎向我的公眾號投稿,投稿具體細節請在公眾號主頁點選“投稿”選單檢視。

歡迎長按下圖 -> 識別圖中二維碼或者掃一掃關注我的公眾號:

640?wx_fmt=jpeg