基于U盘Linux的制作思路

1、我的制作环境;
先说硬件环境,只说与本系统制作可能有关系的:我的U盘是一个比较新闪迪8G的盘(sandisk),主板芯片还不错。我想我先把Bios里面的启动介质设置为USB-HDD,另外三种USB启动方式在我这次实验中都不能成功启动。
我的软件环境,或者说我的操作系统是Redhat,你们懂的,最熟悉的系统操作起来才最顺手。

2、基本思路
如果要做一个比较完善的实用系统,最好是在已经有的Linux发行版的基础上进行加工和修改来做,比如说在redhat、debian、suse等基础上进行再加工,但是我做这个系统的主要目的时满足一下自己小小的要求,想做个最微小的系统,将来试着移植到树莓派,另外也是作为学习的一种方式,所以我从更基础的步骤开始,包括自己编译内核、自己制作根目录系统、自己进行各种配置等—当然最好能从最初编写内核源码开始,但是,这个是基本不可能,因为我不想重复造轮子,而且我C语言还咩有强大到自己写操作系统内核的地步。哈哈!

3、制作过程:
3.1、编译内核:
具体的编译过程就不说了,资料随处可见,在这里关键是注意为了使U盘启动时能找到自己的根目录系统,需要打一个补丁。关于这个补丁的详情可见:

http://www.lammerts.org/software/kernelpatches/

由于这个补丁是针对内核2.4.22的,所以我专门下载了2.4.22版本的源码,虽然现在的内核版本已经到了3.x,但我的最小系统没有必要用最新的内核,而且我不知道这个补丁是否对2.4内核的其他版本起作用,而针对2.6内核的补丁又有不同。
然后,解压—打补丁—编译—得到bzImage,这里就不详细解释了。可以看源码包里面的说明书,多看readme和install文档。

3.2、制作根目录系统;
制作根目录系统的文章也很多,我这里就不重复,值得注意的是:由于现在使用的时U盘,空间很大,所以宽松得多,所以我没有使用busybox,而是从我自己工作的红帽系统的bin sbin lib等目录中直接拷贝需要的东西。

3.21、一般我们都使用initrd来分两个阶段启动Linux,由initrd来挂载U盘上的文件系统。经过实验证明,直接由grub或是syslinux来指定根目录文件系统是可行的。
3.23、现在我的根目录里面几乎没有什么配置文件,连inittab fstab等都没有,直接手写即可,但是前期需要简单分区。
3.3、处理U盘:
首先要使用fdisk cfdisk对U盘分区,我把我的U盘划分为两个区,第一个100M的boot区,第二个是500M的root区,注意将boot分区设置为可启动的。就是激活标志打上去,然后记得用partprob 检测一下哦。
然后要建立文件系统,因为syslinux来进行操作更简单:
#mkdosfs /dev/sda1
#mke2fs -j /dev/sda2
将boot分区建立为FAT文件系统而将root分区建立为ext3文件系统—用grub应该用更简单,直接写入grub.conf配置就可以实现加载内核及定义参数。
再然后就要这样对U盘进行syslinux处理:
#syslinux /dev/sda
复制相关的文件到U盘,在挂上相应的文件系统之后,把前面编译的内核bzImage复制到sda1,而把自己制作的根文件系统复制到sda2。
最后编写一个syslinux的配置文件并把它复制到sda1里面。(实际上sda1里面只有三个文件,一是内核;一是syslinux系统文件;一是下面的syslinux.cfg)
#vim syslinux.cfg
title YOYOJACKY USBOS
kernel bzImage
root /dev/sda2
制作完成,现在启动电脑就可以顺利进入到我的U盘了—虽然内核在启动的时候还会报告找不到root文件系统,但是折腾了几下之后,它就找到了并顺利执行init,现在电脑上出现了:
init#
表示可以使用U盘Linux系统了。
但是这个系统还做不了什么事情,需要对许多的配置文件进行创建,比如说现在的系统连用 vi等编辑文件都总报告错误,其实还有很多路要走,大家如果想试试,我建议一开始最好用LFS(linux from scratch)来进行操作,可以像搭积木一样构建一个属于你自己的系统。

这里先给大家一个思路,等过年休息的时候,写一个详细的教程来讲解哈!

About 李 伟斌

Just K.I.S.S To Be Or Not To Be, It's Your Qustion. --Keep It Simple & Stupid.
This entry was posted in Linux, 操作系统 and tagged , , , , , , . Bookmark the permalink.

发表评论