Android 核心原始碼交叉編譯(建立自己的模擬器核心,哈哈終於搞定了)

來源:互聯網
上載者:User

本文是在Ubuntu10.10系統上進行實踐的。

1 因為我們需要Android的模擬器,所以需要安裝Android的SDK,並建立AVD,

  可以一次命名為AVD15,AVD22,AVD23,...

  AVD15對應1.5,AVD22對應2.2,AVD23對應2.3,...

 擷取.config檔案:

在啟動模擬器AVD15:

$emulator -avd AVD15

$pull /proc/config.gz . //將/proc/config.gz這個檔案複製到本地的目錄,對應Linux上運行該命令的當前工作的目錄,下同

然後,將其解壓並儲存為.config,留待後面使用

 

2 arm編譯器

去網站下載arm工具鏈

注意選擇較早的版本,很有可能是google那班人在編譯的時候 選擇的是當時的最新的版本,但是後來就一直用那個版本

http://www.codesourcery.com/sgpp/lite/arm/portal/subscription?@template=lite

要之前的版本:點擊 All versions 即可看到所有的發行版本,2008q3-41這個版本是經過很多人測試可以用的。

解壓後,設定環境變數,將/usr/local/arm-2008q3/bin 添加到$PATH中

其中 /usr/local/為儲存解壓後的arm-tools-chain的根目錄

 

3 下載Android的Linux核心

記住是Android的Linux核心(git clone git://android.git.kernel.org/kernel/common.git),而不是通用的Linuxe核心源碼(git clone git://android.git.kernel.org/kernel/linux-2.6.git)

$ git clone git://android.git.kernel.org/kernel/common.git  kernel-common

//其中 kernel-common為存放從程式碼程式庫下來的代碼的目錄,下同

這一步是個漫長的等待...

$ cd ~/kernel-common

$ git branch

$ android-2.6.36

//這個隨著版本的變化而變化

 

4 下載完Android的Linux核心源碼,你會發現在/arch/arm/configs/下沒有goldfish_defconfig這個檔案,恩我們需要check_out gold_fish版本(模擬器的硬體設定就是Gold_Fish的)

$ cd ~/kernel_common

$ git branch -a

$  *android-2.6.36
  remotes/origin/HEAD -> origin/android-2.6.36
  remotes/origin/android-2.6.35
  remotes/origin/android-2.6.36
  remotes/origin/archive/android-2.6.25
  remotes/origin/archive/android-2.6.27
  remotes/origin/archive/android-2.6.29
  remotes/origin/archive/android-2.6.32
  remotes/origin/archive/android-gldfish-2.6.29
  remotes/origin/archive/android-goldfish-2.6.27

//以上顯示是目前看到的,將來的某個時候可以就有點不同了,甚至老版本的Branch 名字也會被修改

//故要特別注意

$ git checkout remotes/origin/archive/android-gldfish-2.6.29

//這個過程就快多了,等待下載完資料

//git 這個東西確實不怎麼好用,還是想念Windows上TortoiseSVN

當下載完,你就能在kernel-common/arch/arm/configs/下看到goldfish_defconfig這個檔案

5 編譯

1)將1中的.config檔案拷貝到 ~/kernel_common目錄下

2)修改 ~/kernel_common目錄下的Makefile檔案(修改兩處) -- 修改之掐最好備份下這個檔案,因為如果你修改了這個檔案 用git擷取新版本的時候

會提示Makefile檔案被修改

ARCH        ?= arm //制定CPU的架構為ARM
CROSS_COMPILE    ?= arm-none-linux-gnueabi- //arm編譯工具首碼

3)

$ make goldfish_defconfig

$ make -j2 //現在的機器都是雙核的,這樣代碼編譯就快多了

編譯最後兩行資訊:

  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready

6 用我們剛剛編譯成功核心啟動模擬器(這樣不會對原有的模擬器產生任何的影響)

$ emulator -avd AVD15 -kernel ~/kernel_common/arch/arm/boot/zImage

如果模擬器能起來,那說明成功了。

開啟另外一個終端,這樣就能解決上面的終端被佔用的情況下,也能使用終端

$ adb shell

#cd /proc

# cat version
Linux version 2.6.29-00262-gb0d93fb-dirty (dream@dream-VGN-FW351J) (gcc version 4.3.2 (Sourcery G++ Lite 2008q3-41) ) #1 Fri Dec 24 12:31:28 CST 2010
# cat cupinfo
cupinfo: No such file or directory
# cat cpuinfo
Processor    : ARM926EJ-S rev 5 (v5l)
BogoMIPS    : 272.79
Features    : swp half thumb fastmult vfp edsp java
CPU implementer    : 0x41
CPU architecture: 5TEJ
CPU variant    : 0x0
CPU part    : 0x926
CPU revision    : 5

 

Hardware    : Goldfish
Revision    : 0000
Serial        : 0000000000000000

 

注: dream@dream-VGN-FW351J,其中的 dream為當前登入Ubuntu的使用者名稱,而dream-VGN-FW351J是機器名

    Sourcery G++ Lite 2008q3-41 這個就是arm tools chain的版本了

 

參考文獻:

1. android核心編譯方法

2.下載編譯android kernel

3. android核心編譯方法

4. git-clone指定branch

5. http://android.git.kernel.org/

非常感謝以上文章的作者(經過幾次轉載有時都不知道原著是誰了),沒有他們的無私奉獻,本人估計還在黑暗中摸索著。。。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.