鱼C论坛

 找回密码
 立即注册
查看: 10593|回复: 4

手动编译安装内核经验下

[复制链接]
发表于 2011-11-10 13:54:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
5) USB的支持




推荐使用默认的配置








1.       通用系统选项




1)      System V IPC and Sysctl support




System VLinux进程通信的机制。Sysctl允许你动态操作多个内核参数,所以选上它们




                               
登录/注册后可看大图

15 System V & Sysctl




1)      控制台的支持




Linux系统中当然不能缺少功能强大的控制台了,如果将来你想自定义一个个性的控制台,推荐下面的选项:




                               
登录/注册后可看大图

16 控制台驱动程序的配置




1)      字符设备的支持




在控制台中,大多数用户都需要用一个虚拟终端访问系统,并需要打印机的支持。那么选择该项。

                               
登录/注册后可看大图




17 字符设备
1)      文件系统的支持


对于一般的桌面用户FAT NTFS ext2 ext3算是最常用的文件系统了,所以只要让内核支持这些就可以了。像下面这样:


                               
登录/注册后可看大图

18 Windows文件系统的支持

                               
登录/注册后可看大图

图19 虚拟文件系统的支持

                               
登录/注册后可看大图

20 ext文件系统的支持
另外还有一点要说明的是,如果这不是你第一次配置内核,在执行上面的任何一种配置工具前,一定要先执行make mrproper,对源代码目录进行清理工作,否则编译会出现问题。


编译内核


配置完后,我们就要进行编译工作了,如果想让编译出来的代码更加优化,建议各位去修改一下Makefile中的CFLAG参数,当然这要根据你的计算机而定,这里给出一个Pentium4的参考方案
CFLAGS=”-O2 -march=pentium4 –mfpmath=sse –malign-double –mmmx –msse –msse2 –pipe /
-fomit-frame-pointer -fforce-addr -falign-functions=4 -fprefetch-loop-arrays”

                               
登录/注册后可看大图
图21 修改Makefile文件


修改完成后,编译就很简单了
make –j2
一个命令就搞定了,连带模块和系统内核的编译全都由这个命令来完成。-j选项的含义就是开启并行编译内核的任务的数目,分配原则基本上是一个CPU可以分配两个任务,由于在编译文件时对硬盘的I/O会影响编译时间,所以开启2个任务可以加快整个内核的编译过程。由于内核源代码之间并不存在依赖,所以并行编译并不会带来任何麻烦。另外和2.4版的内核相比,在编译内核前,我们不再用执行make dep,也不用区分什么bzImage,modules等问题,默认的Makefile规则会为我们处理,我们只要简单的执行make就OK了 。
最后说点编译的小技巧:
如果你不想看到编译内核时的很多输出,但仍想关注警告和错误,你可以把输出重定向到一个文件里
make > your_own_dir_and_file。
这样,当你想关心一下编译过程的是后,去看那个文件就是了。其实 一般情况下,我们不许要关心那些警告和错误,把它们重定向到 /dev/null就OK了。
make > /dev/null
而且如果你在变异过程中看到很多的warning并不用担心,这并不会影响内核的使用,只是代码不规范造成的问题,如果真的遇到了错误,make会为你显示***这样开头的内容。


安装内核


在执行安装前,我们要切换到root用户,在控制台上执行su命令。下面就是整个安装过程。
首先,我们可以执行make modules_install 命令来安装模块,这个命令会把所有你编译的模块复制到/lib/<your kernel version>目录中去。
对于内核本身的安装,我们可以有两个不同的方法,一个简单,但是做完之后我们学不到什么东西,另一个稍显麻烦,但是我们却可以有所收获。先来看第一个,懒人方法
还是在源代码目录下执行
make install
这个命令就为我们全权代理了安装新内核的所有步骤,执行完后,就可以重新启动,感受一下自己的新内核了。
但是,make install都为我们做了什么呢?第二种方法就是自己来手动安装内核,步骤有三,而这正是make install的工作。
1. 复制生成的内核镜像到/boot
在你编译好内核后,在目录arch/i386/boot/中会有一个名为bzImage的文件躺在那里,这就是我们说的被压缩的可引导的内核镜像,把它复制到/boot目录中,并重新命名为vmlinuz-<your kernel version>,在我们的例子中就是vmlinuz-2.6.11.9
cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.11.


2. 生成initrd-<your kernel version>.img文件
这个文件的作用是临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。用命令

mkinitrd initrd-2.6.11.9 2.6.11.9可以为我们的系统生成一个initrd-2.6.11.8.img的文件,把这个文件也复制到/boot目录下。要说明的是mkinitrd是Redhat特有的命令。其它发行版上应该有相应的生成这个文件的命令。



3. 配置grub
到这里,整个内核的安装就结束了,下面要做的就是让机器能够引导新内核,打开/boot/grub/grub.conf,加上下面的代码:
title Magic Linux (2.6.11.9)  # 这是你的Linux发行版的名字
root (hd0,10)              # 我把/boot放在了/dev/hda11上所以是(hd0,10)
kernel /vmlinuz-2.6.11.9 ro root=/dev/hda13 # 这里的root指的是/目录所在的分区,我安装的
# 时候放到了/dev/hda13中
splash=silent
initrd /initrd-2.6.11.9.img
如果你的硬盘上还有Windows那么,加入下面的代码
title dos

rootnoverify (hd0,0) # 注意,这是你的windows安装在C盘的时候的情形

                     # 具体要根据你的情况而定

makeactive

chainloader +1

保存并退出
执行reboot,重新启动,如果一切正常,应该能看到2.6.11.9的启动选项了。
最后,我们通过这个编译的过程可以看到,操作系统的内核其实和应用程序没什么不同,也是一种软件,我们可以在系统中编译很多版本的内核。建议各位保留一个安全稳定的内核供使用,之后自己可以任意发挥自己的想象去试验内核的选项,只有这样才能编译出最适合自己需求的内核。



                               
登录/注册后可看大图
该贴已经同步到 crazylinux的微博

评分

参与人数 1鱼币 +10 收起 理由
wajmjjj + 10 赞一个!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-10 15:46:56 | 显示全部楼层
再站~~~~~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-12 00:53:44 | 显示全部楼层
有木有触摸屏滴支持啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-22 11:05:33 | 显示全部楼层
/home/inexorable/download/linux-3.1.1/scripts/gcc-version.sh: line 25: ygcc: command not found
/home/inexorable/download/linux-3.1.1/scripts/gcc-version.sh: line 26: ygcc: command not found
/home/inexorable/download/linux-3.1.1/arch/x86/Makefile:81: stack protector enabled but no compiler support
make: ygcc:命令未找到
  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
  CC      scripts/mod/empty.o
/bin/sh: ygcc: command not found
make[2]: *** [scripts/mod/empty.o] 错误 127
make[1]: *** [scripts/mod] 错误 2
make: *** [scripts] 错误 2
make: INTERNAL: Exiting with 3 jobserver tokens available; should be 2!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-22 11:18:44 | 显示全部楼层
解决了 ln /usr/bin/gcc /usr/bin/ygcc
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 23:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表