日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第四章 源代码的下载和编译

發布時間:2025/3/13 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第四章 源代码的下载和编译 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android移植主要就是Linux內核的移植,而Linux內核的移植主要是Linux驅動的移植。為了開發和測試Linux驅動,需在Ubuntu Linux下搭建兩套開發環境:Android應用程序開發環境和Linux內核開發環境。需要對源代碼進行下載和編譯,由于Android源代碼包含了很多東西,如內嵌在Android系統中的應用程序的源代碼,Android SDK帶的各種工具的源代碼,Android NDK的源代碼,以及HAL源代碼,所以對Android源代碼的下載、編譯和測試過程比較復雜、繁瑣,在這里就先介紹相對比較簡單的下載和編譯Linux內核源代碼的方法和步驟。

下載的Android源代碼并沒有包含Linux內核源代碼,要想使用Linux內核,必須要單獨下載Linux內核源代碼,必須從Google提供的網址下載Android中使用的Linux內核源代碼。

1.下載Linux內核源代碼:執行命令“# git clone https://android.googlesource.com/kernel/common,git”可以下載最新的Linux內核源代碼,下載會花費較長的時間。下載完成后,在當前目錄下會有一個common目錄,進入該目錄,執行命令“# git branch -a”查看當前有哪些遠程版本庫。根據版本情況從版本庫導出最新的Linux內核,可以使用命令“# git checkout -b android-3.0 remotes/origin/android-3.0”導出Linux 3.0的內核。Google專門為Android模擬器提供了一個Linux內核goldfish,可以使用命令“# git clone http://android.googlesource.com/kernel/goldfish.git”下載該內核。下載完成后,進入goldfish目錄,執行命令“# git checkout -b android-goldfish-2.6.29 remotes/origin/android-goldfish-2.6.29”導出goldfish。

2.Linux內核源代碼的目錄結構,有arch,block,Documentation,drivers,firmware,fs,include等多個目錄。

3.安裝Android內核的編譯環境:在Ubuntu Linux下編譯Linux內核需要安裝交叉編譯器。交叉編譯器就是指在A架構的CPU上編譯可在B架構CPU上運行的程序。主要是因為編譯器無法在目標平臺上安裝或目標平臺性能較低,不得已才在性能較高限制較少的平臺上進行編譯。在編譯Linux內核之前,需配置Linux內核源代碼根目錄下的Makefile文件。打開Makefile,找到ARCH和CROSS_COMPILE,并將這兩個變量設置成如下值“ARCH ?= arm

CROSS_COMPILE?= arm-none-linux-gnueabi-”,其中ARCH變量表示將Linux源代碼編譯成可在ARM架構上運行的Linux內核。CROSS_COMPILE變量表示交叉編譯器的前綴。打開交叉編譯者的bin目錄,可以看到很多以arm-none-linux-gnueabi-開頭的命令,如arm-none-linux-gnueabi-gcc、arm-none-linux-gnueabi-gdb等。由于編譯Linux內核可能會使用很多這樣的命令,為了方便,Linux內核允許值只設置這些命令的前綴,就可找到相應的編譯命令。安裝交叉編譯器步驟如下:

? ①準備工作:將arm-linux-gcc-4.3.2.tgz文件和arm-none-linux-gnueabi-arm-2008q3-72-for-linux.tar.bz2文件復制到工作目錄

? ②解壓編譯器:使用命令

? ? “# tar zxvf arm-linux-gcc-4.3.2.tgz -C /

? ? ?# tar jxvf arm-none-linux-gnueabi-arm-2008q3-72-for-linux.tar.bz2 -C /”

? ? ?解壓兩個壓縮文件

? ③驗證交叉編譯器是否安裝成功,使用命令“# ls /usr/local/arm -l”④安裝libncurses5,為了配置內核make menuconfig,libncurses5可以為字符界面的Linux終端提供一個美觀的界面,使用命令“# apt-get install libncurses5-dev”

4.配置和編譯Linux內核:如果內核源代碼目錄是“/root/linux_kernel”,使用命令

“# export PATH=/root/compilers/arm-none-linux-gnueabi/bin:$PATH

# cd ~/linux_kernel

# make clean

# make”

編譯Linux內核,make clean命令用于清除大多讀由編譯生成的.o、.ko等文件,但保留配置文件。一般新下載的Linux源代碼根目錄都沒有.config文件,而這個文件決定了編譯生成的Linux內核由哪些功能和模塊組成。第一次拿到Linux內核時應先使用4個命令中的一個配置Linux內核,在Linux內核源代碼根目錄產生一個.config文件。在配置Linux內核前一般需確定自己的需求,需要什么樣的驅動模塊、是否支持調試、支持的CPU類型等。4個配置命令必須在Linux源代碼根目錄執行。

①make config:該命令以文本形式配置Linux內核。配置項后面中括號中的值是該配置項當前的值,如果中括號中有多個值,第一個是默認值,如果不設置,直接按回車就會保留默認值。

②make menuconfig:以字符界面風格的菜單形式配置Linux內核。配置界面后面帶“-->”的菜單項說明還有子菜單。按回車鍵就可進入子菜單。很多菜單項前面有中括號,里面可以是“M”或“*”,也可以為空。有的菜單項前的中括號里只能設置“*”或空。中括號里的值表明當前菜單項對應的Linux內核組件嵌入Linux內核的方式。[M]表示以模塊形式.ko文件動態安裝在Linux內核中。[Y]表示Linux內核組件會嵌入Linux內核。當Linux內核成功啟動后,這些組件會自動裝載。如果為空表明該Linux內核組件不會包含到當前的Linux內核中。通過按“M”鍵可以將中括號中的值設置成“M”,按“Y”可將中括號中的值設為“Y”。按空格鍵可以在[M]、[Y]和空格之間進行切換。最后通過Exit退出設置界面后,如果修改了設置項,會詢問是否保持剛才的設置。如果選Yes,則會根據剛才的設置重新生成.config文件。

③make oldconfig:與make config類似,也是以字符界面逐項要求用戶配置。但它顯示的要求用戶參與的配置項要比make config少。大多數配置項都會給出默認值,并不需要用戶進行配置。只有后面帶NEW的配置項才需要用戶配置,這些配置項都是當前Linux內核版本新加入的功能。

④make xconfig:以圖形界面形式配置Linux內核,使用了QT的共享庫,要執行此命令,必須安裝QT,可使用命令“# apt-get install libqt4-dev”。安裝完QT后,執行make xconfig。在界面中可以通過上面的保存安裝保存設置,也可以使用打開按鈕打開其它配置文件。在配置中有一項很重要,就是交叉編譯器的簽名。使用make menuconfig命令。成功編譯Linux內核后,會在<Linux內核源代碼根目錄>/arch/arm/boot目錄生成一個zImage文件。該文件就是Linux內核的二進制版本。可以直接使用zImage安裝到開發板上,也可以使用命令“# emulator -avd myavd -kernel /root/kernel/goldfish/arch/arm/boot/zImage”在Android模擬器中測試Linux內核,需要使用由goldfish編譯而成的zImage文件,myavd是一個AVD名稱。

轉載于:https://www.cnblogs.com/Horatia/p/5425556.html

總結

以上是生活随笔為你收集整理的第四章 源代码的下载和编译的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。