linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > article > Linux入门与提高 > 使用与技巧 >
栏目导栏
资料搜索
热门文章
·VMware Tools的安装步骤
·应用Linux下两种中文输入法
·GRUB FOR DOS 引导安装LINUX和
·linux下BT软件介绍
·Linux中用ALSA驱动声卡流程详解
·Linux 170个常见问题的详细解答
·什么是ISO文件?
·虚拟机软件vmware使用教程--使
·BabyLinux制作过程详解
·Linux挂接(mount)命令的使用方
·Linux必学的网络操作命令
·ffmpeg命令使用详解
·Linux操作系统Ifconfig命令详细
·在Linux下制作工资表
·vmware下的fedora 6的vmware t
最新文章
·CentOS5安装apache和svk使用域
·Ubuntu Linux系统Sudo命令无效
·Uboot对非Linux kernel的引导
·Fedora和XP双系统中网卡Realte
·解决Linux操作系统下部分文件乱
·双系统安装Linux之后找不到Win
·Linux操作系统上安装Flash Med
·设置Tomcat在Linux操作系统中自
·Linux操作系统下创建DBCA报错的
·Redhat Enterprise Linux磁带机
·Linux系统下用一条命令批量修改
·实用技巧:Linux下命令排列、调
·关于Linux操作系统中VI编辑器字
·Linux VI编辑器中的复制与粘贴
·Linux系统下触摸屏的简单使用和
Google
 
BabyLinux制作过程详解
[ 作者:  加入时间:2005-11-28 15:01:26  来自: ]
com Enjoy!! "
echo -en "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ "
echo -en "33[0;39m "
hostname BabyLinux
可以自己作相应的修改.
以上是babylinux根文件系统的所有内容,他的总大小应该在1M左右.
[root@gucuiwen baby]# du -hs
1.1M .

九,制作ramdisk映象文件


babylinux根文件系统所有东西都放在/babylinux/rootfs下,我们将利用ramdisk把这些内容做成ramdisk映象文件并压缩他.

以下主要是ramdisk的用法,看完以下内容,你应当学会ramdisk的使用.

[root@gucuiwen babylinux]# dd if=/dev/zero of=/dev/ram1
dd: 正在写入 ‘/dev/ram1’: 设备上没有空间
读入了 8193+0 个块
输出了 8192+0 个块

zero是一个特殊的设备,表示全部为0的字符块.上面这条命令的意思是把系统的第一个ramdisk用全部为0的数据填充,因为ramdisk默认大小为4M,因此当读满8192个块(每块512字节)后,显示'设备上没空间'.这很正常,/dev/ram1已经被填充满了.
如果指定块的大小:

[root@gucuiwen babylinux]# dd if=/dev/zero of=/dev/ram1 bs=1M count=4
读入了 4+0 个块
输出了 4+0 个块

不会有错误提示,这里演示了dd的一般用法,接下来还要频繁用到dd命令.

在/dev下有很多ramdisk设备,ram1,ram2,ram3....
一般用第一个就可以了.

填充后,ram1就有可空间,可以在这个空间上创见一个文件系统:
[root@gucuiwen babylinux]# mkfs.ext2 -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 37 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

将ram1挂装到文件系统中:
先建立一个挂装点:
#mkdir /mnt/ram
挂上ram1:
#mount /dev/ram1 /mnt/ram
将先前做好的babylinux根文件系统拷贝到ram1上.
#cp -R /babylinux/rootfs/* /mnt/ram

做完以上几步,你应就白了ramdisk设备的含义,他是和hda1,hdb1,一样的块设备,用mount挂到文件系统下后就可以访问,往里放东西,但是所有的东西在内存上.关机将丢失所有东西.

拷贝好babylinux根文件系统后卸载ram1:
#umount /dev/ram1
这时,虽然不能通过/mnt/ram这个挂装点访问ram1中的内容了,但是他却切切实实得在内存中存在.




再用dd把这个ram1以映象方式取出来:

[root@gucuiwen babylinux]# dd if=/dev/ram1 of=/babylinux/ramdisk.img
读入了 8192+0 个块
输出了 8192+0 个块

验证一下取出来的内容:
[root@gucuiwen babylinux]# file ramdisk.img
ramdisk.img: Linux rev 1.0 ext2 filesystem data

他是一个ext2 文件系统,类似一个ISO光盘映象文件.
因次,我们可以用loop设备来把他重新挂装到文件系统里:

[root@gucuiwen babylinux]# mount -o loop ramdisk.img /mnt/ram/

为了方便,我仍旧把他挂在/mnt/ram下,因此,在先前一定要把/dev/ram1 umount掉

查看/mnt/ram下的内容,他应该和/babylinux/rootfs下的一模一样,否则就是出错了:
[root@gucuiwen babylinux]# ls /mnt/ram
bin dev etc home lost+found mnt proc root sbin tmp usr var

