2005年11月20日

安装.src.rpm软件包前需安装rpm-build包。


有些软件包是以.src.rpm结尾的,这类软件包是包含了源代码的rpm包,在安装时需要进行编译。这类软件包有两种安装方法:

方法一:
1. 执行rpm -i your-package.src.rpm
2. cd /usr/src/redhat/SPECS
3. rpmbuild -bp your-package.specs 一个和你的软件包同名的specs文件
4. cd /usr/src/redhat/BUILD/your-package/ 一个和你的软件包同名的目录
5. ./configure 这一步和编译普通的源码软件一样,可以加上参数
6. make
7. make install

方法二:
1. 执行rpm -i you-package.src.rpm
2. cd /usr/src/redhat/SPECS (前两步和方法一相同)
3. rpmbuild -bb your-package.specs 一个和你的软件包同名的specs文件

这时,在/usr/src/redhat/RPM/i386/ (根据具体包的不同,也可能是i686,noarch等等) 在这个目录下,有一个新的rpm包,这个是编译好的二进制文件。执行:

rpm -i new-package.rpm即可安装完成。

如何安装.src.rpm软件包

qemu两种上网方式:

user mode network :
这种方式实现虚拟机上网很简单,类似vmware里的nat,qemu启动时加入-user-net参数,虚拟机里使用dhcp方式,即可与互联网通信,但是这种方式虚拟机与主机的通信不方便。

tap/tun network :
这种方式要比user mode复杂一些,但是设置好后 虚拟机<–>互联网 虚拟机<–>主机 通信都很容易
这种方式设置上类似vmware的host-only,qemu使用tun/tap设备在主机上增加一块虚拟网络设备(tun0),然后就可以象真实网卡一样配置它.

首先内核中支持tap/tuns设备:
Device Drivers  —> 
     Networking support  —>
        [M] Universal TUN/TAP device driver support
如果当前内核没有支持,可以重新只编译相应模块加入,方法很简单:

将当前内核配置文件cp到内核源码目录下:
[root@LFS ~]#cp /boot/config-[kernel-version] /usr/src/linux
[root@LFS ~]#cd /usr/src/linux
配置内核,将TUN/TAP选择模块(M),如上所示:
[root@LFS ~]#make menuconfig
重新只编译模块(M),不编译核心(*)支持的东东:
[root@LFS ~]#make modules
编译好后在/usr/src/linux/drivers/net下可以找到tun.ko:
[root@LFS net]#ls -l /usr/src/linux/drivers/net/tun.ko
-rw-r–r–  1 root root 11116 Mar 23 20:29 /usr/src/linux/drivers/net/tun.ko
[root@LFS net]#
将它cp到当前内核的模块目录的相应位置:
[root@LFS net]#cp /usr/src/linux/drivers/net/tun.ko /lib/modules/`uname -r`/kernel/drivers/net
重新建立模块依赖关系: 
[root@LFS net]#depmod
现在就可以加载它了 :
[root@LFS net]#modprobe tun
检查一下:
[root@LFS net]#lsmod |grep tun
tun                     8704  0
[root@LFS net]#
OK. 成功不重新编译整个内核加入特殊模块支持

如果你的xx卡不被内核支持,又可以编译成模块,自己怕重新编译内核后出问题就可以用这个办法只编译自己需要的模块,然后手动安装到相应位置,再加载它。
这样编译速度要也比编译整个内核快,不会对系统有任何损害,就可以使用上XX卡喽。^_^

要注意三点:
1.内核源码必须与当前内核版本完全一致,否则编译出的模块是不能用的。
2.注意只make modules(编译模块),没有make modules_install(自动安装模块到/lib/modules下)
3.加载新编译的模块前必须先运行depmod,否则modprobe找不到它

其实使用当前内核配置文件(/boot/config-[kernel-version]),只加入自己需要的模块,不做任何其他改,make modules_install应该也不会有问题的。
不过最稳妥的办法还是手动安装它,控制权在自己手里更踏实嘛 :-)

OK,转回qemu上网问题 :)

如果使用udev管理设备(通常2.6.x内核的发行版都已经使用udev),当modprobe tun后就会自动建立/dev/net目录,并创建出tun设备,做好相关链接:
[root@LFS net]#ls -l /dev/net/tun
lrwxrwxrwx  1 root root 6 Mar 25 15:35 /dev/net/tun -> ../tun
[root@LFS net]#

