LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3575|回复: 11

制作MiniLinux的简便方法

[复制链接]
发表于 2006-3-20 21:59:46 | 显示全部楼层 |阅读模式
看了youbest的关于制作minilfs的过程,也试着照那个方法来制作,但是感觉方法太复杂,而且制作LFS工具链也是一个极其复杂而且个人感觉也多于的过程(对于功能简单的小操作系统)。
      下边是我在参看了youbest的制作功能单一、体积只有5M的apach服务器和那篇关于制作babylinux详细过程后来制作一个小Linux的过程:
      1.为了有个好的且安全的制作环境,下载LFS6.2-pre3的LiveCD,下在这个只是为了安全和方便,要是你已经有一个Linux操作系统,那么不下在这个LiveCD也是可以的。但是除了问题不负责的说^_^.。
      2.在VMWare5中创建一个虚拟机,网络使用NAT方式,创建一个虚拟的IDE硬盘(不知道为什么为开始想使用SCSI虚拟硬盘,但是在用cfdisk对硬盘进行分区的时候过不去,始终出错)。设置虚拟机的CD-ROM为下在下在德LiveCD镜像文件。然后启动虚拟机。
      3.在从CDROM中启动后就进入了LiveCD的启动画面,它随后会要求你设置时区,本地化语言等,这些我都是乱设的,没多大用——这只是一个工具。
      4.启动完成后就来到熟悉的提示符"#"
      5.现在可以在提示符上敲些你熟悉的命令试一试看看是不是和我们熟悉的Linux一样?现在在命令行上敲下该命令:#cfdisk  ,对我们的虚拟硬盘进行分区,我只将其分了一个分区即hda1,然后打上可引导标记,接着存盘,会提示你是否确定对磁盘进行分区,当然要输入yes确定了.等待片刻后分区命令界面还会弹出来,此时我们的分区已经准备好了,所以选择quit推出分区命令。
      6.现在需要在hda1分区上创建文件系统。命令为#mkfs.ext2 /dev/hda1。
      7.将我们的分区挂在/mnt上,命令#mount /dev/hda1 /mnt.
      8.进入/mnt目录并创建一个新目录,命令:
                     #cd /mnt
                     #mkdir pkg(你也可以把它叫着其他的名字)
       9.在创建一个目录:  #mkdir -p /mnt/boot/grub
       10.进入pkg目录并解开LiveCD中自带的grub原码包 :
                    #cd /mnt/pkg
                    #tar xvf /lfs-sources/grub-0.97.tar.bz2(这里的版本不一定正确,自己看着办吧)
            #cd grub-0.97
            #./configure && make
            #cp stage1/stage1 /mnt/boot/grub/
            #cp stage2/xfs_stage1_5 /mnt/boot/grub/
            #cp stage2/stage2 /mnt/boot/grub/
            #grub/grub
           grub>root (hd0,0)
           grub>setup (hd0)
           grub>quit
            #cd ..
            #rm -rf gurb-0.97
            #cat > /boot/grub/menu.lst << end
               default 0
               timeout 10
               color green/black light-green/black

               title MiniLinux
               root (hd0,0)
               kernel /boot/bzImage root=/dev/hda1 rw
               end
      11.安装bash:
                   #mkdir /mnt/bin
                   #cd /mnt/pkg
                   #tar xvf /lfs-sources/bash-3.1.tar.bz2(还是那句话,版本不一定正确)
                   #cd bash-3.1
           #./configure  --without-bash-malloc
           #make LDFLAGS="-static"
           #cp bash /mnt/bin/
           #cd ..
           #rm -rf bash-3.1
      12.创建脚本init:
                  #mkdir /mnt/sbin
                  #cat > /mnt/sbin/init << end
                  #!/bin/bash
                 
                   echo
                   echo
                   echo "#################################"
                   echo "#                        Hello           Man!                           #"
                   echo "#################################"
                   echo
                   echo    (不要怀疑这里的echo命令,因为我们已经安装了bash,而该命令是bash内建的命令之一)
            /bin/bash
            end
         #chmod a+x /mnt/sbin/init
      13.创建设备文件目录:
                 #mkdir /mnt/dev
                 #这个命令我就不写了,就是将/dev/目录下边除了shm目录以外所有的都拷贝

