1、大概步驟:

成都創(chuàng)新互聯(lián)公司專注于凱里企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),成都商城網(wǎng)站開發(fā)。凱里網(wǎng)站建設(shè)公司,為凱里等地區(qū)提供建站服務(wù)。全流程按需求定制網(wǎng)站,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
1、安裝開發(fā)包組
2、下載源碼文件
3、.config:準(zhǔn)備文本配置文件
4、make menuconfig:配置內(nèi)核選項
5、make [-j #]
6、make modules_install:安裝模塊
7、make install :安裝內(nèi)核相關(guān)文件
安裝bzImage為/源謹(jǐn)敗boot/vmlinuz-VERSION-RELEASE (去boot目錄下查看)
生成initramfs文件
8、編輯grub的配置文件
2、編譯配置晌或選項
配置內(nèi)核選項
支持“更新”模式進(jìn)行配置: make help
(a) make config:基于命令行以遍歷的方式去配置內(nèi)核中可配置的每個選項
(b) make menuconfig:基于curses的文本窗口界雹顫面
(c) make gconfig:基于GTK (GNOME)環(huán)境窗口界面
(d) make xconfig:基于QT(KDE)環(huán)境的窗口界面
支持“全新配置”模式進(jìn)行配置
(a) make defconfig:基于內(nèi)核為目標(biāo)平臺提供的“默認(rèn)”配置進(jìn)行配置
(b) make allyesconfig: 所有選項均回答為“yes“
(c) make allnoconfig: 所有選項均回答為"no“
3、編譯
全編譯:make [-j #]
編譯內(nèi)核的一部分功能:
a) 只編譯某子目錄中的相關(guān)代碼:
# cd /usr/src/linux
# make dir/
(b) 只編譯一個特定的模塊:
# cd /usr/src/linux
# make dir/file.ko
例如:只為e1000編譯驅(qū)動:
#make drivers/net/ethernet/intel/e1000/e1000.ko
4、編譯內(nèi)核
如何交叉編譯內(nèi)核:
編譯的目標(biāo)平臺與當(dāng)前平臺不相同;
# make ARCH=arch_name
要獲取特定目標(biāo)平臺的使用幫助
# make ARCH=arch_name help
# make ARCH=arm help
5、清理刪除
在已經(jīng)執(zhí)行過編譯操作的內(nèi)核源碼樹做重新編譯:
需要事先清理操作:
# make clean:清理大多數(shù)編譯生成的文件,但會保留config文件等
# make mrproper: 清理所有編譯生成的文件、 config及某些備份文件
# make distclean: mrproper、 patches以及編輯器備份文件
卸載內(nèi)核
刪除/lib/modules/目錄下不需要的內(nèi)核庫文件
刪除/usr/src/linux/目錄下不需要的內(nèi)核源碼
刪除/boot目錄下啟動的內(nèi)核和內(nèi)核映像文件
更改grub的配置文件,刪除不需要的內(nèi)核啟動列表
需要解決更多l(xiāng)inux問題,詳情請看
望采納
一、準(zhǔn)備工作
a) 首先,你要有一臺PC(這不廢話么^_^),裝好了Linux。
b) 安裝好GCC(這個指的是host gcc,用于編譯生成巧兄燃運(yùn)行于pc機(jī)程序的)、make、ncurses等工具。
c) 下載一份純凈的Linux內(nèi)核源碼包,并解壓好。
注意,如果你是為當(dāng)前PC機(jī)編譯內(nèi)核,最好使用相應(yīng)的Linux發(fā)行版的源碼包。
不過這應(yīng)該也不是必須的,因為我在我的Fedora 13上(其自帶的內(nèi)核版本是2.6.33.3),就下載了一個標(biāo)準(zhǔn)的內(nèi)核linux-2.6.32.65.tar.xz,并且順利的孝虛編譯安裝成功了,上電重啟都OK的。不過,我使用的.config配置文件,是Fedora 13自帶內(nèi)核的配置文件,即/lib/modules/`uname -r`/build/.config
d) 如果你是移植Linux到嵌入式系統(tǒng),則還要再下載安裝交叉編譯工具鏈。
例如,你的目標(biāo)單板CPU可能是arm或mips等cpu,則安裝相應(yīng)的交叉編譯工具鏈。安裝后,需要將工具鏈路徑添加到PATH環(huán)境變量中。例如,你安裝的是arm工具鏈,那么你在shell中執(zhí)行類似如下的命令,假如有類似的輸出,就說明安裝好了。
[root@localhost linux-2.6.33.i686]# arm-linux-gcc --version
arm-linux-gcc (Buildroot 2010.11) 4.3.5
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
注:arm的工具鏈,可以從這里下載:回復(fù)“ARM”即可查看。
二、設(shè)置編譯目標(biāo)
在配置或編譯內(nèi)核之前,首先要確定目標(biāo)CPU架構(gòu),以及編譯時采用什么工具鏈。這是最最基礎(chǔ)的信息,首先要確定的。
如果你是為當(dāng)前使用的PC機(jī)編譯內(nèi)核,則無須設(shè)置。
否則的話,就要明確設(shè)置。
這里以arm為例,來說明。
有兩種設(shè)置方法():
a) 修改Makefile
打開內(nèi)核源碼根目錄下的Makefile,修改如下兩個Makefile變量并保存。
ARCH := arm
CROSS_COMPILE := arm-linux-
注意,這里cross_compile的設(shè)置,是假定所用的交叉工具鏈的gcc程序名稱為arm-linux-gcc。如果實際使用的gcc名稱是some-thing-else-gcc,則這里照葫蘆畫瓢填some-thing-else-即可。總之,要省去名稱中最后的gcc那3個字母。
b) 每次執(zhí)行make命令時,都通過命令行參數(shù)傳入這些信息。
這其實是通過make工具的命令行參數(shù)指定變量的值。
例如
配置內(nèi)核時時,使用
make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
編譯內(nèi)核時使用
make ARCH=arm CROSS_COMPILE=arm-linux-
注意,實際上,對于編譯PC機(jī)內(nèi)核的情況,雖然用戶沒有明確設(shè)置,但并不是這兩項沒有配置。因為如果用戶沒有設(shè)置這兩項,內(nèi)核源碼頂層Makefile(位于源碼根目錄下)會通過如下方式生成這兩個變量的值。
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
-e s/arm.*/arm/ -e s/sa110/arm/ \
-e s/s390x/s390/ -e s/parisc64/parisc/ \
-e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
-e s/sh[234].*/sh/ )
ARCH?= $(SUBARCH)
CROSS_COMPILE ?=
經(jīng)過上面的代碼,ARCH變成了PC編譯機(jī)的arch,即SUBARCH。因此,如果PC機(jī)上uname -m輸出的是ix86,則ARCH的值塵漏就成了i386。
而CROSS_COMPILE的值,如果沒配置,則為空字符串。這樣一來所使用的工具鏈程序的名稱,就不再有類似arm-linux-這樣的前綴,就相當(dāng)于使用了PC機(jī)上的gcc。
最后再多說兩句,ARCH的值還需要再進(jìn)一步做泛化。因為內(nèi)核源碼的arch目錄下,不存在i386這個目錄,也沒有sparc64這樣的目錄。
因此頂層makefile中又構(gòu)造了一個SRCARCH變量,通過如下代碼,生成他的值。這樣一來,SRCARCH變量,才最終匹配到內(nèi)核源碼arch目錄中的某一個架構(gòu)名。
SRCARCH := $(ARCH)
ifeq ($(ARCH),i386)
SRCARCH := x86
endif
ifeq ($(ARCH),x86_64)
SRCARCH := x86
endif
ifeq ($(ARCH),sparc64)
SRCARCH := sparc
endif
ifeq ($(ARCH),sh64)
SRCARCH := sh
endif
三、配置內(nèi)核
內(nèi)核的功能那么多,我們需要哪些部分,每個部分編譯成什么形式(編進(jìn)內(nèi)核還是編成模塊),每個部分的工作參數(shù)如何,這些都是可以配置的。因此,在開始編譯之前,我們需要構(gòu)建出一份配置清單,放到內(nèi)核源碼根目錄下,命名為.config文件,然后根據(jù)此.config文件,編譯出我們需要的內(nèi)核。
但是,內(nèi)核的配置項太多了,一個一個配,太麻煩了。而且,不同的CPU架構(gòu),所能配置的配置項集合,是不一樣的。例如,某種CPU的某個功能特性要不要支持的配置項,就是與CPU架構(gòu)有關(guān)的配置項。所以,內(nèi)核提供了一種簡單的配置方法。
以arm為例,具體做法如下。
a) 根據(jù)我們的目標(biāo)CPU架構(gòu),從內(nèi)核源碼arch/arm/configs目錄下,找一個與目標(biāo)系統(tǒng)最接近的配置文件(例如s3c2410_defconfig),拷貝到內(nèi)核源碼根目錄下,命名為.config。
注意,如果你是為當(dāng)前PC機(jī)編譯內(nèi)核,最好拷貝如下文件到內(nèi)核源碼根目錄下,做為初始配置文件。這個文件,是PC機(jī)當(dāng)前運(yùn)行的內(nèi)核編譯時使用的配置文件。
/lib/modules/`uname -r`/build/.config
這里順便多說兩句,PC機(jī)內(nèi)核的配置文件,選擇的功能真是多。不編不知道,一編才知道。Linux發(fā)行方這樣做的目的,可能是想讓所發(fā)行的Linux能夠滿足用戶的各種需求吧。
b) 執(zhí)行make menuconfig對此配置做一些需要的修改,退出時選擇保存,就將新的配置更新到.config文件中了。
注
首先uname
-r看一下你當(dāng)前的linux內(nèi)核版本
1、linux的源碼是在/usr/src這個目錄下,此目錄有你電腦上各個版本的linux內(nèi)核源代碼,用uname
-r命令可以查看你當(dāng)孫早前使用的是哪套內(nèi)核,你把你下載的內(nèi)核源碼也保存到這個目錄之下。
2、配置內(nèi)核
make
menuconfig,根據(jù)你的需要來進(jìn)行選擇,設(shè)置完保存之后會在當(dāng)前目錄下生成.config配置文件,以后的編譯會根據(jù)這個來有選擇的編譯。
3、編譯,依次執(zhí)行make、make
bzImage、make
modules、make
modules
4、安裝,make
install
5、.創(chuàng)建系統(tǒng)啟動映像,到
/boot
目錄下,執(zhí)行
mkinitramfs
-o
initrd.img-2.6.36
2.6.36
6、修改啟動項,因為你在啟動的時候會出現(xiàn)多個內(nèi)核供你選擇,此事要選擇你剛編譯的那個版本,如果你的電腦沒有等待時間,就會進(jìn)入默認(rèn)的,默認(rèn)的那個取決于
/boot/grub/grub.cfg
文件的設(shè)置,找到if
[
"${linux_gfx_mode}"
!=
"text"
]這行,他的第一個就是你爛凱睜默認(rèn)啟動的那個內(nèi)核,如果你剛編譯的內(nèi)核是在下面,就把代表這個內(nèi)核的幾行代碼移到第一位如:
menuentry
'Ubuntu,
with
Linux
3.2.0-35-generic'
--class
ubuntu
--class
gnu-linux
--class
gnu
--class
os
{
recordfail
gfxmode
$linux_gfx_mode
insmod
gzio
insmod
part_msdos
insmod
ext2
set
root='(hd0,msdos1)'
search
--no-floppy
--fs-uuid
--set=root
9961c170-2566-41ac-8155-18f231c1bea5
linux/boot/vmlinuz-3.2.0-35-generic
root=UUID=9961c170-2566-41ac-8155-18f231c1bea5
ro
quiet
splash
$vt_handoff
initrd/boot/initrd.img-3.2.0-35-generic
}
當(dāng)然你也可以修改
set
default="饑歲0"來決定用哪個,看看你的內(nèi)核在第幾位,default就填幾,不過我用過這種方法,貌似不好用。
重啟過后你編譯的內(nèi)核源碼就成功地運(yùn)行了,如果出現(xiàn)問題,比如鼠標(biāo)不能用,usb不識別等問題就好好查查你的make
menuconfig這一步,改好后就萬事ok了。
最后再用uname
-r看看你的linux內(nèi)核版本。是不是你剛下的那個呢!有沒有成就感?
打字不易,如滿意,望采納。
假設(shè)模塊的源文件為hello.c,源碼如下:
使用該文件兄中編譯內(nèi)核模塊。
正常情況下,Makefile文件內(nèi)容如下:
執(zhí)行 make 命令,生成hello.ko文件。
執(zhí)行 sudo insmod hello.ko 命令,安裝該模塊。
執(zhí)行腔猛 lsmod 命令,查看安裝的模塊。就會看到第一行的就是hello模塊。
但是,如果想自定義模塊名稱為 xmodule ,而不是默認(rèn)的 hello ,如何實現(xiàn)呢?方法如下:
在Makefile中重命名obj-m并將obj-m的依賴關(guān)系設(shè)置為原始模塊(hello)
修改后的Makefile文件內(nèi)容如下:
將obj-m設(shè)置為 xmodule .o,并使 xmodule .o依賴于 hello .o.
執(zhí)行 make 命令后,伍塵橋生成 xmodule .ko, 而不是 hello .ko,
安裝命令: sudo insmod xmodule.ko
查看命令: lsmod ,就會看到被安裝名為 xmodule 的模塊。
新聞標(biāo)題:linux內(nèi)核編譯命令 linux編譯內(nèi)核模塊兩種方式
當(dāng)前網(wǎng)址:http://www.chinadenli.net/article24/ddpcgce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、App開發(fā)、動態(tài)網(wǎng)站、響應(yīng)式網(wǎng)站、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)