[Linux]FloppyLinux--中国石油大学(华东)计算机操作系统课程设计作业教程

## 背景

本教程主要针对中国石油大学(华东)计算机操作系统课程设计中的Floppylinux作业。

当时老师给的教程让人难受。也可能是我太渣了,自己走了不少弯路。希望你做这个作业时不要再像我一样难受。

以下内容参考李永老师给的《Floppylinux实现》文档。并增加一些自己的理解和注释。希望对你有所帮助。

首先说明,按照以下步骤可以完成floppylinux实验,但是有些步骤是否是必要的(例如在根目录下新建floppylinux文件夹)本人不清楚。我懂得不多,还需要学习。

(步骤1为将busybox-1.00.tar.bz2拷贝到虚拟机中。步骤2为为虚拟机新建软盘,若读者已完成此步骤、可以跳过)

1、首先打开RedHat虚拟机,将老师给的busybox-1.00.tar.bz2文件拷贝到虚拟机中。

可以使用挂在U盘的方法将busybox-1.00.tar.bz2拷贝到虚拟机中(不过我的虚拟挂载U盘会出错,我也不知道为啥)。

如果你的电脑也不可以使用U盘将文件拷贝到虚拟机中,那么你可以使用挂载CDROM的方法将文件拷贝到虚拟机中,在这个链接中有详细教程,不再赘述。

结果截图:

[Linux]FloppyLinux--中国石油大学(华东)计算机操作系统课程设计作业教程_第1张图片

2、为虚拟机增加虚拟软盘

在VMWare中选择:虚拟机(M)->设置。

界面左侧''硬件"->"软盘"->"设备状态"中,将 已连接(C)、启动时链接(O) 选上。

''硬件"->"软盘"->"链接"中,选择 使用软盘映像文件(M) 。

之后点击 "创建(T)",新建一个软盘,按照自己的喜好命名。

结果如下图(图中我新建的软盘命名为floppy.flp)。完成后点击确定。[Linux]FloppyLinux--中国石油大学(华东)计算机操作系统课程设计作业教程_第2张图片

若新建软盘成功,将鼠标放到VMWare左下软盘图标处会显示 “软盘:正在使用floppy.flp”。如图所示:

至此,我们已经完成了前期的准备工作。

3、在软盘上安装引导器(grub)。

(此步骤为老师给的教程中的步骤1)

a. 首先对软盘建立ex2文件系统

[root@localhost root]#mke2fs /dev/fd0

b. 之后将系统中grub目录下的引导文件stage1,stage2复制到软盘中

[root@localhost root]#mount /dev/fd0 /mnt/floppy

按回车之后桌面上会显示出来软盘的图标,如图所示:

[Linux]FloppyLinux--中国石油大学(华东)计算机操作系统课程设计作业教程_第3张图片

[root@localhost root]# cd /mnt/floppy/

[root@localhost floppy]# mkdir boot

[root@localhost floppy]# mkdir boot/grub

[root@localhost floppy]# cp /boot/grub/stage1 /mnt/floppy/boot/grub/

[root@localhost floppy]# cp /boot/grub/stage2 /mnt/floppy/boot/grub/

[root@localhost floppy]# ls boot/grub/

stage1 stage2

c. 最后配置grub信息

[root@localhost floppy]# grub

Probing devices to guess BIOS drives. This may take a long time.

 

   GRUB  version 0.93  (640K lower / 3072K upper memory)

 

 [ Minimal BASH-like line editing is supported.  For the first word, TAB

   lists possible command completions.  Anywhere else TAB lists the possible completions of a device/filename.]

 

grub> root (fd0)

 Filesystem type is ext2fs, using whole disk

 

grub> setup (fd0)

 Checking if "/boot/grub/stage1" exists... yes

 Checking if "/boot/grub/stage2" exists... yes

 Checking if "/boot/grub/e2fs_stage1_5" exists... no

 Running "install /boot/grub/stage1 (fd0) /boot/grub/stage2 p /boot/grub/grub.conf "... succeeded

Done.

 

grub> quit

至此,引导盘安装完成!

4、配置busybox相关选项

a.在根目录下新建floppylinux目录,floppylinux下再新建floppylinux,将busybox-1.00.tar.bz2复制到第二个floppylinux下。

(此处新建两个floopylinux可能没有必要,但是为了和老师给的教程文档中命令对应,才多新建了一个floppylinux文件夹,具体为啥别管,听话照着做就对了,乖)

目录结构如下:

 