如果很不幸,你没看到它,就需要自己手动做这些工作了 :(
[root@LFS ~]#mkdir /dev/net
[root@LFS ~]#mknod /dev/net/tun c 10 200
OK,相关设备已经准备好了,还需要一个tun/tap的初始化脚本 :
/etc/qemu-ifup :
#!/bin/sh
/sbin/ifconfig $1 172.20.0.1
再给予qemu-ifup x执行权限放在/etc下就可以了。
这个脚本只能root用户执行,如果需要普通用户使用qemu,就需要改成sudo /sbin/ifconfig …..再设置sudo相关权限。
启动qemu后,它会在主机上增加一块虚拟网络设备(tun0):
[root@LFS ~]#ifconfig tun0
tun0      Link encap:Ethernet  HWaddr 0A:D3:8A:5D:97:CD
          inet addr:172.20.0.1  Bcast:172.20.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
[root@LFS ~]#
现在就可以启动qemu配置虚拟机网络参数了,和vmware host-only一样:
ip与tun0相同网段,gateway为tun0 ip 其余参数与tun0相同,dns与主机相同:
tun0 : ip :172.20.0.1 broadcast:172.20.255.255 netmask :255.255.0.0
qemu : ip :172.20.0.100 broadcast:172.20.255.255 netmask :255.255.0.0 gateway:172.20.0.1

与host-only一样,这样只实现了虚拟机<—->主机间通信,还需要设置router,nat才可以连上互联网
[root@LFS ~]#echo 1 > /proc/sys/net/ipv4/ip_forward
[root@LFS ~]#iptables -t nat -A POSTROUTING -o eth0 -s 172.20.0.0/24 -j MASQUERADE
[root@LFS ~]#

OK,虚拟机<—>主机 虚拟机<—->互联网通信 都完成啦
快去做网络实验吧 ^_^

posted on 2005-04-03 01:47 龙龙 阅读(645) 评论(0)  编辑 收藏 收藏至365Key 所属分类: Linux

以下是第四步命令的内核选项设置。特别说明,内核选项中是没有编码滴,偶为了方便检索、校对,避免内核选项顺序错乱,偶青铜镜按照编码标准,自作主张给内核的选项加上了编码。这里得自我批评一下:这是严重的个人主义行为!呵呵,望各位网友见谅!

内 核 选 项
第一部分
01、Code maturity level options —> 代码成熟等级选项
01.01、[ ] Prompt for development and/or incomplete code/drivers 默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动.你应该选择它,因为有许多设备可能必需选择这个选项才能进行配置,实际上它是安全的。
01.02、[ ] Select only drivers expected to compile cleanly 选择这个选项你将不会看到一些已知的存在问题的驱动程序选项,默认的情况下也是选择的。如果你有设备没有找到驱动选项,你可以将这一项去掉,或许就可以找到相关驱动了,不过它可能是有BUG的。

第二部分
02、General setup —> 常规安装选项
02.01、() Local version – append to kernel release
02.02、[*] Support for paging of anonymous memory (swap) 这个选项将使你的内核支持虚拟内存,也就是让你的计算机好象拥有比实际内存更多 多的内存空间用来执行很大的程序。默认是选择的。
02.03、[*] System V IPC (IPC:Inter Process Communication)是组系统调用及函数库,它能让程序彼此间同步进行交换信息。某些程序以及DOS模拟环境都需要它。为进程提供通信机制,这将使系统中各进程间有交换信息与保持同步的能力。有些程序只有在选Y的情况下才能运行,所以不用考虑,这里一定要选。
02.04、[*] BSD Process Accounting 一般用户所执行的程序,可通知内核将程序统计数据写成文件,详细记录相关信息。
02.05、[ ] BSD Process Accounting version 3 file format
02.06、[*] Sysctl support 此项功能可在不重新编译内核或是重新开机的前提下,动态变更某些特定的内核参数和变量,赋予内核较大的弹性。除非内存太少或是编译出来的内核是给安装、救援磁盘所使用,否则这个选项一定要选上。这将提供一个接口让你可以动态的更改一些核心参数与变量,而不需要重新启动系统。打开这个选项将会增加内核的体积至少8KB。如果你的内核仅用制作安装与恢复系统系统盘那么可以不选,以减少对内存的占用。
02.07、[*] Auditing support 审记支持,用于和内核的某些子模块同时工作,例如SELinux。只有选择此项及它的子项,才能调用有关审记的系统调用。
02.08、[*] Enable system-call auditing support
— Support for hot-pluggable devices 是否支持热插拔的选项,肯定要选上。不然USB、PCMCIA等这些设备都用不了。
02.09、[*] Kernel Userspace Events内核中分为系统区和用户区,这里系统区和用户区进行通讯的一种方式,选上。
02.10、[ ] Kernel .config support 这将会把内核的配置信息与相关的文档说明编译进内核中,以后可以使用一些工具来提取它用来重新构建内核,一般不用选它。
02.11、[ ] Configure standard kernel features (for small systems) —> 这是为了编译某些特殊用途的内核使用的,例如引导盘系统。通常你可以不选择这一选项,你也不用对它下面的子项操心了。

第三部分
03、Loadable module support —> 可引导模块支持 建议作为模块加入内核
03.01、[*] Enable loadable module support 这个选项可以让你的内核支持模块,模块是什么呢?模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不需要的驱动可以将其编译为模块,如果是一些在系统启动时就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块了,否在无法启动系统。
03.02、[*] Module unloading 这个选项可以让你卸载不再使用的模块,如果不选的话你将不能卸载任何模块(有些模块一旦加载就不能卸载,不管是否选择了这个选项)。不选择这个选项会让你的内核体积减小一点。
03.03、[ ] Source checksum for all modules这个功能是为了防止更改了内核模块的代码但忘记更改版本号而造成版本冲突。我估计现在没有哪家公司在开发中还没使用版本控制工具,所以不需要这项了。如果你不是自己写内核模块,那就更不需要这一选项了。
03.04、[*] Automatic kernel module loading 一般情况下,如果我们的内核在某些任务中要使用一些被编译为模块的驱动或特性时,我们要先使用modprobe命令来加载它,内核才能使用。不过,如果你选择了这个选项,在内核需要一些模块时它可以自动调用modprobe命令来加载需要的模块,这是个很棒的特性,当然要选Y喽。

第四部分
04、Processor type and features —> 处理器类型
04.01、Subarchitecture Type (PC-compatible) —> 这选项的主要的目的,是使Linux可以支持多种PC标准,一般我们使用的PC机是遵循所谓IBM兼容结构(pc/at)。这个选项可以让你选择一些其它架构。我们一般选择PC-compatible就可以了。
04.01.01、(X) PC-compatible 就在这里选PC模式。
04.01.02、( ) AMD Elan
04.01.03、( ) Voyager (NCR)
04.01.04、( ) NUMAQ (IBM/Sequent)
04.01.05、( ) SGI 320/540 (Visual Workstation)
04.02、Processor family (Pentium-Pro) —> CPU选项 这里针对自己的CPU型号,选取相应的选项。
04.02.01、( ) 386
04.02.02、( ) 486
04.02.03、( ) 586/K5/5×86/6×86/6×86MX
04.02.04、( ) Pentium-Classic
04.02.05、( ) Pentium-MMX
04.02.06、( ) Pentium-Pro
04.02.07、( ) Pentium-II/Celeron(pre-Coppermine)
04.02.07、( ) Pentium-III/Celeron(Coppermine)/Pentium-III Xeon
04.02.08、( ) Pentium M
04.02.09、( ) Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon
04.02.10、( ) K6/K6-II/K6-III
04.02.11、(x) Athlon/Duron/K7 我使用的CPU是Athlon XP2000+,所以选上这项。
04.02.12、( ) Opteron/Athlon64/Hammer/K8
04.02.13、( ) Crusoe
04.02.14、( ) Efficeon
04.02.15、( ) Winchip-C6
04.02.16、( ) Winchip-2
04.02.17、( ) Winchip-2A/Winchip-3
04.02.18、( ) GeodeGX1
04.02.19、( ) CyrixIII/VIA-C3
04.02.20、( ) VIA C3-2 (Nehemiah)
04.03、[ ] Generic x86 support 这个选项提供了对X86系列CPU最大的兼容性,用来支持一些很少见的x86体系的CPU,它可能会降低一些系统性能。如果你的CPU能够在上面的列表中找到,就里就不用选了。
04.04、[*] HPET Timer Support 这也是一个新的特性,HPET是intel制定的新的用以代替传统的8254(PIT)中断定时器与RTC的定时器,全称叫作高精度事件定时器。如果你有一台较新的机器就选它吧,一般它是一个安全的选项,即使你的硬件不支持HPET也不会造成问题,因为它会自动用8254替换。
04.05、[ ] Provide RTC interrupt There is no help available for this kernel option.
04.06、[ ] Symmetric multi-processing support 支持多处理器选项。如果只使用单CPU,那么得关闭。
04.07、[*] Preemptible Kernel 这可是个新特性,几乎所有介绍2.6的文章都会提到,这就是可抢先式内核。也就是说被一些优先级很高的程序可以先与一些低优先级的程序执行,即使这些程序是在核心态下执行(这实际上仍然不是真正的抢先式内核)。从而减少内核潜伏期,提高系统的响应。当然在一些特殊的点的内核是不可抢先的,比如内核中的调度程序自身在执行时就是不可被抢先的。这个特性可以提高桌面系统、实时系统的性能,所以还是选上吧。
04.08、[ ] Local APIC support on uniprocessors
04.09、[*] Machine Check Exception 如果系统出现一些问题比如CPU过热,内核将会在屏幕上打印相关信息来提醒你。这个功能是需要硬件支持的。你可以查看/proc/cpuinfo看看是否有mce标志,有的话就选吧。如果你十分十分的不幸,选了它之后出现问题,可以在启动时加nomce参数来关闭它。
04.10、<*> Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium 4 打开这个选项将会检查你机器上可能存在的问题,如果有一个非致命错误出现将会自动的修复并且记录,这可以帮助你查出程序出现问题的原因,是一个不错的选项。当然它只能用在AMD Athlon/Duron / Intel Pentium 4这类CPU上。如果你正好在用它们中的一个你就选吧。
04.11、< > Toshiba Laptop support 东芝笔记本支持。这个选项是针对Toshiba笔记本的,可以用来访问Toshiba的系统管理模式,也就是可以直接设置BIOS。不过要注意它只在Toshiba自己的 BIOS中起作用。假如你有一台Toshiba笔记本,可惜它的BIOS是Phoenix的,那这个选项仍然是无用的。台式机就关闭!
04.12、< > Dell laptop support DELL笔记本支持。功能如上面,台式机就关闭!
04.13、[ ] Enable X86 board specific fixups for reboot
04.14、< > /dev/cpu/microcode – Intel IA32 CPU microcode support 是否支持Intel IA32架构的CPU(Xeon)?这个选项将让你可以更新Intel IA32系列处理器的微代码,当然你还必须在文件系统选项中选择devfs才能正常的使用它。如果你把它译为模块你还需要在modprobe.conf中加上这一行alias char-major-10-184 microcode 内核本身并不带有微代码的二进制文件,你可以到这个网址去得到新的信息http://www.urbanmyth.org/microcode/
04.15、<M> /dev/cpu/*/msr – Model-specific register support 是否打开Pentium CPU特殊功能寄存器的功能?这个选项桌面用户一般用不到,它主要用在Intel的嵌入式CPU中的,这个寄存器的作用也依赖与不同的CPU类型而有所不同,一般可以用来改变一些CPU原有物理结构的用途,但不同的CPU用途差别也很大。
04.16、<M> /dev/cpu/*/cpuid – CPU information support 是否打开记录Petium CPU相关信息功能?这会在/dev/cpu中建立一系列的设备文件,用以让过程去访问指定的CPU。一般不用选。
04.17、Firmware Drivers —>
04.18、High Memory Support (4GB) —> 高容量内存支持
04.18.01、(x) off 我用512M内存,选用这项。
04.18.02、( ) 4GB
04.18.03、( ) 64GB
04.19、[*] Allocate 3rd-level pagetables from highmem除非有几G的内存,否则选择这个是没有意义的。
04.20、[ ] Math emulation Linux核心模拟数学浮点运算器,协处理器是在386时代的宠儿,现在早已下岗。
04.21、[*] MTRR (Memory Type Range Register) support 在PCI或者AGP总线众进行更快速的通讯。 由于现在所有系统都将它们的显卡接在PCI或AGP总线上,你通常需要选择“MTRR”。无论如何,打开这个选项通常都是安全的——即使你的机器没有使用PCI或AGP总线的显卡。
04.22、[ ] Boot from EFI support (EXPERIMENTAL) 由于我使用的是GRUB,所以选上这个也没什么用,如果你打算使用EFI的功能,你可以到http://elilo.sourceforge.net看看。
04.23、[*] Enable seccomp to safely compute untrusted bytecode

第五部分
05、Power management options (ACPI, APM) —> 电源管理选项
05.01、[*] Power Management support
05.02、[ ] Power Management Debug Support 电源管理的调试信息支持,如果不是要调试内核有关电源管理部份,请不要选择这项。
05.03、ACPI (Advanced Configuration and Power Interface) Support —> Some kernel features may be built directly into the kernel. Some may be made into loadable runtime modules. Some features may be completely removed altogether. There are also certain kernel parameters which are not really features, but must be entered in as decimal or hexadecimal numbers or possibly text.
Menu items beginning with [*], <M> or [ ] represent features configured to be built in, modularized or removed respectively. Pointed brackets <> represent module capable features.
To change any of these features, highlight it with the cursor keys and press <Y> to build it in, <M> to make it a module or <N> to removed it. You may also press the <Space Bar> to cycle through the available options (ie. Y->N->M->Y).
05.03.01、[*] ACPI Support 高级电源接口配置支持,如果BIOS支持,建议选上这项。
05.03.02、< > AC Adapter 电源适配器
05.03.03、< > Battery 电池
05.03.04、<M> Button
05.03.05、<*> Fan 风扇
05.03.06、<*> Processor 处理器
05.03.07、<*> Thermal Zone 据说大部份的台式机和笔记本都支持,不选还可能把处理器烧掉。如果你不会让模块正常工作,还是把它编进内核吧,怪吓人的。
05.03.08、< > ASUS/Medion Laptop Extras 华硕笔记本扩展支持,建议关闭
05.03.09、< > IBM ThinkPad Laptop Extras IBM笔记本扩展支持,建议关闭
05.03.10、< > Toshiba Laptop Extras Toshiba笔记本扩展支持,建议关闭
(2001) Disable ACPI for systems before Jan 1st this year
05.04、[ ] Debug Statements详细的ACPI调试信息,不搞开发就别选。
05.05、APM (Advanced Power Management) BIOS Support —>
05.05.01、<*> APM (Advanced Power Management) BIOS support
05.05.02、[ ] Ignore USER SUSPEND 忽略用户暂停请求。建议关闭
05.05.03、[ ] Enable PM at boot time 开机时节能,这项就不用了,建议关闭。
05.05.04、[*] Make CPU Idle calls when idle CPU空闲时节能
05.05.05、[ ] Enable console blanking using APM 空闲时console转成空白,建议关闭。
05.05.06、[ ] RTC stores time in GMT 按Unix的标准,硬件的时钟应该设为格林威治时间。如果要硬件时钟设成了本地时间,这个选项就不用了。
05.05.07、[ ] Allow interrupts during APM BIOS calls 允许APM的BIOS调用时中断。多数的机器不需要这项,Thinkpad的一些新机器需要这项。如果休眠时挂机(包括睡下去就醒不来),再把这项选上。
05.05.08、[ ] Use real mode APM BIOS call to power off 建议最好选上此项,保证软件关机。如果你有兴趣可以试试你的机器不选这项能不能正常的软件关机(多数机器不能)。补充一点,如果既选择了ACPI又选择了APM,先加载的将被使用。
05.06、CPU Frequency scaling —> 这一选项允许改变CPU的主频,使CPU在低负荷或使用电池时降低主频,达到省电的目的。
05.06.01、[*] CPU Frequency scaling
05.06.02、[*] Enable CPUfreq debugging 是否允许调试CPU改变主频的功能,如果要调试,还需要在启动时加上参数。cpufreq.debug=<value> 1:变频技术的内核调试 2:变频技术的驱动调试 3:变频技术的调节器调试
05.06.03、<M> CPU frequency translation statistics
05.06.04、[*] CPU frequency translation statistics details
05.06.05、Default CPUFreq governor (performance) —> 默认的主频调节,圆括号内的是你选择的结果,这里表示以性能为主。
05.06.06.01、(X) performance
05.06.06.02、() userspace
05.06.07、<*> ‘performance’ governor
05.06.08、<M> ‘powersave’ governor 最大限度的节约电能调节器。
— ‘userspace’ governor for userspace frequency scaling 用户自定义调节器。
05.06.09、<M> ‘ondemand’ cpufreq policy governor 自动调节主频。
05.06.10、<M> ‘conservative’ cpufreq governor
— CPUFreq processor drivers
05.06.11、<M> ACPI Processor P-States driver 报告处理器的状态。
05.06.12、< > AMD Mobile K6-2/K6-3 PowerNow! AMD移动版K6处理器的变频驱动。
05.06.13、< > AMD Mobile Athlon/Duron PowerNow! AMD移动版毒龙、雷乌的变频驱动。
05.06.14、< > Cyrix MediaGX/NatSemi Geode Suspend Modulation Cyrix处理器的变频驱动。
05.06.15、< > Intel Enhanced SpeedStep Intel的变频技术支持。
05.06.16、[*] Use ACPI tables to decode valid frequency/voltage pairs 使用BIOS中的主频/电压参数。
05.06.17、[ ] Built-in tables for Banias CPUs 迅驰一代的主频/电压参数。
05.06.18、< > Intel Speedstep on ICH-M chipsets (ioport interface) Intel ICH-M南桥芯片组的支持。
05.06.19、< > Intel Pentium 4 clock modulation P4处理器的时钟模块支持。
05.06.20、< > Transmeta LongRun Transmeta处理器的支持。
05.06.21、< > VIA Cyrix III Longhaul VIA Cyrix处理器的支持。
— shared options
05.06.22、[ ] /proc/acpi/processor/../performance interface (deprecated) 从/proc/acpi/processor/../performance获得CPU的变频信息。
05.06.23、[ ] Relaxed speedstep capability checks 不全面检测Intel Speedstep,有的系统虽然支持Speedstep技术,却无法通过全面的检测。

第六部分
06、Bus options (PCI, PCMCIA, EISA, MCA, ISA) —> 总线选项
06.01、[*] PCI support
06.02、PCI access mode (Any) —> PCI外围设备配置,强列建议选Any,系统将优先使用MMConfig,然后使用BIOS,最后使用Direct检测PCI设备。
06.02.01、( )BIOS
06.02.02、( )MMConfig
06.02.03、( )Direct
06.02.04、(X)Any 选用Any,系统会先尝试直接设置,倘若失败便会退回启用BIOS设置。
06.03、[ ] PCI Express support PCIE支持
06.04、[*] Legacy /proc/pci interface 是否使用/proc/pci目录下的信息文件来描述PCI设备的信息。现在的系统多数都使用lspci工具来得到这样的信息。
06.05、[*] PCI device name database 如果你不打算使用lspci工具,就把这项和上面的一项选上。lspci和hotplug都不需要内核中的设备信息库了。
06.06、[ ] PCI Debugging
06.07、[ ] ISA support ISA总路,现已淘汰,建议关闭。是否使用工业总线。如果你没有老式的ISA设备,可以不选这项。现在基本上都没有ISA的设备了。不过需要注意的是如果你做嵌入式系统的开发,一些PC104的总线可能会桥接到EISA或者是。VESA总线上。
06.08、[ ] EISA support 扩展ISA总路,早期计算机上的总路,现已淘汰,建议关闭。
06.09、[ ] MCA support IBM PS/2上的总线,现已淘汰,建议关闭。微通道总线。IBM的台式机和笔记本上可能会有这种总线,包括它的p系列、e系列、z系列机器上都用到了这种总线。
06.10、< > NatSemi SCx200 support 这个我不知道是什么东西,看帮助是松下的一种半导体处理器的驱动。
06.11、PCCARD (PCMCIA/CardBus) support —> 一般只有笔记本电脑上才会有PCMCIA插槽,如果你是台式机的话,可以不选这一项,然后跳过这一部份。
06.11.01、<M> PCCard (PCMCIA/CardBus) support
06.11.02、[ ] Enable PCCARD debugging 调试PCMCIA设备,除非你是设备驱动的开发人员,否则关闭。
06.11.03、<M> 16-bit PCMCIA support 16位的PCMCIA总线支持。
06.11.04、[*] 32-bit CardBus support 32位的PCMCIA总线支持,通常也叫PCMCIA II总线。
— PC-card bridges 下面的是不同产家的PCMCIA芯片的驱动支持,如果你知道你的本本用的是什么芯片组的话,可以只选它而不选其它的。要是你不知道,可以全部选上,然后用modprobe一种一种的试。
06.11.04.01、<M> CardBus yenta-compatible bridge support
06.11.04.02、<M> Cirrus PD6729 compatible bridge support
06.11.04.03、<M> i82092 compatible bridge support
06.11.04.04、<M> Databook TCIC host bridge support
06.12、PCI Hotplug Support —> PCI热插拨支持。一般来讲只有服务器上会有热插拔的设备,如果你使用的是台式机,你可以不选择此项并跳过这一部份。其实我也没有选这一项,只是为了讲解的方便而选上的。
06.12.01、Fake PCI Hotplug driver (NEW),选上这一选项能让你的机器模拟PCI热插拔。注意,它并不是真正意义上的热插拔,决对不允许带电插拔设备除非你的主板上集成了PCI热插拔芯片并且你的PCI设备本身支持热插拔。
06.12.02、Compaq PCI Hotplug driver (NEW),Compaq服务器上的热插拔芯片组的支持。
06.12.03、IBM PCI Hotplug driver (NEW),IBM服务器上的热插拔芯片组的支持。
06.12.04、ACPI PCI Hotplug driver (NEW),PCI热插拔设备是否支持ACPI电源管理(一般来说都是支持的)。
06.12.05、CompactPCI Hotplug driver (NEW),精简PCI总线的热插拔设备的支持,通常在嵌入式系统中会用到精简PCI总线。
06.12.06、PCI Express Hotplug driver (NEW),PCI加速总线的热插拔设备的支持。现在PCI Express总线的显卡挺火的。
06.12.07、SHPC PCI Hotplug driver (NEW),SHPC热插拔控制芯片的支持。

第七部分
07、Executable file formats —>
07.01、[*] Kernel support for ELF binaries ELF是开放平台下最常用的二进制文件,它支持不同的硬件平台。
07.02、< > Kernel support for a.out and ECOFF binaries 这是早期UNIX系统的可执行文件格式,目前已经被ELF格式取代。
07.03、< > Kernel support for MISC binaries此选项允许插入二进制的封装层到内核中,当使用Java、.NET、Python、Lisp等语言编写的程序时非常有用。

纠错:

重点:
……接着执行make menuconfig命令,直接从Load an Alternate Configuration File这个选项中调用刚刚复制到里面的./config文件进行内核配置。

./config是错误滴!
应当是:
.config

偶都说了,请别随便模仿!有危险滴。。。。。。。。

第八部分
08、Device Drivers —> 设备驱动
08.01、Generic Driver Options —> 常规设备选项
08.01.01、[*] Prevent firmware from being built
08.01.02、<M> Hotplug firmware loading support
08.02、Memory Technology Devices (MTD) —>
08.02.01、<M> Memory Technology Device (MTD) support
08.02.02、[ ] Debugging
08.02.03、<M> MTD concatenating support
08.02.04、[*] MTD partitioning support
08.02.05、<M> RedBoot partition table parsing
(-1) Location of RedBoot partition table
08.02.06、[ ] Include unallocated flash regions
08.02.07、[ ] Force read-only for RedBoot system images
08.02.08、[*] Command line partition table parsing
— User Modules And Translation Layers
08.02.09、<M> Direct char device access to MTD devices
08.02.10、<M> Caching block device access to MTD devices
08.02.11、<M> Readonly block device access to MTD devices
08.02.12、<M> FTL (Flash Translation Layer) support
08.02.13、<M> NFTL (NAND Flash Translation Layer) support
08.03、Parallel port support —> 并行端口支持(用于打印机、并行端口外接式ZIP磁盘机等设备)
08.03.01、< > Parallel port support
08.03.02、< > PC-style hardware
08.03.03、< > Multi-IO cards (parallel and serial)
08.03.04、[ ] IEEE 1284 transfer modes
08.04、Plug and Play support —> 即插即用支持
08.04.01、[*] Plug and Play support
08.04.02、[ ] PnP Debug Messages
08.05、Block devices —> 块设备
08.05.01、< > Normal floppy disk support 软驱支持
08.05.02、< > Compaq SMART2 support Compaq SMART2 Array磁盘阵列控制卡
08.05.03、< > Compaq Smart Array 5xxx support Compaq SMART2 Array 5xxx系列的磁盘阵列控制卡
08.05.04、[ ] SCSI tape drive support for Smart Array 5xxx Smart Array 5xxx系列的SCSI磁带设备支持
08.05.05、< > Mylex DAC960/DAC1100 PCI RAID Controller support
08.05.06、<*> Loopback device support 把文件当成区块设备使用,例如挂载ISO9660的光盘映像文件!
08.05.07、< > Cryptoloop Support
08.05.08、< > Network block device support 网络块设备支持
08.05.09、< > Promise SATA SX8 support
08.05.10、< > Low Performance USB Block driver
08.05.11、<*> RAM disk support 这里一定要选上!!!!!否则会出现:
VFS:Cannot open root device "hdb2" or unknow-block(0,0)
Please append a correct "root=" boot option
kernel panic-not syncing: VFS:Unable to mount root fs on unknow-block(0,0) 这种故障现象!
(16) Default number of RAM disks
(16384) Default RAM disk size (kbytes)

问题集中

先讲一笑话:总经理被老婆盯得紧,没法和二奶幽会。二奶思念他,想给他写信但又怕泄密,于是她就画了一幅画,托人交给总经理。画的上面画了两个鸽子,下面画了一头羊,羊已经死了。秘书收到了,看了半天也弄不懂是什么意思。她将画交给了总经理,总经理拿来看了,大喜念道:“鸽鸽,下面羊死了!”呵呵,接下来……下面是一些比较让人郁闷问题。

1、编译内核失败,不能进入系统,提示如下:
audit(1129243020.326:0):initialized
kernel panic – not syncing: VFS:Unable to mount root fs on unknown-block(0,0)
或是:
VFS:Cannot open root device "hdxy" or unknow-block(0,0)
Please append a correct "root=" boot option
kernel panic-not syncing: VFS:Unable to mount root fs on unknow-block(0,0)
这种故障现象,是肝木克了脾土,够你郁闷好几天!
解决方法:把
08.05.11、<*> RAM disk support
09.27.07、<*> Compressed ROM file system support (cramfs) 这两项都要选上!!!!!!否则,呵呵!

2、不能挂载ISO文件!
解决方法:把
08.05.06、<*> Loopback device support
08.05.07、<*> Cryptoloop Support 这两项都要选上便可!

3、偶青铜镜用SATA硬盘,原来内核中硬盘的设备号是/dev/sda,编译新内核后的硬盘设备号由/dev/sda变成/dev/hde,硬盘声音很吵,跟偶闹心!偶急啊。。。。。。
解决方法:把
08.07、SCSI device support —>
08.07.01、<*> SCSI device support
08.07.02、[*] legacy /proc/scsi/ support
08.07.03、<*> SCSI disk support 这些选项都选上便可!

4、偶用上新版本内核后,无法安装显示卡的NVIDIA-Linux-x86-1.0-7676-pkg1.run驱动,偶滴显卡是恩雅NVIDIA FX5200!系统提示如下:
Unable to load the kernel modules “nvidia.ko ”, This is most likely because the kernel modules was built using the wrong kernel source files. Please make sure you have installed the kernel source files for your kernel; on Red Hat Linux system, for example, be sure you have the kernel source “rpm” installed. If you know the correct kernel source files are installed, you may specify the kernel source path with the “–kernel-source-path” commandline option.
解决方法:
重新配置内核,将内核中
08.21、Graphics support —> 这个选项里面与Nvidia相关的选项全部去掉后,竟然能够正确安装显卡驱动!具体情况不明白。估计是文件模块冲突所导致这种故障。

接下来转入编译内核的下题:

1、到www.kernel.org去下载新版本的内核。我下载的是linux-2.6.12-4.tar.gz。
废话一下:这个内核文件应该放在什么地方?上个世纪时,这个内核文件一般是放在 /usr/src这个目录下。如今都神六都回家了,这个内核也得换个窝了。呵呵,偶青铜镜一般是放在系统用户的家目录下。补充一段鸟语为证:Do NOT use the /usr/src/linux area! This area has a (usually incomplete) set of kernel headers that are used by the library header files. They should match the library, and not get messed up by whatever the kernel-du-jour happens to be.以上是附带在内核中的README文件中的说明,一般人我不告诉他。结果是,地球人都知道!哈哈哈。。。。。
2、解压缩tar jxvf linux-2.6.12.4.tar.gz
3、cd linux-2.6.12.4
4、make mrproper
5、make menuconfig 详细说明见后面的《内核选项》部分。
6、make 一般介绍编译内核的书上到这一步都会说:哦,你可以轻松一下,去泡一杯咖啡来喝了!青铜镜友情提示:千万别学那模样!等你的键盘进水了,你会后悔滴:曾以有一个美丽的键盘放在我面前。。。。。。如果你是第一次编译内核,你一定要守在屏幕前,看看屏幕有什么输出信息,那些信息跟好莱坞大片有得一比!如果你是第N次编译内核,建议你还是做老僧入定状,数数绵羊吧。。。。。。
7、make modules_install
8、make install
9、解压缩内核以后,可以用 make help 获得相关帮助!

要点:
在执行make mrproper这个命令以后,我使用的是Fedora Core4,内核版本号是2.6.11-1.1369_FC4,可以到/boot目录下,将config-2.6.11-1.1369_FC4这个文件改名为.config复制到linux-2.6.12-4目录中。接着执行make menuconfig命令,直接从Load an Alternate Configuration File这个选项中调用刚刚复制到里面的./config文件进行内核配置。而这个配置文件就是机器上原来的默认配置选项。这样就方便了许多,毕竟内核选项繁多复杂,除非你对每个选项都熟悉,否则还是建议调用机器原来的配置进行调整。

编译内核的原则:
1、用不上的功能可以去掉相应选项。
2、不明白的选项就按照原来默认设置保持不变。
3、即使是确认新内核能够正常工作之后也千万不要轻易删除原来的内核!

编译内核,是多多少少会遇上问题滴!讲一笑话:一尼姑去医院做B超,粗心的护士错将一孕妇的化验单给了她。尼姑看了化验单一眼,叹了口气道:“哎……这年头连胡萝卜也都靠不住啊!”呵呵!如果你的大法功力还没达到圆满的境界,删除原来的内核之前请慎重考虑新内核是否靠得住!

转贴如下:

linux系统优化
经验谈:如何使你的系统达到最优化?
1、检查你的gcc版本:#gcc –version
2、获取你的cpu的型号:cat /proc/cpuinfo
3、在/etc/下建立make.conf文件,并根据cpu的型号写入不同内容。注意你的gcc版本必 须在3.0以上。

i386 (Intel):

CHOST="i386-pc-linux-gnu"
CFLAGS="-march=i386 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=i386 -O3 -pipe -fomit-frame-pointer"

i486 (Intel):

CHOST="i486-pc-linux-gnu"
CFLAGS="-march=i486 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=i486 -O3 -pipe -fomit-frame-pointer"

Pentium 1 (Intel)

CHOST="i586-pc-linux-gnu"
CFLAGS="-march=pentium -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=pentium -O3 -pipe -fomit-frame-pointer"

Pentium MMX (Intel)

CHOST="i586-pc-linux-gnu"
CFLAGS="-march=pentium-mmx -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=pentium-mmx -O3 -pipe -fomit-frame-pointer"

Pentium PRO (Intel)

CHOST="i686-pc-linux-gnu"
CFLAGS="-march=pentiumpro -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=pentiumpro -O3 -pipe -fomit-frame-pointer"

Pentium II (Intel)

CHOST="i686-pc-linux-gnu"
CFLAGS="-march=pentium2 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=pentium2 -O3 -pipe -fomit-frame-pointer"

Celeron (Mendocino), aka Celeron1 (Intel)

CHOST="i686-pc-linux-gnu"
CFLAGS="-march=pentium2 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=pentium2 -O3 -pipe -fomit-frame-pointer"

Pentium III (Intel)

CHOST="i686-pc-linux-gnu"
CFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer"

Celeron (Coppermine) aka Celeron2 (Intel)

CHOST="i686-pc-linux-gnu"
CFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer"

Celeron (Willamette?) (Intel)

CHOST="i686-pc-linux-gnu"
CFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer"

Pentium 4 (Intel)

CHOST="i686-pc-linux-gnu"
CFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer"

Eden C3/Ezra (Via)

CHOST="i586-pc-linux-gnu"
CFLAGS="-march=i586 -m3dnow -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=i586 -m3dnow -O3 -pipe -fomit-frame-pointer"

K6 (AMD)

CHOST="i586-pc-linux-gnu"
CFLAGS="-march=k6 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=k6 -O3 -pipe -fomit-frame-pointer"

K6-2 (AMD)

CHOST="i586-pc-linux-gnu"
CFLAGS="-march=k6-2 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=k6-2 -O3 -pipe -fomit-frame-pointer"

K6-3 (AMD)

CHOST="i586-pc-linux-gnu"
CFLAGS="-march=k6-3 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=k6-3 -O3 -pipe -fomit-frame-pointer"

Athlon (AMD)

CHOST="i686-pc-linux-gnu"
CFLAGS="-march=athlon -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=athlon -O3 -pipe -fomit-frame-pointer"

Athlon-tbird, aka K7 (AMD)

CHOST="i686-pc-linux-gnu"
CFLAGS="-march=athlon-tbird -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=athlon-tbird -O3 -pipe -fomit-frame-pointer"

Athlon-tbird XP (AMD)

CHOST="i686-pc-linux-gnu"
CFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"

Athlon 4(AMD)

CHOST="i686-pc-linux-gnu"
CFLAGS="-march=athlon-4 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=athlon-4 -O3 -pipe -fomit-frame-pointer"

Athlon XP (AMD)

CHOST="i686-pc-linux-gnu"
CFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"

Athlon MP (AMD)

CHOST="i686-pc-linux-gnu"
CFLAGS="-march=athlon-mp -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=athlon-mp -O3 -pipe -fomit-frame-pointer"

603 (PowerPC)

CHOST="powerpc-unknown-linux-gnu"
CFLAGS="-O3 -pipe -fsigned-char"
CXXFLAGS="-O3 -pipe -fsigned-char"

603e (PowerPC)

CHOST="powerpc-unknown-linux-gnu"
CFLAGS="-O3 -pipe -fsigned-char"
CXXFLAGS="-O3 -pipe -fsigned-char"

604 (PowerPC)

CHOST="powerpc-unknown-linux-gnu"
CFLAGS="-O3 -pipe -fsigned-char"
CXXFLAGS="-O3 -pipe -fsigned-char"

604e (PowerPC)

CHOST="powerpc-unknown-linux-gnu"
CFLAGS="-O3 -pipe -fsigned-char"
CXXFLAGS="-O3 -pipe -fsigned-char"

750 aka as G3 (PowerPC)

CHOST="powerpc-unknown-linux-gnu"
CFLAGS="-mcpu=750 -O3 -pipe -fsigned-char -mpowerpc-gfxopt"
CXXFLAGS="-mcpu=750 -O3 -pipe -fsigned-char -mpowerpc-gfxopt"

7400, aka G4 (PowerPC)

CHOST="powerpc-unknown-linux-gnu"
CFLAGS="-mcpu=7400 -O2 -pipe -fsigned-char -maltivec
-mabi=altivec -mpowerpc-gfxopt"
CXXFLAGS="-mcpu=7400 -O2 -pipe -fsigned-char -maltivec
-mabi=altivec -mpowerpc-gfxopt"
-fsigned-char -maltivec -mabi=altivec -mpowerpc-gfxopt"

7450, aka G4 second generation (PowerPC)

CHOST="powerpc-unknown-linux-gnu"
CFLAGS="-mcpu=7450 -O2 -pipe -fsigned-char
-maltivec -mabi=altivec -mpowerpc-gfxopt"
CXXFLAGS="-mcpu=7450 -O2 -pipe -fsigned-char
-maltivec -mabi=altivec -mpowerpc-gfxopt"


PowerPC (If you don’t know which one)

CHOST="powerpc-unknown-linux-gnu"
CFLAGS="-O3 -pipe -fsigned-char -mpowerpc-gfxopt"
CXXFLAGS="-O3 -pipe -fsigned-char -mpowerpc-gfxopt"

Sparc

CHOST="sparc-unknown-linux-gnu"
CFLAGS="-O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-O3 -pipe -fomit-frame-pointer"

Sparc 64

CHOST="sparc64-unknown-linux-gnu"
CFLAGS="-O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-O3 -pipe -fomit-frame-pointer"

好了,这样做后你编译出的程序运行效率将比以前高很多!只要你有时间,你可以把你的系统如redhat linux 9.0的源代码(后缀.src.rpm)全部重新编译一次,你会发现你的Redhat Linux系统将比原来快一大截!
############################################################

以上我在RedHat Linux 9.0及Mandrake Linux 9.1上通过并证明有效。

此贴据说出自chinaunix,是偶从广东省Linux中心论坛顺手拎来滴。如果按照上面的理论,可以让机器跑得快一点,那偶用来编译内核,应当是可以让内核跑得更快一些才对,因此偶就用这个方法来编译内核。根据上面的贴,按照我的CPU是AMD Athlon XP 2000+,GCC的版本是:gcc (GCC) 4.0.0 20050519 {(Red Hat 4.0.0-Cool Copyright (C) 2005 Free Software Foundation, Inc. 本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保,包括没有适销性和适用性担保。} 因此,我的make.conf文件的内容便是:

CHOST="i686-pc-linux-gnu"
CFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"
make.conf文件做好以后,我就把它放在/etc文件夹里面。这就做好了初步的准备工作。诸位看官,在上面的贴里面有没有找到与你所使用的CPU匹配的型号?如果没有,那也没关系滴啦!

到这里担心各位看官不快乐,来个笑话,轻松一下:一对夫妻去看画展,丈夫盯着一幅仅以几片树叶遮住羞部的裸体女像入迷时,妻子火冒三丈,冲着他怒吼道:“你是想站到秋天,待树叶落下来才甘心吗?”呵呵!!!



2005年11月19日

首先还是要说在 RH8/RH9 上最好升级回与原版本相同的内核(如 kernel-2.4.xx )否则会因为版本差别太大而造成很多不必要的麻烦。废话少说,下面开始升级

一. 在升级前必须对以下的组件升级
1. 升级 device-mapper,在 ftp://sources.redhat.com/pub/dm下载
cd /usr/src
tar -zxvf device-mapper.1.01.04.tgz
cd device-mapper.1.01.04
./configure –perfix=/
make all
make install

2. 安装 LVM2,在 ftp://sources.redhat.com/pub/lvm2下载
cd /usr/src
tar -zxvf LVM2.2.01.14.tgz
cd LVM2.2.01.14
./configure –perfix=/
make all
make install

3. 升级 mkinitrd 在 http://rpm.pbone.net/ 下查找
rpm -Uvh mkinitrd-3.5.11-3.9.i386.rpm

4.update modutils 在 ftp://ftp.kernel.org/pub/linux/utils/kernel/modutils/下载
cd /usr/src
tar -zxvf modutils-2.4.27.tar.gz
cd modutils-2.4.27
./configure –perfix=/
make all
make install

5.安装module-init-tools,在 ftp://ftp.kernel.org/pub/linux/utils/kernel/module-init-tools 下载
cd /usr/src
tar -zxvf module-init-tools-3.2-pre9.tar.gz
cd module-init-tools-3.2-pre9
./configure –prefix=/
make moveold

ps:"make moveold"将把系统原来的modutils工具程序改名为"*.old"(比如,lsmod.old等,是非常重要的一步! 如果忘记了这一步也不要紧张, 可以按照上面的步骤4重装一遍modutils就可以了.

make

ps: 用module-init-tools-3.1 编译时会出现 "make: *** [modprobe.conf.5] Error 127"

建议用 3.0 或 3.2-pre 版

make install
./generate-modprobe.conf /etc/modprobe.conf

二. 升级内核,
ftp://ftp.kernel.org/pub/linux/kernel/ 下载
cd /usr/src
tar -zxvf linux-2.6.13.3.tar.gz
cd linux-2.6.13.3.tar
bzip2 -dc patch-2.6.13.3.bz2 | patch -p1 -R ;打补丁
make mrproper ;初次编译可以不运行这一步
make clean ;初次编译不用运行这一步,第2次编译时把上一次编译出来的删除掉
make menuconfig ; 配置内核

ps:另外可以用以下命令代替
1. make config ;基于文本的最为传统的配置界面
2. make oldconfig ;自动保存为旧版的设置
3. make menuconfig ;txt界面下的菜单设置
4. make xconfig ;kernel 2.6 下新图形窗口模式的配置界面需要PQ库的支持
5. make gconfig ;旧的图形窗口模式的配置界面

要点: 1. Device Drivers –>Block devices–〉Initial RAM disk (initrd) support 一定要选上(Y),Default RAM disk size一定要改成16384以上
2. 有SCSI卡(如VMware 中的BusLogic BT946C) 的要把它编译成模块(M) 不然会在make install 出错
3. USB support 选模块(M) USB HID Boot Protocol drivers 中的 Keyboard/Mouse选(M)
4. Sound card support 可以选上新支持的模块Advanced Linux Sound Architecture ,至于旧的Open Sound System 模块就不要再选了.
关键是把Sound card support 以及 Advanced Linux Sound Architecture 里面的选项选成模块(M)
5. 通过lspci 命令查看硬件设备, 如有列出的一定要在 config 时选上

make ;漫长的编译过程,你可以走出去喝茶吃包,回来还没有编译完…
ps:在kernel 2.6 下已经省略了 make dep这一步

make modules_install install ; 安装内核及模块。安装完成后可以重启进入新的内核

三. 在新内核里发现有不少的改变,如果要正常运行必须要做一些修改,
1.在修改之前先备份以下文件(好的习惯)
/etc/rc.sysinit
/etc/fstab
/etc/rc.d/init.d/halt
/etc/modprobe.conf

2.新增的文件系统 sysfs
1. mkdir /sys
2. 在 /etc/rc.sysinit 中
找 mount -f /proc 在其后加上在下面加上 mount -f /sys
再顺便把下一行 [ -f /proc/bus/usb/devices ] && mount -f -t usbdevfs usbdevfs /proc/bus/usb 改成 [ -f /sys/bus/usb/devices ] && mount -f -t usbfs usbfs /sys/bus/usb

找 action $"Mounting proc filesystem: " mount -n -t proc /proc /proc 在其后加上在下面加上 action $"Mounting sysfs filesystem: " mount -n -t sysfs /sys /sys
3. 在/etc/fstab中加上一行 none /sys sysfs defaults 0 0
4. 修改 /etc/rc.d/init.d/halt
找 awk ‘$2 ~ /^/$|^\/proc|^\/dev/{next}
改成 awk ‘$2 ~ /^/$|^\/proc|^\/sys|^\/dev/{next}
找 [ -f /proc/bus/usb/devices ] && umount /proc/bus/usb
改成 [ -f /sys/bus/usb/devices ] && umount /sys/bus/usb
5.找 rc.sysinit和/etc/rc.d/init.d/halt 中的所有 /proc/bus/usb 改成 /sys/bus/usb

2.ps/2鼠标设备从原来的/dev/psaux 改成 /dev/input/mice
rm /dev/psaux
ln -s /dev/psaux /dev/input/mice

3.USB模块名的更改
打开 /etc/rc.sysinit,找
usb=0

if ! LC_ALL=C grep -iq "nousb" /proc/cmdline 2>/dev/null && ! LC_ALL=C grep -q "usb" /proc/devices 2>/dev/null ; then

aliases=`/sbin/modprobe -c | awk ‘/^alias usb-controller/ { print $3 }’`

if [ -n "$aliases" -a "$aliases" != "off" ]; then

modprobe usbcore

for alias in $aliases ; do

[ "$alias" != "off" ] && action $"Initializing USB controller ($alias): " modprobe $alias

done

[ $? -eq 0 -a -n "$aliases" ] && usb=1

fi

fi



if ! LC_ALL=C grep -iq "nousb" /proc/cmdline 2>/dev/null && LC_ALL=C grep -q "usb" /proc/devices 2>/dev/null ; then

usb=1

fi



if [ $usb = 1 -a ! -f /proc/bus/usb/devices ]; then

action $"Mounting USB filesystem: " mount -t usbdevfs usbdevfs /proc/bus/usb

fi



needusbstorage=

if [ $usb = "1" ]; then

needusbstorage=`LC_ALL=C grep -e "^I.*Cls=08" /proc/bus/usb/devices 2>/dev/null`

LC_ALL=C grep ‘hid’ /proc/bus/usb/drivers || action $"Initializing USB HID interface: " modprobe hid 2> /dev/null

action $"Initializing USB keyboard: " modprobe keybdev 2> /dev/null

action $"Initializing USB mouse: " modprobe mousedev 2> /dev/null

fi

改成

modprobe usbcore
action $"Initializing USB controller (uhci-hcd): " modprobe uhci-hcd

usb=1



if [ $usb = 1 -a ! -f /sys/bus/usb/devices ]; then

action $"Mounting USB filesystem: " mount -t usbfs usbfs /sys/bus/usb

fi



needusbstorage=

if [ $usb = "1" ]; then

needusbstorage=`LC_ALL=C grep -e "^I.*Cls=08" /sys/bus/usb/devices 2>/dev/null`

action $"Initializing USB HID interface: " modprobe usbhid 2> /dev/null

action $"Initializing USB keyboard: " modprobe usbkbd 2> /dev/null

action $"Initializing USB mouse: " modprobe usbmouse 2> /dev/null

fi

ps: 2.6中模块名已经改了
usb_huic –> uhci-hcd ; uhci-hcd 是通用控制器/ ochi-hcd USB-1.1控制器 / ehci-hcd USB-2.0控制器
hid –> usbhid ;输入模块
keybdev –> usbkbd ;键盘模块
mousedev –> usbmouse ;鼠标模块
4.新增的声卡模块ALSA
1). 首先把Sound card support 以及 Advanced Linux Sound Architecture 里面的选项编译成模块(M)
2). 把 /etc/modprobe.conf 里有关声卡的选项除了 alias char-major-14-* soundcore 外都删除掉
ps:ALSA是需要soundcore的支持.通过命令modinfo soundcore 可以看到以下信息
description: Core sound module
author: Alan Cox
license: GPL
alias: char-major-14-*
vermagic: 2.6.13 PENTIUM4 REGPARM gcc-3.2
depends:
srcversion: 6E1C8780DE9ADFFB5BCD439

3). 启动新内核后必须要安装 alsa-lib-1.0.9.tar.bz2 和 alsa-utils-1.0.9.tar.bz2 你可以到官方网站 http://www.alsa-project.org/ 下载。
cd /usr/src
tar -jxvf alsa-lib-1.0.9.tar.bz2
tar -jxvf alsa-utils-1.0.9.tar.bz2
cd alsa-lib-1.0.9
./configure;make;make install
cd ../alsa-utils-1.0.9
./configure;make;make install

