[教学]在一个老机器编译2.6.20内核

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
ffbp
帖子: 18
注册时间: 2006-07-22 21:15

[教学]在一个老机器编译2.6.20内核

#1

帖子 ffbp » 2007-04-04 11:53

声明:本文是个人参考网上有关资料,编译2.6.20内核的总结,如按本文步骤编译内核造成的责任和本文作者无关。
本文放在本人的blog上面:http://my.opera.com/ffbp/blog
如果有修改,也在blog上。
欢迎转载本文,但是请不要取消本声明。

机器配置:compaq m300,PIII 600,320M内存,20G硬盘.
编译系统:ubuntu 6.10桌面版.

一、下载源代码和编译软件的准备
下载内核源代码:http://www.kernel.org/
注意,点击2.6.20内核的F版,即完整版。
如果你懒得去网站点联接,运行下列命令:

$cd ~
$ wget http://www.kernel.org/pub/linux/kernel/ ... .4.tar.bz2

安装有关编译程序。安装make ,gcc, make-kpkg,运行menuconfig等等和编译内核相关的工具。
安装不了,请检查/etc/apt/sources.list 文件。
有关命令:

$ sudo apt-get install build-essential kernel-package libncurses5-dev


二、修改sh连接
ubuntu6.10的sh是dash的软连接,ubuntu官方认为dash速度快,所以用dash替换较慢的bash。
但是很多用户不同意这个看法,主要是因为dash对原bash下编下的shell程序兼容性不好,很多论坛上甚至是一片讨伐声。
为了避免麻烦,很多人都改了回来,我也是 这样。
有关命令:

$sudo rm /bin/sh
$sudo ln -s /bin/bash /bin/sh

三、解压源代码
注意,很多教程上说应该解压到 /usr/src,但是linux掌门人linus说解压到任何目录上都可以。
根据我的实验,linus的说法是正确的。我放在自己的主目录下的src目录。
如果你下载源代码是放到自己的主目录下或者运行上面的wget下载的,那么运行下列命令:
$ cd ~
$ mkdir src && tar jfx linux-2.6.20.4.tar.bz2 -C src/

现在,源代码就在 ~/src/linux-2.6.20.4
进入源代码的目录,准备下一步的工作。后面都在这个目录里面进行。
$ cd ~/src/linux-2.6.20.4


四、开始编译前的准备工作。
首先,清理以前编译时留下的临时文件,如果是刚刚解开的包,据我的实践,不需要执行这步。执行与否,自己考虑。
相关命令如下:
$ make mrproper
很多教程上说把现在使用的内核的config拷贝过来参考,据我的实践,也不需要,ubuntu还有debian会自动做这步。
执行与否,自己考虑。
命令如下:
cp /boot/config-`uname -r` ./.config

五、开始配置内核选项。
相关命令:

$make menuconfig

配置选项非常多,配置用到的键只有几个,esc退出菜单;空格改变选项;光标键上下左右移动,回车选定。
选项意义:M是编译成可以随时加人的模块,*是编译进入内核,空就是不要。
具体配置请参考金步国先生翻译的资料:Linux 2.6.19.x 内核编译配置选项。
网址:http://lamp.linux.gov.cn/Linux/kernel_options.html
为了一次成功,请大家遵循一个原则,如果你自己使用的内核已经选用了某个选项,如果你没用充分的理由,不要随便改动。
这样虽然内核不那么精简,但是不容易出现问题。
我自己是按照这个原则一项项对过去,按照金步国先生的资料描述去选择基本上没有问题。
但是有几个问题要强调:
1、在“General setup”里面,有几项普通用户可以放心的去掉,
分别是:POSIX Message Queues 、Cpuset Support、Create deprecated sysfs files、Kernel->user space relay support (formerly relayfs) 、Initial RAM filesystem and RAM disk (initramfs/initrd) support,

