❶ 如何配置linux內核
在做Virtualization這段時間,編譯過多次Linux kernel,編譯Kernel過程中配置config這一步是相對來說比較復雜的。對編譯內核過程中的配置這一步做詳細的說明吧,總結一下,多數內容源於網上的多篇文章。
首發在我的博客:http://renyongjie668.blog.163.com/blog/static/1600531201143010295156/
首先,配置時可能出現的選項,對其選擇先來個說明吧。
Typically, your choices for each option are shown in the format [Y/m/n/?] The capitalized letter is the default, and can be selected by just pressing the Enter key. The four choices are:
y Build directly into the kernel.
n Leave entirely out of the kernel.
m Build as a mole, to be loaded if needed.
? Print a brief descriptive message and repeat the prompt.
y表示是(相應功能將直接編譯進內核),m表示模塊(相應功能將編譯為一個模塊,在需要時載入),以及n表示否(相應功能不會包含進內核)。?則(對該配置項)列印出簡要的描述信息並重復剛才的選擇提示。
其次,我使用的最多的兩個配置命令分別是:make muneconfig和make oldconfig
make oldconfig和make config類似,但是它的作用是在現有的內核設置文件基礎上建立一個新的設置文件,只會向用戶提供有關新內核特性的問題,在新內核升級的過程 中,make oldconfig非常有用,用戶將現有的配置文件.config復制到新內核的源碼中,執行make oldconfig,此時,用戶只需要回答那些針對新增特性的問題。
make menuconfig基於終端的一種配置方式,提供了文本模式的圖形用戶界面,用戶可以通過游標移動來瀏覽所支持的各種特性。使用這用配置方式時,系統中必須安裝有ncurese庫。
在內核樹的根目錄中,有一個.config文件,它記錄了內核的配置選項,可直接對它進行修改,再運行。在.config文件中,每個配置和選項的值只能為」y」和」m」兩者之一,如果不需要這個特性不再支持她,那麼可以將對應的選項用」#」注釋掉。實際上,如果你手頭有合適的.config文件,可以運行make oldconfig 直接按.config的內容來配置$ sudo make oldconfig
對內核的配置都是圍繞.config來展開的. 即便開始.config文件不存在,進行配置後會創造它.
一般來說,內核配置保存於/usr/src/linux-*/.config文件中。在/boot/config-<版本>有其備份。請保留它以備後用。
常見的幾種配置方式:
為了完成內核的配置,必須切換到root用戶,然後轉入內核源碼目錄(就是你下載新內核的目錄):
#cd /usr/src/linux/linux-2.6.38
然後執行下面命令之一:
#make config
#make oldconfig
#make menuconfig
#make gconfig
#make defconfig
#make allyesconfig
#make allmodconfig
1.make config
基於文本的最為傳統的也是最為枯草的一種配置方式,但是它可以使用任何情況,這種方式會為每一個內核支持的特性向用戶提問,如果用戶回答「y」,則把特性編譯進內核;回答「m」,則它特性作為模塊進行編譯;回答「n」,則表示不對該特性提供支持
如果回答每個問題前,必須考慮清楚,如果在配置過程中犯了錯誤給了錯誤的回答,就只能按「ctcl+c」強行退出了
2.make oldconfig
make oldconfig和make config類似,但是它的作用是在現有的內核設置文件基礎上建立一個新的設置文件,只會向用戶提供有關新內核特性的問題,在新內核升級的過程 中,make oldconfig非常有用,用戶將現有的配置文件.config復制到新內核的源碼中,執行make oldconfig,此時,用戶只需要回答那些針對新增特性的問題
make silentoldconfig : Like above, but avoids cluttering the screen with questions already answered.和上面oldconfig一樣,但在屏幕上不再出現已在.config中配置好的選項。
3.make menuconfig
基於終端的一種配置方式,提供了文本模式的圖形用戶界面,用戶可以通過游標移動來瀏覽所支持的各種特性。使用這用配置方式時,系統中必須安裝有ncurese庫,否則會顯示「Unable to find the Ncurses libraies」的錯誤提示
4.make xoncifg
基 於X Winodws的一種配置方式,提供了漂亮的配置窗口,不過只有能夠在X Server上使用root用戶欲行X應用程序時,才能夠使用,它依賴於QT,如果系統中沒有安裝QT庫,則會出現「Unable to find the QT installation」的錯誤提示
5.make gconfig
與make xocnifg類似,不同的是make gconfig依賴於GTK庫
6.make defconfig
按照默認的配置文件arch/i386/defconfig對內核進行配置,生成.config可以用作初始化配置,然後再使用make menuconfig進行定製化配置
7.make allyesconfig
盡量多地使用「y」設置內核選項值,生成的配置中包含了全部的內核特性
make allnoconfig :除必須的選項外,其它選項一律不選. (常用於嵌入式系統).
8.make allmodconfig
盡可能多的使用「m」設置內核選項值來生成配置文件
下載好Linux內核源代碼後,在源代碼的根目錄執行
make localyesconfig或者make localmodconfig
然後系統就會根據你的硬體自動生成一個適應你的硬體的.config (內核的配置文件)
make localmodconfig會執行lsmod命令查看當前系統中載入了哪些模塊(Moles),並最後將原來的.config中不需要的模塊去掉,僅保留前面lsmod出來的這些模塊,從而簡化了內核的配置過程。
這樣做確實方便了很多,但是也有個缺點:該方法僅能使編譯出的內核支持當前內核已經載入的模塊。因為該方法使用的是lsmod的結果,如果有的模塊當前沒有載入,那麼就不會編到新的內核中。
There』s an additional 「make localyesconfig」 target, in case you don』t want to use moles and/or initrds.
幾條好的建議:
除非您使用初始化ramdisk (initrd),否則絕不要把掛載根文件系統必需的驅動程序(硬體驅動以及文件系統驅動)編譯成模塊!而如果您確實使用初始化ramdisk,請為ext2FS支持選項選擇Y,因為ramdisk使用該文件系統。您還需要initrd支持。
如果您系統中有網卡,將它們的驅動編譯成模塊。這樣,您就能夠在/etc/moles.conf中用別名定義哪一塊網卡第一,哪一塊第二,等等。如果您將驅動程序編譯進了內核,它們載入的順序將取決於當初它們鏈接進內核的順序,而這不一定是您想要的。
最後,如果您不清楚某個選項的含義,請閱讀其幫助!而如果該幫助信息依然不能解決您的困惑,請保留該選項原來的樣子。(在config和oldconfig中可以按?鍵訪問幫助。)
配置最終結束後,請保存您的配置並退出。
參考資料:
http://www.cnmaizi.com/tech/elebuild/simplify-linux-kernel-config-rapid-compile-method-collect/
http://man.ddvip.com/linux/Mandrakelinuxref/compiling-conf.html
http://www.huomo.cn/os/article-5d18.html
編譯 Linux2.6 內核總結: http://www.cublog.cn/u/13991/showart.php?id=79823
編譯內核:http://my.chinaunix.net/space.php?uid=25806768&do=blog&id=302764
內核_.config 內核配置及Makefile:http://www.cnblogs.com/parrynee/archive/2010/05/13/1734689.html
❷ 編譯Linux內核作用
編譯內核的目的主要是改變內核的默認選項
編譯內核就是讓系統在這台機器上更穩定更安全!
建議你對Linux已經相當熟悉以後再去嘗試內核編譯!(需要一定的編程基礎)
❸ 如何編譯linux的x86內核
Gcc編譯器, Linux-2.6.29內核
步驟:
(一):清除臨時文件,中間文件和配置文件等(剛從網上下載下來的文件這步可省略)。
make clean
刪除大多數的由編譯生成的文件、但會保留內核的配置文件.config。
make mrproper
刪除所有的編譯生成的文件,還有內核配置文件,再加上各種備份文件。
make distclean
mrproper刪除的文件,加上編輯備份文件和一些補丁文件。
(二)選擇參考配置文件
使用正在運行的內核配置文件作為參考配製文件,該配置文件在/boot目錄下,使用命令
cp /boot/config-2.6.18-53.el5 .config。
(三)配置內核
配置內核有如下命令:
make config:基於文件模式的互動式配置(也就是一問一答)。
make menuconfig:基於文本模式的菜單式配置(強烈推薦)。
make oldconfig:使用已有的配置文件(.config)但是會詢問新增的配置選項。
make xconfig:圖形化配置(需要安裝圖形化系統)。
make menuconfig是最為常用的內核配置方式,使用方法如下:
1、使用方向鍵在各選項間移動;
2、使用「Enter」鍵進入下一層選單;每個選項上的高亮字母是鍵盤快捷方式,使用它可以快速地到達想要設置的選單項。
3、在括弧中按「y」將這個項目編譯進內核中,按「m」編譯為模塊,按「n」為不選擇(按空格鍵也可在編譯進內核、編譯為模塊和不編譯三者間進行切換),按「h」將顯示這個選項的幫助信息,按「Esc」鍵將返回到上層選單。
內核配置通常在一個已有的配置文件基礎上,通過修改得到新的配置文件Linux內核提供了一系列可供參考的內核配置文件,位於Arch/$cpu/configs
注意:要運行make menuconfig的界面需要調整終端的窗口大小,至少為80*19。
(四)編譯內核
(1):make zImage
(2):make bzImage
區別:在X86平台,在zImage只能用於小於512Kd的內核(注意是X86平台)
如需獲取詳細編譯信息,可使用:
make zImage V=1
make bzImage V=1
編譯好的內核位於arch/<cpu>/boot目錄下
(五)編譯內核模塊
使用命令make moles
內核模塊編譯的時間比較長,一般需要1~2小時的時間。這些模塊源於使用命令make menuconfig啟動的菜單型配置界面中選擇<m>的項。
(六)安裝內核模塊
使用命令:make moles_install,完成安裝後,編譯好的內核模塊會從內核源代碼目錄拷貝至/lib/moles/2.6.29目錄下。
(七)製作init ramdisk
使用cd跳動linux-2.6.29/,目錄的上層目錄,使用命令:mkinitrdinitrd-$version $version(mkinitrd initrd-2.6.29 2.6.29)將上一步中產生的模塊目錄/lib/moles/2.6.29製作成initrd-2.6.29。
提示:initrd是「initial ramdisk」的縮寫,initrd是在實際根文件系統可用之前掛載到系統中的一個初始根文件系統。在桌面或伺服器Linux系統中,initrd是一個臨時的文件系統。其生命周期很短,只會用作真實文件系統的一個橋梁。在沒有存儲設備的嵌入式系統中,initrd可以是永久的根文件系統。
Linux的眾多發行版之所以使用initrd主要是為了在內核啟動之後能夠判斷哪些硬體驅動需要載入,哪些不需要,文件系統有沒有問題等,最終使得根分區能順利載入。在scsi和sata設備上啟動,usb啟動盤,無盤伺服器等都需要initrd來做判斷,這樣可以提高Linux內核的通用性。
(八)安裝內核
由於Linux系統啟動時,會從/boot目錄下尋找內核文件與init ramdisk,所以需要將內核和initrd拷貝至/boot目錄。使用命令:
cp initrd-2.6.29 /boot
cp linux-2.6.29/arch/x86/boot/bzImage /boot/vmlinuz-2.6.29
(九)修改/etc/grub.conf或者/etc/lilo.conf
為了讓grub在啟動時能提供一項我們自己製作的linux內核的選項,需要修改grub的配置文件/etc/grub.conf。(添加的代碼為title My Linux(2.6.29)以下的)
注意:/etc/grub.conf實際上是/boot/grub/grub.conf的一個鏈接,因此真正的配置文件存在與/boot/grub目錄下。
❹ 如何升級/編譯Linux內核
下載內核
如果您只是想編譯一個您已安裝內核的新版本(例如,實現 SMP 支持),那不需要下載任何代碼 -- 跳過此部分繼續下一屏。
您可以在 http://www.kernel.org/pub/linux/kernel 上找到內核代碼。當您進入到那後,您將發現內核的源代碼按內核版本(v2.2、v2.3 等),被組織到多個不同的目錄中。在每個目錄中,您將發現文件被冠以"linux-x.y.z.tar.gz"和"linux-x.y.z.tar.bz2"。這些就是 Linux 內核的源代碼。您也將看到冠以 "patch-x.y.z.gz" 和 "patch-x.y.z.bz2" 的文件。這些是用來更新前面完整的內核源代碼的補丁包。如果您希望編譯一個新的內核版本,您將需要下載這些"linux"文件其中之一。
內核解包
如果您已從 kernel.org 下載一個新的內核,現在是要將其解包時候了。首先,cd /usr/src。如果這里有一個存在的"linux"目錄,將其改名為"linux.old" ("mv linux linux.old",以 root 許可權)。
現在,可以解開新的內核包了。仍然在 /usr/src 目錄下,輸入 tar xzvf /path/to/my/kernel-x.y.z.tar.gz 或者 cat /path/to/my/kernel-x.y.z.tar.bz2 | bzip2 -d | tar xvf -,根據您下載的源代碼是用 gzip 或 bzip2 壓縮的。在輸入完此命令後,您下載的內核源代碼會被釋放到一個新的"linux"目錄下。注意 -- 全套內核源代碼通常將在硬碟上佔用超過 50 兆空間!
討論配置問題
在您編譯內核前,您需要配置它,配置是您精確控制在新內核中啟用(禁止)哪些內核功能的機會。您也將控制哪些會被編譯到內核的二進制映像(在啟動時被載入)而哪些被編譯到需要時載入的內核模塊文件。
老式配置內核的方法是極為痛苦的過程,並涉及到進入 /usr/src/linux 目錄並輸入 make config 命令。請放棄這種配置內核的方式 -- 除非您想在命令行上回答幾百個(對!幾百個)「yes/no」的問題。
配置的新途徑
我們是現代人類,我們不在輸入 make config,而是輸入 make menuconfig 或者 make xconfig。如果您想要配置您的內核,使用上述選擇之一。如果您輸入 make menuconfig,您將使用一個漂亮的基於文本的彩色菜單系統來配置內核。如果您輸入 make xconfig,您將使用一個更漂亮的基於 X-Window 的 GUI 界面來配置內核的各種選項。這里有一個使用 "make menuconfig" 的屏幕截圖:
當使用 "make menuconfig" 時,在左面出現一個 "< >" 的選項能被編譯成為一個模塊。當選項被選中,按下空格鍵來循環選擇選項是被選中或未選中, ("<*>")表示將被編譯成內核映像而("<M>")表示將被編譯成模塊。
配置技巧
在這里有極其多的內核選項,而且我們無法在此一一解釋 -- 所以請利用內核內置的幫助功能。基本上每個選項都至少有一些描述,而且每個通常都有一行"如果您不知道這個選項的含義,輸入 Y。(或者 N)"。這些提示在您不知道一個特定選項的含義時能幫助您。要使用幫助,選中您有疑問的選項然後按 "?" 鍵。
編譯和安裝內核
make dep; make clean
一旦您的內核配置完畢,就可開始編譯它了。在我們能編譯它前,我們需要生成依賴(dependency)信息並清除任何老的"編譯結果"。這可以通過在 /usr/src/linux 下輸入 make dep; make clean 完成。
make bzImage
現在是編譯真正的二進制內核映像時候了。輸入 make bzImage。過幾分鍾後,編譯會結束而且您在 /usr/src/linux/arch/i386/boot(x86 PC 內核)目錄下找到 bzImage 文件。我們將待會告訴您如何安裝這個新內核,但是現在我們要看看模塊編譯了。
編譯模塊
現在我們有了 bzImage,下面要編譯模塊了。即使您在配置內核時沒有使用任何模塊,也不要跳過此步驟 -- 在編譯完 bzImage 後立刻編譯模塊是個好習慣。而且,如果您真的沒有模塊需要編譯,這個步驟也非常快就結束了。輸入 make moles; make moles_install。這將導致模塊被編譯而且被安裝到 /usr/lib/<內核版本號> 目錄下。
祝賀您!您的內核已經被編譯完成了,您的內核模塊也編譯完成並被安裝。現在是要重新配置 LILO,這樣您能使用新的內核。
啟動配置
LILO 入門
現在是最後來重新配置 LILO 的時候了,它將負責載入新的內核。LILO 是最流行的 Linux 引導工具,而且為所有的主流 Linux 發行商所採用。您要作的第一件事是察看您的 /etc/lilo.conf 文件。它將包含一行看似 "image=/vmlinuz" 的語句。該語句告訴 LILO 到何處找到內核。
啟動配置, 第二部分
要配置 LILO 來使用新的內核,您有兩種選擇。第一個是覆蓋您現有的內核 -- 除非您手頭上有一些緊急啟動措施如還有此內核的引導盤,這很危險的方法。
更為安全的選擇是配置 LILO 是得它能從新的或舊的內核引導。LILO 可配置成從新內核預設啟動,但仍提供一種方法讓您遇上問題時能選擇舊的內核來啟動。這是推薦的作法,也是我們將隨後介紹的方法。
啟動配置, 第三部分
您的 lilo.conf 文件有可能看起來如下:
boot=/dev/hda
delay=20
vga=normal
root=/dev/hda1
read-only
image=/vmlinuz
label=linux
要在您的 lilo.conf 文件中增添新的項目,參見下列步驟。首先,拷貝 /usr/src/linux/arch/i386/boot/bzImage 到您的根(root)分區上的一個文件,例如 /vmlinuz2。一旦拷貝完畢,復制您 lilo.conf 文件的最後三行並將它們添加到該文件的最後... 我們即將結束整個步驟了...
啟動配置, 第四部分
現在,您的 lilo.conf 文件應該看起來如下:
boot=/dev/hda
delay=20
vga=normal
root=/dev/hda1
read-only
image=/vmlinuz
label=linux
image=/vmlinuz
label=linux
首先,將第一個 "image=" 行改為 "image=/vmlinuz2"。其次,將第二個 "label=" 行改為 "label=oldlinux"。然後,確定在文件的開始有一行 "delay=20" -- 如果沒有,增添一行。如果它已經存在,將數字至少設為 20。
啟動配置, 第五部分
您最後的 lilo.conf 文件將看起來如下:
boot=/dev/hda
delay=20
vga=normal
root=/dev/hda1
read-only
image=/vmlinuz2
label=linux
image=/vmlinuz
label=oldlinux
作完這些修改後,您將需要以 root 身份運行 "lilo"。這非常重要!如果您不執行此步,啟動的過程無法繼續。運行 "lilo" 將給 lilo 一個機會來更新它的啟動映射。
❺ linux怎麼編譯進驅動進內核
一、 驅動程序編譯進內核的步驟
在 linux 內核中增加程序需要完成以下三項工作:
1. 將編寫的源代碼復制到 Linux 內核源代碼的相應目錄;
2. 在目錄的 Kconfig 文件中增加新源代碼對應項目的編譯配置選項;
3. 在目錄的 Makefile 文件中增加對新源代碼的編譯條目。
bq27501驅動編譯到內核中具體步驟如下:
1. 先將驅動代碼bq27501文件夾復制到 ti-davinci/drivers/ 目錄下。
確定bq27501驅動模塊應在內核源代碼樹中處於何處。
設備驅動程序存放在內核源碼樹根目錄 drivers/ 的子目錄下,在其內部,設備驅動文件進一步按照類別,類型等有序地組織起來。
a. 字元設備存在於 drivers/char/ 目錄下
b. 塊設備存放在 drivers/block/ 目錄下
c. USB 設備則存放在 drivers/usb/ 目錄下。
注意:
(1) 此處的文件組織規則並非絕對不變,例如: USB 設備也屬於字元設備,也可以存放在 drivers/usb/ 目錄下。
(2) 在 drivers/char/ 目錄下,在該目錄下同時存在大量的 C 源代碼文件和許多其他目錄。所有對於僅僅只有一兩個源文件的設備驅動程序,可以直接存放在該目錄下,但如果驅動程序包含許多源文件和其他輔助文件,那麼可以創建一個新子目錄。
(3) bq27501的驅動是屬於字元設備驅動類別,雖然驅動相關的文件只有兩個,但是為了方面查看,將相關文件放在了bq27501的文件夾中。在drivers/char/目錄下增加新的設備過程比較簡單,但是在drivers/下直接添加新的設備稍微復雜點。所以下面首先給出在drivers/下添加bq27501驅動的過程,然後再簡單說明在drivers/char/目錄下添加的過程。
2. 在/bq27501下面新建一個Makefile文件。向裡面添加代碼:
obj-$(CONFIG_BQ27501)+=bq27501.o
此時,構建系統運行就將會進入 bq27501/ 目錄下,並且將bq27501.c 編譯為 bq27501.o
3. 在/bq27501下面新建Kconfig文件。添加代碼:
menu "bq27501 driver"
config BQ27501
tristate"BQ27501"
default y
---help---
Say 'Y' here, it will be compiled into thekernel; If you choose 'M', it will be compiled into a mole named asbq27501.ko.
endmenu
注意:help中的文字不能加回車符,否則make menuconfig編譯的時候會報錯。
4. 修改/drivers目錄下的Kconfig文件,在endmenu之前添加一條語句『source drivers/bq27501/Kconfig』 對於驅動程序,Kconfig 通常和源代碼處於同一目錄。 若建立了一個新的目錄,而且也希望 Kconfig 文件存在於該目錄中的話,那麼就必須在一個已存在的 Kconfig 文件中將它引入,需要用上面的語句將其掛接在 drivers 目錄中的Kconfig 中。
5. 修改/drivers目下Makefile文件,添加『obj-$(CONFIG_BQ27501) +=bq27501/』。這行編譯指令告訴模塊構建系統在編譯模塊時需要進入 bq27501/ 子目錄中。此時的驅動程序的編譯取決於一個特殊配置 CONFIG_BQ27501 配置選項。
6. 修改arch/arm目錄下的Kconfig文件,在menu "Device Drivers……endmenu"直接添加語句
source "drivers/bq27501/Kconfig"
❻ Linux內核配置與編譯相關流程
linux內核配置與編譯相關流程1、清除臨時文件、中間文件和配置文件
make
clean
不刪除配置文件。
make
mrproper
make
distclean
刪除編輯的backup文件、補丁文件等2、確定目標系統的軟硬體配置情況,比如CPU的類型,網卡的型號,所需要支持的網路協議。3、使用命令配置內核
make
config
基於文本模式的交互配置。
make
menuconfig
基於文本模式的菜單配置。
make
oldconfig
使用已有的配置文件(.config),但是會詢問新增的配置選項。
make
xconfig
圖形化的配置(需要安裝圖形化系統)。4、編譯內核
make
zImage
make
bzImage
區別:在X86平台上,zImage只能用於小雨512k內核。如果需要獲取詳細編譯信息,則在後面加上V=1.
編譯好的內核位於arch/<cpu>/boot/目錄下。
5、編譯內核模塊
make
moes
6、安裝內核模塊
make
moes_install
將編譯好的內核模塊從內核源代碼目錄到/lib/moes下。7、製作
init
ramdisk
mkinitrd
$initrd-$version
-$version內核安裝(X86)1、cp
arch/X86/boot/bzImage
/boot/vmliuz
-$version2、cp
$initrd
/boot/3、修改etc/grub.conf
或
/etc/lilo.conf$version為所編譯的內核版本號。
❼ Linux內核編譯的具體操作過程及注意問題
你好,樓主:
1、配置.config文件,將你要編譯的配置XXX_config准備好,使用make XXX_config來進行配置;
2、這時你就可以在內核根目錄下進行make menuconfig來使用圖形界面配置內核選項,配置後保存即可;
3、最後只需要使用make或者make uImage生成相應的鏡像即可。
注意問題多在config這里,如果配置時報錯,可嘗試make clobber來清除原來的依賴關系。
❽ Linux內核源碼如何編譯
首先uname -r看一下你當前的linux內核版本
1、linux的源碼是在/usr/src這個目錄下,此目錄有你電腦上各個版本的linux內核源代碼,用uname -r命令可以查看你當前使用的是哪套內核,你把你下載的內核源碼也保存到這個目錄之下。
2、配置內核 make menuconfig,根據你的需要來進行選擇,設置完保存之後會在當前目錄下生成.config配置文件,以後的編譯會根據這個來有選擇的編譯。
3、編譯,依次執行make、make bzImage、make moles、make moles
4、安裝,make install
5、.創建系統啟動映像,到 /boot 目錄下,執行 mkinitramfs -o initrd.img-2.6.36 2.6.36
6、修改啟動項,因為你在啟動的時候會出現多個內核供你選擇,此事要選擇你剛編譯的那個版本,如果你的電腦沒有等待時間,就會進入默認的,默認的那個取決於 /boot/grub/grub.cfg 文件的設置,找到if [ "${linux_gfx_mode}" != "text" ]這行,他的第一個就是你默認啟動的那個內核,如果你剛編譯的內核是在下面,就把代表這個內核的幾行代碼移到第一位如:
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
}
當然你也可以修改 set default="0"來決定用哪個,看看你的內核在第幾位,default就填幾,不過我用過這種方法,貌似不好用。
重啟過後你編譯的內核源碼就成功地運行了,如果出現問題,比如滑鼠不能用,usb不識別等問題就好好查查你的make menuconfig這一步,改好後就萬事ok了。
最後再用uname -r看看你的linux內核版本。是不是你剛下的那個呢!有沒有成就感?
打字不易,如滿意,望採納。
❾ linux編譯內核步驟
一、准備工作
a) 首先,你要有一台PC(這不廢話么^_^),裝好了Linux。
b) 安裝好GCC(這個指的是host gcc,用於編譯生成運行於pc機程序的)、make、ncurses等工具。
c) 下載一份純凈的Linux內核源碼包,並解壓好。
注意,如果你是為當前PC機編譯內核,最好使用相應的Linux發行版的源碼包。
不過這應該也不是必須的,因為我在我的Fedora 13上(其自帶的內核版本是2.6.33.3),就下載了一個標準的內核linux-2.6.32.65.tar.xz,並且順利的編譯安裝成功了,上電重啟都OK的。不過,我使用的.config配置文件,是Fedora 13自帶內核的配置文件,即/lib/moles/`uname -r`/build/.config
d) 如果你是移植Linux到嵌入式系統,則還要再下載安裝交叉編譯工具鏈。
例如,你的目標單板CPU可能是arm或mips等cpu,則安裝相應的交叉編譯工具鏈。安裝後,需要將工具鏈路徑添加到PATH環境變數中。例如,你安裝的是arm工具鏈,那麼你在shell中執行類似如下的命令,假如有類似的輸出,就說明安裝好了。
[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 ing conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
註:arm的工具鏈,可以從這里下載:回復「ARM」即可查看。
二、設置編譯目標
在配置或編譯內核之前,首先要確定目標CPU架構,以及編譯時採用什麼工具鏈。這是最最基礎的信息,首先要確定的。
如果你是為當前使用的PC機編譯內核,則無須設置。
否則的話,就要明確設置。
這里以arm為例,來說明。
有兩種設置方法():
a) 修改Makefile
打開內核源碼根目錄下的Makefile,修改如下兩個Makefile變數並保存。
ARCH := arm
CROSS_COMPILE := arm-linux-
注意,這里cross_compile的設置,是假定所用的交叉工具鏈的gcc程序名稱為arm-linux-gcc。如果實際使用的gcc名稱是some-thing-else-gcc,則這里照葫蘆畫瓢填some-thing-else-即可。總之,要省去名稱中最後的gcc那3個字母。
b) 每次執行make命令時,都通過命令行參數傳入這些信息。
這其實是通過make工具的命令行參數指定變數的值。
例如
配置內核時時,使用
make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
編譯內核時使用
make ARCH=arm CROSS_COMPILE=arm-linux-
注意,實際上,對於編譯PC機內核的情況,雖然用戶沒有明確設置,但並不是這兩項沒有配置。因為如果用戶沒有設置這兩項,內核源碼頂層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 ?=
經過上面的代碼,ARCH變成了PC編譯機的arch,即SUBARCH。因此,如果PC機上uname -m輸出的是ix86,則ARCH的值就成了i386。
而CROSS_COMPILE的值,如果沒配置,則為空字元串。這樣一來所使用的工具鏈程序的名稱,就不再有類似arm-linux-這樣的前綴,就相當於使用了PC機上的gcc。
最後再多說兩句,ARCH的值還需要再進一步做泛化。因為內核源碼的arch目錄下,不存在i386這個目錄,也沒有sparc64這樣的目錄。
因此頂層makefile中又構造了一個SRCARCH變數,通過如下代碼,生成他的值。這樣一來,SRCARCH變數,才最終匹配到內核源碼arch目錄中的某一個架構名。
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
三、配置內核
內核的功能那麼多,我們需要哪些部分,每個部分編譯成什麼形式(編進內核還是編成模塊),每個部分的工作參數如何,這些都是可以配置的。因此,在開始編譯之前,我們需要構建出一份配置清單,放到內核源碼根目錄下,命名為.config文件,然後根據此.config文件,編譯出我們需要的內核。
但是,內核的配置項太多了,一個一個配,太麻煩了。而且,不同的CPU架構,所能配置的配置項集合,是不一樣的。例如,某種CPU的某個功能特性要不要支持的配置項,就是與CPU架構有關的配置項。所以,內核提供了一種簡單的配置方法。
以arm為例,具體做法如下。
a) 根據我們的目標CPU架構,從內核源碼arch/arm/configs目錄下,找一個與目標系統最接近的配置文件(例如s3c2410_defconfig),拷貝到內核源碼根目錄下,命名為.config。
注意,如果你是為當前PC機編譯內核,最好拷貝如下文件到內核源碼根目錄下,做為初始配置文件。這個文件,是PC機當前運行的內核編譯時使用的配置文件。
/lib/moles/`uname -r`/build/.config
這里順便多說兩句,PC機內核的配置文件,選擇的功能真是多。不編不知道,一編才知道。Linux發行方這樣做的目的,可能是想讓所發行的Linux能夠滿足用戶的各種需求吧。
b) 執行make menuconfig對此配置做一些需要的修改,退出時選擇保存,就將新的配置更新到.config文件中了。
注
❿ 如何編譯linux內核
內核,是一個操作系統的核心。它負責管理系統的進程、內存、設備驅動程序、文件和網路系統,決定著系統的性能和穩定性。Linux作為一個自由軟體,在廣
大愛好者的支持下,內核版本不斷更新。新的內核修訂了舊內核的bug,並增加了許多新的特性。如果用戶想要使用這些新特性,或想根據自己的系統度身定製一
個更高效,更穩定的內核,就需要重新編譯內核。本文將以RedHat Linux 6.0(kernel
2.2.5)為操作系統平台,介紹在Linux上進行內核編譯的方法。
一、 下載新內核的源代碼
目前,在
Internet上提供Linux源代碼的站點有很多,讀者可以選擇一個速度較快的站點下載。筆者是從站點www.kernelnotes.org上下載
了Linux的最新開發版內核2.3.14的源代碼,全部代碼被壓縮到一個名叫Linux-2.3.14.tar.gz的文件中。
二、 釋放內核源代碼
由於源代碼放在一個壓縮文件中,因此在配置內核之前,要先將源代碼釋放到指定的目錄下。首先以root帳號登錄,然後進入/usr/src子目錄。如果
用戶在安裝Linux時,安裝了內核的源代碼,則會發現一個linux-2.2.5的子目錄。該目錄下存放著內核2.2.5的源代碼。此外,還會發現一個
指向該目錄的鏈接linux。刪除該連接,然後將新內核的源文件拷貝到/usr/src目錄中。
(一)、用tar命令釋放內核源代碼
# cd /usr/src
# tar zxvf Linux-2.3.14.tar.gz
文件釋放成功後,在/usr/src目錄下會生成一個linux子目錄。其中包含了內核2.3.14的全部源代碼。
(二)、將/usr/include/asm、/usr/inlude/linux、/usr/include/scsi鏈接到/usr/src/linux/include目錄下的對應目錄中。
# cd /usr/include
# rm -Rf asm linux
# ln -s /usr/src/linux/include/asm-i386 asm
# ln -s /usr/src/linux/include/linux linux
# ln -s /usr/src/linux/include/scsi scsi
(三)、刪除源代碼目錄中殘留的.o文件和其它從屬文件。
# cd /usr/src/linux
# make mrproper
三、 配置內核
(一)、啟動內核配置程序。
# cd /usr/src/linux
# make config
除了上面的命令,用戶還可以使用make menuconfig命令啟動一個菜單模式的配置界面。如果用戶安裝了X window系統,還可以執行make xconfig命令啟動X window下的內核配置程序。
(二)、配置內核
Linux的內核配置程序提供了一系列配置選項。對於每一個配置選項,用戶可以回答"y"、"m"或"n"。其中"y"表示將相應特性的支持或設備驅動
程序編譯進內核;"m"表示將相應特性的支持或設備驅動程序編譯成可載入模塊,在需要時,可由系統或用戶自行加入到內核中去;"n"表示內核不提供相應特
性或驅動程序的支持。由於內核的配置選項非常多,本文只介紹一些比較重要的選項。
1、Code maturity level options(代碼成熟度選項)
Prompt for development and/or incomplete code/drivers
(CONFIG_EXPERIMENTAL) [N/y/?]
如果用戶想要使用還處於測試階段的代碼或驅動,可以選擇「y」。如果想編譯出一個穩定的內核,則要選擇「n」。
1、 Processor type and features(處理器類型和特色)
(1)、Processor family (386, 486/Cx486, 586/K5/5x86/6x86, Pentium/K6/TSC, PPro/6x86MX) [PPro/6x86MX] 選擇處理器類型,預設為Ppro/6x86MX。
(2)、Maximum Physical Memory (1GB, 2GB) [1GB] 內核支持的最大內存數,預設為1G。
(3)、Math emulation (CONFIG_MATH_EMULATION) [N/y/?] 協處理器模擬,預設為不模擬。
(4)、MTRR (Memory Type Range Register) support (CONFIG_MTRR) [N/y/?]
選擇該選項,系統將生成/proc/mtrr文件對MTRR進行管理,供X server使用。
(5)、Symmetric multi-processing support (CONFIG_SMP) [Y/n/?] 選擇「y」,內核將支持對稱多處理器。
2、 Loadable mole support(可載入模塊支持)
(1)、Enable loadable mole support (CONFIG_MODULES) [Y/n/?] 選擇「y」,內核將支持載入模塊。
(2)、Kernel mole loader (CONFIG_KMOD) [N/y/?] 選擇「y」,內核將自動載入那些可載入模塊,否則需要用戶手工載入。
3、 General setup(一般設置)
(1)、Networking support (CONFIG_NET) [Y/n/?] 該選項設置是否在內核中提供網路支持。
(2)、PCI support (CONFIG_PCI) [Y/n/?] 該選項設置是否在內核中提供PCI支持。
(3)、PCI access mode (BIOS, Direct, Any) [Any]
該選項設置Linux探測PCI設備的方式。選擇「BIOS」,Linux將使用BIOS;選擇「Direct」,Linux將不通過BIOS;選擇
「Any」,Linux將直接探測PCI設備,如果失敗,再使用BIOS。
(4)Parallel port support (CONFIG_PARPORT) [N/y/m/?] 選擇「y」,內核將支持平行口。
4、 Plug and Play configuration(即插即用設備支持)
(1)、Plug and Play support (CONFIG_PNP) [Y/m/n/?] 選擇「y」,內核將自動配置即插即用設備。
(2)、ISA Plug and Play support (CONFIG_ISAPNP) [Y/m/n/?] 選擇「y」,內核將自動配置基於ISA匯流排的即插即用設備。
5、 Block devices(塊設備)
(1)、Normal PC floppy disk support (CONFIG_BLK_DEV_FD) [Y/m/n/?] 選擇「y」,內核將提供對軟盤的支持。
(2)、Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support (CONFIG_BLK_DEV_IDE) [Y/m/n/?] 選擇「y」,內核將提供對增強IDE硬碟、CDROM和磁帶機的支持。
6、 Networking options(網路選項)
(1)、Packet socket (CONFIG_PACKET) [Y/m/n/?] 選擇「y」,一些應用程序將使用Packet協議直接同網路設備通訊,而不通過內核中的其它中介協議。
(2)、Network firewalls (CONFIG_FIREWALL) [N/y/?] 選擇「y」,內核將支持防火牆。
(3)、TCP/IP networking (CONFIG_INET) [Y/n/?] 選擇「y」,內核將支持TCP/IP協議。
(4)The IPX protocol (CONFIG_IPX) [N/y/m/?] 選擇「y」,內核將支持IPX協議。
(5)、Appletalk DDP (CONFIG_ATALK) [N/y/m/?] 選擇「y」,內核將支持Appletalk DDP協議。
8、SCSI support(SCSI支持)
如果用戶要使用SCSI設備,可配置相應選項。
9、Network device support(網路設備支持)
Network device support (CONFIG_NETDEVICES) [Y/n/?] 選擇「y」,內核將提供對網路驅動程序的支持。
10、Ethernet (10 or 100Mbit)(10M或100M乙太網)
在該項設置中,系統提供了許多網卡驅動程序,用戶只要選擇自己的網卡驅動就可以了。此外,用戶還可以根據需要,在內核中加入對FDDI、PPP、SLIP和無線LAN(Wireless LAN)的支持。
11、Character devices(字元設備)
(1)、Virtual terminal (CONFIG_VT) [Y/n/?] 選擇「y」,內核將支持虛擬終端。
(2)、Support for console on virtual terminal (CONFIG_VT_CONSOLE) [Y/n/?]
選擇「y」,內核可將一個虛擬終端用作系統控制台。
(3)、Standard/generic (mb) serial support (CONFIG_SERIAL) [Y/m/n/?]
選擇「y」,內核將支持串列口。
(4)、Support for console on serial port (CONFIG_SERIAL_CONSOLE) [N/y/?]
選擇「y」,內核可將一個串列口用作系統控制台。
12、Mice(滑鼠)
PS/2 mouse (aka "auxiliary device") support (CONFIG_PSMOUSE) [Y/n/?] 如果用戶使用的是PS/2滑鼠,則該選項應該選擇「y」。
13、Filesystems(文件系統)
(1)、Quota support (CONFIG_QUOTA) [N/y/?] 選擇「y」,內核將支持磁碟限額。
(2)、Kernel automounter support (CONFIG_AUTOFS_FS) [Y/m/n/?] 選擇「y」,內核將提供對automounter的支持,使系統在啟動時自動 mount遠程文件系統。
(3)、DOS FAT fs support (CONFIG_FAT_FS) [N/y/m/?] 選擇「y」,內核將支持DOS FAT文件系統。
(4)、ISO 9660 CDROM filesystem support (CONFIG_ISO9660_FS) [Y/m/n/?]
選擇「y」,內核將支持ISO 9660 CDROM文件系統。
(5)、NTFS filesystem support (read only) (CONFIG_NTFS_FS) [N/y/m/?]
選擇「y」,用戶就可以以只讀方式訪問NTFS文件系統。
(6)、/proc filesystem support (CONFIG_PROC_FS) [Y/n/?] /proc是存放Linux系統運行狀態的虛擬文件系統,該項必須選擇「y」。
(7)、Second extended fs support (CONFIG_EXT2_FS) [Y/m/n/?] EXT2是Linux的標准文件系統,該項也必須選擇「y」。
14、Network File Systems(網路文件系統)
(1)、NFS filesystem support (CONFIG_NFS_FS) [Y/m/n/?] 選擇「y」,內核將支持NFS文件系統。
(2)、SMB filesystem support (to mount WfW shares etc.) (CONFIG_SMB_FS)
選擇「y」,內核將支持SMB文件系統。
(3)、NCP filesystem support (to mount NetWare volumes) (CONFIG_NCP_FS)
選擇「y」,內核將支持NCP文件系統。
15、Partition Types(分區類型)
該選項支持一些不太常用的分區類型,用戶如果需要,在相應的選項上選擇「y」即可。
16、Console drivers(控制台驅動)
VGA text console (CONFIG_VGA_CONSOLE) [Y/n/?] 選擇「y」,用戶就可以在標準的VGA顯示方式下使用Linux了。
17、Sound(聲音)
Sound card support (CONFIG_SOUND) [N/y/m/?] 選擇「y」,內核就可提供對音效卡的支持。
18、Kernel hacking(內核監視)
Magic SysRq key (CONFIG_MAGIC_SYSRQ) [N/y/?] 選擇「y」,用戶就可以對系統進行部分控制。一般情況下選擇「n」。
四、 編譯內核
(一)、建立編譯時所需的從屬文件
# cd /usr/src/linux
# make dep
(二)、清除內核編譯的目標文件
# make clean
(三)、編譯內核
# make zImage
內核編譯成功後,會在/usr/src/linux/arch/i386/boot目錄中生成一個新內核的映像文件zImage。如果編譯的內核很大的
話,系統會提示你使用make bzImage命令來編譯。這時,編譯程序就會生成一個名叫bzImage的內核映像文件。
(四)、編譯可載入模塊
如果用戶在配置內核時設置了可載入模塊,則需要對這些模塊進行編譯,以便將來使用insmod命令進行載入。
# make moles
# make modelus_install
編譯成功後,系統會在/lib/moles目錄下生成一個2.3.14子目錄,裡面存放著新內核的所有可載入模塊。
五、 啟動新內核
(一)、將新內核和System.map文件拷貝到/boot目錄下
# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.3.14
# cp /usr/src/linux/System.map /boot/System.map-2.3.14
# cd /boot
# rm -f System.map
# ln -s System.map-2.3.14 System.map
(二)、配置/etc/lilo.conf文件。在該文件中加入下面幾行:
default=linux-2.3.14
image=/boot/vmlinuz-2.3.14
label=linux-2.3.14
root=/dev/hda1
read-only
(三)、使新配置生效
# /sbin/lilo
(四)、重新啟動系統
# /sbin/reboot
新內核如果不能正常啟動,用戶可以在LILO:提示符下啟動舊內核。然後查出故障原因,重新編譯新內核即可。
了解更多開源相關,去LUPA社區看看吧。