[Linux]FloppyLinux--中国石油大学(华东)计算机操作系统课程设计作业教程_第4张图片

解压busybox-1.00.tar.bz2文件

[root@localhost floppylinux]# tar -xjvf busybox-1.00.tar.bz2

解压后floppylinux文件夹下会多出一个busybox-1.00文件夹,如图所示:

b.进入busybox-1.00文件夹

[root@localhost floppylinux]# cd busybox-1.00

[root@localhost busybox-1.00]# pwd

/floppylinux/floppylinux/busybox-1.00

[root@localhost busybox-1.00]# make menuconfig

之后进入配置界面。

General Configuration --->中配置如下:

[Linux]FloppyLinux--中国石油大学(华东)计算机操作系统课程设计作业教程_第5张图片

Build Option --->中配置如下:

Installation Options --->中配置如下:

c.其他选项遵从linux基本命令默认选项,配置好保存退出。

5、编译并安装busybox

[root@localhost busybox-1.00]# make

[root@localhost busybox-1.00]# make install

编译好后,在busybox目录下生成子目录_install

[root@localhost busybox-1.00]# cd _install/

[root@localhost _install]# ll

总用量 8

drwxr-xr-x    2 root  root  4096 10月 31 22:29 bin

lrwxrwxrwx   1 root  root  11 10月 31 22:29 linuxrc -> bin/busybox

drwxr-xr-x    2 root  root   4096 10月 31 22:29 sbin

 

6、建立临时目录,该目录为软盘的文件系统

在/floppylinux/floppylinux/下新建文件夹floppyImage

[root@localhost _install]#  mkdir /floppylinux/floppylinux/floppyImage

[root@localhost floppyImage]# pwd

/floppylinux/floppylinux/floppyImage

busybox下的_install目录下的文件复制过来

[root@localhost floppyImage]# cp /floppylinux/floppylinux/busybox-1.00/_install/*  /floppylinux / floppylinux/ floppyImage/ -r

[root@localhost floppyImage]# ls

bin  linuxrc  sbin

[root@localhost floppyImage]# mkdir dev etc etc/init.d proc mnt tmp var

[root@localhost floppyImage]# chmod 755 dev etc etc/init.d bin mnt tmp var

[root@localhost floppyImage]# chmod 555 proc

7、建立设备列表

[root@localhost floppyImage]# cd dev

[root@localhost dev]# mknod tty c 5 0

[root@localhost dev]# mknod console c 5 1

[root@localhost dev]# chmod 666 tty console

[root@localhost dev]# mknod tty0 c 4 0

[root@localhost dev]# chmod 666 tty0

[root@localhost dev]# mknod ram0 b 1 0

[root@localhost dev]# chmod 600 ram0

[root@localhost dev]# mknod fd0 b 2 0

[root@localhost dev]# chmod 600 fd0

[root@localhost dev]# mknod null c 1 3

[root@localhost dev]# chmod 666 null

[root@localhost dev]# ll

显示结果如下图所示(处理文件的建立时间之外,其他必须相同)

[Linux]FloppyLinux--中国石油大学(华东)计算机操作系统课程设计作业教程_第6张图片

8、建立启动配置文件

[root@localhost dev]# cd /floppylinux/floppylinux/floppyImage/

[root@localhost floppyImage]# cd etc/

[root@localhost etc]# vi inittab

inittab内容为:

::sysinit:/etc/init.d/rcS

::askfirst:/bin/sh

[root@localhost etc]# vi fstab

fstab内容为(注意里面是defaults不是defalut):

proc /proc proc defaults 0 0

[root@localhost etc]# cd init.d/

[root@localhost init.d]# vi rcS

rcS内容为:

#!/bin/sh

mount –a

# chmod 755 rc.sysinit

[root@localhost init.d]# cd /mnt/floppy/

[root@localhost floppy]# ls

boot  lost+found

[root@localhost floppy]# cd boot/grub

[root@localhost grub]# vi grub.conf

grub.conf内容为:

timeout 0 

default 10

title  FloppyLinux

root (fd0)

kernel /boot/bzImage

initrd /initrd.img.gz

之后建立连接文件menu.lst(注意该文件后缀为 lst,不是1st)

[root@localhost grub]# ln -s grub.conf menu.lst

[root@localhost grub]# ls

grub.conf  menu.lst  stage1  stage2 

9、制作镜像文件initrd.img

[root@localhost grub]# cd /mnt/floppy/boot/

[root@localhost boot]# dd if=/dev/zero of=/dev/ram1

