CentOS 6.5編譯內核及驅動模塊


1. 生成源碼樹

1.1 安裝必須的工具

# yum install rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed pesign xmlto
# yum install audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel
# yum install ncurses-devel newt-devel numactl-devel pciutils-devel python-devel zlib-devel

1.2 下載源碼包

http://vault.centos.org/6.5/os/Source/SPackages/kernel-2.6.32-431.el6.src.rpm

1.3 建立文件夾及設置安裝路徑,使用非root用戶

$ mkdir -p ~/kernel/centos65/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
$ echo '%_topdir %(echo $HOME)/kernel/centos65' > ~/.rpmmacros

1.4 生成源碼,之后源碼生成在~/kernel/centos65_new/BUILD/kernel-2.6.32-431.el6/linux-2.6.32-431.el6.x86_64目錄下。

$ cd ~/kernel/centos65/SPECS
$ rpmbuild -bp --target=$(uname -m) kernel.spec

2. 編譯內核(如果只需要修改內核模塊,不需要更新內核則跳過本節)

2.1 安裝必須的工具

# yum groupinstall "Development Tools"
# yum install ncurses-devel
# yum install hmaccalc zlib-devel binutils-devel elfutils-libelf-devel

2.2 配置內核

2.2.1 如果需要對內核做定制則使用下面方法配置內核,使用非root用戶

拷貝當前系統使用的配置文件

$ cd ~/kernel/centos65/BUILD/kernel-2.6.32-431.el6/linux-2.6.32-431.el6.x86_64
$ cp /boot/config-`uname -r` .config

使用menuconfig配置內核

$ make oldconfig
$ make menuconfig

修改新生成的配置文件,32位cpu則將"# i386"加入文件第一行,64位cpu則將"# x86_64"加入文件第一行。

將所有配置文件拷貝到SOURCE目錄下

$ cp .config configs/kernel-2.6.32-`uname -m`[-type].config
$ cp configs/* ~/kernel/centos65/SOURCES/

2.2.2 如果不需要配置內核則直接拷貝所有配置文件到SOURCE目錄下

$ cp ~/kernel/centos65/BUILD/kernel-*/linux-*/configs/* ~/kernel/centos65/SOURCES/

2.3 編輯spec文件

$ cd ~/kernel/centos65/SPECS/
$ cp kernel.spec kernel.spec.distro
$ vi kernel.spec

18行加入%define buildid .your_identifier

929行將“cp $RPM_SOURCE_DIR/config-* .”改為“cp $RPM_SOURCE_DIR/kernel-*.config .”

933行注釋掉“#make -f %{SOURCE20} VERSION=%{version} configs”

2.4 編譯內核並生成rpm包,安裝包生成在~/kernel/centos65/RPMS/x86_64/目錄

$ rpmbuild -bb --target=`uname -m` kernel.spec 2> build-err.log | tee build-out.log

2.5 安裝

# yum localinstall kernel-*.rpm
# rpm -ivh --force --nodeps kernel-*.rpm //覆蓋舊的內核

3. 編譯內核模塊

3.1 准備

$ cd ~/kernel/centos65/BUILD/kernel-2.6.18/linux-2.6.18.i686
$ make oldconfig
$ make menuconfig
$ make prepare
$ make modules_prepare

3.2 編譯某一模塊

$ make M=drivers/scsi/mpt3sas

3.3 將生成的ko文件替換到系統中並使用dracut命令將其打包入initramfs中

# cp drivers/scsi/mpt3sas/mpt3sas.ko /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/scsi/mpt3sas/
# cd /boot
# dracut -f

重啟系統,使新的模塊生效。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM