Android 內核源代碼交叉編譯

 自己看過的,覺得需要,所以特地轉移過來保存。

 

 因爲我們需要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的版本了

來自:http://www.cnblogs.com/mengshu-lbq/archive/2010/12/23/1914953.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章