制作一个简单的linux
我这里是借助宿主机做的一个简单的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出错概率变小】我们再打开一个虚拟机把加的那个硬盘导入进去,这样我们就启动这个小虚拟机了。
这个系统虽然能跑起来了,但是里面的功能就太弱了,这里我们来把它加强一些,能让它执行一些一般的小命令。但是我们发现要是一个一个复制当前系统上的那就太痛苦了,因为他们所依赖的库太多了,有的还有别名。所以我们这里写一个脚本,来运行脚本,那就比较快了(这里脚本的内容就不多做解释了)。
- #!/bin/bash
- #
- DEST=/mnt/sysroot
- libcp() {
- LIBPATH=${1%/*}
- [ ! -d $DEST$LIBPATH ] && mkdir -p $DEST$LIBPATH
- [ ! -e $DEST${1} ] && cp $1 $DEST$LIBPATH && echo "copy lib $1 finished."
- }
- bincp() {
- CMDPATH=${1%/*}
- [ ! -d $DEST$CMDPATH ] && mkdir -p $DEST$CMDPATH
- [ ! -e $DEST${1} ] && cp $1 $DEST$CMDPATH
- for LIB in `ldd $1 | grep -o "/.*lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`; do
- libcp $LIB
- done
- }
- read -p "Your command: " CMD
- until [ $CMD == 'q' ]; do
- ! which $CMD &> /dev/null && echo "Wrong command" && read -p "Input again:" CMD && continue
- COMMAND=` which $CMD | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`
- bincp $COMMAND
- echo "copy $COMMAND finished."
- read -p "Continue: " CMD
- 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相关推荐
- 使用Hprose制作一个简单的分布式应用程序
2019独角兽企业重金招聘Python工程师标准>>> 使用Hprose制作一个简单的分布式应用程序只需要几分钟的时间.本文将用一个简单的实例来带您快速浏览使用Hprose for ...
- 用Python实现音频卷积,并制作一个简单的HRTF效果
用Python实现音频卷积,并制作一个简单的HRTF效果 作为一个刚刚入门Python的小白用户,写出这篇文章还是废了我很大的力气,不过幸运的是,在网上到处东拼西凑,我还是把它给做出来了. 废话不多说 ...
- 使用 Flutter 制作一个简单的笑话生成器应用程序
在本教程中,我将向您展示如何使用 Flutter 制作一个简单的笑话生成器应用程序 对于这个项目,我们将从 RESTful API 获取数据 API的链接: 随机笑话 对于这个项目,我不会关注应用程序 ...
- 实例学习SSIS(一)--制作一个简单的ETL包
http://www.cnblogs.com/tenghoo/archive/2009/10/archive/2009/10/archive/2009/10/16/ssis_lookup.html 导 ...
- python计算器教程,用Python程序制作一个简单的计算器
用Python程序制作一个简单的计算器 在此示例中,您将学习创建一个简单的计算器,该计算器可以根据用户的输入进行加,减,乘或除. 要理解此示例,您应该了解以下Python编程主题: 通过函数创建简单计 ...
- 32位mips运算器logisim_大神教你制作一个简单的16位CPU
如何制作一个简单的16位CPU,首先我们要明确CPU是做什么的,想必各位都比我清楚,百度的资料也很全..... 如果想要制作一个CPU,首先得明白下计算机的组成结构(或者计算机的替代品,因为并不是只有 ...
- (译)如何使用GameCenter制作一个简单的多人游戏教程:第一部分
免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...
- 数字信号 fft c源码_如何制作一个简单的人体动态识别微信小程序(附源码)
知乎小白第一次写专栏,还请多指教. 先放成果. GitHub源码: lrioxh/HAR-applet-of-Wechatgithub.com b站演示视频: 居然不需要服务器?!如何制作一个简单的 ...
- 用计算机制作动画,如何使用制作工具制作一个简单的Flash动画-电脑自学网
怎么制作Flash动画?通过Adobe Flash我们可以制作出非常有趣好看的动画,也可以制作一键简单的小动画,下面给大家介绍如何使用制作工具制作一个简单的Flash动画. 操作方法: 1.打开fla ...
最新文章
- HDD工作原理 导图
- 通道Channel-IO 多路复用
- 运动基元_开发人员的新分布式基元
- shell 常用命令集合
- 【Flink】Flink kafka Spark 如何实现数据有序性
- oracle的count的null为0,count(字段)不统计null值
- Eclipse、VBA、IE开发者工具 Debug快捷键
- python中分支语句elif与else的区别_浅谈对python中if、elif、else的误解
- 优云软件又双叒通过CMMI ML3评估 , 研发和质量管理水平创新高
- RTI_DDS自定义插件开发 8 信息
- Opencv+opencv_contrib安装
- 【查看Python导入包的地址】
- Rebranding (字典序替换 思维)
- python学习之双目图像得到景深图(及遇到的问题)
- C盘瘦身:QQ文件的清理及Group2文件夹
- Android软件测试外文文献,软件测试中英文对照外文翻译文献
- unicode计算机通用解码语言
- 2016OSC源创会年终盛典-综合技术专场-George Neville-Neil
- 报表设计丨颜色搭配(附:多个模板)
- php将时间戳转换为时间格式,php时间戳如何转换为时间格式