linux编译启动文件系统,由文件系统引发的问题(编译内核)

由文件系统引发的问题(编译内核)    以前我都是在虚拟机中编译内核,整个过程很流畅,没有出现什么问题。但今天在物理机中编以内核却让我很纠结。

我是双系统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

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

下载内核:http://www.kernel.orgtar 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  #打开窗口如下

以下图片中“高亮”为选择

66eabe7b4eb401fe5fddb79e826a7f69.png

查看主板型号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型号编译选择:

2ff18106dcfa5357bca1422b5dff6616.png

151e816b2ae24770afea0f683c4291f4.png

击“空格”键选择core 2

7fec8792ba079e98a87b45d65e59d958.png

887a59439e8e2a9592d807d06f50976c.png

查看网卡型号

lspci | grep Ethernet

07:00.0 Ethernet controller: Broadcom Corporation NetLink BCM5906M Fast Ethernet PCI Express (rev 02)

网卡: 博通 BCM5906M NetLink Fast Ethernet / 联想

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

bfa1b21d8b614f81a5478672f87d648d.png

179e8c0c1aef61a62eee87631c4e2ae1.png

c9a7408b781a1ecbe9b65c6f13b13252.png

把Broadcom Tigon3 support直接编进内核

288bd9af218549bc9794be51db207a6f.png

查看声卡的型号

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) 高保真音频

更具声卡类型选择编译:

3d1fb16dc370ef87b87eaab382655281.png

e9d7d8500c3b92b9ca986f0faaedf438.png

aa43ef6d3244cdd92764b5cae0df4eb2.png

6458891da8388e0fdbe9e80f8e7178a2.png

b9800c30c8b8100740d5944e5aa5f3a8.png

8b0515dac3184aa45ea13ec8e25bb7e0.png

查看显卡型号lspci |grep VGA

01:00.0 VGA compatible controller: nVidia Corporation Unknown device 06ec (rev a1)

显卡类型没有被识别,没有关系,我的显卡其实类型是:Nvidia GeForce G210M ( 512 MB / 联想 )

根据显卡类型选择编译:

0bb50759bfd641e2eceb5d0c81db0d2c.png

33142a31d3be2733a20d19cf36262638.png

a2efdf7132b929aa11c0eb69c50c8387.png

abfe05e4c3a0c1cac2b178f361102f0c.png

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

6c074439e1002068ce647c084b1bea57.png

e3aea681e5971a5f1934b6ab96acb4e9.png

264fad01ae635f00e62f9bf034d425e4.png

好了,保存退出,你会发现会生成一个.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

#删除一下重复的两行

adf34508f1fa1fee5918ecd0b698e30d.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值