LinuX编译显示内核配置无效,配置编译内核(Linux kernel)
雖然以前也編譯過內核,但是關于內核配置選項特別是有關本機驅動這塊還是不熟悉,因為沒有通過確定有效的途徑知道當前工作正常的內核中到底使用了什么驅動模塊來控制硬件,最近看到一本書《Linux kernel in a netshell》,感覺講的還不錯,所以記下筆記。
1.編譯內核的工具
gcc
binutils(ld)??? binutils是gcc的工具鏈,用來鏈接目標文件以及匯編。
make
util-linux-ng(fdformat)
module-init-tools(depmod)
tune2fs
NFS(showmount)
udev??? ??? udev是Linux中用來管理/dev目錄的工具,它維護/dev目錄下所有的設備文件。
2.下載wget/curl
3.編譯
$make defconfig??? defconfig是i386計算機上的默認配置,也就是Linus Torvalds計算機中的配置。
$make config??? ??? 最原始的配置方式
$make menuconfig??? 文本字符界面配置
$make xconfig??? X Window配置界面
$make??? ??? ??? 編譯Kernel
4.高級編譯選項
make -jN??? ??? N設置為你CPU內核數的兩倍,代表編譯內核所用的線程數量。
$make drivers/usb/serial??? 只編譯目錄drivers/usb/serial,但是不會生成模塊映像文件
$make M=drivers/usb/serial??? 同上,但是會生成模塊文件,但是不會影響已經編譯好的內核,如果想要改變已經編譯好的內核,則需要重新執行
$make
$make drivers/usb/serial/visor.ko??? 只編譯個別文件
$make -O=/path/to/output/??? 將輸出重定向到另一個目錄,注意configure也必須使用-O重定向輸出。
$make ARCH=x86_64 defconfig??? 設置目標計算機體系結構
$make ARCH=arm CROSS_COMPILE=/usr/bin/...??? 設置交叉編譯。
$make CC="ccache gcc"??? 設置編譯器變量CC
5.配置內核 ??? 1)查找當前內核配置文件.config,在許多發行版中,內核配置文件最有可能位于/usr/src/linux/下和/proc/config.gz文件。例如在我的ubuntu(karmic koala)中,有/usr/src/linux-headers-2.6.31-16-generic/.config ??? 2)查看特定驅動的模塊 這里以網卡為例,使用ifconfig可以看到本機網卡,lo是回環地址,eth0...等是真正工作的網卡。 ??? $ifconfig ??? $ls /sys/class/net/ 上面兩種方法都可以查看本機網卡。現在我們要找到網卡驅動在內核中使用哪個模塊來控制。 ??? 3)找到相應的內核模塊 ??? $basename `readlink /sys/class/net/eth0/device/driver/module` ??? 在我的電腦上輸出是8139too,表示網卡驅動模塊名是8139too。 ??? 4)查找相應模塊在配置內核中的選項 ??? $cd /usr/src/linux-headers-2.6.31-16/??? 注意這里不是16-generic,因為后者是中的大部分都是前者的鏈接。 ??? $find -type f -iname "makefile"|xargs grep -i "8139too" 輸出是./drivers/net/Makefile:obj-$(CONFIG_8139TOO) +=8139too.o ??? 5)配置內核中的選項 ??? $make menuconfig ??? 然后按下'/‘鍵,輸入搜索內容8139too,即可得到相關的配置選項。
總結
以上是生活随笔為你收集整理的LinuX编译显示内核配置无效,配置编译内核(Linux kernel)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么java中floatda正确_为什
- 下一篇: 我的世界java版做船_“不要在云了,船