crazylinux 发表于 2011-11-10 13:54:25

手动编译安装内核经验下

5) USB的支持



推荐使用默认的配置







1.       通用系统选项



1)      System V IPC and Sysctl support



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



http://blog.csdn.net/images/blog_csdn_net/csdn_document/133802/o_15.png.jpg
图15 System V & Sysctl



1)      控制台的支持



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



http://blog.csdn.net/images/blog_csdn_net/csdn_document/133802/o_16.png.jpg
图16 控制台驱动程序的配置



1)      字符设备的支持



在控制台中,大多数用户都需要用一个虚拟终端访问系统,并需要打印机的支持。那么选择该项。http://blog.csdn.net/images/blog_csdn_net/csdn_document/133802/o_17.png.jpg



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

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

http://blog.csdn.net/images/blog_csdn_net/csdn_document/133802/o_18.png.jpg
图18 对Windows文件系统的支持
http://blog.csdn.net/images/blog_csdn_net/csdn_document/133802/o_19.bmp.jpg
图19 虚拟文件系统的支持
http://blog.csdn.net/images/blog_csdn_net/csdn_document/133802/o_20.png.jpg
图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”http://blog.csdn.net/images/blog_csdn_net/csdn_document/133802/o_21.png.jpg图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.9cp 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的启动选项了。最后,我们通过这个编译的过程可以看到,操作系统的内核其实和应用程序没什么不同,也是一种软件,我们可以在系统中编译很多版本的内核。建议各位保留一个安全稳定的内核供使用,之后自己可以任意发挥自己的想象去试验内核的选项,只有这样才能编译出最适合自己需求的内核。

http://bbs.fishc.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 crazylinux的微博

wajmjjj 发表于 2011-11-10 15:46:56

再站~~~~~~~~

R0sЁ 发表于 2011-11-12 00:53:44

有木有触摸屏滴支持啊?

Be_envious 发表于 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: *** 错误 127
make: *** 错误 2
make: *** 错误 2
make: INTERNAL: Exiting with 3 jobserver tokens available; should be 2!

Be_envious 发表于 2011-11-22 11:18:44

解决了 ln /usr/bin/gcc /usr/bin/ygcc
页: [1]
查看完整版本: 手动编译安装内核经验下