4). 装完alsa-lib / alsa-utils 后就可以通过alsaconf来对声卡作设置
5). 用lsmod看到声卡模块被加载
6). 用alsamixer设置声卡音量
7). 测试声卡可以 aplay /usr/share/sounds/alsa/Front_Center.wav,终于能发声了,兴奋ing…
Cool. 重启内核后发现声卡模块可能无法正常加载, 可以在 /etc/rc.d/rc.local 加入 modprobe 声卡模块名 让内核启动时自动加载声卡
9). 有关 ALSA 的详细说明请在官方网站 http://www.alsa-project.org/alsa-doc/ 选上你声卡的型号查看

5.rpm 问题,在新内核起动后,rpm有些功能不能使用,并出现下列错误
rpmdb: unable to join the environment
error: db4 error(11) from dbenv->open: Resource temporarily unavailable
error: cannot open Packages index using db3 – Resource temporarily unavailable (11)
error: cannot open Packages database in /var/lib/rpm
no packages

解决方法是,运行 export LD_ASSUME_KERNEL=2.2.5 并把才句加入 /etc/bashrc 里面
再 rpm -q mkinitrd 看一下, 正常了。

6.CD-ROM 模块的改变
1). vi /etc/fstab 把

/dev/cdrom /mnt/cdrom udf,iso9660 noauto,owner,kudzu,ro 0 0

