redhat内核编译指南-Ver.alpha

首先编译内核需要完整的内核源代码,如果是普通版本,即便完全安装,很有可能也是不带完整源代码的,要确认可以通过rpm -qa |grep kernel 来查看
rh9 完全安装包括源代码 显示为
kernel-smp-2.4.20-8
kernel-2.4.20-8
kernel-pcmcia-cs-3.1.31-13
kernel-source-2.4.20-8
rhel4完全安装 不包括源代码 显示为
kernel-smp-2.6.9-5.EL
kernel-2.6.9-5.EL
kernel-utils-2.4-13.1.48
kernel-devel-2.6.9-5.EL
kernel-smp-devel-2.6.9-5.EL
kernel-hugemem-devel-2.6.9-5.EL
rhel4仅安装内核 显示为
kernel-2.6.9-5.EL
kernel-utils-2.4-13.1.48
fc3普通版完全安装 并手动添加内核 显示为
kernel-doc-2.6.9-1.667
kernel-2.6.9-1.667
kernel-utils-2.4-13.1.39
如果仍不能确定,可查看内核源代码所在目录是否有Documentation文件夹,这是编译内核需要用到的.
综上情况,光碟中如果有kernel-source-($uname -r).rpm 直接安装估计就可以,如果没有还是跟我走下面的流程吧.
1.确定自己的版本
uname -rm
2.到http://download.fedora.redhat.com/pub/fedora/linux/core/3/i386/os/SRPMS/下载相应的kernel-($uname -r).src.rpm
3.安装,似乎
rpm -ivh kernel-($uname -r).src.rpm
rpm -Uvh kernel-($uname -r).src.rpm
均可
4. 文件解压到了/usr/src/redhat文件夹下面SPECS的目录,里面有kernel-2.6.spec
进入/usr/src/redhat/SPECS,执行命令rpmbuild -bp --target=i686 kernel-2.6.spec
这时在/usr/src/redhat/BUILD里面就会建立一个目录kernel-2.6.9,该目录下面还有一个子目录linux-2.6.9(这就是源代码),以上只是简单的复制,要用还需要编译
5.编译
进入目录cd /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/configs,里面会有几个内核配置文件,根据你自 己机器的架构(是i386还是i686),选择kernel-2.6.9-i686.config(我的机器是i686),执行cp kernel-2.6.9-i686.config ../.config,一定要注意,是../.config,因为这是把内核配置文件copy到内核源码目录 (/usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9)下面,
最后在/usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9目录下执行命令make oldconfig
_____________________________________________
好,接下来利用这些我们就可以轻松rebuild系统内核了
提醒:编译内核前一定要备份/boot下System.map与vmlinuz所指向的文件!!
1. #make clean& make mrproper (注意看文档说明这两条命令的不同)
2. #make oldconfig(cp /boot/config-($uname -r) .config)
    #make  menuconfig
    #make xconfig(gconfig)
    #make config(不推荐)