dd: 正在写入 /dev/ram1: 设备上没有空间

读入了 8193+0 个块

输出了 8192+0 个块

[root@localhost boot]# mke2fs -m0 /dev/ram1

mke2fs 1.32 (09-Nov-2002)

Filesystem label=

OS type: Linux

Block size=1024 (log=0)

Fragment size=1024 (log=0)

1024 inodes, 4096 blocks

0 blocks (0.00%) reserved for the super user

First data block=1

1 block group

8192 blocks per group, 8192 fragments per group

1024 inodes per group

Writing inode tables: done                           

Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 36 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

[root@localhost boot]# mkdir /mnt/ram

[root@localhost boot]# mount /dev/ram1 /mnt/ram/

将先前做好的floppylinux根文件系统拷贝到ram1

[root@localhost boot]# cp -R /floppylinux/floppylinux/floppyImage/* /mnt/ram/

[root@localhost boot]# umount /dev/ram1

[root@localhost boot]# dd if=/dev/ram1 of=/floppylinux/floppylinux/floppyImage/initrd.img

读入了 8192+0 个块

输出了 8192+0 个块

[root@localhost boot]# file /floppylinux/floppylinux/floppyImage/initrd.img

/floppylinux/floppylinux/floppyImage/initrd.img: Linux rev 1.0 ext2 filesystem data

10、检查initrd.img,用loop设备来把他重新挂载到文件系统里,之后压缩initrd.img镜像文件

[root@localhost boot]# cd /floppylinux/floppylinux/floppyImage/

[root@localhost floppyImage]# mount -o loop initrd.img /mnt/ram/

[root@localhost floppyImage]# ls /mnt/ram/

bin  dev  etc  linuxrc  lost+found  mnt  proc  sbin  tmp  var

[root@localhost floppyImage]# umount /mnt/ram/

[root@localhost floppyImage]# gzip -v9 initrd.img

initrd.img:      90.2% -- replaced with initrd.img.gz

查看压缩之后的大小

[root@localhost floppyImage]# ls -lh initrd.img.gz

-rw-r--r--    1 root     root         403K 10 31 22:57 initrd.img.gz

只有403k大小(其实我做时有时404k有时402k,总之在403k大小左右)

11.编译linux系统内核

(说明一下,该步骤的目的是生成一个654k左右大小的bzImage文件,该步骤与前面的步骤没有任何关系,即,你可以先做该步骤将生成的bzImage文件保存下来,再次做floppylinux时时候(或者传给同学)。。。)

若使用的是李永老师给的虚拟机可以直接进入linux源代码目录:

[root@localhost floppyImage]# /usr/src/linux-2.4

清理源代码树:

[root@localhost linux-2.4]# make mrproper

运行配置程序:

[root@localhost linux-2.4]# make menuconfig

进入配置界面,具体配置信息如下:

Code maturity level options--->

里面就一个选项 Prompt for development..... 先选择N

Loadable module support--->

里面有三个选项,选择N。(将第一个选N之后剩下的两个自动消失)。

Processor type and featurres--->

第二行(Pentium-ProCeleron/Pentium-II) Processor family 中选择 386

第一行到最后一行全部选N。其中第四行CPU Frequency scling --->选项进不去,不管他。倒数第七行(4GB) High Memory Support使用默认值。

General setup--->

选Y的有 networking support,PCI support ,System V ipc ,systrl support,kernel support for ELF binaries

(Any)PCI access mode使用默认值,倒数第五行Kernel core (/proc/kcore) fromat选择ELF

其他选项都选N。

Memory Technology Devices(MTD)--->

选N。

Parallel port support --->

选N(第一个选项选N后剩下的两个会自动消失)。

Plug and Play configuration --->

选N(第一个选项选N后第二个会自动消失)。

Block devices --->

选Y的有 Normal floppy disk support ,Loopback device support ,RAM disk support ,initial RAM disk (initrd) support ,Per partition statics in /proc/partitions。

倒数第三行 Default RAM disk size 使用默认值(4096)。

Multi-devices support (RAID and LVM) --->

全部使用默认值。

Cryptography support (CrytoAPI) --->

就一个选项 CryptoAPI support,选N。

Networking options --->

选择Y的有: Packet socket ,Packet socket: mmapped IO ,TCP/IP networking(其中TCP/IP networking下的选项都选N如图所示)

[Linux]FloppyLinux--中国石油大学(华东)计算机操作系统课程设计作业教程_第7张图片

