微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 把Linux放进软盘里

把Linux放进软盘里

时间:09-12 来源:互联网 点击:

proc /proc proc defaults 0 0

然后修改inittab,rc.sysinit,fstab这三个文件的权限

# chmod 644 inittab

# chmod 755 rc.sysinit

# chmod 644 fstab

配置完shell script后,我们注意到这些shell script会使用一些 /bin目录下的命令,但是我们的/bin目录下是空的。现在我们就使用BusyBox来制作这些常用命令。

使用BusyBox制作常用命令

将busybox 复制到软盘的/bin目录下,并且改名为init

# cp busybox /floppy-Linux/bin/init

然后创建常用命令的link,具体的工作原理请参阅busybox的官方说明。

# ln -s init ls

# ln -s init cp

# ln -s init mount

# ln -s init umount

# ln -s init more

# ln -s init ps

# ln -s init sh

现在我们就有了所需的常用命令。

到这里我们的根文件系统就制作完成了,但是和内核一样,要把根文件系统部分放到一张1.44MB的软盘上去,也要进行压缩,下面我们就着手压缩它。

压缩根文件系统

一般我们会采取 RAM Disk 的方式实现。简单的来说就是将准备好的根文件系压缩成为Ramdisk的镜像文件,当用软盘启动时,再把镜像文件解压到内存中,形成一个虚拟盘(RAMDISK),通过RAMDISK控制系统启动。

我们现在制作Ramdisk的镜像文件

# dd if=/dev/zero of=/tmp/tmp_loop bs=1k count=2048

# losetup /dev/loop0 /tmp/tmp_loop

# mke2fs -m 0 /dev/loop0

# mount -t ext2 /dev/loop0 /mnt

# cp -a /floppy-Linux /mnt

# umount /mnt

# losetup -d /dev/loop0

# dd if=/tmp/tmp_loop | gzip -9 > /tmp/Image.gz

# rm -f /tmp/tmp_loop

# sync

这样我们就得到了压缩过的根文件系统也就是Ramdisk的镜像文件Image.gz。

目前为止我们已经有了内核和压缩过的根文件系统.现在剩下的就是把它们整合在一张软盘里面。

整合核心和根文件系统

根据引导的方式不同,有以下三种整合方案:

用grub引导

依次执行:

# mke2fs /dev/fd0

# mount /dev/fd0 /mnt/floppy

# mkdir /mnt/floppy/boot

# mkdir /mnt/floppy/boot/grub

# cp /boot/grub/stage1 /mnt/floppy/boot/grub

# cp /boot/grub/stage2 /mnt/floppy/boot/grub

#grub

在 grub> 提示符处,输入:

grub> root (fd0)

grub> setup (fd0)

grub> quit

#cp newkernel /mnt/floppy/boot

#cp Image.gz /mnt/floppy/boot

#cp /boot/grub/grub.conf /mnt/floppy/boot/grub

编辑grub.conf, 内容如下:

timeout 10

default 0

title My little Linux

root (fd0)

kernel /boot/newkernel ro root=/dev/ram0

initrd /boot/ Image.gz

然后制作grub.conf的link文件menu.lst

#ln -s /mnt/floppy/boot/grub/grub.conf /mnt/floppy/boot/grub/menu.lst

#umount /mnt/floppy

整合完成!

用sysLinux引导

依次执行:

# mkdosfs /dev/fd0

# sysLinux /dev/fd0

编辑 sysLinux 的组态档 sysLinux.cfg,内容如下

TIMEOUT 20

DEFAULT Linux

LABEL Linux

KERNEL newkernel

APPEND root=/dev/ram0 ro initrd=Image.gz

然后将 sysLinux.cfg、newkernel、Image.gz 拷贝到磁盘中

# mount /dev/fd0 /mnt/floppy

# cp newkernel /mnt/floppy

# cp Image.gz /mnt/floppy

# cp sysLinux.cfg /mnt/floppy

#umount /mnt/floppy

整合完成!

直接引导

依次执行:

# dd if=newkernel of=/dev/fd0 bs=1k

252+1 records in

252+1 records out

在这个例子中,dd 写入了 252 个完整记录(records) + 1个partial record ,所以内核占用了 253 个软盘的 blocks 。这个数字称为 KERNEL_BLOCKS ,请记得它,这个数字还要使用.

#rdev /dev/fd0 /dev/fd0

#rdev -R /dev/fd0 0

#rdev -r /dev/fd0 VALUE

在这里这个VALUE的值应为16384+ KERNEL_BLOCKS(上一步dd 命令所产生的数值)

所以本例应为:

#rdev -r /dev/fd0 16637

#dd if= root system file of=/dev/fd0 bs=1k seek=KERNEL_BLOCKS

在这里这个KERNEL_BLOCKS就是上一步dd 命令所产生的数值

所以本例应为:dd if= Image.gz of=/dev/fd0 bs=1k seek=253

整合完成!

现在我们就拥有了一张可以自激活到Linux环境的软盘。对于本例来讲,想要执行AMD官方测试软件Maxpower64,只要将Maxpower64这个可执行文件复制到 /bin目录就可以了。我们可以在“使用BusyBox制作常用命令“这个阶段来完成它.

# cp Maxpower64 /floppy-Linux/bin

这张软盘会自激活到linux环境下,并显示“#”命令提示符,我们只要执行Maxpower64就可以了。

#/bin/Maxpower64

如果希望系统一开机就直接执行Maxpower64,则需要在“编辑有关的 shell script”这个阶段编辑rc.sysinit文件为:

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top