CentOS 6.5編譯內核及驅動模塊

1. 生成源碼樹node

1.1 安裝必須的工具python

# 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 下載源碼包linux

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

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

$ 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. 編譯內核(若是隻須要修改內核模塊,不須要更新內核則跳過本節)ui

2.1 安裝必須的工具spa

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

2.2 配置內核code

2.2.1 若是須要對內核作定製則使用下面方法配置內核,使用非root用戶xml

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

$ 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

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

相關文章
相關標籤/搜索