歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 從頭開始為BeagleBoard編譯Android系統

從頭開始為BeagleBoard編譯Android系統

日期:2017/2/28 16:05:16   编辑:Linux教程

折騰了幾天,終於將Android系統編譯好,成功運行在BeagleBoard上。為了讓大家可以更快上手,將整個編譯過程詳細記錄下來,供大家參考,其中有幾個容易出問題的地方列出了解決方法,可以少繞彎子。

最開始為BeagleBoard編譯Android系統時,准備按標准的做法從android.git.kernel.org下載repo,然後通過repo從kernel.org下載Android源碼。但是後來發現kernel.org被黑了,下載不了源碼,只能想其他辦法。

因為無法從kernel.org下載源碼,所以找了德州儀器的網站下載為BeagleBoard打包的Android源碼,先找到的是FroYo DevKit2.2版本,下載頁面鏈接如下:

http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/02_02_00/index_FDS.html

不過下載後編譯的uImage無法啟動,找了幾種解決方法都不行,所以再找了一個更新的版本,是GingerBread 2.3.4版,下載頁面鏈接如下:

http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/TI_Android_GingerBread_2_3_4_DevKit_2_1/index_FDS.html

最終編譯運行成功,下面是具體步驟。

1. 下載GingerBread 2.3.4版Devkit。

下載GingerBread 2.3.4 Devkit的原因有幾個,一個是Devkit包裡有編譯好的Android系統,可以用於測試,特別是問題隔離的測試,一個是因為Devkit包裡有一些工具在下面的步驟中需要用到,還有一個是因為Devkit包裡的Documents目錄有一個文檔名為《TI-Android-GingerBread-2.3.4-DevKit-2.1_DeveloperGuide.pdf》,裡面有整個編譯的步驟,我也主要是根據這個文檔中的步驟進行編譯的。

GingerBread 2.3.4 Devkit包有500多兆,可以在GingerBread 2.3.4 下載頁面找到,如上所述,該下載頁面地址是:

http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/TI_Android_GingerBread_2_3_4_DevKit_2_1/index_FDS.html

懶得找的話直接通過以下鏈接下載也可以:

http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/TI_Android_GingerBread_2_3_4_DevKit_2_1/exports/TI_Android_GingerBread_2_3_4_DevKit_2_1.tar.gz

下載完成之後在Windows上直接通過解壓工具可以解開,打開裡面的《《TI-Android-GingerBread-2.3.4-DevKit-2.1_DeveloperGuide.pdf》供參考。

2. 下載GingerBread 2.3.4版源碼

GingerBread 2.3.4的源碼理論上可以通過repo 從gitorious.org上下載下來,不過整個包太大,不建議直接下載。建議從德儀的網站上直接下載一個打包好的文件。

GingerBread 2.3.4 同樣可以在GingerBread 2.3.4下載頁面找到,為了方便大家,直接將下載地址列出:

http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/TI_Android_GingerBread_2_3_4_DevKit_2_1/exports/TI_Android_GingerBread_2_3_4Sources.tar.gz

直接從Windows系統通過浏覽器下載就可以,整個包大概有4G,所以需要一段時間下載。

3. 准備Ubuntu 10.0.4

GingerBread 2.3.4需要Ubuntu 10.0.4作為交叉編譯環境,所以需要安裝一個Ununtu 10.0.4。我是直接在VMWare上安裝Ubuntu 10.0.4,具體的安裝過程就不記錄了,參考其它有關Ubuntu的文章。提前提醒大家給Ubuntu准備一個很大的硬盤,比如40G,編譯過程需要很大的硬盤空間,我剛開始設了個20G的虛擬硬盤,後面還是發現不夠用。

安裝了Ubuntu之後需要按要求升級Ubuntu,具體升級命令如下,需要注意兩點,

第一:《DeveloperGuide》一文中的語句有問題,第一行少了一個ubuntu,執行到第二句是會出錯,請按照下面的語句來。

第二:這裡安裝的java是6.0版本的,和之前要求必須是5.0版本不同。

$ sudo add-apt-repository "deb http://archive.canonical.com/ubuntu lucid partner"

$ sudo add-apt-repository "deb-src http://archive.canonical.com/ubuntu lucid partner"

$ sudo apt-get update

$ sudo apt-get install git-core gnupg sun-java6-jdk flex bison gperf

libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl

libncurses5-dev zlib1g-dev minicom tftpd uboot-mkimage expect

$ sudo update-java-alternatives -s java-6-sun

4. 下載repo

首先需要在用戶目錄新建一個bin目錄,並設置到路徑中,命令如下:

$ mkdir ~/bin

$ PATH=~/bin:$PATH

然後下載repo,因為kernel.org不能用,需要找其他地方下載,我用的是國外網友共享的,命令如下:

curl "http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo" > ~/bin/repo

chmod a+x ~/bin/repo

注意下載後需要修改repo執行的權限

5. 解壓Android源碼

在Ubuntu上新建一個目錄,叫rowboat-android,(這個目錄名其實可以隨便起)然後將下載的TI_Android_GingerBread_2_3_4Sources.tar.gz拷貝到Ubuntu的rowboat-android目錄上。

然後解壓該文件,命令如下:

$ tar -xvzf TI_Android_GingerBread_2_3_4Sources.tar.gz

解壓後進入該文件夾,解壓出來一個Readme文件和一個.repo文件夾,當然,.repo文件夾你看不見。

$ cd TI_Android_GingerBread_2_3_4Sources

然後執行repo命令從本地同步源碼,使用--local-only選項,命令如下:

$ ./.repo/repo/repo sync --local-only

執行成功後可以在TI_Android_GingerBread_2_3_4Sources目錄看見同步出來的源文件。如果執行失敗,著重看一看你的repo命令是否下載成功,路徑是否設置正確。

6. 設置toolchain

解壓出來的源碼包括了一套toolchain,需要做的就是將toolchain的路徑加入到PATH中,命令如下:

$ export PATH=<rowboat-android>/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH

注意<rowboat-android>是你建立的rowboat-android目錄的路徑,《DeveloperGuide》原文這裡有問題。

7. 開始編譯x-loader

進入TI_Android_GingerBread_2_3_4Sources下的x-loader目錄,執行以下命令編譯x-loader

$ make CROSS_COMPILE=arm-eabi- distclean

$ make CROSS_COMPILE=arm-eabi- omap3beagle_config

$ make CROSS_COMPILE=arm-eabi-

注意!!

Config文件使用的是omap3beagle_config,《DeveloperGuide》不是特指BeagleBoard的開發文檔,所以樣例中沒有使用BeagleBoard的config文件。

另外,對於32位的系統,執行前需要將

./build/core/main.mk 中的

ifneq (64,$(findstring 64,$(build_arch)))

改為:

ifneq (i686,$(findstring i686,$(build_arch)))

否則會報只支持64位系統的錯誤。

執行成功的話在x-loader目錄會找到新生成的x-load.bin文件

Copyright © Linux教程網 All Rights Reserved