改成

/dev/hdc /mnt/cdrom udf,iso9660 noauto,owner,kudzu,ro 0 0

2). mount /dev/hdc


 转贴自:linux技术中坚站(http://www.chinalinuxpub.com/
http://www.chinalinuxpub.com/read.htm?id=1377

本文以RedHat9.0为平台 作者:飘雪心辰 2004年1月15日深夜
下载源代码
Linux内核总是不断发展的,最新的内核kernel2.6.0对USB2.0予以正式的支持,以及内核模块文件后缀最显著的一个变化由*.o到*.ko等等,我们可以从www.kernel.org下载到tarball的源代码包。

前期准备
大家都知道的要先升级“module-init-tools“软件包,否则的话,等你安装内核模块文件的时候,系统会提示你:Warning: you may need to install module-init-tools See http://www.codemonkey.org.uk/post-h…4.21-23.src.rpm
进入下载目录下并安装:
#rpm -e –nodeps modutils (强行卸载原有的modutilsRPM包)
#rpm -ivh modutils-2.4.21-23.src.rpm (把源代码包安装到了/usr/src/redhat目录下)
#cd /usr/src/redhat/SPECS (进入规范文件目录下)
#rpmbuild –bb modutils.spec (生成二进制的RPM包)
#cd ../RPMS/i386 (转入刚生成的二进制的RPM包所在位置)
#rpm -ivh modutils*.rpm (刚生成两个[modutils-2.4.21-23.i386.rpm与modutils-debuginfo-2.4.21.23.i386.rpm]二进制的RPM包,一起安装吧!)
因为是在RedHat9.0的平台,RedHat的用户可能还会遇到一些麻烦,我会慢慢说的,除了要以上的升级之外,还有个文件(/etc/rc.d/rc.sysinit)可能有缺陷,因为/proc/ksyms文件在新内核(kernel2.6.0)中已经没有了,打开文件命令如下:
#vi /etc/rc.d/rc.sysinit
找到:
if ! LC_ALL=C grep -iq nomodules /proc/cmdline 2>/dev/null && [ -f /proc/ksyms ]; then
USEMODULES=y
fi
替换成:
if ! LC_ALL=C grep -iq nomodules /proc/cmdline 2>/dev/null; then
USEMODULES=y
fi
也就是把“&& [ -f /proc/ksyms ]”去掉,保存文件(操作之前最好做备份以免删错,这个文件是系统初始脚本,重要的很),这样子内核才能加载模块,当然能启动iptable防火墙了,否则防火墙在新内核中启动时红色的“failed“非常醒目。(请在新内核中核查/proc/sys/kernel/modprobe中的内容是不是:/sbin/modprobe,也可手工注入指令:#echo "/sbin/modprobe" > /proc/sys/kernel/modprobe)。下面开始构造新内核。

一、准备源代码
1、下载到tarball包之后,将内核tarball包复制到/usr/src目录下,假定包在当前目录中,运行以下命令:
#cp linux-2.6.0.tar.gz /usr/src
2、转到/usr/src目录并解开tarball包,
#cd /usr/src
#tar xvzf linux-2.6.0.tar.gz
3、如果你还下载了补丁包,则打上补丁,你也可以运行scripts/patch-kernel脚本文件自动打上补丁(准备好补丁包)或 #zcat patch-2.6.0.gz|patch -p1(我偷懒不打补丁的)。

二、定制内核
定制内核是门很大的学问,需要大量的硬件知识,特别是2.6.0的内核,如果你从2.4.N配置文件装载进去的,的确,很多人遇到过麻烦。我是重新配置文件(X窗口服务器进行),配制内核之前请清理源代码树,如果还没有进入/usr/src/linux-2.6.0目录,请进入此目录,命令如下:
#make mrproper (刚解开的tarball包不需此步骤)
#make gconfig (需要Gtk开发库的支持)
或make config
或make xconfig(需要Qt开发库的支持)
注意:如果你是ext3文件系统,则在定制内核配置文件时把对Ext3、Ext2文件的支持直接编译进内核,否则,等你启用新内核时机器就会当掉,出错信息如下:kernel panic : no init found ,try passing init = option to kernel……或者是:kernel panic:VFS:Unable to mount root fs on unknown-block(0,0),我一开始不知道,编译了好几次,系统总给我冷板凳坐,最后把对Ext3、Ext2文件系统的支持直接编译进内核,才解决此问题,还有把对“Module unloading“选项也选上,否则的话,你在新内核环境下无法卸载内核模块(rmmod命令不能用)。

三、编译内核及模块
定制好的内核配置文件(/usr/src/linux-2.6.0/.config)之后,激动的时刻到来了,编译内核及模块,
#make (此命令已完成make bzImage及make modules的工作),
bzImage内核文件在arch/i386/boot目录中,你的CPU不同内核文件存放位置也不同,我是Intel的CPU。
注意:我在RedHat7.2平台时曾出现无法编译的出错信息,出错信息如下:
/tmp/cc2Hu7sH.s:3: Error: Unknown pseudo-op: `.incbin’
make[1]: *** [usr/initramfs_data.o] Error 1
make: *** [usr] Error 2,
重新装了个9.0的才解决此问题。
说明:make命令在我的1.6GHz,128M的机器上跑了足足27分钟。

四、安装模块及内核文件
#make modules_install install
以上这个命令可以分解成make modules_install与make install,make modules_install安装内核模块到/lib/modules/2.6.0下。make install完成mkinitrd命令及内核(bzImage)和System.map的拷贝,请查看/boot目录,文件名是有区别的,如是GRUB引导器,make install命令已帮你自动修改了引导选项,对于LILO则要手工修改,重写引导记录。
说明:make modules_install install这个命令在我的1.6GHz,128M的机器上只跑了三十几秒,很快的哦。

五、后记
最后的工作就是重启系统(#shutdown -r now),检验一下你的劳动成果吧。差点忘了还有一点,可能对你很重要,进入新内核之后我发现rpm命令不能用了,原来这是RPM的一个Bug,特别是对于RH9的用户,请打开/etc/profile文件,命令如下:
#vi /etc/profile (在文件的末尾加上几句如下)
if [`uname -r`="2.6.0" ];then
export LD_ASSUME_KERNEL=2.2.5
fi
也就是给系统加上一个全局的环境变量,也可直接键入#export LD_ASSUME_KERNEL=2.2.5。
使用新内核可能出现的问题及对策:
1、新内核根本起不来,解决方法:重新配置内核(学问挺大),也许还根引导记录有关(很少了);
2、新内核模块无法加载,会导致很多问题,比如了防火墙没法工作了,mount不上光盘和vfat及ntfs文件系统,其解决方法:升级module-init-tools软件包(我是modutils-2.4.21-23.src.rpm包),RedHat的用户可能还要修改/etc/rc.d/rc.sysinit文件;
3、RedHat用户rpm命令不能使用,解决办法:请把变量在全局配置文件中声明。
好了,伟大的工程终于完工了。如果那位仁兄对我以上的步骤还有疑义或者更好的建议的话,请发E-mail:qzhou9887@hotmail.com也可QQ:44773295。

发布人:会游泳的鱼 来自:http://www.chinalinuxpub.com/

提要:在Kernel 2.6x和以前的版本的编译方法有点区别,所以就简单的把编译过程写出来,主要是帮助初学Linux的兄弟。

Kernle 2.6x 编译比较简单,最适合我等菜鸟!!

本文是以Redhat为例,内版本是2.6.0-test8

一、下载

http://www.kernel.org

二、解压

1.把下载好的内核放到/usr/src目录中,比如我下载的是linux-2.6.0-test8.tar.bz2


#mv linux-2.6.0-test8.tar.bz2 /usr/src
#tar jxvf linux-2.6.0-test8.tar.bz2



2.进入相应的目录编译和安装,进入内核选项设置


#cd linux-2.6.0-test8
#make mrproper
#make menuconfig



进入内核选项卡,M是以模快方式编译,*是直接编入内核

至于哪些要编入内核,哪些要编译成模块。在文章管理器和基础讨论区的帖子中都有,自己试着找一找。另外内核中的doc也有相应的文档

3.编译和安装内核


#make
#sudo make install



这个过程是编译和安装内核的过程,系统自动为我们做了哪些事?

1]系统会在/usr/src/linux/arch/i386/boot/目录中产生bzImage,并把bzImage复制为vmlinuz-2.6.0-test8到/boot目录中,并创建议vmlinuz-2.6.0-test8的链接vmlinuz;

2]在/boot目录中,系统会产生System.map-2.6.0-test8,以及创建它的链接System.map;

3]在/boot目录中,自动生为initrd-2.6.0-test8.img;

4]修改/etc/grub.conf 文件,加入了新内核的启动项。

[注]经大熊宝宝兄的提示,怕初学的弟兄不明白这个过程,所以就把这个过程详细的写出来,所以我也做了补充。以上的四点都是系统自动安装内核时所做的任务。查看一下/boot目录中的文件以及/etc/grub.conf就明白了。这一点和以往2.4.x不一样的地方。做个比喻就是2.4.x还是半自动的,上面的东西要执行好多个命令,而在2.6.x中,一步就到位,是全自动的!

4.编译和安装模快


#make modules
#make modules_install



5.设置/etc/grub.conf,我不用lilo,更确切的来说,我不太懂,所以只能说Grub的设置办法。

为什么要设置这个呢?其实在编译和安装内核的过程中,系统已经自动把新内核的启动项直接添加到了/etc/grub.conf中。当我们不对/etc/grub.conf进行改动,直接启用新内核会发现VFS错误之类的提示。

下面的是我安装后新内核后,没有改动过的/etc/grub.conf


title Fedora Core (2.6.0-test8)
root (hd0,7)
kernel /boot/vmlinuz-2.6.0-test8 ro root=LABEL=/
initrd /boot/initrd-2.6.0-test8.img
title Fedora Core (2.4.22-1.2061.nptl)
lock
root (hd0,7)
kernel /boot/vmlinuz-2.4.22-1.2061.nptl ro root=LABEL=/
initrd /boot/initrd-2.4.22-1.2061.nptl.img



改动后的就是


title Fedora Core (2.6.0-test8)
root (hd0,7)
kernel /boot/vmlinuz-2.6.0-test8 ro root=/dev/hda8
initrd /boot/initrd-2.6.0-test8.img
title Fedora Core (2.4.22-1.2061.nptl)
lock
root (hd0,7)
kernel /boot/vmlinuz-2.4.22-1.2061.nptl ro root=LABEL=/
initrd /boot/initrd-2.4.22-1.2061.nptl.img



对比改动过的/etc/grub.conf,我们不难发现,我们在新内核2.x中,指定root的根分区所在的位置时,没有用标签LABEL=/,而是用的是真正的分区位置。

请对Linux不太熟的弟兄,不要照搬我的分区设置。如果想知道这方面的,在基础讨论区中,有关于GRUB和分区访问的文章,在文章管理器中也有。

最后还有一点就是如果显示卡原来安装过驱动,就要在新内核中重新安装。比如我用的是NVIDIA的显卡,我下载的是LinuxSir.Org的下载区中,哈兄提供的打过补丁的NVIDIA的驱动。装上就OK了。

(责任编辑:代君利)

2005-10-10 18:02更新 来源:赛迪网

在网络中,不少服务器采用的是Linux系统。为了进一步提高服务器的性能,可能需要根据特定的硬件及需求重新编译Linux内核。编译Linux内核,需要根据规定的步骤进行,编译内核过程中涉及到几个重要的文件。比如对于RedHat Linux,在/boot目录下有一些与Linux内核有关的文件,进入/boot执行。

编译过RedHat Linux内核的人对其中的System.map、vmlinuz、initrd-2.4.7-10.img印象可能比较深刻,因为编译内核过程中涉及到这些文件的建立等操作。那么这几个文件是怎么产生的?又有什么作用呢?本文对此做些介绍。

一、vmlinuz

vmlinuz是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz是可执行的Linux内核,它位于/boot/vmlinuz,它一般是一个软链接,比如图中是vmlinuz-2.4.7-10的软链接。

vmlinuz的建立有两种方式。一是编译内核时通过“make zImage”创建,然后通过:“cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage/boot/vmlinuz”产生。zImage适用于小内核的情况,它的存在是为了向后的兼容性。

二是内核编译时通过命令make bzImage创建,然后通过:“cp/usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz”产生。bzImage是压缩的内核映像,需要注意,bzImage不是用bzip2压缩的,bzImage中的bz容易引起误解,bz表示“big zImage”。 bzImage中的b是“big”意思。 zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有gzip解压缩代码。所以你不能用gunzip 或 gzip –dc解包vmlinuz。

内核文件中包含一个微型的gzip用于解压缩内核并引导它。两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用zImage或bzImage之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage。vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件。

二、initrd-x.x.x.img

initrd是“initial ramdisk”的简写。initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。图中的initrd-2.4.7-10.img主要是用于加载ext3等文件系统及scsi设备的驱动。

比如,使用的是scsi硬盘,而内核vmlinuz中并没有这个scsi硬件的驱动,那么在装入scsi模块之前,内核不能加载根文件系统,但scsi模块存储在根文件系统的/lib/modules下。为了解决这个问题,可以引导一个能够读实际内核的initrd内核并用initrd修正scsi引导问题。initrd-2.4.7-10.img是用gzip压缩的文件,initrd实现加载一些模块和安装文件系统等功能。

initrd映象文件是使用mkinitrd创建的。mkinitrd实用程序能够创建initrd映象文件。这个命令是RedHat专有的。其它Linux发行版或许有相应的命令。这是个很方便的实用程序。具体情况请看帮助:man mkinitrd下面的命令创建initrd映象文件。

三、System.map

System.map是一个特定内核的内核符号表。它是你当前运行的内核的System.map的链接。

内核符号表是怎么创建的呢? System.map是由“nm vmlinux”产生并且不相关的符号被滤出。

对于本文中的例子,编译内核时,System.map创建在/usr/src/linux-2.4/System.map。像下面这样:

nm /boot/vmlinux-2.4.7-10 > System.map

下面几行来自/usr/src/linux-2.4/Makefile:

nm vmlinux | grep -v ‘(compiled)|(.o$$)|( [aUw] )|(..ng$$)|(LASH[RL]DI)’ | sort > System.map

然后复制到/boot:

cp /usr/src/linux/System.map /boot/System.map-2.4.7-10

下图是System.map文件的一部分:

在进行程序设计时,会命名一些变量名或函数名之类的符号。Linux内核是一个很复杂的代码块,有许许多多的全局符号。

Linux内核不使用符号名,而是通过变量或函数的地址来识别变量或函数名。比如不是使用size_t BytesRead这样的符号,而是像c0343f20这样引用这个变量。

对于使用计算机的人来说,更喜欢使用那些像size_t BytesRead这样的名字,而不喜欢像c0343f20这样的名字。内核主要是用c写的,所以编译器/连接器允许我们编码时使用符号名,当内核运行时使用地址。

然而,在有的情况下,我们需要知道符号的地址,或者需要知道地址对应的符号。这由符号表来完成,符号表是所有符号连同它们的地址的列表。上图就是一个内核符号表,由上图可知变量名checkCPUtype在内核地址c01000a5。

Linux 符号表使用到2个文件:

/proc/ksyms

System.map

/proc/ksyms是一个“proc file”,在内核引导时创建。实际上,它并不真正的是一个文件,它只不过是内核数据的表示,却给人们是一个磁盘文件的假象,这从它的文件大小是0可以看出来。然而,System.map是存在于你的文件系统上的实际文件。

当你编译一个新内核时,各个符号名的地址要发生变化,你的老的System.map具有的是错误的符号信息。每次内核编译时产生一个新的System.map,你应当用新的System.map来取代老的System.map。

虽然内核本身并不真正使用System.map,但其它程序比如klogd,lsof和ps等软件需要一个正确的System.map。如果你使用错误的或没有System.map,klogd的输出将是不可靠的,这对于排除程序故障会带来困难。没有System.map,你可能会面临一些令人烦恼的提示信息。

另外少数驱动需要System.map来解析符号,没有为你当前运行的特定内核创建的System.map它们就不能正常工作。

Linux的内核日志守护进程klogd为了执行名称-地址解析,klogd需要使用System.map。System.map应当放在使用它的软件能够找到它的地方。执行:man klogd可知,如果没有将System.map作为一个变量的位置给klogd,那么它将按照下面的顺序,在三个地方查找System.map:

/boot/System.map

/System.map

/usr/src/linux/System.map

System.map也有版本信息,klogd能够智能地查找正确的映象(map)文件。

作者:IHH