Chinaunix首页 | 论坛 | 博客
  • 博客访问: 48262
  • 博文数量: 26
  • 博客积分: 1175
  • 博客等级: 少尉
  • 技术积分: 300
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-14 19:16
文章分类
文章存档

2011年(1)

2010年(25)

我的朋友

分类: LINUX

2010-12-28 16:37:36

                                   由文件系统引发的问题(编译内核)
      以前我都是在虚拟机中编译内核,整个过程很流畅,没有出现什么问题。但今天在物理机中编以内核却让我很纠结。
      我是双系统window 7 和  RHEL5,在linux系统下想在windows所在环境拷贝一下东西,但其磁盘都是NTFS格式的,挂载时就会提醒你NTFS格式的盘不识别。这是为 什么呢?是因为默认linux并没有把NTFS格式编进内核或做进模块。要想让其识别NTFS格式的盘,还得编译内核。
      但不一定是必须的,有一个小小的rpm包就可搞定(包名:kernel-module-ntfs-2.6.18-128.el5-2.1.27-0.rr.10.11.i686.rpm),这里我编译内核。
这里我把编译过程和遇到的问题与大家分享,望对大家有帮助。多多提出您宝贵的意见噢!

编译内核前先对编译步骤进行简单了解
1.配置内核可以根据需要与爱好使用下面命令中的一个:
#make config (基于文本的最为传统的配置界面)
#make menuconfig (基于文本选择的配置界面)
#make xconfig (基于图形窗口模式的配置界面)
#make oldconfig (如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)
我个人喜欢基于文本选择的配置界面
 进行配置时,大部分选项可以使用其缺省值,只有小部分需要根据用户不同的需要和硬件信息选择。                       
选择相应的配置时,有三种选择,它们分别代表的含义如下:                
 “Y”- 将该功能编译进内核 (*)                
 “N”- 不将该功能编译进内核  (空)               
 “M”- 将该功能编译成可以在需要时动态插入到内核中的模块。(M)
2.编译内核核心文件
make
注意这个过程大概二十分钟左右
3.编译模块
make modules
这个过程发费的时间依你选的模块多少而决定
4.安装模块
make modules_install
5.安装内核核心
make install


大家都知道,要想编译内核的对自己的计算机硬件有所了解,下面就以我的计算为例介绍选择编译:
下载内核:

tar xvf linux-2.6.30.10.tar.gz -C /usr/src/
cd /usr/src
ln -sv linux-2.6.30.10 linux
cd linux
make menuconfig  #打开窗口如下

以下图片中“高亮”为选


查看主板型号
dmidecode | more
#找到Base Board Information这一行
Base Board Information
        Manufacturer: LENOVO
        Product Name: NITU1
        Versio
        Features: Nonen: REFERENCE
        Serial Number: CB00790147                     
        Asset Tag: Not Specified
        Location In Chassis: Not Specified
        Chassis Handle: 0xFFFF
        Type: Unknown
        Contained Object Handles: 0
主板:联想 NITU1 ( 英特尔 4 Series Chipset 笔记本芯片组 ) ,intel的主板一般使用默认选项即可。
查看cpu的型号
cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 23
model name      : Intel(R) Core(TM)2 Duo CPU     T6500  @ 2.10GHz

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 23
model name      : Intel(R) Core(TM)2 Duo CPU     T6500  @ 2.10GHz
处理器: 英特尔 Core(酷睿) 双核 T6500 @ 2.10GHz
根据cpu型号编译选择:


击“空格”键选择core 2



查看网卡型号
 lspci | grep Ethernet
07:00.0 Ethernet controller: Broadcom Corporation NetLink BCM5906M Fast Ethernet PCI Express (rev 02)
网卡: 博通 BCM5906M NetLink Fast Ethernet / 联想

根据网卡类型编译选择:(Broadcom Tigon3)




把Broadcom Tigon3 support直接编进内核


查看声卡的型号
 lspci  |grep -i audio
00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03)
声卡: Conexant Systems HD Audio Controller  @ 英特尔 82801I(ICH9) 高保真音频

更具声卡类型选择编译:




查看显卡型号
lspci |grep VGA
01:00.0 VGA compatible controller: nVidia Corporation Unknown device 06ec (rev a1)
显卡类型没有被识别,没有关系,我的显卡其实类型是:Nvidia GeForce G210M ( 512 MB / 联想 )

