由于操作系统的课程需要,需要配置一个Linux的内核配置和调试环境。
我所选择搭建的试验环境是VMware8.0,准备安装的Linux发行版是crux2.6。
crux是一个针对i686优化过的轻量级的Linux发行版,它的目的便是有经验的Linux用户。之所以选择它是因为crux的轻便使得编译内核的时间大大的减少,其他发行版如redhat、ferdoa等,编译内核的时间远远大于用crux编译内核的时间。
1. 现在VMware中创建一个虚拟机,然后选择ISO镜像文件并启动,虚拟机会自动加载光盘文件启动。
在boot下输入回车开始引导crux系统。启动后用root用户登录(无需密码)。登录之后出现以#为标志的命令行界面,现在就可以开始为磁盘分区了。
2. 磁盘分区
fdisk是用于为磁盘分区的命令。对于我们选定的IDE接口的磁盘,只需要在命令行输入命令:
# fdisk /dev/hda
就会出现Command (M for help):的提示字符串,输入M之后可以看到如下界面:
这个界面同时向我们展示了各个命令的作用。由于我们需要为硬盘分区,所以接下来使用的命令就是n。输入n之后出现的两个选项表示选择即将要分的区是主分区还是扩展分区,在这里我们选择了p,也即是主分区。接下来在partition number填写1,first cylinder直接回车默认为1,last cylinder填“+512M”表示为此分区分配的空间大小。
相同地,用命令n添加第二个分区,它所占用的是剩余的所有磁盘空间,如第一个红色方框所示:
第二个红色方框表示用命令p查看现在所有的分区列表。查看命令列表中Device表示分区名;Boot表示是否引导分区,用*标记的为启动分区,实验中hda2是引导分区;Start 和End分别表示分区的开始和结束cylinder(磁柱);id和System 表示的是一个意思,即分区的类型。Id是类型的代号,在使用fdisk分区时,要通过指定id来确认分区类型(System),比如 83为默认值,表示linux ext3 分区格式;7表示NTFS 分区,82表示交换分区,这个在fdisk 中要通过t功能来指定,下面的实验中将会提到;Blocks表示分区的容量,单位是byte。
把分区1设置成交换分区,输入t命令然后填入ID号82:
把分区2设置成启动分区,输入a命令然后选择分区2:
最后的分区效果如下红色方框张所示:
检查无误后输入“w”保存并退出。
3、格式化并加载分区
在创建好的分区hda2上创建ext3的文件系统:
# mkfs.ext3 /dev/hda2
将新创建的文件系统安装在/mnt目录上:
# mount /dev/hda2 /mnt
创建交换分区hd1:
# mkswap /dev/hda1
激活交换分区:
#swapon /dev/hda1
4、启动安装程序
将系统安装在/mnt上:
# setup
输入命令后会出现图形选择界面如图:
开始安装后安装程序会要求你选择要安装的包、安装目录等。选择安装包的时候需要把core和optx同时选上,不然的话可能在后面的操作中会没有哦grub文件夹。最后安装显示“INSTALL COMPLETED SUCCESSFULLY!”且按End键查看日志的最后显示“0 error(s) found”则表示安装成功。
5、为了把“定制系统”根目录的基本结构在/mnt上架设好,这里还要补充下面几步:
# mount --bind /dev /mnt/dev
# mount --bind /tmp /mnt/tmp
# mount -t proc proc /mnt/proc
# mount -t sysfs none /mnt/sys
最后把bash执行根目录挂在/mnt上,就可以让“定制系统”目录结构在现有bash上生效。
# chroot /mnt /bin/bash
上面五条语句可以用命令
#setup-chroot
代替
(5还没有理解)
6、
修改文件系统表,添加/dev/hda1和/dev/hda2两条记录;
#
vi /etc/fstab
增加两条记录:
/dev/hda2 / ext3 defaults 1 1
/dev/hda1 swap swap defaults 0 0
7、编译和配置
# cd /usr/src/linux-2.6.30.5
将编译选项恢复到默认配置,不然这样编译出来的内核重启的时候回出现如下的错误信息:
# make defconfig
# make menuconfig
启动内核配置界面,需要勾选下述项(注意*代表要编进内核中):
Device Drivers --->
<*> ATA/ATAPI/MFM/RLL support --->
<*> generic/default IDE chipset support
<*> Intel PIIX/ICH chipsets support // 此项与硬盘型号有关,可用 lspci | grep IDE 命令查询
[*] Network device support --->
[*] Ethernet (10 or 100Mbit) --->
<*> AMD PCnet32 PCI SUPPORT // 网卡驱动
然后编译内核:
# make
或者:
# make -j2 > /dev/null
加上参数-jn是为了以多个作业编译内核,n是作业的个数;然后无用的输出信息重定向到永无返回信息的黑洞/dev/null。
编译成功后的正确提示信息:
安装:
# make modules_install
编译成功后的内核文件镜像是arch/i386/boot/bzImage,但是其实系统内核理论上都是摆在/boot下面且为vmlinuz开头的文件名,所以我们需要把内核移动到/boot下。编译时会在内核代码树的根目录下创建一个System.map文件。这是一份符号对照表,用于将内核符号和它们的起始地址对应起来。编译完后需要把新内核的映像文件和符号表复制到相应的目录下,才能使用新内核。 基于这两点原因,需要执行以下两行命令:
#cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.30.5
#cp System.map /boot/System.map
8、配置系统启动引导管理器grub
配置grub,修改menu.lst
# cp /usr/share/grub/i386-pc/* /boot/grub/
# cd /boot/grub
# cp menu.lst.sample menu.lst
# vi menu.lst
配置如下:
配置这个文件的目的是让启动引导工具在开机的时候能够选择要启动的内核是哪一个。这里default=0,说明默认启动的内核是第一个。
下面开始用grub控制台来设置引导盘的引导扇区。
# grub
grub> root (hd0,1)
grub> setup (hd0)
grub> quit
9、重新启动
reboot或者shutdown -r now
争取启动之后应该会提示登录。用root登录之后设置好密码就可以进入系统了。
参考文献:
- http://wenku.baidu.com/view/779802dd5022aaea998f0f2c.html
- http://blog.csdn.net/billpig/article/details/6036303
- http://scutzb.blogspot.com/2012/10/vm7crux-27.html
- http://jingpin.jikexueyuan.com/article/31923.html
- https://crux.nu/Main/Handbook2-6#grubinstall