CentOS 6.4 编译安装2.6.38.8内核

最近需要使用mmap()来对内存进行映射,访问PC机上物理内存,但是在CentOS 6.4下的内核版本是linux-2.6.28.10,不支持用户直接访问物理空间。

在新的内核中,有两个选项和mmap()映射内存/dev/mem有关:CONFIG_X86_PAT和CONFIG_STRICT_DEVMEM,内核中有这样一段话:

CONFIG_STRICT_DEVMEM:

If this option is disabled, you allow userspace (root) access to all

of memory, including kernel and userspace memory. Accidental

access to this is obviously disastrous, but specific access can

be used by people debugging the kernel. Note that with PAT support

enabled, even in this case there are restrictions on /dev/mem

use due to the cache aliasing requirements.

If this option is switched on, the /dev/mem file only allows

userspace access to PCI space and the BIOS code and data regions.

This is sufficient for dosemu and X and all common users of    /dev/mem.

 

所以,如果要使用mmap映射/dev/mem文件的话,必须将这两个量取消。如果不取消CONFIG_X86_PAT,则/dev/mem不允许映射;如果不取消CONFIG_STRICT_DEVMEM,则内核空间不能映射,调用mmap()的时候会出现Invalid Parameter错误。于是乎决定重新编译内核。


编译过程如下:

1. 到官方网站下载kernel, 2.6.38.8


# wget  https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.8.tar.bz2 


2.将文件拷贝到/usr/src目录下,并解压得到linux-2.6.38.8


#cp -rf linux-2.6.38.8.tar.bz2 /usr/src

#tar -xjvf linux-2.6.38.8.tar.bz2


3.进入该目录开始,编辑Makefile文件,修改“EXTRAVERSION = .8.i386” 


.8.i386 是内核的扩展名称,最后生成内核的名称为:2.6.38.8.i386,这个名字可以任意定


4.配置内核


#make menuconfig

内核有两个地方需要关闭:

a、CONFIG_X86_PAT

这个选项位于“Processor type and features”区域,名称是“x86 PAT support”。

b、CONFIG_STRICT_MEMDEV

这个选项位于“Kernel hacking”区域,名称是“Filter access to /dev/mem”。

在新版本内核中,例如我使用的2.6.38.8,必须在“General setup”中,打开“Configure standard kernelfeatures (expert users)”选项,在“Processor type and features”才能够配置“x86 PAT support”选项,否则,默认是y。

5. 编译内核 

#make 

6. 编译内核模块 

#make modules 

7. 安装内核模块 

#make modules_install 

这时,在/lib/modules下会产生一个目录为,名称为内核版本+EXTRAVERSION。我的是:2.6.38.8.i386


8. 拷贝bzImage文件到/boot目录 


#cp /usr/src/linux-2.6.28.10/arch/i386/boot/bzImage  /boot/vmlinuz-2.6.38.8.i386 

注意:内核类型根据自己需求选择,我选择arch/i386下的bzImage文件


9. 拷贝System.map文件到/boot目录 

cp System.map /boot/System.map-2.6.38.8.i386 


10. 创建.img文件 

mkinitrd /boot/initrd-2.6.38.8.i386.img 2.6.38.8.i386 
其中第二个参数2.6.38.8.i386 与/lib/modules目录名称一致


11. 添加grub文件条目 

#vim /boot/grub/grub.conf 
添加如下几行:
title CentOS (2.6.38.8.i386)
    root (hd0,0)
    kernel /vmlinuz-2.6.38.8.i386 root=/dev/VolGroup00/LogVol00 rhgb quie    t
    initrd /initrd-2.6.38.8.i386.img 
其中/dev/VolGroup00/LogVol00根据自己情况配置,我使用的双硬盘,建立在LVM基础上


12. 重新启动 
一定要保证kernel和initrd指定的文件名称无误,否则就要要跑到机房去重启机器了~
#reboot

 

重启之后通过一下命令查看内核版本:

#uname -r

若显示2.6.38.8.i386 则新内核启动成功









  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值