2、在“Block layer”里,假如没有2TB的硬盘,就去掉:Support for Large Block Devices 。
在“IO Schedulers”里面,选择喜欢的IO运作方式,据我自己理解, Anticipatory ,Deadline,CFQ分别代表:速度优先、稳定优先、均衡,默认就是CFQ均衡。Anticipatory不适用于数据库服务,Deadline则相反,CFQ中庸,
在Default I/O scheduler ,设置你想要的就可以了。我选择CFQ。或者体验一下Anticipatory也是不错的选择。

3、在“ Timer frequency ”里,默认是250Hz,新电脑可以选择了1000Hz,我怕cpu老,会出问题,就用默认的。

4、下列选项请慎重选择:
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
PCI support
PCI Express support 老式机器没有PCI-E设备的可以选N
ISA support 较新的新机器没有ISA设备,可以选N
MCA support 一般选N
NatSemi SCx200 support 一般选N
PCI Hotplug Support
Support for PCI Hotplug (EXPERIMENTAL) 如果没有PCI热插拔设备,选N
这里的选项都要全部编译进内核,而不是以模块形式存在。

Device Drivers
Block devices
Packet writing on CD/DVD media
Enable write caching (EXPERIMENTAL) 如果你有刻录机,想启用写缓存功能,选Y

ATA/ATAPI/MFM/RLL support
Include IDE/ATA-2 DISK support 如果你的/boot是放在IDE硬盘上,那么这里一定要选Y,选M都不行。否则启动时会出现“waiting for root file system”的提示而停滞不前。
SCSI device support 如果有SATA硬盘,就选Y
SCSI disk support 如果你的/boot放在SATA硬盘上,一定要选Y。
Character devices
I2C support 一般可以选Y或者M
Graphics support 不建议把显卡驱动编译进内核。,选M,编译成模块方便日后升级驱动。
VESA VGA graphics support 我的机器显卡是ati 3d lt,linux里面的型号定为mach64,我发现除了自己的显卡选项,一定要选择这项,编译进内核,如果不选,显示出现问题。如果你不确定的话,选上吧。
File systems
CD-ROM/DVD Filesystems
ISO 9660 CDROM file system support 一般选Y
DOS/FAT/NT Filesystems
VFAT (Windows-95) fs support 有FAT32分区就选Y吧
NTFS file system support 有NTFS分区就选Y吧
NTFS write support 如果想对 NTFS分区进行写操作,选Y

必须将启动盘的文件系统编译进内核,默认是编译成模块,这样无法启动系统。ubuntu采用的文件系统是ext3,请把ext2,ext3相关的必要选项都编译进入内核。
看看我的选择:
[*] Ext2 extended attributes │ │
│ │ [*] Ext2 POSIX Access Control Lists │ │
│ │ [*] Ext2 Security Labels │ │
│ │ [ ] Ext2 execute in place support │ │
│ │ <M> Ext3 journalling file system support │ │
│ │ [*] Ext3 extended attributes │ │
│ │ [*] Ext3 POSIX Access Control Lists │ │
│ │ [*] Ext3 Security Labels
[ ] JBD (ext3) debugging support


全部设置完成,请保存设置。按照我的习惯,先在上一层目录保存一个备份,文件名类似 ../config20070330
然后保存到当起目录,文件名 .config
退出设置程序。

六、开始编译内核。
ubuntu的工具是make-kpkg,和其他的发行版相比,步骤相对简单。
相关命令:
$sudo make-kpkg clean 这条命令好像不要超级权限,很多资料上说要,不过这不是原则问题。
$ sudo make-kpkg -initrd --initrd --append-to-version=m300 kernel_image kernel_headers

上述命令中的m300大家用自己喜欢的字符代替,最后的字符一定是数字.
输完上述命令回车之前,建议大家把浏览器还有别的运用程序都关掉,机器开始的工作比较艰苦。我的机器用了超过一个小时,具体多少没有统计。

