Chinaunix首页 | 论坛 | 博客
  • 博客访问: 500201
  • 博文数量: 110
  • 博客积分: 3971
  • 博客等级: 中校
  • 技术积分: 1175
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-20 23:27
文章分类

全部博文(110)

文章存档

2015年(2)

2014年(1)

2013年(1)

2011年(9)

2010年(28)

2009年(12)

2008年(13)

2007年(23)

2006年(21)

我的朋友

分类: LINUX

2006-07-02 22:03:10

                       在内存上运行的操作系统

重点:1.)制作根系统压缩的映象文件:ram30.img

2.) 创建initrd ramdisk 映像,initrd ramdisk是用来引导(bootstrap)30M的ramdisk,并将它挂载至/mnt/ram。关键文件为linuxrc

linuxrc的内容为:
#!/bin/bash
mount –o –ro /dev/hda1/ /mnt             # 以只读方式将flash盘挂载在/mnt下
zcat /mnt/boot/ram30.img.gz > /dev/ram   # 将根文件系统映像解压至ram
umount /dev/hda1                         # 卸载flash盘

************************************************************************************************
3.1 制作根系统压缩的映象文件:ram30.img

# dd if=/dev/zero of=/dev/ram bs=1k count=30000
把ramdisk调整到零,以便后面有更高的压缩率;

# mke2fs –m0 /dev/ram 30000
在ramdisk上建立30M的ext2文件系统;

# mkdir /mnt/ram
建立一个挂装点

# mount /dev/ram /mnt/ram
将已格式化的ramdisk挂载至目录/mnt/ram;

# cp –av /minlinux/* /mnt/ram
将文件结构拷贝至ramdisk。

然后我们对/mnt/ram/etc目录下的文件进行修改。

fstab:(我们使用ramdisk作为根文件系统,且不需要交换分区.)

/dev/ram / ext2 defaults 1 1
none /proc proc defaults 0 0

最后我们要拷贝ramdisk的映像并将其压缩。主要步骤如下:

运行df ,注意1024-blocks一栏中/dev/ram的数值,在我的机上为25600;
# df
# cd /root

# umount /dev/ram      卸载/dev/ram

# dd if=/dev/ram of=ram30.img bs=1k count=25600
将ramdisk写成映象文件

# gzip –9v ram30.img
在/root目录下产生一个压缩的映象文件

*******************************************************************************************
3.2 创建initrd ramdisk 映像
首先我们在/dev/ram0中创建一个适合大小的ext2文件系统,方法同上,只是大小只有2048K,因为initrd ramdisk是用来引导(bootstrap)30M的ramdisk,并将它挂载至/mnt/ram。

# dd if=/dev/zero of=/dev/ram0 bs=1k count=2048
把ramdisk调整到零,以便后面有更高的压缩率;

# mke2fs –m0 /dev/ram0 2048
在ramdisk上建立30M的ext2文件系统;

# mkdir /mnt/ram0
建立一个挂装点

# mount /dev/ram0 /mnt/ram0
将已格式化的ramdisk挂载至目录/mnt/ram;

# cp –av /minlinux/{bin,dev,etc,lib,mnt /mnt/ram0
将文件结构拷贝至ramdisk。

建立可执行脚本文件linuxrc:
linuxrc的内容为:
#!/bin/sh
mount –o –ro /dev/hda1/ /mnt   # 以只读方式将flash盘(或硬盘)挂载在/mnt下

zcat /mnt/boot/ram30.img.gz > /dev/ram     
# 将根文件系统映像""ram30.img.gz""解压至ram

umount /dev/hda1 # 卸载flash盘(或硬盘).

**************************************
最后创建压缩的initrd ramdisk映像。
# df
运行df 看看/dev/ram0的字节数,在我的计算机上1684K;

# cd /root  转换当前目录至/root

# umount /dev/ram0     卸载/dev/ram0

# dd if=/dev/ram0 of=initrd.img bs=1k count=1684
拷贝/dev/ram0成映像文件

# gzip -9v initrd.img
产生压缩的映像文件initrd.img.gz

************************************************************************************************
3.3 启动
系统的启动需要依靠flash盘,通过LILO把系统启动信息写入flash盘(或硬盘)主引导区。

将flash盘作为第一主盘hda,而将装有普通Linux的硬盘作为第一从盘hdb并从它启动。

#(在flash硬盘上创建ext2文件系统,将它挂载至/mnt/flash目录。
在flash盘上建立boot目录,将压缩的文件系统和initrd映像拷贝至boot目录下,同时将Linux内核、引导区记录boot.b、引导区映射map拷贝至其下。在普通Linux系统中建立LILO配置文件 ramlilo.conf,配置文件如下:)

lilo:

boot=/dev/hda
map=/mnt/flash/boot/map
install=/mnt/flash/boot/boot.b
prompt
timeout=50

image=/mnt/flash/boot/vmlinuz
append= “ramdisk_size=30000”
label=embedded
root=/dev/ram
initrd=/mnt/flash/boot/initrd.img.gz
运行命令lilo –C ramlilo.conf ,将启动信息写入flash的主引导区MBR。

************************************************************************************************

重新启动计算机,登陆后运行mount,我们看到如下两项:
/dev/ram on / ext2 (rw)
none on /proc type proc (rw)
这显示只有ramdisk被挂载,制作成功。

************************************************************************************************

3.4 结论
在我们制作的嵌入式Linux中进行各种操作,速度非常快,而且系统很稳定。没有出现因为根文件系统损坏而导致系统进入手工维护界面的现象。用它作为 HTTP网络服务器、网络监视器、宽带通信设备管理器或者其他需要长时间不停运行的机器,都有很高的应用价值。

参考:

一种实现嵌入式Linux的新方法

阅读(1572) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~