重新编译Linux内核

  最近我们在搞系统软件课程设计,一共有七个实验,其中第一个不用实际做东西,也就是一共有六个实验需要做,我一周多一点就完成了三个实验,现在只剩下三个了。我估计这个学期还没结束就可以全部搞定了。其中有一个实验是要为Linux添加新的系统调用,这其中就需要重新编译Linux内核。
  虽然我用Linux也有不短的时间了,但是重新编译内核还是头一回。我下载的版本是Linux 2.6.25,这个内核比我原来的内核还新一些。我照着网上说的,先make xconfig,Linux内核就会利用源代码中一个基于Qt 3.x的源码配置器的源代码还编译生成一个源码配置器,这个源码配置器还很复杂,选项很多。我先按照它的默认设置。生成了一个配置文件。然后敲入make,然后开始编译了,Linux内核编译的时间非常长,大概有一个小时吧。(其实Qt 4.4更长,达四个多小时)。
  编译完内核,就会在源代码根目录下生成一个叫vmlinux的文件,那就是Linux的内核了,再make bzImage,这时将会生成一个bz2格式压缩的内核,除了内核本身处,还得编译内核的模块,make modules就行了,然后再写make modules_install就可以了。说起来简单,做起来其实有一番麻烦的。即使我每一步都小心翼翼,总是有一些问题。事实上,从网上搜索到的很多都不能完全照搬,例如很多网上资料说到先make dep,但是我输入这一命令时,程序却提醒我已经不必了。而且我下载的安装将已经非常智能了,我原先以为还要手工做初始化内存盘映像,还要手工复制内核并修改grub的配置文件,现在已经都不需要了,程序会自动生成初始化内存盘映像和复制文件,还会自动将新的内核加入grub的引导菜单。
  现在想起来网上的资料真是很乱,搜来搜去也就那几篇,而且转贴的网站一般都有一堆恶心的广告,排版又非常差。
  

Linux Comments(0) 2008年5月19日 03:14

Linux里的配置文件

  我用了Linux也有一些时间了,Linux里使用许多风格迥异的配置文件,而且与相关的应用程序紧密配合,有的如fstab的文件,这是文件分区挂载的配置文件,我的如下: 

  1. #device         mountpoint               filesystem        options            dump checkpassno
  2. /dev/hda6       /                        ext3              defaults           1    1
  3. none            /dev/pts                 devpts            gid=5,mode=620     0    0
  4. none            /dev/shm                 tmpfs             defaults           0    0
  5. none            /proc                    proc              defaults           0    0
  6. none            /sys                     sysfs             defaults           0    0
  7. /dev/hda5       swap                     swap              defaults           0    0
  8. /dev/hda1   /mnt/ubuntu   ext3   defaults   0 0
  9. /dev/hda2   /mnt/winC   ntfs locale=zh_CN.GB18030,umask=0  0 0
  10. /dev/hda7   /mnt/winD   vfat iocharset=cp936,umask=0,exec,rw  0 0
  11. /dev/hda8   /mnt/winH   ntfs locale=zh_CN.GB18030,umask=0  0 0
  12. /dev/hdc   /mnt/cdrom-hdc   udf,iso9660  iocharset=cp936,user,noauto  0 0

  主要是通过一些制表符和空格分开的组成,每个字段按一定的顺序排列,每列都有相应的意义,特别适合用awk来分析。有的如Grub的配置文件:

  1. # grub.conf generated by MagicInstaller.
  2.  
  3. # Note that you do not have to rerun grub after making changes to this file.
  4. default=1
  5. timeout=11
  6. gfxmenu=(hd0,5)/boot/grub/message
  7. title Ubuntu
  8.         root (hd0,0)
  9.         kernel /boot/vmlinuz-2.6.22-14-generic root=UUID=61e2d63b-07fa-4a31-9309-4323d19a8641 ro quiet splash locale=zh_CN
  10.         initrd /boot/initrd.img-2.6.22-14-generic
  11. title Microsoft Windows XP
  12.         rootnoverify (hd0,1)
  13.         chainloader +1
  14. title MagicLinux
  15.         root (hd0,5)
  16.         kernel /boot/vmlinuz-2.6.22.12-smp  ro root=/dev/hda6 vga=791 splash quiet
  17.         initrd /boot/initrd-2.6.22.12-smp.img
  18. title MagicLinux (Single Mode)
  19.         root (hd0,5)
  20.         kernel /boot/vmlinuz-2.6.22.12-smp single ro root=/dev/hda6 vga=791 splash quiet
  21.         initrd /boot/initrd-2.6.22.12-smp.img

 

  各个启动操作系统的都有相应的启动参数,这些参数按行分开,而不是像fstab那样放在一列,各操作系统以title XXX分开,其它的如默认选择则以等式在最前面。还有的如X Window的xorg.conf,因此太长,我只帖了部分:  

  1. Section "Monitor"
  2.  
  3.   # 1440x900 @ 60.00 Hz (GTF) hsync: 55.92 kHz; pclk: 106.47 MHz
  4.         Identifier   "Monitor0"
  5.         VendorName   "Monitor Vendor"
  6.         ModelName    "LAW982"
  7.         HorizSync    30.0 - 82.0
  8.         VertRefresh  56.0 - 76.0
  9.         ModeLine     "1440x900_60.00" 106.5 1440 1520 1672 1904 900 901 904 932 -hsync +vsync
  10. EndSection
  11.  
  12. Section "Device"
  13.         Identifier  "Videocard0"
  14.         Driver      "sis"
  15.         VendorName  "Videocard vendor"
  16.         BoardName   "Silicon Integrated Systems [SiS] 661/741/760 PCI/AGP or 662/761Gx PCIE VGA Display Adapter"
  17.         VideoRam    32768
  18. EndSection

  这个则将各类的设备配置有相关的Section XXX与EndSection相分开,里面则由相关的配置项与配置参数成对写在一行。这三个文件都是Linux相当重要的文件,它们之间的不同,我觉得完全是历史的原因,而事实上都完全可以使用统一的形式,POSIX标准可能主要为了兼容的原因,没有将它们统一。这些风格迥异的配置文件,也表现了Unix的自由和风格多样性吧,当然从坏的方面来讲,也说明了Unix的混乱。

Linux Comments(0) 2008年4月12日 07:55