交叉编译php-5.6.30,linux下用arm-none-linux-gnueabi交叉编译arm内核模块
前不久導(dǎo)師要求交叉編譯一個(gè)基于arm平臺(tái)開發(fā)的內(nèi)核模塊來練手,在網(wǎng)上查了很多資料才弄出來,于是將這些零散的信息綜合起來給和我一樣的入門人員了解。水平有限,請(qǐng)諒解~
1.安裝arm-none-linux-gnueabi交叉編譯器
很多時(shí)候我們需要編譯運(yùn)行在其他平臺(tái)的文件,而沒有條件在目標(biāo)平臺(tái)上直接編譯時(shí),我們就用到了交叉編譯。顧名思義就是在現(xiàn)有平臺(tái)編譯目標(biāo)平臺(tái)的程序。
在linux編譯arm平臺(tái)的內(nèi)核模塊時(shí),大多采用arm-none-linux-gnueabi交叉編譯器。這個(gè)編譯器雖然在官網(wǎng)可以下載但是很難找,在此貼出一個(gè)百度云盤的共享地址:http://pan.baidu.com/share/link?shareid=2940135020&uk=1443951890
在ubuntu下,輸入命令:
$tar-xvjfarmarm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar
將該文件解壓。然后輸入命令:gedit?~/.bashrc在文件的末尾添加?exportPATH=$PATH:/usr/local/arm/4.4.3/bin
這樣就配置好了環(huán)境變量。我們可以輸入arm-none-linux然后按Tab鍵看是否填充來判斷環(huán)境變量是否配置完好。
請(qǐng)注意一點(diǎn),由于arm-none-linux-gnueabi需要運(yùn)行在32位的linux上,如果按照上述配置完了環(huán)境變量后依然無法填充,請(qǐng)檢查linux的版本是32位還是64位(可以輸入:getconf?LONG_BIT查看)如果是64位操作系統(tǒng)那么要么重新安裝32位要么輸入命令:sudo?apt-getinstall?ia32-libs來安裝32位的兼容庫。
2.構(gòu)造linux內(nèi)核源碼樹
在編寫內(nèi)核模塊時(shí)需要引用到相應(yīng)的文件。如果不去構(gòu)造linux內(nèi)核源碼樹就進(jìn)行編譯的話,會(huì)提示找不到相應(yīng)的.h文件。一般來說,要編譯一個(gè)內(nèi)核模塊時(shí)一定要知道它是基于哪個(gè)內(nèi)核版本編寫的。然后下載這個(gè)版本的內(nèi)核源碼構(gòu)造源碼樹。比如說,需要編譯的內(nèi)核模塊時(shí)基于2.6的內(nèi)核,而現(xiàn)在使用的ubuntu是基于3.2內(nèi)核的版本。沒有關(guān)系,下載2.6的內(nèi)核,然后放到一個(gè)文件夾中進(jìn)行構(gòu)造就行。為圖方便,可以直接放在桌面。
內(nèi)核源碼可以事先下載,然后再linux下解壓。也可以輸入命令:sudo?apt-get?install?linux-source-2.6.27(如果是其他版本只要替換后面的版本數(shù)字就可以了)下載源碼,然后到/usr/src里面找到它,并對(duì)其進(jìn)行解壓。
然后我們輸入命令:export?ARCH=arm以及
export?CROSS_COMPILE=arm-none-linux-gnueabi-這里的CROSS_COMPILE環(huán)境變量就是指定交叉編譯器。進(jìn)入解壓后的源碼目錄。假設(shè)我們的源碼目錄在~/Desktop/linux-source-2.6.27下,那么我們先進(jìn)入它的/arch/arm/configs文件夾中找一個(gè)config文件,至于選哪個(gè)合適說實(shí)話我也沒弄清楚,當(dāng)時(shí)我所選的是S3C_2410_defconfig文件。貌似選哪一個(gè)文件得和目標(biāo)平臺(tái)有關(guān)。當(dāng)選好config文件后,用cp?命令將其復(fù)制到~Desktop/linux-source-2.6.27?也就是我們的源碼目錄下,并更名為.config?更名后的文件需要使用ls?-a才能顯示出來。
做好這一切后,接下來就運(yùn)行命令?sudo?makemenuconfig,如果不出意外就會(huì)看到類似以下界面:
然后作用鍵選擇退出這個(gè)界面。需要說明一點(diǎn),如果在運(yùn)行sudo?make?menuconfig?命令時(shí)出現(xiàn)以下錯(cuò)誤提示信息:
***?Unable?to?find?the?ncurses?libraries?or?the***?required?header?files.***?‘make?menuconfig’?requires?the?ncurses?libraries.******?Install?ncurses?(ncurses-devel)?and?try?again.
那么就運(yùn)行命令:sudo?apt-get?insatll?ncurses-dev
sudo?apt-get?install?libncurses5-dev安裝相應(yīng)的軟件。如果是在CentOS下則運(yùn)行命令yum?install?-y?ncurses-devel即可。
接下來就依次運(yùn)行以下命令:
sudo?make?oldconfig
sudo?make(時(shí)間比較長(zhǎng))
sudo?make?bzImage
sudomake?modules
sudo?make?modules_install
在網(wǎng)上看到很多人執(zhí)行這些命令時(shí)遇到了些錯(cuò)誤以及他們解決的辦法。不過由于我試了幾次都沒有問題,在此就不貼出問題了,如果遇到可以“放狗搜一下”。
成功執(zhí)行上述命令后,我們會(huì)在源碼目錄下看到vmlinux.o文件。
3.編譯內(nèi)核模塊
內(nèi)核模塊的Makefile文件中,KERN_DIR?=?/lib/modules/$(shell?uname?-r)/build就是引用內(nèi)核源碼樹的位置。當(dāng)我們構(gòu)建好了內(nèi)核源碼樹后只需要將$(shell?uname?-r)換成安裝好的內(nèi)核源碼版本就行。具體可以進(jìn)入/lib/modules下查看。
以上就是我初學(xué)交叉編譯arm平臺(tái)的內(nèi)核模塊的總結(jié),其實(shí)很多部分也只是知其然不知其所以然,還有很多需要學(xué)習(xí)。整理出來就是希望其他和我一樣的菜鳥可以少走些彎路。
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的交叉编译php-5.6.30,linux下用arm-none-linux-gnueabi交叉编译arm内核模块的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php异步方案,PHP的异步实现方式
- 下一篇: php文件开放下载安全,php实现文件安