[原创]ubuntu6.10下编译内核2.6.20.3 Step by Step

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

[原创]ubuntu6.10下编译内核2.6.20.3 Step by Step

#1

帖子 drongh » 2007-03-18 20:03

在ubuntu6.10下,2.6.20.3的内核编译。

1、首先切换到root用户

代码: 全选

sudo su -
输入你的登入密码
2、更新

代码: 全选

apt-get update
3、在ubuntu6.10里,/bin/sh是一个连接到/bin/dash符号连接,有时当你从源代码编译内核的时候,/bin/dash会出错,要用ln -s /bin/bash /bin/sh连接代替,所以:

代码: 全选

rm -f /bin/sh
ln -s /bin/bash /bin/sh
4、下载编译需要的软件包

代码: 全选

apt-get install kernel-package libncurses5-dev fakeroot wget bzip2
5、下载内核源代码

代码: 全选

cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.3.tar.bz2
tar xjf linux-2.6.20.3.tar.bz2
ln -s linux-2.6.20.3 linux
cd /usr/src/linux
6、这时候确保你在/usr/src/linux下,开始做内核配置。

代码: 全选

cp /boot/config-`uname -r` ./.config
这一步是把你当前的内核配置作为新内核的配置

代码: 全选

make menuconfig
出现内核配置菜单,选择Load an Alternate Configuration File作为内核配置文件。选择Select,然后Ok,再选Yes
7、开始编译内核

代码: 全选

make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
漫长的等待,我的机器大概花了40分钟,这主要取决于你的内核配置和cpu的速度。
8、开始安装新内核,在/usr/src下会生成刚刚编译成的deb包,安装它们

代码: 全选

cd /usr/src
ls -l
dpkg -i linux-image-2.6.20.3-custom_2.6.20.3-custom-10.00.Custom_i386.deb
dpkg -i linux-headers-2.6.20.3-custom_2.6.20.3-custom-10.00.Custom_i386.deb
检查你的起动列表里是不是有2.6.20.3的起动选项。

代码: 全选

gedit /boot/grub/menu.lst
应该看到下面的结果。

代码: 全选

title           Ubuntu, kernel 2.6.20.3-custom (recovery mode)
root            (hd0,5)
kernel          /boot/vmlinuz-2.6.20.3-custom root=/dev/hda6 ro single
initrd          /boot/initrd.img-2.6.20.3-custom
9、重启后检查内核是不是2.6.20.3

代码: 全选

shutdown -r now
uname -r
上次由 drongh 在 2007-03-19 10:23,总共编辑 1 次。
头像
dogfox
论坛版主
帖子: 5311
注册时间: 2006-09-02 14:18
来自: 汉桑城
联系:

#2

帖子 dogfox » 2007-03-18 21:35

drongh 写了:6、这时候确保你在/usr/src/linux下,开始做内核配置。

代码: 全选

cp /boot/config-`uname -r` ./.config

代码: 全选

cp /boot/config-`uname -r`  .config
全世界linux爱好者联合起来 !
lpmurder
帖子: 142
注册时间: 2007-02-06 18:57
来自: 中国茶都

#3

帖子 lpmurder » 2007-03-18 21:58

新手來過,學習中
drongh
帖子: 1038
注册时间: 2007-01-10 9:32

#4

帖子 drongh » 2007-03-19 7:15

dogfox 写了:
drongh 写了:6、这时候确保你在/usr/src/linux下,开始做内核配置。

代码: 全选

cp /boot/config-`uname -r` ./.config

代码: 全选

cp /boot/config-`uname -r`  .config

这两种写法是一样的
头像
Element
帖子: 3537
注册时间: 2005-09-10 16:04
来自: DG-GD-China

#5

帖子 Element » 2007-03-19 8:07

dogfox 写了:

代码: 全选

cp /boot/config-`uname -r`  .config
写法简单 :D
http://element.blog.ubuntu.org.cn/
Ubuntu Jaunty Jackalope...
AMD Barton 2600+
MSI K7N2 Delta-L
Kingston DDR400 512M*2+256M*1
nVidia FX5200
Seagate 80G(Jaunty Jackalope)
Seagate 160G(XXxxXX)
SyncMaster 732N
雕啸长空
帖子: 1897
注册时间: 2006-09-12 14:09

#6

帖子 雕啸长空 » 2007-03-19 8:39

安装编译所需包 写了:sudo apt-get install build-essential bin86 kernel-package libqt3-headers libqt3-mt-dev wget && cd /usr/src
获取内核源码 写了:sudo wget http://kernel.org/pub/linux/kernel/v2.6/linux-x.x.x && sudo tar -xvjf linux-x.x.x
复制源码至/src,建立链接?? 写了:sudo rm -rf linux && sudo ln -s /usr/src/linux-x.x.x linux && cd /usr/src/linux
复制当前内核的配置作为自定义内核的基础 写了:sudo cp /boot/config-`uname -r` .config && sudo make oldconfig && sudo make xconfig
准备编译 写了:sudo make-kpkg clean
正式开始编译 写了:sudo make-kpkg -initrd --revision=27012007 kernel_image kernel_headers modules_image
安装译好的内核 写了:cd .. && sudo dpkg -i <name of the file>
删除系统自带旧版内核 写了:sudo apt-get remove --purge linux-image-XXX linux-headers-XXXXX
Fair winds and following seas !
edwardai
帖子: 3
注册时间: 2007-03-20 15:55

#7

帖子 edwardai » 2007-03-20 15:58

我依照lz的方法编译2.6.20.2版本的,启动后进度条停住,alt+f1没有任何提示
dingyulong
帖子: 344
注册时间: 2007-02-06 18:12

#8

帖子 dingyulong » 2007-03-20 23:03