这样,我们就得到了一个ramdisk根文件系统映象:ramdisk.img
把他umount掉:
#umount /mnt/ram

如果是第一次接触ramdisk,你可能对上述的内容很迷惑,如果这样,请反复阅读和理解上面的内容,自己多动手做几次试验,就可以理解.

压缩ramdisk.img印象文件:
[root@gucuiwen babylinux]# gzip -v9 ramdisk.img
ramdisk.img: 87.9% -- replaced with ramdisk.img.gz

查看压缩后的大小:
[root@gucuiwen babylinux]# ls -lh ramdisk.img.gz
-rw-r--r-- 1 root root 495K 11月 30 11:32 ramdisk.img.gz

我得到的压缩ramdisk映象文件安是495K. 加上内核的845K,是1340K
符合公式:

内核大小+文件系统压缩印象文件+50K <= 1440K

如果你做出来的kernel和ramdisk.img.gz太大了,请重新制作kernel或ramdisk.img.gz,在其中做一些取舍,如果你的kernel和ramdisk.img.gz太小了,那么可以再往里面添加一些内容,使你的babylinux功能更强.


十,内核与busybox的整合

准备一张完好的空白软盘

创建一个比内核大小略大的文件系统:
比如内核大小是845K,那么我我创见一个920K的文件系统:
#mkfs.ext2 -m0 /dev/fd0 920

如果空间允许,还可以再大一些,但是必需保证
1440K-文件系统大小>=ramdisk.img.gz的大小.

挂上软盘
#mount /dev/fd0
将内核拷贝到软盘:
#cp /babylinux/bzImage /mnt/floppy/
将lilo引导文件安boot.b 拷贝到软盘
#cp /boot/boot.b /mnt/floppy

新建一个lilo.conf 配置文件:

prompt
timeout=60
default=linux
boot=/dev/fd0
map=/mnt/floppy/map
install=/mnt/floppy/boot.b
linear

image=/mnt/floppy/bzImage
label=linux
read-only
vga=788
root=/dev/fd0
append="load_ramdisk=1 ramdisk_start=940"

vga=788表示让内核支持字符界面的高分辨率显示,你可以改成vga=ask,这样可以在启动的时候选择分辨率.

红色一行是关键,load_ramdisk=1告诉内核在启动的时候转载压缩的ramdisk印象文件,
ramdisk_start=940 告诉内核从软盘的第940K的地方去寻找并装载压缩的ramdisk印象文件.

关于ramdisk的用法和更多参数请查看linux0内核文档/usr/src/linux/Documents/ramdisk.txt

接下来再用dd命令把ramdisk.img.gz装到软盘上.

#dd if=/babylinux/ramdisk.img.gz of=/dev/fd0 bs=1k seek=940

这里的seek=940 表示把ramdisk.img.gz装到软盘的第940K开始的地方.

详细内容请看dd的联机文档 man dd

为什么要从940k开始呢?
因为刚才作了一个920K的文件系统.我把他装在文件系统20K以后的地方.
当然,如果你的空间十分紧张,连这20K都不舍得浪费,那么可以这样:

#dd if=/babylinux/ramdisk.img.gz of=/dev/fd0 bs=1k seek=921

当然,别忘记修改lilo.conf文件. ramdisk_start=921

接下来装lilo引导程序就大功告成了.

#lilo -C lilo.conf

如果你的磁盘上还有一点点空余空间,那么可以把lilo.conf也拷贝上去,以备将来使用.
#cp lilo.conf /mnt/floppy

#umount /dev/fd0


整个工程已经完成了,你可以重新启动机器,设置电脑从软盘启动.看看有没有成功.



十一,安装测试和内容调整

如果在整合内核和ramdisk映象过程中,出现磁盘空间不够的情况,请重新编译内核和busybox
可以根据实际需要,调整内核和busybox,比如你要内核支持很多东西,但是只需要一个支持50个命令的busybox,那么可以自己做相应调整.

十二,babylinux中的BUG

有些命令的输出结果会有偏差,比如用 busybox的df 看磁盘使用情况,和实际的不一样.

十三,接下来要做的事情

做一个基于64M U盘的linux小系统.
计划支持如下特征:

a.软盘babylinux的所有功能
b.图形界面的支持.
c.一个轻量级的窗口管理器(window maker)
d.网络的支持,
e.至少一个图形web浏览器,可以上网.
f.一个音乐播放器和一个视频播放器.
g.支持中文的显示和输入.
h.可以修改配置并保存数据

我还计划做一个live CD,但是目前已经有很多live CD了,而且都做的非常好.
但是我会自己做一个作为学习linux的一种手段.如果有时间,可能写一个做U盘linux和live CD
的教程.但是,我想不会写的和这个文档一样详细了,我的时间有限.可能大概讲一下原理和步骤.有经验的linux爱好者应该可以通过阅读文档完成制作.
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
分页:1 2 3 [4]
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
无相关信息