关于文件系统的说明,这部分特别容易导致出错,启动不了系统!
9 file systems --->
<*> Second extended fs support
[*] Ext2 extended attributes
[*] Ext2 POSIX Access Control Lists
[*] Ext2 Security Labels
<M> Ext3 journalling file system support
[*] Ext3 extended attributes
[*] Ext3 POSIX Access Control Lists
[*] Ext3 Security Labels 以上这些肯定是要选择的,linux的标准文件系统
[*] JBD (ext3) debugging support 一般是选择的
<M> Reiserfs support 看你的分区格式有没有,有就选上吧,最好选择
[*] Enable reiserfs debug mode 不用选
[*] Stats in /proc/fs/reiserfs 不用选
<M> JFS filesystem support 不用选
[*] JFS POSIX Access Control Lists
[*] JFS debugging
[*] JFS statistics
<M> XFS filesystem support 不用选
[*] Realtime support (EXPERIMENTAL)
[*] Quota support
[*] Security Label support
[*] POSIX ACL support
<M> Minix fs support 不用选
<M> ROM file system support 这个好象和光驱有关,我选上了
[*] Quota support 磁盘配额支持,分配硬盘空间的,一般用不着
<M> Old quota format support
<*> Quota format v2 support
<M> Kernel automounter support 内核自动挂载的,当然要选
<M> Kernel automounter version 4 support (also supports v3) 当然要选
CD-ROM/DVD Filesystems ---> 里面全选.
<*> ISO 9660 CDROM file system support
[*] Microsoft Joliet CDROM extensions
[*] Transparent decompression extension
<M> UDF file system support
DOS/FAT/NT Filesystems --->
<M> DOS FAT fs support 看你的分区格式了,我觉得最好全选哦
<M> MSDOS fs support
<M> VFAT (Windows-95) fs support
<M> NTFS file system support
[*] NTFS debugging support
[*] NTFS write support
Pseudo filesystems --->
[*] /proc file system support 这个用来存放一些硬件信息,占用的是内存空间,应该选吧
[*] /dev file system support (OBSOLETE)
该文件系统已经被舍弃了,现在开始使用udev,千万不能选
[*] Automatically mount at boot 这个是很好的功能,省去了手动mount
[*] Debug devfs 调试用的, 不用选了
[*] /dev/pts Extended Attributes 一般要选择
[*] /dev/pts Security Labels 一般要选择
[*] Virtual memory file system support (former shm fs) 一般要选择
[*] HugeTLB file system support 一般要选择
Miscellaneous filesystems ---> 这个里面我什么都没选
<M> ADFS file system support (EXPERIMENTAL) 不用选
[*] ADFS write support (DANGEROUS) 不用选
<M> Amiga FFS file system support (EXPERIMENTAL) 不用选
<M> Apple Macintosh file system support (EXPERIMENTAL) 咱们这里好像apple的产品很少阿,不选
<M> Apple Extended HFS file system support 同上
<M> BeOS file systemv(BeFS) support (read only) (EXPERIMENTAL) 不用选
[*] Debug BeFS 不用选
<M> BFS file system support (EXPERIMENTAL) 不用选
<M> EFS file system support (read only) (EXPERIMENTAL) 不用选
<M> Journalling Flash File System (JFFS) support 不用选了
(0) JFFS debugging verbosity (0 = quiet, 3 = noisy) (NEW)
<M> Journalling Flash File System v2 (JFFS2) support
(0) JFFS2 debugging verbosity (0 = quiet, 2 = noisy)
[*] JFFS2 support for NAND flash (EXPERIMENTAL)
<M> Compressed ROM file system support 不用选
<M> FreeVxFS file system support (VERITAS VxFS(TM) compatible) 不用选
<M> OS/2 HPFS file system support 不用选
<M> QNX4 file system support (read only) 不用选
[*] QNX4FS write support (DANGEROUS) 不用选
<M> System V/Xenix/V7/Coherent file system support 不用选
<*> UFS file system support (read only) 不用选
[*] UFS file system write support (DANGEROUS) 不用选
Network File Systems ---> 关于NFS的,应该选择
<M> NFS file system support 要选择
[*] Provide NFSv3 client support 要选择
[*] Provide NFSv4 client support (EXPERIMENTAL) 要选择
[*] Allow direct I/O on NFS files (EXPERIMENTAL) 不用选择
<M> NFS server support 要选择
[*] Provide NFSv3 server support 不用选择
[*] Provide NFSv4 server support (EXPERIMENTAL) 不用选择
[*] Provide NFS server over TCP support (EXPERIMENTAL) 不用选择
--- Secure RPC: Kerberos V mechanism (EXPERIMENTAL)
<M> SMB file system support (to mount Windows shares etc.) 这个要选,可以挂在网络上的win分区
[*] Use a default NLS 要选择
(cp437) Default Remote NLS Option (NEW) 要选择
<M> CIFS support (advanced network filesystem for Samba, Window and o 不用选择
<M> NCP file system support (to mount NetWare volumes) 不用选择
[*] Packet signatures 不用选择
[*] Proprietary file locking 不用选择
[*] Clear remove/delete inhibit when needed 不用选择
[*] Use NFS namespace if available 不用选择
[*] Use LONG (OS/2) namespace if available 不用选择
[*] Lowercase DOS filenames 不用选择
[*] Use Native Language Support 不用选择
[*] Enable symbolic links and execute flags 不用选择
<M> Coda file system support (advanced network fs) 不用选择
[*] Use 96-bit Coda file identifiers 不用选择
<M> InterMezzo file system support (replicating fs) (EXPERIMENTAL) 不用选择
<M> Andrew File System support (AFS) (Experimental) 不用选择
Partition Types ---> 这个里面关于分区格式的支持,
[*] Advanced partition selection
[*] Acorn partition support
[*] Cumana partition support
[*] EESOX partition support
[*] ICS partition support
[*] Native filecore partition support
[*] PowerTec partition support
[*] RISCiX partition support
[*] Alpha OSF partition support
[*] Amiga partition table support
[*] Atari partition table support
[*] Macintosh partition map support
[*] PC BIOS (MSDOS partition tables) support
[*] BSD disklabel (FreeBSD partition tables) support
[*] Minix subpartition support
[*] Solaris (x86) partition table support
[*] Unixware slices support
[*] Windows Logical Disk Manager (Dynamic Disk) support
[*] Windows LDM extra logging
[*] NEC PC-9800 partition table support
[*] SGI partition support
[*] Ultrix partition table support
[*] Sun partition tables support
[*] EFI GUID Partition support 

3. #make(2.6以上内核已用make 包含了make dep,make bzImage等命令)
  编译的时间与机器的硬件条件及内核的配置等因素有关,编译时间可能需要20多分钟到2个小时不等。所获得的内核的位置在/usr/src/linux/arch/i386/boot目录下,当然这里假设用户的CPU是x86型的。

  如果选择了可加载模块,编译完内核后,要对选择的模块进行编译:
4.  #make modules (编译选择的模块)
    #make modules_install (将编译后的模块转移到系统标准位置)
 模块在系统中的标准目录位于/lib/modules/x.y.z,后面的x.y.z是版本号,为安全起见,在运行 #make modules_install 之前最好对/lib/modules进行备份。模块通常是带有扩展名.o的文件(2.6以后版本为.ko),使用命令#lsmod可以对当前内核的模 块进行列表。
5. cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.9
      cp System.map /boot/System.map-2.6.9
      mkinitrd initrd-2.6.9-prep.img 2.6.9-prep(根据/lib/modules/下的文件夹名称)
6.  修改 /etc/lilo.conf    或/boot/grub/grub.conf
    vi /etc/lilo.conf
 添加新内核。有时make install连这个都给你修改好了。
prompt
timeout=50
default=linux
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
message=/boot/message
linear

image=/boot/vmlinuz-2.4.18-3smp
label=linux
initrd=/boot/initrd-2.4.18-3smp.img
read-only
root=/dev/sda6

image=/boot/vmlinuz-2.6.0-test2
label=linux-2.6.0-test2
initrd=/boot/initrd-2.6.0-test2.img
read-only
root=/dev/sda6

再运行
# lilo
重新生成lilo

相应的在grub中增加启动项!

至于网上有人说编译内核必须在/usr/src/redhat目录下,尚未考证,未知...

附:
我在编译内核中遇到的一些问题
1.编译老版本内核(
2.4.9) 时,由于采用组合语言算法,高版本的gcc 3.44报错:
    /usr/src/kernels/linux/include/asm/checksum.h:176: error: parse error before  __u32"
解决方法:
/usr/src/kernels/linux/include/asm/checksum.h中
__asm__ __volatile__("
movl (%1), %0
subl $4, %2
jbe 2f
addl 4(%1), %0
adcl 8(%1), %0
adcl 12(%1), %0
1: adcl 16(%1), %0
lea 4(%1), %1
decl %2
jne 1b
adcl $0, %0
movl %0, %2
shrl $16, %0
addw %w2, %w0
adcl $0, %0
notl %0
2:
"
改成
__asm__ __volatile__(" movl (%1), %0 subl $4, %2 jbe 2f addl 4(%1), %0 adcl 8(%1), %0 adcl 12(%1), %01: adcl 16(%1), %0 lea 4(%1), %1 decl %2 jne 1b adcl $0, %0 movl %0, %2 shrl $16, %0 addw %w2, %w0 adcl $0, %0 notl %02: "
即可,以此类推!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值