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
重啓系統,使新的模塊生效。