到/mnt/dev/目录下,这不是必须,只是为了简单。
      14.编译内核,不使用模块,而是将所有要用到的全部编入内核,将编译好的内核bzImage拷贝到/mnt/boot/下.
         到这里你的系统就已经可以启动了,但是还不能干任何事,除了bash内建的命令可以使用以外

没有其他的命令,即使最平常的ls命令也找不到。下一步我们就是要让我们的系统可以上网和使用我们平

时最常用的命令。
     下一步就是为我们的系统加入常用的命令:
      参照“http://www.linuxsir.cn/bbs/archive/index.php/t-159887.html“制作babylinux的方法安装一个busybox到我们的系统,但其中需要调整两条,1.不启用busybox的init和ash,因为我们使用自己的init脚本和bash,所以在安装的时候只需要将_install下的bin和sbin目录搬到我们的/mnt下就好了,注意别把我们开始安装在/mnt/bin和/mnt/sbin下的东西覆盖掉了!
        现在我们的系统中需要的命令几乎都可以找到了,(如果你在编译busybox的时候选择了的话)我们现在可以使用ifconfig命令来配置我们的网络,然后就可以使用telnet连接到学校的bbs上了 ,不过只支持英文的。
     接下来你还可以为你的系统添加一些其他的东西,如iptables防火墙,我已经添加了,而且把busybox给删掉了,只使用防火墙,系统很小的,试试吧!
发表于 2006-3-31 15:35:47 | 显示全部楼层
期待ING!!!
回复 支持 反对

使用道具 举报

发表于 2006-4-1 10:07:22 | 显示全部楼层
不错 不错
期待
回复 支持 反对

使用道具 举报

发表于 2006-4-11 11:54:14 | 显示全部楼层
我按照上面的做了,不过没有成功.
提示: kernel panic : no init found, try pass init option to kernel
http://www.linuxsir.cn/bbs/showthread.php?t=251936
上面是我的出错信息的贴.
回复 支持 反对

使用道具 举报

发表于 2006-4-11 16:00:55 | 显示全部楼层
chmod 777 init
回复 支持 反对

使用道具 举报

发表于 2006-4-11 16:03:20 | 显示全部楼层
main()
{
printf(“hello,world!\n”);
}

保存后以init.c保存他,并用gcc编译.
#gcc –-static -o init init.c
回复 支持 反对

使用道具 举报

发表于 2006-4-11 16:39:05 | 显示全部楼层
init.c放于什么路径?
需要在grub 启动的时候以参数的时候把init 传给kernel 吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-11 17:27:33 | 显示全部楼层
问题很奇怪,怎么会发现不了init呢?
是不是你把与你的根文件系统相关的文件系统支持编译成模块了?要是这样估计连你的根文件系统都没有挂载上,自然也就找不到init了.我是将所有的东西都编入内核的,没有使用模块,所以也就没有遇到你这样的问题
Post by future_god
我按照上面的做了,不过没有成功.
提示: kernel panic : no init found, try pass init option to kernel
http://www.linuxsir.cn/bbs/showthread.php?t=251936
上面是我的出错信息的贴.
回复 支持 反对

使用道具 举报

发表于 2006-4-11 19:52:24 | 显示全部楼层
补充一下:
我没有编译内核,直接把新装的mandrakelinux 10.0 的内核拷贝过去了.
拷贝的文件有vmlinux-2.6.3-7mdk   System-2.6.3-7mdk.map  initrd-2.6.3-7mdk.img
难道不用编译过的内核不行吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-12 13:54:38 | 显示全部楼层
Post by future_god
补充一下:
我没有编译内核,直接把新装的mandrakelinux 10.0 的内核拷贝过去了.
拷贝的文件有vmlinux-2.6.3-7mdk   System-2.6.3-7mdk.map  initrd-2.6.3-7mdk.img
难道不用编译过的内核不行吗?

当然不行啊,默认的都有好多需要用到的模块,尤其是驱动,你只把内核拷贝过去那是肯定要出问题的,你试试自己编译一下内核
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表