不敢 :?
头像
yysq009
帖子: 2682
注册时间: 2007-01-28 23:00
来自: @江西|南昌@
联系:

#9

帖子 yysq009 » 2007-03-20 23:36

有人成功了么???? 我不想做白老鼠。

Do as you would be done by !
头像
dogfox
论坛版主
帖子: 5311
注册时间: 2006-09-02 14:18
来自: 汉桑城
联系:

#10

帖子 dogfox » 2007-03-21 0:32

drongh 写了:
dogfox 写了:
drongh 写了:6、这时候确保你在/usr/src/linux下,开始做内核配置。

代码: 全选

cp /boot/config-`uname -r` ./.config

代码: 全选

cp /boot/config-`uname -r`  .config

这两种写法是一样的
根本就是两码事
全世界linux爱好者联合起来 !
qianghr
帖子: 67
注册时间: 2007-03-09 14:23

#11

帖子 qianghr » 2007-03-21 5:31

成功升级 但是发现20。3的内核怎么不支持Intel2200BG无线网卡哪 修改配置 改成built in也无法识别 郁闷哪
lionbom
帖子: 26
注册时间: 2007-03-16 9:32

#12

帖子 lionbom » 2007-03-21 8:46

我在HIWEED下编译内核2.6.20.3也成功了,并且也能进入界面,同时也安装上了NVIDIA显卡驱动。但在登录界面时无法进入HIWEED默认的界面,改为CFWM才能进入。不解???
不过我在配置菜单时,取消下面几项,选取我的CPU项。
Block Devices -> Low Performance USB Block driver (BLK_DEV_UB)
Graphics Support -> nVidia Riva support (FB_RIVA)
Kernel Hacking -> Use 4Kb for kernel stacks instead of 8Kb (4KSTACKS)
Processor Type and Features -> Local APIC support on uniprocessors (X86_UP_APIC)
编译过程中有很多警告和好些定义不使用、PM什么过程过时、还很不知什么提示来的,闪得太快了看不清也记不得了。不过仍然成功编译。安装后再生成INITRD.IMG-XXXX,重启电脑时出mount: unknown filesystem type 'devfs'。后来参照LINUXSIR.ORG上的做法:
Create A Ramdisk

Now we must create a ramdisk for our new kernel. Normally we do this with mkinitrd, but our new kernel uses udev instead of devfs, and you'll most likely get this error message with an mkinitrd generated ramdisk during boot-up:

mount: unknown filesystem type 'devfs'

which might lead to a kernel panic.

The new way of creating ramdisks is with mkinitrd.yaird. Backports.org has a yaird package for Debian Sarge. Before we can install it, we must install two prerequisites:

PHP 代码:
apt-get install libhtml-template-perl libparse-recdescent-perl

Then we install yaird like this:

PHP 代码:
cd /tmp
wget http://downloads.howtoforge.com/files/y ... 1_i386.deb
dpkg -i yaird_0.0.12-8bpo1_i386.deb

(The original yaird package was located in http://backports.org/debian/pool/main/y/yaird/, but was removed in the meantime, so I've made the package available under http://downloads.howtoforge.com/file...8bpo1_i386.deb.)

Before we can create the new ramdisk, we must edit the configuration file of our new kernel which you can find in the /boot directory (run

PHP 代码:
ls -l /boot

to find out). In this tutorial it's called /boot/config-2.6.18.3-default1, and in that file we must comment out the line CONFIG_DEFCONFIG_LIST (towards the beginning of the file) because otherwise mkinitrd.yaird will throw an error like this at us:

yaird error: bad value in /boot/config-2.6.18.3-default1: CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" (fatal)

So we do this:

PHP 代码:
vi /boot/config-2.6.18.3-default1

引用:
[...]
# CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
[...]


Now we can finally create our ramdisk like this:

PHP 代码:
mkinitrd.yaird -o /boot/initrd.img-2.6.18.3-default1 2.6.18.3-default1
再重新启动电脑,就OK了。其实当你认真地参考网上的有关文章做法,一般情况下都没有什么太难。最关键的是配置内核!按自己机器的配置情况和实际应用情况,花点时间去配置内核,一般来说都能成功编译,但编译后能否启动电脑就不一样了我曾经编译过好几次内核,虽然都能成功地生成了,但安装后无法启动电脑。最后才是先简单地来做,现在成功了。不过新内核运行过程仍然有很什么进程动行失败的,因为我的电脑上没有相关的东西。回头再慢慢精选内核配置。
相信下面这个外国人的写的UBUNTU方式编译内核对你同样有帮助。
http://www.howtoforge.com/kernel_compilation_ubuntu
lionbom
帖子: 26
注册时间: 2007-03-16 9:32

#13

帖子 lionbom » 2007-03-21 8:55

不知有编译过内核的各位在编译内核时是否有警告提示?反正我在试的时候,每次都有很多警告提示的。
我编译时没有做
rm -f /bin/sh
ln -s /bin/bash /bin/sh
这一步。不过现在想想还是得要这步吧。
网上还说2.6的内核基础上编译也不用做
ln -s linux-2.6.20.3 linux
这一步,做了也可能更会出错,所以我也没有做这一步。
drongh
帖子: 1038
注册时间: 2007-01-10 9:32

#14

帖子 drongh » 2007-03-21 10:55

我这边编译没一点问题
lookee
帖子: 141
注册时间: 2005-09-09 18:13

#15

帖子 lookee » 2007-03-21 15:21

我这里启动时会停在waiting for root file system处
给我一个支点,我可以撬起地球仪!
Ubuntu Edgy Eft
Thinkpad T60
T2300(1.66G) 512M(667MHz) X1300(64M) 60G
回复