- 浏览: 1780391 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (641)
- vb2005xu自己动手系列 (174)
- vb2005xu开发文章转摘 (47)
- vb2005xu发发牢骚 (99)
- vb2005xu新技术灌水 (12)
- vb2005xu网络资源集锦 (21)
- vb2005xu软件学习 (60)
- 英语学习 (3)
- JavaScript 学习 (54)
- JAVA OOP 巩固 之 CustomDatabase 的开发 (5)
- 2013年9月之前所在公司 记事 (7)
- FleaPHP/QEEPHP 资料 (87)
- JAVA MAIL 学习篇 (4)
- Python turbogears (5)
- Rails 个人开发四部曲 (3)
- 名人传 (8)
- iwp framework (5)
- 高考零分作文 (5)
- startos (8)
- lua (0)
- 职场 (1)
最新评论
-
hellotieye:
自己 评论 自己 挺嗨呀
Mysql sql查询时 if 的用法 -
igevin:
转载请标明出处,转自Gevin的博客http://blog.i ...
RESTful API 编写指南 -
Theobob:
...
实现简单的ACL -
vb2005xu:
比如 对于 curl 调用就不再需要 加各种if 判断了,
$ ...
搞一个简单的数据打印工具AsDebug の Laravel -
vb2005xu:
http://geekplux.com/wiki/
YII2 模块内自定义错误页
凡是接触计算机久的朋友肯定都使用过DOS启动软盘,至于启动软盘的重要性大家肯定也都清楚。在Linux底下启动软盘同样重要,它不仅能测试新内核、恢复系统错误,而且能升级重要的系统文件。但是在L
inux下制做启动盘不象在DOS下那么容易,下面我就一步一步的教大家制做自己系统的启动软盘。
1. Linux启动过程简介
一个启动盘实际上是一个完整系统的缩影,它能够执行一个完整系统的大部分功能。因此,如果想制做Linux启动盘,你必须了解Linux系统启动的基本过程。接下来我就先简要介绍一下L
inux的启动过程。
所有的PC机都是通过执行ROM中的代码加载启动盘的0柱面0扇区中的代码来启动整个系统。在Linux系统中启动盘的0柱面0扇区中含有的是启动装载器L
ILO,它定位内核,装载它,最后执行它。一旦内核装载后,它先是进行基本设备初始化,接着试图加载并登陆磁盘中根文件系统,如果内核找不到可装载的根文件系统,启动过程会就此停止。如果根文件系统装载完毕并登陆成功后,你会看到一行信息:
VFS: Mounted root (ext2 filesystem) readonly.
之后,系统发现init程序并执行它,init程序寻找它的配置文件/etc/inittab,并开始执行其中的脚本,这些脚本是一些SHELL命令的组合,用来执行如下命令,如加载所需模块、装载S
WAP、初始化网络、装载fstab中列出的所有驱动器等。最后启动一个叫getty的程序,它负责console和ttys之间的通信,它在显示器上打印l
ogin提示符并激活login程序,login处理登陆的有效性并建立与用户的对话。至此,启动过程完毕。
2. 制做启动盘
创建一个启动盘首先必须创建根文件系统,由于软盘容量有限,因此常采用压缩的根文件系统。下面我就详细的介绍怎样创建压缩格式根文件系统。
2.1 准备
一个根文件系统必须包括支持完整Linux系统的全部东西,因此,它至少应包括以下几项:
·基本文件系统结构
·至少含有以下目录:/dev, /proc, /bin, /etc, /lib, /usr, /tmp
·最基本的应用程序,如sh, ls, cp, mv等
·最低限度的配置文件,如rc, inittab, fstab等
·设备:/dev/hd*, /dev/tty*, /dev/fd0
·基本程序运行所需的库函数
由于以上所需文件远超过1.44M,因此我们通常的做法是先准备好内容后再压缩到软盘中,当用软盘启动时,再把文件解压到内存中,形成一个虚拟盘(R
AMDISK),通过RAMDISK控制系统启动。
为了能创建以上的根文件系统,你必须有一个空闲的能够放下大约4M文件的RAMDISK。
如果你使用LILO控制启动,先检查一下LILO的配置文件/etc/lilo.conf中定义的RAMDISK的大小。/etc/lilo.conf
中有一行
RAMDISK_SIZE = nnn
它决定RAMDISK可使用的最大内存为nnn,缺省情况下为4096K,对我们来说够了,但是顺便说一下,如果你的系统只有8M内存,千万不要使用4
M的RAMDISK。再检查一下你的系统设备中是否有一个叫/dev/ram0或/dev/ram的设备,这是RAMDISK的设备名,如果没有,用命令mknod创建一个设备/
dev/ram0。
2.2 创建根文件系统
Linux内核识别两种可以直接拷贝到RAMDISK的文件系统,它们是minix
和ext2,ext2性能更好。如果你使用ext2,你会发现使用-i选项定义比缺省更多的信息节点非常有用。mke2fs缺省情况下在1.44M的软盘上产生3
60个信息节点,使用压缩格式的根文件系统需要更多的信息节点,所以使用如下命令创建文件系统可以创建2000个信息节点,一般不会用光:
mke2fs -m 0 -i 2000 /dev/ram0
mke2fs将会自动判断设备容量的大小并相应的配置自身,-m
0参数防止它给root保留空间,这样会腾出更多的有用空间。接着把虚拟盘挂在节点/mnt上:
mount -t ext2 /dev/ram0 /mnt
如果没有节点/mnt,建一个。
接着是创建目录。根文件系统最少应该有如下8个目录:
/dev - 设备
/proc -- proc 文件系统所需目录
/etc - 系统配置文件
/sbin - 重要的系统程序
/bin - 基本应用程序
/lib - 共享函数库
/mnt - 装载其他磁盘节点
/usr - 附加应用程序
其中/proc,/mnt和/usr在此情况下都是空的,只需要用mkdir创建它们既可。其余的目录应根据需要分别创建,下面我一个一个的详细叙述。
·/dev:/dev中含有系统不可缺少的设备文件,虽然该目录很普通,可以用
mkdir创建,然而目录中的设备文件必须用mknod创建,当然也有捷径,你可以把现有系统中/dev的文件拷贝过来,然后删除不必要的文件。命令c
p -dpR /dev
/mnt会拷贝/dev整个目录但不拷贝文件内容,dp开关保证链结文件仍然不变,不会拷贝链结所指原文件,而且属性不变。
必须注意的是,每一个设备文件占用一个信息节点,而软盘上节点数是有限的,因此有必要删除没用的设备文件。例如,如果你没有SCSI
设备,删除所有的以sd开头的文件。如果你不想使用串口设备,删除所有以cua开头的文件。不过记住一定要保留console,
kmem, mem, null, ram, tty1等文件。
·/etc:这个目录中含有一些必不可少的系统配置文件,那么到底哪些文件是必需的,哪些可有可无呢?告诉你一个小窍门,用命令ls
-ltru,该命令会根据最后使用日期反列一下目录/etc中的文件,如果一些文件很长时间没有被进入过,基本上可以从你的启动盘中删去。
我的启动盘中含有不到15个配置文件,大致可分为3部分:
(1)启动盘中必须含有的文件
·rc.d/* -- 系统启动脚本
·fstab - 列出要登陆的文件系统
·inittab - 包含启动过程参数
而且这些文件都是最简单的。rc应该包括:
#!/bin/sh
/bin/mount -av
/bin/hostname yjy
fstab应包括:
/dev/ram0 / ext2 defaults
/dev/fd0 / ext2 defaults
/proc /proc proc defaults
inittab包括:
id:2:initdefault:
si::sysinit:/etc/rc
1:2345:respawn:/sbin/getty 9600 tty1
2:23:respawn:/sbin/getty 9600 tty2
(2)整理系统所需文件
·passwd - 用户名和目录.
·group - 用户组
·shadow - 用户加密密码
如果你觉得这不安全,就把passwd和shadow删掉,这样只有root可以进入系统。
(3)偶尔使用的文件,可根据自己的实际情况选择。
·/bin和/sbin:该目录中包含有必不可少的应用程序,如ls,
mv,
cat,你可以根据自己的需要选择,不过一定要记住包括以下程序:init,
getty,login, mount,运行你的rc的外壳shell。
·/lib:
该目录中包含有你的启动盘启动过程中所需要的共享函数库,如果缺少必须的函数库,系统会停止启动或出现一大堆错误信息,所以一定要注意。
几乎所有的程序都需要libc库,列一下目录/lib中的libc:
% ls -l /lib/libc*
-rwxr-xr-x 1 root root 4016683 Apr 16 18:48 libc-2.1.1.so*
lrwxrwxrwx 1 root root 13 Apr 10 12:25 libc.so.6 -> libc-2.1.1.so*
libc.so.6的6表示版本号,它指向的文件才是你真正需要的。
查看每一个程序使用的函数库,用命令ldd,如:
% ldd /sbin/mke2fs
libext2fs.so.2 => /lib/libext2fs.so.2 (0x40014000)
libcom_err.so.2 => /lib/libcom_err.so.2 (0x40026000)
libuuid.so.1 => /lib/libuuid.so.1 (0x40028000)
libc.so.6 => /lib/libc.so.6 (0x4002c000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
输出右边的库都是必须的,有的可能是链结文件。
在/lib目录下你还必须有函数库装载器,这个装载器或是ld.so
(对 a.out 库) 或是 ld-linux.so (对 ELF
库)。新版本的ldd一般会告诉你所需库的加载器。
把装载器和库拷贝到/lib后,在仔细检查一遍,一定保证没有遗漏。
2.3 模块
如果你有一个模块化的内核,你还得必须考虑需要加载的模块,它们都位于/lib/modules,你可以把不是很重要的模块放到别的盘上,当系统启动后在加载,这样会节省启动盘的空间。
2.4 打包
一旦你完成了上述工作,卸下虚拟盘,拷贝到一个文件中,然后压缩。
umount /mnt
dd if=/dev/ram0 bs=1k | gzip -v9 > rootfs.gz
压缩结束后,你就拥有了一个压缩的根文件系统,不过你得检查它的大小,如果大了,你还得去掉一些东西。
3. 选择内核
在你完成了制做压缩的根文件系统后,下一步就是选择或自己创建一个内核。多数情况下,你可以拷贝现有系统的内核,但是有些情况下,你不得不自己另外创建一个。最可能出现的问题就是容量限制:如果你想做单张的启动盘,盘中最大的文件往往是内核,所以你必须想方设法压缩内核的体积。要想压缩内核体积,创建它时就得把不必要的功能去掉,如去掉对网络的支持和对不必要设备的支持,但是一定要记住保留内核对R
AMDISK和ext2的支持,否则你的启动盘将不能工作。还有就是要记住把对你备份所用设备的支持加到内核中去,因为启动盘的最大用处就是检测和修复损坏的系统,如果你没有把对备份设备的支持加到内核中去,你将没有办法修复损坏的系统,只能再重装L
inux。
创建新内核的方法我就不在此叙述了,如有问题,请查阅相关资料。重建完内核后记住用"make
zImage"压缩内核。
4. 整合
有了根文件系统和内核之后,最后的工作就是把它们整合在一起。
先检查总文件的大小,如果超出1.44M,就得考虑重新创建所需或用两张磁盘,即使用两张磁盘,你的根文件系统也得小于1.44M。
接着就是确定是用LILO控制启动还是直接用拷贝到盘上的内核控制启动。用LILO的好处是你能增加支持初始化硬件的参数到内核中,缺点是较复杂且占用珍贵的磁盘空间,不过我还是建议使用L
ILO控制系统启动。下面我就介绍用LILO的过程,直接用拷贝到盘上的内核控制启动的方法就不作叙述了。
用LILO控制启动首先就得写一个LILO配置文件,以下是一个最简单的配置文件,但是已经够用了。
boot =/dev/fd0
install =/boot/boot.b
map =/boot/map
read-write
backup =/dev/null
compact
image = KERNEL
label = Bootdisk
root =/dev/fd0
参数说明见相关资料。然后把它命名为bdlilo.conf。
接下来就是创建一个内核文件系统。把一张干净的软盘插入软驱,在上面创建ext2文件系统。
mke2fs -i 8192 -m 0 /dev/fd0 50
"-i
8192"表示每8192位创建一个信息节点。接着登陆系统:
mount /dev/fd0 /mnt
rm -rf /mnt/lost+found
mkdir /mnt/{boot,dev}
删去目录/ lost+found,创建两个目录/boot和/dev。
再拷贝现有系统中的到目录/dev中,
cp -R /dev/{null,fd0} /mnt/dev
接着拷贝启动加载器boot.b到目录/boot中,
cp /boot/boot.b /mnt/boot
最后,拷贝你创建的配置文件bdlilo.conf和内核到内核文件系统的根目录下,
cp bdlilo.conf KERNEL /mnt
现在,根文件系统所需所有文件都准备就绪了,你可以运行它了,运行结果应该没有错误,否则就应该仔细检查一下。最终的文件目录应该如下所示:
--------------------------------------------------------------------------------
total 361
1 -rw-r--r-- 1 root root 176 Jan 10 07:22 bdlilo.conf
1 drwxr-xr-x 2 root root 1024 Jan 10 07:23 boot/
1 drwxr-xr-x 2 root root 1024 Jan 10 07:22 dev/
358 -rw-r--r-- 1 root root 362707 Jan 10 07:23 vmlinuz
boot:
total 8
4 -rw-r--r-- 1 root root 3708 Jan 10 07:22 boot.b
4 -rw------- 1 root root 3584 Jan 10 07:23 map
dev:
total 0
0 brw-r----- 1 root root 2, 0 Jan 10 07:22 fd0
0 crw-r--r-- 1 root root 1, 3 Jan 10 07:22 null
接着设置内核镜像文件中的ramdisk的偏移量以指出如何确定定位根文件系统。该指示词可以通过命令rdev来设置,它的内容含义如下所示:
bits 0-10: ramdisk开始的偏移量, 在1024 byte数据块中
bits 11-13: 不用
bit 14: ramdisk加载的提示标记
bit 15: 加载根文件系统之前提示标记
如果位15被设置,当系统盘启动时将会提示你准备好另一张软盘,如果你的启动盘是两张的话,这个设置很有用。
对于使用单张和两张启动盘的用户,ramdisk的偏移量是不同的:
如果你的启动盘只有一张,那么压缩的根文件系统会被放置在内核之后,因此偏移量将会是第一个空闲的数据块,bit
14 应设置为1,bit
15设置为0。例如,如果你的启动盘根文件系统起始于数据块253(十进制),你的ramdisk偏移量应该是253
+ 214 = 253 + 16384 = 16637。
如果你的启动盘有两张,那么你的根文件系统起始于第二张盘的0数据块,所以偏移量是0,bit
14 应设置为1,bit 15应设置为1,最终值为
214 + 215 = 49152。
计算好偏移量后,用命令rdev
-r进行设置,记住用十进制:
rdev -r /mnt/vmlinuz 偏移量
设置完后,从/mnt卸下软盘。
最后一步是传输根文件系统,分两种情况:
·如果你的内核于根文件系统在同一张软盘上,用加选项seek的命令dd传输,dd
if=rootfs.gz of=/dev/fd0 bs=1k seek=内核数据块数。
·如果根文件系统位于第二张软盘上,移走第一张软盘,插入第二张盘,然后传输根文件系统dd
if=rootfs.gz of=/dev/fd0 bs=1k。
祝贺你,你的系统启动盘已经做好了,剩下的就是测试你的启动盘的正确性了,如果有问题,对不起,你还得从头再来。
现在许多Linux的发行套件中都有厂家做好的启动盘,它们的制做原理和以上我介绍的大同小异,但是它们常常用许多不同的技巧,因为它们要面对更多的硬件和各种可能发生的情况。大家可以拿一张来慢慢研究,你会从中学到很多知识。
最后祝大家都能作出一张称心如意的启动盘,让你的linux永保青春。
发表评论
-
RESTful API 编写指南
2016-06-14 11:12 5184基于一些不错的RESTful ... -
谈冷热数据
2015-07-20 11:13 6158http://jishu.zol.com.cn/11379. ... -
贺岁文:部门正副经理之争
2015-01-29 11:57 1182http://blog.csdn.net/shenyisyn ... -
只能通过chrome网上应用商店安装该程序”的解决方法
2014-10-09 13:09 6148自 Chrome 21.x 开始默认只允许从 Chrome ... -
nginx同一iP多域名配置方法
2014-06-03 13:48 2692nginx绑定多个域名可又把多个域名规则写一个配置文件里,也 ... -
风车网陈晓峰回忆录:我的两个月倒闭史
2014-05-27 16:09 1342http://tech2ipo.com/54719 ... -
Debugging and Profiling PHP with Xdebug
2014-04-15 12:10 1741http://www.sitepoint.com/debug ... -
XHProf 中文文档
2014-04-15 11:26 1460XHProf文件(草稿) 翻译:徐 ... -
让普通用户登录phpmyadmin不显示information_schema
2014-02-13 16:54 1914http://www.cnblogs.com/faily20 ... -
apache2.2+svn1.6+TortoiseSVN在windows环境搭建
2013-12-21 21:58 4468今天空闲时间对SVN服务器端和客户端环境做了搭建,并且成功了 ... -
MiniCMS - 吐槽
2013-10-22 10:58 1450看到的深有感触, ... -
MySQL 数据库通过日志恢复
2013-08-14 17:09 1091http://blog.csdn.net/hanxin198 ... -
使用文件函数操作Memcache
2013-08-12 18:21 1526写道 最近一周,SAE又悄悄的上线了一个新功能.那就是开始 ... -
转 总结过去10年
2013-08-10 11:17 1122下面的好文 担心原作者删帖 转到此处吧 http:/ ... -
SAET SQL_CALC_FOUND_ROWS 问题
2013-07-20 14:22 2309上午遇到 应用数据查不到的问题,但是 数据库中明明 ... -
问一下使用struts的同学们,你们这些年,是怎么过来的?
2013-07-20 12:04 1372by 空虚浪子心 http://www.inbreak.ne ... -
杂谈产品灰度上线的研发模式
2013-05-13 13:45 1765写道 传统的产品研发 ... -
正则表达式口诀
2013-04-12 14:38 1467写道 来源:蓝血正则 ... -
Emacs 快速指南
2013-04-09 17:51 2328您正在阅读 Emacs 快速指南(Emacs tutorial ... -
推荐几个技术博客,持续更新中...
2013-03-18 10:07 3308推荐几个技术博客,我整理了一下googlereader的订 ...
相关推荐
### 自己动手制作软盘上的Linux引导器 #### 一、引言 随着技术的发展,虽然软盘已经不再是主流的数据存储介质,但在某些特定场景下,例如老式系统的维护、教学演示或是实验环境下,了解如何在软盘上安装Linux引导器...
【制作基于软盘的Linux系统】是一个针对嵌入式环境的操作系统构建技术,它利用Linux的开放源代码特性,将整个系统精简到能够仅通过一张软盘启动。这一技术在早期尤其受到嵌入式设备开发者的欢迎,因为它能够提供低...
名字叫 floppyfw的Linux 防火墙能存放在一张普通的软盘里,并独立的在RAM内存中运行。使用它能启动计算机,利用ipchains过滤掉无用的 IP包,还可以使用它来配置IP伪装(IP masquerade),监视端口,通过它可以使用主机...
这套名字叫floppyfw的Linux防火墙能存放在一张普通的软盘里,并独立的在RAM内存中运行。使用它能启动计算机,利用ipchains过滤掉无用的IP包,还可以使用它来配置IP伪装(IP masquerade),监视端口,通过它可以使用...
将Linux系统精简到只需一张软盘就能启动,是制作嵌入式Linux的基础,对于路由器管理、三层交换机管理、防火墙管理等应用有着广泛的应用前景。 制作基于软盘的Linux系统,主要涉及以下三个基本元素: 1. 引导程序:...
很小的软盘linux很小的软盘linux很小的软盘linux很小的软盘linux很小的软盘linux
Linux 下的防火墙从诞生到现在,防火墙主要经历了四个发展阶段:第一阶段:基于路由器的防火墙;第二阶段用户化的防火墙工具套;第三阶段:建立在通用操作系统上的...本文将为大家介绍软盘版Linux防火墙的制作方法。
windows下 linux raid驱动软盘制作
本主题聚焦于“制作软盘镜像文件的核心代码”,这涉及到Linux环境下的磁盘镜像操作。以下是对这个话题的详细阐述: 一、镜像文件的概念 镜像文件是一种完整的、与原始设备或媒介具有相同数据结构的文件,它包含了...
如何制作软盘版的 Linux系统防火墙教程.docx
2. **准备软盘**:首先,需要一张空白的、未格式化的软盘。确保软盘没有物理损坏,如折痕或污渍,因为这可能影响数据的读写。然后,使用软盘驱动器将软盘格式化为FAT12或FAT16文件系统,这是软盘支持的格式。 3. **...
软盘镜像制作软件,现在还有使用软盘的吗? 这个工具可以把软盘镜像保存成文件,便于分发,传递。 想使用时,直接制作成软盘。 非常方便!
3. **内核定制**:构建适用于软盘Linux系统的内核需要进行定制,通常通过配置内核选项而非修改源代码。在源代码顶层目录运行`make menuconfig`进行配置,关闭不必要的功能以减小内核体积,比如网络支持、非必需设备...
软盘版的Linux系统防火墙制作教程.docx
【嵌入式开发教程之自己定制软盘上的Linux系统方案】 在嵌入式开发领域,构建定制化的Linux系统是常见的需求,特别是在有限的硬件资源环境下,例如使用软盘作为存储介质。本教程主要涵盖以下几个核心知识点: 1. *...