七、安装内核
编译完成就是安装工作。编译好的内核在上一层目录。包括linux-headers-2.6.20.4m300_2.6.20.4m300-10.00.Custom_i386.deb和linux-image-2.6.20.4m300_2.6.20.4m300-10.00.Custom_i386.deb两个文件,如果你不搞开发的话,只要安装内核就可以,头文件以后要用的时候再说。
相关命令:
$ cd ..
$ sudo dpkg -i linux-image-2.6.20.4m300_2.6.20.4m300-10.00.Custom_i386.deb

文件名很长,如果不用tab自动补足是不可能的,tab键万岁。
安装完成后和老内核比较一下大小
$ ls -l /boot/

可以考虑把sh改回来
$sudo rm /bin/sh
$sudo ln -s /bin/dash /bin/sh

八、重新启动验证新内核。
$ sudo reboot

九、如果。。。
grub菜单上选用老内核启动机器,推倒重来。
头像
xhy
帖子: 3916
注册时间: 2005-12-28 1:16
系统: Ubuntu 12.10 X64
来自: 火星

#2

帖子 xhy » 2007-04-08 2:14

make && make modules && make modules_install && make install 就可以了
目前负债150多万
头像
alpha.gu
帖子: 1456
注册时间: 2006-09-10 16:06
联系:

#3

帖子 alpha.gu » 2007-04-24 16:14

楼主,Graphic Support部分,能不能再说详细一点,因为我试过几次,还是搞不清楚,里面的某些项不选,或者是编译成模块了,容易导致在控制台模式下无字符显示,但是,在X-Window下,就是OK的,所以,我很想了解一下,到底是哪几个选项控制着控制台模式下的字符显示。
头像
stlxv
论坛版主
帖子: 8275
注册时间: 2006-05-03 0:39
来自: المريخ

#4

帖子 stlxv » 2007-04-24 18:37

其他没怎么看,因为编译内核本身是很简单的事情

$sudo ln -s /bin/bash /bin/sh
这个最好改成

代码: 全选

sudo -iH
cd /bin
rm sh
ln -sf bash sh
软连接最好用相对路径

另外,内核源码本来就是解压缩在哪里都可以。一般说来,源码等等东西解压在你自己的home是最好的,内核源码也不例外。
PHP是最好的语言!不服来战!
duanius
帖子: 80
注册时间: 2006-10-01 23:59

#5

帖子 duanius » 2007-08-24 16:31

dpkg方式和make方式有啥区别啊
freelather
帖子: 65
注册时间: 2007-10-26 15:23

#6

帖子 freelather » 2008-01-04 11:03

我这样编出来的内核.....怎么187M-_-!!! header有7M多

可是我看apt-get 下来的Linuz-image-2.6.22.14-generic_2.6.22-14.47_i386.deb只有17.7M

我配置内核的时候N多地方,包括声卡什么的都选了N,因为这个内核准备装在一块比较老的笔记本上做服务器,所以很多东西都用不到,就选了N

不知道为什么编出来竟然这么大..
头像
hubert_star
论坛版主
帖子: 5373
注册时间: 2007-10-29 22:12
系统: OSX 10.9 + Ub 1304
来自: 江苏南京

#7

帖子 hubert_star » 2008-01-04 12:43

编译前要执行清理
佛经说,人有八苦: 生、老、病、死、求不得、怨憎、爱别离、五阴盛 故我苦!
圣经说,人有七罪: 饕餮、贪婪、懒惰、淫欲、傲慢、嫉妒和暴怒  故我有罪!

我这篇帖子里面没有任何攻击我们伟大的中华人民共和国政府和任劳任怨的人民公仆(和本论坛高素质的版主)的文字和含义;

特此声明!

有些事,我们明知道是错的,也要去坚持,因为不甘心;有些人,我们明知道是爱的,也要去放弃,因为没结局;有时候,我们明知道没路了,却还在前行,因为习惯了。

欢迎来我的新浪微博@me
回复