最近一直在看Linux内核,但是始终没有得以实践,今天从早上弄到现在终于搞定了,或许对高手来说这不值一提,但是对我来说确实是个挑战,以前只是使用Linux从未涉及到内核的东西。
我用的是Fedora13,前两天一直在找内核包,从www.kernel.org中竟然没找到我用的版本的包(其实可以不用找自己的版本的包,现在编译完成了才知道,只要版本比自己用的高的就可以下载下来编译通过。)Fedora官网我也没有找到,于是从书上找到一个RedHat的下载网站(download.fedora.redhat.com上面有RedHat基本上所有的内核和应用软件,比较崩溃的是速度太慢了(我昨天晚上下了两个小时才把kernel-2.6.33.3-85.fc13.src.rpm这个内核下载下来,内核64M)。现在总结下今天遇到的问题和解决方法,供那些和我一样的菜鸟参考下。
我不得不承认,livecd版的Fedora如果没有软件源那就是废物什么用也没有,你所用到的任何软件基本都没有,所以接着一件崩溃的事情就是西电的Fedora源不能用了,所有的请求都是服务器没有相应,没办法,只得换成上海交大的源,速度还算可以,稳定在300--500KB/S。
整个配置过程最好在root用户下使用,免得出现权限不够的烦恼。但是Fedora从9还是10(我记不清了)开始禁止以root用户登录,只能在终端中切换为root用户,但是有时会遇到点小麻烦,所以不得不改配置文件,先在终端输入命令su,然后输入root用户密码,提升权限
gedit /etc/pam.d/gdm
将auth required pam_succeed_if .so user != root quiet注释掉或者将root改成其他的用户名
gedit /etc/pam.d/gdmpassword
同样将auth required pam_succeed_if .so user != root quiet注释掉或者将root改成其他的用户名,这样就可以以root用户登陆了。
以root登陆后,cd /etc/yum.repo.d/
首先备份本身自带的repo文件,不然默认的在makecache时也会使用默认的源。
mv fedora.repo fedora.repo.bak
mv fedora-updates.repo fedora-updates.repo.bak
gedit sjedu.repo
然后将以下内容写入这个siedu.repo,保存退出。
[Fedora-ftp.sjtu.edu.cn]
name=Fedora 13 - i386
baseurl=http://ftp.sjtu.edu.cn/fedora/linux/releases/13/Fedora/i386/os/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora
[Everything-ftp.sjtu.edu.cn]
name=Everything 13 - i386
baseurl=http://ftp.sjtu.edu.cn/fedora/linux/releases/13/Everything/i386/os/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora
[updates-ftp.sjtu.edu.cn]
name=Fedora updates
baseurl=http://ftp.sjtu.edu.cn/fedora/linux/updates/13/i386/
enabled=1
gpgcheck=0
然后用yum clean all //这个命令可以不要。
yum makecache 就好了。
然后安装软件包,如果你有下面这些软件包就不要装了,因为我用的是livecd版的,什么软件都没有。
yum -y install gcc
yum -y install redhat-rpm-config
yum -y install xmlto
yum -y install asciidoc
yum -y install elfutils
yum -y install elfutils-libelf-devel
yum -y install zlib-devel
yum -y install binutils-devel
yum -y install libdwarf-devel
yum -y install ncurces-devel
下面开始编译内核,我从图书馆借的那本书把我害惨了,让我走了很多弯路,他的方法也是对的,但是他对以前的RedHat版本比较熟悉,于是他就按照以前的版本进行讲解安装,但是现在版本默认安装的跟他讲的不一样,很是无奈。
把下载到的kernel放在/usr/src/kernel/下。 然后进入这个目录
cd /usr/src/kernel/
安装内核
rpm -ivh kernel-2.6.33.3-85.fc13.src.rpm
在这个过程中会出现没有用户组mockbuild和用户mockbuild的warning,不用理会就行,你也可以增加这个用户和用户组。这是因为这个RPM包是src的,解压后是源代码,不能执行。所以系统会提示这个,
cd ~/rpmbuild/SPECS/
rpmbuild -bp --target $(uname -m) kernel.spec
这样就会出现安装内核的进程,等待会即可。(解释下我前面说我看的书使我绕弯子的原因,在/usr/src/下有一个Linux目录,但是这个目录在新版中已经不再是放置内核源代码的地方,这里放置的是头文件 而我看的书上他写的是执行完安装命令后是安装在这个目录下了,但是我的没有,我的是安装在用户的根目录下。让我费了好长时间去找安装在哪了,很是迷茫,然后看了官方给的说明文档才知道)
然后现在我们将指定一个字符串方便以后区别内核版本. 因此我们需要做:
cd ~/rpmbuild/BUILD/kernel-2.6.33/linux-2.6.33.i686
vi Makefile
在EXTRAVERSION一行, 你可以输入一个内核识别码. 我想最好是在字符串后附上内核的版本号, 这样来操作:
EXTRAVERSION = -86.fc13
保存
配置内核
运行
make menuconfig
然后看到内核的配置菜单. 移动绿色光标到 Load an Alternate Configuration File 行后选择.config文件做为配置文件: Load an Alternate Configuration File 完成配置后, 选择Exit, 回答下面的问题(Do you wish to save your new kernel configuration? 你希望保存新的内核配置吗?), 选择Yes:
然后根据自己机器的情况进行配置,大部分选择缺省值就行了。
编译内核
make
编译内核需要较长时间,我的用了将近一个小时,跟机器的性能有很大关系。
如果选择了可加载模块,编译内核完成后,要对选择的模块进行编译。用下面的命令
make modules
make modules_install
然后
make install
现在编辑/boot/grub/menu.lst. 把你的新的内核信息放到列表的顶端, 确认新的内核已经替代老的内核, default值需要设为0.
vi /boot/grub/menu.lst
我的menu.lst是这样的:
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda2
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Fedora (2.6.33-85.fc13)
root (hd0,0)
kernel /vmlinuz-2.6.33-85.fc13 ro root=UUID=3832e93f-edbf-40b5-87d7-b46d902231f6 rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rhgb quiet
initrd /initramfs-2.6.33-85.fc13.img
title Fedora (2.6.33.3-85.fc13.i686)
root (hd0,0)
kernel /vmlinuz-2.6.33.3-85.fc13.i686 ro root=UUID=3832e93f-edbf-40b5-87d7-b46d902231f6 rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rhgb quiet
initrd /initramfs-2.6.33.3-85.fc13.i686.img
现在重新启动系统:
shutdown -r now
会进入到一个选择要进入的系统,一个就是刚刚编译过的
如果一切进展顺利, 你的新内核正常工作


昊昊荡荡 于 2010-09-12 23:35:23发表:
一直也很想升级一下自己fedora 13的内核,没有找到合适的资料。
今天在这里遇到了,一定要试试~!
wst021 于 2010-09-12 21:41:20发表:
先来学习学习,学习好之后与各位交流!
liushu1231 于 2010-09-12 09:54:26发表:
3# deepwhite
哦,谢谢,学习了。
liushu1231 于 2010-09-12 09:54:03发表:
4# wucongdonglai
这是选择检测自己主机的cpu型号,然后自动安装符合自己cpu的版本。书上讲的好像都与现在用的有区别,书上写的东西毕竟版本都很早了。
wucongdonglai 于 2010-09-10 17:13:12发表:
cd ~/rpmbuild/SPECS/
rpmbuild -bp --target $(uname -m) kernel.spec
不明白你这干什么!
我反正是直接把内核解压之后在根目录下直接拷贝的/usr/src下,哈,纯粹的蛮干!
对了,你看了什么书?上面内核编译的选项讲的详细不?
deepwhite 于 2010-09-10 16:08:25发表:
新的内核可以不用 make modules,跳过那个步骤, 直接 make modules_install 就可以了。
zhania 于 2010-09-10 14:55:58发表:
顶强人