我这里是借助宿主机做的一个简单的Linux,我们只要知道一个Linux启动过程需要什么,这里制作就简单的多了。不过没有基础的也没关系,我写的很详细,没有基础的看了我写的步骤只要细心也是会做出来的,我这里的小Linux是很简单的,很多功能还不够全,但是能启动起来,一些简单的功能还是会完成的,回头我会把功能补全的,更新这个简单的Linux的。

一、基本过程

grub --> kernel --> initrd --> ROOTFS(/sbin/init,/bin/bash)

我们找一个硬盘装上grub而后给它提供内核内核借助于initrd能够去读取真正的文件系统,在根文件系统我们只需要提供一个/sbin/init,在提供一个/bin/bash,这个系统就能跑起来,但是只能执行内部的自带的命令,我们把其它的命令给它放进去,他就成了一个小的基本完整的linux了。

二、制作一个Linux详细过程

我们这里以当前系统为宿主机,再加一个IDE硬盘,我们先安装grub,然后分两个区,一个用来做boot,一个用来做跟。

我们开机后用fdisk /dev/hda进行分区,下图是第一个分区,第二个分区相同只不过第三个框中是2第四个框中我们给它+512M,w为保存。

下来我们就开始格式化,这里的-j是让它的文件系统为ext3的。

我们开始挂载这两个分区,分别挂载在/mnt/boot和/mnt/sysroot,没有这两个文件我们要在/mnt下创建文件boot和sysroot了,然后开始挂载,但是挂载的分区要及时生效也要开机后也必须生效,要让它开机后生效我们要在/etc/fstab里面配置了,图片下面的两行就是在/etc/fstab文件中配置的,开机后也是有效的。

在/etc/fstab文件中配置

/dev/hda1               /mnt/boot               ext3    defaults        0 0

/dev/hda2               /mnt/sysroot             ext3    defaults        0 0

下来我们就开始安装grub了,我们用grub-install --root-directory=/mnt /dev/had来安装。

然后我们开始用cp /boot/vmlinuz-2.6.18-308.el5 /mnt/boot/vmlinuz复制内核并重命名为vmlinuz。然后我们复制版本信息,但是前提我们发现initrd-2.6.18-308.el5文件是压缩格式,并且我们还要将里面的init文件里/dev/后面改为hda2。我们这里先创建一个文件夹,先把initrd-2.6.18-308.el5归档展开到这个文件夹中。

我们找到当前文件下的所有文件通过管道送给cpio命令进行归档,再通过管道送给gzip -9强压缩一下,然后保存至/mnt/boot/initrd.gz

这里我们用vim /mnt/boot/grub/grub.conf还要配置grub中的grub.conf,内容为:

default=0

timeout=3

title shuaige linux(2.6.18)

root (hd0,0)

kernel /vmlinuz

initrd /initrd.gz

下来我们就要配置/mnt/sysroot目录下的目录,我们发现这个目录下面什么都没有我们就要创建一些目录。

这时候我们就要把/sbin/init 复制到/mnt/sysroot/sbin下面,把/bin/bash 复制到/mnt/sysroot/bin下面,不仅仅复制这些我们还要把它们所依赖的库也要复制过来。

cp /sbin/init /mnt/sysroot/sbin

cp /bin/bash /mnt/sysroot/bin

这个时候我们的linux基本上就可以跑了,我们用chroot /mnt/sysroot 来测一下。虽然这里的ls 还不能用。下来我们就要复制这些命令了。

我们知道要想执行init文件我们就要执行/etc/inittab这个文件,所有我们先来配置/etc/inittab文件。【提示:这里都是相对路径,记好每个/etc前面还有/mnt/sysroot呢】

id:3:initdefault:

si::sysinit:/etc/rc.d/rc.sysinit

我们还要执行相关的/etc/rc.d/rc.sysinit中的脚本。

#!/bin/bash

#

