您的位置:首页 > 运维架构 > Linux

CentOS 6.5编译内核及驱动模块

2016-03-31 16:36 375 查看
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


重启系统,使新的模块生效。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: