斑竹网络专注为中小企业客户提供以管理服务为核心的IT全方位服务 https://www.sysadm.cn
分类: LINUX
2013-12-12 10:50:50
Linux 内核编译
(老版本:2.6.9-5)
(新版本:2.6.34)
(整理日期:2010-06-28)
一、 准备工作
1、 检查下列软件包在系统中是否有安装,如果没有则需要提前将其安装到系统中:
rpm -q module-init-tools
module-init-tools-3.1-0.pre5.3
rpm -q lvm2
lvm2-2.00.31-1.0.RHEL4
pm -q device-mapper
device-mapper-1.00.19-2
rpm -q mkinitrd
mkinitrd-4.1.18-2
libgcc-3.4.3-9.EL4
gcc-3.4.3-9.EL4
gcc-c++-3.4.3-9.EL4
ncurses-devel-5.4-13.i386
ncurses-5.4-13.i386
2、 下载最新的内核软件包:
a) wget
3、 检查系统的硬件信息:
cat /proc/cpuinfo
model name : Intel(R) Pentium(R) 4 CPU 2.66GHz
二、 配置内核选项
# tar -jxvf linux-2.6.34.tar.bz2
# cd linux-2.6.34
#make mrproper 这个是为了清除因为之前编译的影响,并确保源代码是正确的
# make menuconfig
#make dep
#make clean
#make bzImage
#make modules
make modules_install
make install
三、 修改initrd文件
当系统启动不正常或者重新编译后无法重启系统,可能需要修改initrd文件,修改这个文件的方法是:
1、 将文件拷到一个临时目录下:
# cp /boot/initrd-2.6.9-5.EL.img /tmp/9/
2、 切换到上述临时目录下:
# cd /tmp/9/
3、 将现有的文件解开
gzip -cd initrd-2.6.9-5.EL.img |cpio –imd
4、 然后在当前目录下就有很多的子目录,这也就是initrd-2.6.9-5.EL.img文件里的内
容,我们可以对这个目录下的内容进行修改,并将原来的initrd-2.6.9-5.EL.img这个文件给删除掉;
5、 使用下列命令将修改好的文件重新封装好:
# find . |cpio -co |gzip -9 >../initrd-2.6.9-5.EL_new.img
6、 然后 将生成的../initrd-2.6.9-5.EL_new.img文件拷贝到/boot 并重新启动系统就可以
使用修改后的initrd文件了
20130816Dell R610上 centos5.6 64位环境下编译3.10.7版本
wget
tar -zxvf linux-3.10.7.tar.gz
yum install kernel-headers
yum install glibc-headers
yum install libstdc++-devel
cd linux-3.10.7
make menuconfig
make bzImage
编译时出现如下错误:
In file included from /usr/include/sys/time.h:31,
from /usr/include/linux/input.h:12,
from samples/hidraw/hid-example.c:14:
/usr/include/sys/select.h:78: error: conflicting types for ‘fd_set’
/usr/include/linux/types.h:12: error: previous declaration of ‘fd_set’ was here
In file included from /usr/include/linux/input.h:14,
from samples/hidraw/hid-example.c:14:
解决办法
编辑.config文件,找到CONFIG_SAMPLES行,将其修改为n
重新编译出现如下错误:
将.config文件里修改以下行
CONFIG_GFS2_FS=m 修改成
Make menuconfig
选中以下对应的选项
General setup –>[*] enable deprecated sysfs features to support old userspace tools
找到CONFIG_SYSFS_DEPRECATED_V2 选项,并选中。修改这项是因为旧版的 mkinitrd及其nash在内核没有CONFIG_SYSFS_DEPRECATED_V2参数时默认使用旧 版sysfs路径格式,从而在新内核下无法正确访问/sys内的硬盘信息节点。