編譯redhat內核
『壹』 怎樣使用新編譯的內核進行啟動
step 1
准備:(1). 所需的內核源碼
step2:
切換到源碼所在的目錄,make distclean 命令:刪除生產的.o 和 .config 文件
編譯內核之前需要一份配置文件,並在此基礎上修改,故借用本地/boot/config-3.13.0-24-generic配置文件,命令: cp /boot/config-3.13.0-24-generic /home/yangqi/code/linux/linux-4.2.3/.config
該配置文件.config 即是對內核裁剪的配置,不用直接打開修改,系統提供menu界面修改,命令:make menuconfig (如果此命令報錯,說明需要裝ncurses庫,安裝命令:sudo apt-get install libncurses5-dev) (menu目錄如下:)
『貳』 linux 文件系統 內核編譯
1、第一條命令沒問題;
2、第二條命令:
#mkfs.ext2 myfs
myfs is not a block special device.
無路如何也要繼續?(y,n)
這時要輸入y
3、第三條命令,linux kernel不支持myext2文件系統。我猜你是想要在紅帽或ubuntu上mount一個ext2文件系統的loop設備,但是想使用myext2的文件系統驅動,對吧。我沒有這么做過,猜不出你的myext2摘出來之後是什麼樣子的。我以前試過在linux安裝新的文件系統支持,比如fuse系統,源碼編譯通過後會生成一個.ko的模塊文件,使用insmod命令將其加入內核,才能獲得內核對該文件系統的支持。我想你可能也應該這樣做,你應該需要生成一個類似myext2.ko的模塊,然後將其insmod到內核中去。
『叄』 編譯內核模塊錯誤(linux)
在這些高版本的RedHat Linux上,我們如果需要定製內核的話,沒有直接的源代碼rpm可以安裝,只能通過kernel.org下載的tar.gz的包手工安裝,或者通過kernel-*.src.rpm編譯出kernel-source包再來安裝。後面一種方法可以享受到RedHat針對內核的某些參數和代碼的優化,因此對使用RedHat發行版特別是企業版本的,是有一定好處的。
但是目前很多人至今分不清內核,內核開發,內核源代碼一些包之間的關系,因此在編譯內核的時候經常走彎路,同時RedHat官方對於如果得到kernel-source也沒有明確的指示,導致很多人不得要領。
首先認清楚各rpm包的內容和用途
kernel-*.rpm ------------- 內核二進制包,沒有的話系統都起不來
kernel-sourcecode-*.rpm------------------- 內核源代碼包,安裝到/usr/src/linux-*下面的,包含內核源代碼,編譯內核必須(當然是不考慮用kernel.tar.gz編譯的情況),但高版本RedHat Linux不再提供此rpm,原因參見官方Release Note,這篇文章的最終目的就是要我們自己把這個包搞出來。
kernel-devel-*.rpm----------------內核開發包,安裝到/usr/src/kernels,用於內核模塊開發,組織形式跟內核源代碼包類似,包含了部分內核源代碼。注意很多人誤認為這個就是內核源代碼包,直接拿它來編譯內核,當然不可能成功。這個包只是用於內核模塊一級開發,例如驅動程序等,雖然也可以make menuconfig make dep等,但make bzImage是不可能成功的,因為缺失了核心源代碼。
kernel-*.src.rpm---------------RedHat提供的用於建立rpm的源代碼包,安裝到/usr/src/redhat中,使用rpmbuild可以從這個包中build出上面所說的所有包。
現在就來從src.rpm編譯出上面的所有的包,除了sourcecode這個包其他的包都可以在不用修改任何地方的情況下直接rpmbuild出來,唯有sourcecode這個比較麻煩,一定要按照下面的步驟來做,我以RedHat AS4 所帶的版本為例,其他版本相同。
#首先安裝src.rpm
rpm -ivh kernel-2.6.9-5.EL.src.rpm
#進入相應目錄,要修改spec文件
cd /usr/src/redhat/SPECS
vi kernel-2.6.spec
#主要修改如下地方:
1,define buildsource 0------------我的這個在第8行,改為1,這就是為什麼沒有源代碼包的原因,因為默認不生成源代碼包
2, Requires: qt-devel, gtk2-devel readline-devel ncurses-devel-------我的在572行,如果沒用用X的話,把這句注釋掉,這樣編譯出來的包就不依賴於X-window的某些包,因為內核配置是可以make xconfig的,所以默認依賴X-window,我沒裝X-window,因此這個就去掉了。
#保存退出
touch /etc/beehive-root
#這句命令非必須,如果不做的話,最後編譯出來的包都會變成kernel-*.*-root.rpm,多了個root,據說是為了標示包的編譯人的,如果touch了這個文件,就沒有這個問題了,命名和官方rpm一樣。
rpmbuild -ba --target=i686 ./kernel-2.6.spec
#編譯i686平台的所有包,這樣上面介紹的所有包都會生成,或者換成rpmbuild -bb --target=i686 ./kernel-2.6.spec只編譯非src.rpm。
#所有包就會生成到/usr/src/redhat/RPMS/i686下面
#如果只需要sourcecode而並非所有rpm包,那在修改spec文件時還要修改如下行:
48 %ifarch noarch
49 %define builddoc 1
50 %define buildsource 0----------------這里0修改為1
在編譯的時候使用rpmbuild -ba --target=noarch ./kernel-2.6.spec,這樣僅僅編譯soucecode和doc包,會節省很多時間。
注意,此篇文章所講所有內容僅適用於使用2.6內核的新版本RedHat Linux,2.4版本內核代碼組織方式不同,不適用此文章。
以上這篇文章取自互聯網,我忘了出處,尊敬作者.
『肆』 在rhel5.5的內核編譯中,進行yum install ncurses-devel時候總是不能安裝,麻煩幫忙解決
在編譯內核吧,呵呵
centos 安裝用的是yum,所以安裝ncurses應該是如下命令
#yum install ncurses ncurses-devel
當然之前源要配好,這樣就可以運行make menuconfig了
Good luck!!
沒有源,我說過了啊,centos 那個版本,
5.1的看這個
5.3的看這個
其他的自己搜
『伍』 如何學習編譯內核
我用的是RedHat9.0, 根據第一貼 "2.4->2.6內核升級指南", 首先需要把必要的軟體包都升級到要求的版本以上, 經過折騰, 有的是直接用rpm -Uvh 或 rpm -ivh, 有的是直接用源代碼編譯, 總算把大部分軟體包都升級了. 有一個軟體包oprofile死活裝不上, 用rpm裝的時候出來這樣的錯誤:
error: Failed dependencies:
libc.so.6(GLIBC_2.3.4) is needed by oprofile-0.8-0.20040121.3
可是我的/lib目錄里明明有
lrwxrwxrwx 1 root root 13 8月 2 10:45 libc.so.6 -> libc-2.3.2.so
(我已經經歷過N次這樣的錯誤了, 這是我非常痛恨rpm的主要原因.)
改用源代碼編譯的時候, make的時候出來這樣的錯誤:
The present kernel configuration has moles disabled.
Type 'make config' and enable loadable mole support.
Then build a kernel with mole support enabled.
TNND, RedHat9預設的內核編譯居然是moles disabled!!!我折騰來折騰去就是想把2.4.20-8的內核升級到2.6.12.4去, 到頭來還得讓我先編譯原來2.4.20-8的內核? 先把這事放一放, oprofile說不定不是很有用的模塊.
接下來順利地把mole-init-tools升上去了. 然而在升級mkinitrd的時候又碰到了致命的問題.
根據說明, 要想升級mkinitrd, 首先要升級lvm2和device-mapper, 用rpm -Uvh升級lvm2的時候出來一大堆的錯誤:
error: Failed dependencies:
libdevmapper.so.1.00 is needed by lvm2-2.00.15-2
libdevmapper.so.1.00(Base) is needed by lvm2-2.00.15-2
libselinux.so.1 is needed by lvm2-2.00.15-2
lvm < 1.0.3-19 conflicts with lvm2-2.00.15-2
看來要先裝device-mapper再裝lvm2, 另外lvm與lvm2沖突, 要先卸載lvm.
那就卸載lvm吧, NND, lvm is needed by (installed) mkinitrd-3.4.42-1
顧不得了, 用rpm -e -nodeps卸載. 不過現在還是先把device-mapper裝好, 再收拾lvm2.
會過頭來, 用rpm升級device-mapper, 結果出來
error: Failed dependencies:
libselinux.so.1 is needed by device-mapper-1.00.14-3
查了一下, 機器上卻是沒有libselinux.so.1, 在網上盪了一個rpm軟體包, 結果又是這樣一個錯誤,
error: Failed dependencies:
libc.so.6(GLIBC_2.3.4) is needed by libselinux-1.11.4-1
我不知道我機器里的libc.so.6發了什麼豬瘟, 看來是因為我機器里的libc.so.6-->libc-2.3.2.so不是GLIBC_2.3.4.
只好再到網上去盪了一個glibc的軟體包, 用rpm -Uvh升級的時候, 好了, 出來一大堆沖突
package glibc-32bit-9-200508050455 is intended for a x86_64 architecture file /lib/i686/libc.so.6 from install of glibc-32bit-9-200508050455 conflicts with file from package glibc-2.3.2-11.9
file /lib/i686/libm.so.6 from install of glibc-32bit-9-200508050455 conflicts with file from package glibc-2.3.2-11.9
file /lib/i686/libpthread.so.0 from install of glibc-32bit-9-200508050455 conflicts with file from package glibc-2.3.2-11.9
file /lib/ld-linux.so.2 from install of glibc-32bit-9-200508050455 conflicts with file from package glibc-2.3.2-11.9
file /lib/libBrokenLocale.so.1 from install of glibc-32bit-9-200508050455 conflicts with file from package glibc-2.3.2-11.9
『陸』 問一下,為什麼代碼在RedHat裡面gcc編譯出錯,提示找不到mole.h等頭文件
你拷貝到/usr/include/linux的mole.h先刪除了,根本不是在這個目錄你需要首先安裝對應內核版本的頭文件,不是隨便一個版本就可以~一般情況下內核頭文件放在/usr/src/下面。你這個鉤子函數一看就知道是運行在內核空間的,以模塊的方式安裝使用的,不是你直接就可以用gcc安裝的~最簡單的辦法是用makefifle,具體操作你找下如何編譯內核模塊或者看下源碼自帶的說明文檔。
PS:你是全部都拷貝進去了嗎?這個.h本身會有很多其他的引用.另外,這個編譯時我上面說了用makefile來做,你看下這里:http://..com/question/262194193.html
『柒』 linux內核編譯詳細教程及開發Linux系統