echo -e "\tWelcome to \033[31mShuaiGe033[0m Linux"

/bin/bash

这里我们保存退出给它一个权限:chmod +x /mnt/sysroot/etc/rc.d/rc.sysinit

这是我们来运行一下【提示:因为我们用的是虚拟机进行演示,所以我们每次要运行的时候都要多sync几下,这样可以同步到磁盘上,这样制作的linux出错概率变小】我们再打开一个虚拟机把加的那个硬盘导入进去,这样我们就启动这个小虚拟机了。

这个系统虽然能跑起来了,但是里面的功能就太弱了,这里我们来把它加强一些,能让它执行一些一般的小命令。但是我们发现要是一个一个复制当前系统上的那就太痛苦了,因为他们所依赖的库太多了,有的还有别名。所以我们这里写一个脚本,来运行脚本,那就比较快了(这里脚本的内容就不多做解释了)。

  1. #!/bin/bash
  2. #
  3. DEST=/mnt/sysroot
  4. libcp() {
  5. LIBPATH=${1%/*}
  6. [ ! -d $DEST$LIBPATH ] && mkdir -p $DEST$LIBPATH
  7. [ ! -e $DEST${1} ] && cp $1 $DEST$LIBPATH && echo "copy lib $1 finished."
  8. }
  9. bincp() {
  10. CMDPATH=${1%/*}
  11. [ ! -d $DEST$CMDPATH ] && mkdir -p $DEST$CMDPATH
  12. [ ! -e $DEST${1} ] && cp $1 $DEST$CMDPATH
  13. for LIB in  `ldd $1 | grep -o "/.*lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`; do
  14. libcp $LIB
  15. done
  16. }
  17. read -p "Your command: " CMD
  18. until [ $CMD == 'q' ]; do
  19. ! which $CMD &> /dev/null && echo "Wrong command" && read -p "Input again:" CMD && continue
  20. COMMAND=` which $CMD | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`
  21. bincp $COMMAND
  22. echo "copy $COMMAND finished."
  23. read -p "Continue: " CMD
  24. done

这时候我们来测试一下,成功了。

在切换之前我们先复制一个库文件过去,而且我们希望系统启动后自动装载这两个模块,而且装完以后还要给你的系统输入IP地址,开机后直接就有IP地址。

拷贝模块:

cp  /lib/modules/2.6.18-308.el5/kernel/drivers/net/mii.ko /mnt/sysroot/lib/modules

cp /lib/modules/2.6.18-308.el5/kernel/drivers/net/pcnet32.ko /mnt/sysroot/lib/modules

要想开机后自动执行上面功能我们先要把lsmod复制过去,再设置vim /mnt/sysroot/etc/rc.d/rc.sysinit文件【提示:红色字体则为我们这次加入的内容】

#!/bin/bash

#

echo -e "\tWelcome to \033[31mShuaiGe\033[0m Linux"

insmod /lib/modules/mii.ko

insmod /lib/modules/pcnet32.ko

ifconfig eth0 172.16.58.21/16

ifconfig lo 127.0.0.1/8

/bin/bash

这时候我们开始切换【提示:切换之前必须sync】

这时候我们ifconfig一下,我们设置的IP地址已经设置成功,环回接口IP也设置成功了,这时候我们的小linux已经相对完善了。

转载于:https://blog.51cto.com/lzysg172/1167476

制作一个简单的linux相关推荐

  1. 使用Hprose制作一个简单的分布式应用程序

    2019独角兽企业重金招聘Python工程师标准>>> 使用Hprose制作一个简单的分布式应用程序只需要几分钟的时间.本文将用一个简单的实例来带您快速浏览使用Hprose for ...

  2. 用Python实现音频卷积,并制作一个简单的HRTF效果

    用Python实现音频卷积,并制作一个简单的HRTF效果 作为一个刚刚入门Python的小白用户,写出这篇文章还是废了我很大的力气,不过幸运的是,在网上到处东拼西凑,我还是把它给做出来了. 废话不多说 ...

  3. 使用 Flutter 制作一个简单的笑话生成器应用程序

    在本教程中,我将向您展示如何使用 Flutter 制作一个简单的笑话生成器应用程序 对于这个项目,我们将从 RESTful API 获取数据 API的链接: 随机笑话 对于这个项目,我不会关注应用程序 ...

  4. 实例学习SSIS(一)--制作一个简单的ETL包

    http://www.cnblogs.com/tenghoo/archive/2009/10/archive/2009/10/archive/2009/10/16/ssis_lookup.html 导 ...

  5. python计算器教程,用Python程序制作一个简单的计算器

    用Python程序制作一个简单的计算器 在此示例中,您将学习创建一个简单的计算器,该计算器可以根据用户的输入进行加,减,乘或除. 要理解此示例,您应该了解以下Python编程主题: 通过函数创建简单计 ...

  6. 32位mips运算器logisim_大神教你制作一个简单的16位CPU

    如何制作一个简单的16位CPU,首先我们要明确CPU是做什么的,想必各位都比我清楚,百度的资料也很全..... 如果想要制作一个CPU,首先得明白下计算机的组成结构(或者计算机的替代品,因为并不是只有 ...

  7. (译)如何使用GameCenter制作一个简单的多人游戏教程:第一部分

    免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...

  8. 数字信号 fft c源码_如何制作一个简单的人体动态识别微信小程序(附源码)

    知乎小白第一次写专栏,还请多指教. 先放成果. GitHub源码: lrioxh/HAR-applet-of-Wechat​github.com b站演示视频: 居然不需要服务器?!如何制作一个简单的 ...

  9. 用计算机制作动画,如何使用制作工具制作一个简单的Flash动画-电脑自学网

    怎么制作Flash动画?通过Adobe Flash我们可以制作出非常有趣好看的动画,也可以制作一键简单的小动画,下面给大家介绍如何使用制作工具制作一个简单的Flash动画. 操作方法: 1.打开fla ...

最新文章

  1. HDD工作原理 导图
  2. 通道Channel-IO 多路复用
  3. 运动基元_开发人员的新分布式基元
  4. shell 常用命令集合
  5. 【Flink】Flink kafka Spark 如何实现数据有序性
  6. oracle的count的null为0,count(字段)不统计null值
  7. Eclipse、VBA、IE开发者工具 Debug快捷键
  8. python中分支语句elif与else的区别_浅谈对python中if、elif、else的误解
  9. 优云软件又双叒通过CMMI ML3评估 , 研发和质量管理水平创新高
  10. RTI_DDS自定义插件开发 8 信息
  11. Opencv+opencv_contrib安装
  12. 【查看Python导入包的地址】
  13. Rebranding (字典序替换 思维)
  14. python学习之双目图像得到景深图(及遇到的问题)
  15. C盘瘦身:QQ文件的清理及Group2文件夹
  16. Android软件测试外文文献,软件测试中英文对照外文翻译文献
  17. unicode计算机通用解码语言
  18. 2016OSC源创会年终盛典-综合技术专场-George Neville-Neil
  19. 报表设计丨颜色搭配(附:多个模板)
  20. php将时间戳转换为时间格式,php时间戳如何转换为时间格式

热门文章

  1. 磁盘加密软件TrueCrypt知识大全(二)之创建文件型加密卷
  2. 现代内存编号解读(转)
  3. Java泛型进阶 - 如何取出泛型类型参数
  4. 使用 electron-updater 自动更新应用
  5. Linq初级班 Linq To XML体验(基础篇)
  6. 2014-5-14 我的战斗效果
  7. 转载的spring cloud的全家桶,有空学习下
  8. 关于float的说明
  9. Adt 配置注释模板
  10. Delphi XE2 发布了,期待了很久的东西,开始学习中。