其他的选项都选N,需要注意的是,倒数第一项(Network testing)倒数第二项(QoS and/or fair queueing)和倒数第五项(Appletalk devices)需要点进去,把里面的选项都选N。(Appletalk devices好像点不进去。。。)。

Telephony Support --->

就一项,选N。

ATA/IDE/MFM/RLL support --->

第一项 ATA/IDE/MFM/RLL support选Y,然后下面的IDE,ATA and ATAPI Block Devices 就被激活,进入IDE,ATA and ATAPI Block Devices--->之后,其中选择Y的有:Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support ,Include IDE/ATA-2 DISK support ,Auto-Geometry Resizing support ,Include IDE/ATA CDROM support(共4项)

SCSI support --->

选N。(第一项选N后其他项会自动消失)

Fusion MPT device supprot --->

选N。(其实我做的时候并不能选择进入)

I2O device support --->

就一项,选N。

Network device support --->

第一行选Y,然后其他行(除了Ethernet (10 or 100Mbit)--->)都选N(是子目录选项的也要回车进入将里面的选项选N。)。

再进入Ethernet (10 or 100Mbit)--->,里面选Y的有:第一行Ethernet (10 or 100Mbit)、EISA VLB PCI and on board controllers和RealTek RTL-8139 PCI Fast Ethernet Adapter support 。 

Amateur Radio support --->

选N。(第一项选N后其他项会自动消失)

IrDA (infrared) support --->

选N。(第一项选N后其他项会自动消失)

ISDN subsystem --->

全选N。

Input core support --->

选N。

Character devices --->

选择Y的有:Virtual terminal和 Support for console on virtual terminal。

剩下的全选N。(这句话的意思是,如果某选项为子菜单,即最后为 --->,可以选择进入,那么也要进入该子菜单将里面的内容选为N)

Multimedia devices --->

全部选N。(其实就三项,将第一项选N后剩下的会自动消失)

Crypto Hardware support --->

选N。

File systems --->

选择Y的有:ISO 9660 CDROM file support,Microsoft Joliet CDROM extensions,/proc file system support和Second extended fs support。

其他的全部选N(最后三项Network File Systems,Partition Types和Native Language Support需要回车进入,将里面的所有选项都选N)。

Console drivers --->

首先回到第一大项 Code maturity level options,将其选Y。

然后回到Console drivers这一项,将前三行(VGA text console,Video mode selection support和Ignore bad video mode selection)选Y,第四行选N。然后进入第五行Fram-buffer support --->,里面选Y的有:Support for frame buffer devices (EXPERIMENTAL)、VESA VGA graphics console和Support only 8 pixels wide fonts。其他都选N。

返回主目录后找到会多出来一项IEEE 1394(FireWire)support (EXPERIMENTAL)--->,选N。

剩下的Sound--->、USB support--->、Additional device driver support --->、Bluetooth support --->、Profiling support--->、Kernel hacking --->和Library routines--->都选N!!!都选N!!!有子目录也要回车进入把里面的选项选N。

最后回到第一大项 Code maturity level options,将其选N

到这里就完成的配置,然后运行以下命令(执行时间可能有点长):

[root@localhost linux-2.4]# make dep

[root@localhost linux-2.4]# make bzImage

执行完毕之后会生成一个bzImage文件,结果如图所示:[Linux]FloppyLinux--中国石油大学(华东)计算机操作系统课程设计作业教程_第8张图片

可以看到我生成的bzImage文件大小为654k,路径为/usr/src/linux-2.4.20-8/arch/i386/boot。(生成的文件大小可能不同,可能690k也可能657k都可以)。

12、整合启动盘

[root@localhost linux-2.4]# cp /usr/src/linux-2.4.20-8/arch/i386/boot/bzImage /mnt/floppy/boot/

[root@localhost linux-2.4]# cp /floppylinux/floppylinux/floppyImage/initrd.img.gz /mnt/floppy/

现在/mnt/floppy/的文件树结构如下:

[Linux]FloppyLinux--中国石油大学(华东)计算机操作系统课程设计作业教程_第9张图片
最后重启电脑即可

[root@localhost linux-2.4]# init 6

重启电脑过一会之后会显示

Please press Enter to activate this console

输入回车即可输入linux的命令,进入floppylinux

成功截图如下:

[Linux]FloppyLinux--中国石油大学(华东)计算机操作系统课程设计作业教程_第10张图片

你可能感兴趣的:(Linux,中国石油大学(华东)作业)