根据显卡类型选择编译:




根据需求把NTFS文件系统编译到内核,让系统支持NTFS文件系统格式:


好了,保存退出,你会发现会生成一个.config文件。

注意:如果对计算机硬件不是太了解,而且对编译内核不熟.config 文件可以直接拷贝,然后再编译选择自己需要的。拷贝如:

cp /boot/config-2.6.XXXX  /usr/src/linux/.config

下面开始正式编译安装内核:
make
注意这个过程大概二十分钟左右
make modules
这个过程发费的时间依你选的模块多少而决定
make modules_install
make install

以上几步都没有出错,最后一步make install 时出现一下警告:

WARNING: No module ehci-hcd found for kernel 2.6.20.7, continuing anyway
WARNING: No module ohci-hcd found for kernel 2.6.20.7, continuing anyway
WARNING: No module uhci-hcd found for kernel 2.6.20.7, continuing anyway
WARNING: No module ata_piix found for kernel 2.6.20.7, continuing anyway
WARNING: No module dm-mem-cache found for kernel 2.6.20.7, continuing anyway
WARNING: No module dm-message found for kernel 2.6.20.7, continuing anyway
WARNING: No module dm-raid45 found for kernel 2.6.20.7, continuing anyway
前三个警告是由于USB相关的模块没有编译成模块所导致的
解决方法:

vim .config

分别找到一下:

CONFIG_USB_EHCI_HCD=y
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_UHCI_HCD=y

将其改为:
CONFIG_USB_EHCI_HCD=m
CONFIG_USB_OHCI_HCD=m
CONFIG_USB_UHCI_HCD=m
注:由此可见,并不是编进内核就好了,有些编进内核反而会出错
 
第四个警告是因为没有将ATA的相关驱动加载到模块

CONFIG_ATA_PIIX=y
将其改为
CONFIG_ATA_PIIX=m
注意:小提示一般只要遇到某某模块没找到,就修改.config文件找到相应的CONFIG_XX_XX=y改为CONFIG_XX__=m
 
最后三个警告dm-XX,是新内核出现的bug不影响性内核的生成。
 
修改了以上内容后,重新编译内核
pwd
/usr/src/linux
cp .config config.back
make clean

make mrproper  #清除刚才编译生成的文件

cp config.back .config
make menuconfig
不用选择直接保存退出,因为.config文件我们保存的有。然后编译
make
make modules
make modules_install
make install
这次编译成功了,在/boot目录下自动生成加载镜像文件initrd-2.6.30.10.img 和 linux 内核文件 vmlinuz-2.6.30.10

重新启动系统,并以刚编译的内核启动,刚启动一半遇到如下问题:
insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists
上网收索其原因又是内核bug的原因,解决方法:
1.解压initrd文件
mkdir /var/aa
 cp /boot/initrd-2.6.30.4.img /var/aa
 cd /var/aa
 ls
initrd-2.6.30.10.img
mkdir newinitrd
 cd newinitrd/
zcat ../initrd-2.6.30.10.img | cpio -i
10236 blocks
释放之后看到如下内容
 ls
bin dev etc init lib proc sbin sys sysroot
 
2.vim init
#删除一下重复的两行

 
3.重新打包initrd
 find . | cpio -c -o > ../initrd
10234 blocks
 cd ..
rm -f initrd-2.6.30.10.img
 gzip -9 < initrd > initrd-2.6.30.10.new.img
ls
initrd-2.6.30.10.new.img  initrd          newinitrd
好了,initrd-2.6.30.10.new.img就是重新打包的 initrd了,然后把initrd-2.6.30.10.new.img拷贝到/boot,更改grub.conf里边的initrd- 2.6.30.10.img为initrd-2.6.30.10.new.img就可以了
重新启动,好了上述出现的问题消失了!!!

最后看一看是否支持NTFS文件系统格式

/dev/sda5 是NTFS分区格式 磁盘
mount /dev/sda5 /mnt  #这里没报错
验证:
cd /mnt
ls   #查看文件
...............................
Program Files  Windows

本文出自 “linuxme” 博客,请务必保留此出处http://linuxme.blog.51cto.com/1850814/390778



阅读(464) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~