怎样制作自己的linux

要制作一个linux系统,首先我们要了解它的原理,启动的时候,首先是加电自检,

然后再BIOS里面设定要读取的那块磁盘的MBR,加载bootloder,bootloer加载相对应分区的内核,内核完成自身初始化后,挂载根文件系统,并装载init可执行文件,在inittab文件控制下,完成一系列的任务

我们先格式化一个磁盘,并分区,这里分两个区,sdb1和sdb2

把第一个磁盘分区sdb1安装grub,要在sdb2上装内核,安装过grub之后,再把内核也加上,并作相应的配置,就可以启动一个系统了

首先,创建目录/mnt/boot,并把设备sdb1挂载到/mnt/boot下面

mkdir  /mnt/boot

mount  /dev/sdb1  /mnt/boot

下面先安装grub,(其实上篇已经介绍如何安装了,这里仅简述命令)

mkdir /mnt/boot/grub

cp  /usr/share/grub/i386-redhat/*  /mnt/boot/grub

grub

grub>  root (hd1,0)

grub>  setup (hd1)

再创建/mnt/sysroot目录,用来装载内核

mkdir  /mnt/sysroot (这里我们随便起一个目录名,然后把新的分区挂载到上面)

mount  /dev/sdb2  /mnt/sysroot/

ls /mnt/sysroot  查看是否已经挂载好,如有lost+found则表明挂在好新分区

Ls /boot/ 可以看到内核在里面,拷贝内核到/mnt/boot下

cp  /boot/vmlinuz-$(uname -r)  /mnt/boot/vmlinuz (后缀名可以自己写)

mkdir  /tmp/linux 在临时目录里创建一个目录,用来寄存initrd文件

cd  /tmp/linux

zcat  /boot/initrd-$(uname –r).img | cpio –id 这个文件是归档压缩的文件,是用cpioy归档的,所以解压后,必须用cpio  -id 才能打开,

vim  init    编辑打开后的init文件

找到/dev/vol0/root  换成/dev/sda2

我们知道,本地磁盘sdb 可以当做另一个新主机的磁盘sda,所以grub已经在sda1上了,内核要在第二个磁盘分区上,所以在init文件中,要把/dev/vol0/root 修改为/dev/sda2

格式化第二个磁盘分区。mkfs –t ext3 /dev/sdb2

然后再将其归档到指定目录下:

find . | cpio –o –H newc –quiet | gzip -9 > /mnt/boot/initrd.gz(最后的归档名可以自拟)

下面我们可以创建一些目录:

cd  /mnt/sysroot

mkdir –pv  ./{etc/rc.d,bin,sbin,usr,proc,sys,var,tmp,lib,mnt,media,misc,opt,dev}

内核与grub已经有了,下面我们把init和bash也拷贝过来

cp  /sbin/init  sbin/

cp  /bin/bash  bin/

这时候, bash,init,grub,initrd都有了,你是不是以为大功告成了?我们可以用chroot这个命令测试一下,chroot  /mnt/sysroot  此命令是将后面的目录作为根来调用,可以在/mnt/sysroot环境下试验命令,结果…………嘿嘿!不行吧!

那是因为少了命令所依赖的库文件,可以用ldd 这个命令查看可执行文件依赖的库文件

ldd  /bin/bash

ldd  /sbin/init

然后将以/lib开头的库文件拷贝到/mnt/sysroot/lib下,

下面还要配置一些文件:

先编辑inittab文件,此文件里定义的有:

1 默认运行级别,2 系统初始化脚本指定 3特定级别目录下脚本指定 4定义ctrl+alt+del组合键的功能 5 定义USP电源故障或电源重新恢复是执行的进程 6启动虚拟终端 7 初始化图形界面

Vim etc/inittab

Id :3:initdefault 默认运行级别是3

Si::sysinit:/etc/rc.d/rc,sysinit  si是id,运行级别省略是指所有级别,sysinit是系统初始化, 后面是所要运行的脚本,一般格式为:id:runlevels:action:process

编辑系统初始化脚本,这里我们可以随便写点

Vim  etc/rc.d/rc.sysinit

#!/bin/bash

Echo  –e  “\t Welcome to mylinux”

/bin/bash

保存退出后,修改权限:chmod +x etc/rc.d/rc.sysinit

最后别忘了,还有一个grub的配置文件呢!

Cd  grub/

V im  grub.conf

default=0

timeout=5

title  mylinux

root(hd0)

kernel /vmlinuz ro root=/dev/sda2

initrd  /initrd.gz

保存退出,然后sync ,同步到磁盘数据这时候,算是完成了,可以启动你那个新的linux了。

怎么样,是不是有种小小的成就感了,其实这只是小试牛刀,如果你想了解更多有关linux的knowledge,请继续关注我的博客,会不断更新哦!

转载于:https://blog.51cto.com/string/788334

教你制作自己的linux相关推荐

  1. 教你制作第一个C++游戏!#1 引入

    教你制作第一个C++游戏!#1 引入 在今天,我们要使用sfml做第一个图形程序.sfml是一个易于上手的.多平台的图形库.这意味着,如果你在Windows上用sfml写了一款游戏,你在其他平台(Ma ...

  2. IP签名档PHP源码,简单几步,教你制作自己的显IP签名档

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 简单几步,教你制作自己的显IP签名档 |=================================| |转载自bbs.idzc.com |==== ...

  3. 论坛IP签名档PHP源码,简单几步,教你制作自己的显IP签名档

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 简单几步,教你制作自己的显IP签名档 |=================================| |转载自bbs.idzc.com |==== ...

  4. openwrt 格式化_一步一步教你制作openwrt卡系统

    1.搭建交叉编译环境 sudo apt-get install build-essential u-boot-tools uboot-mkimage gcc-arm-linux-gnueabihf n ...

  5. clion浏览linux代码,手把手教你使用 Clion 开发 Linux C++ 项目

    手把手教你使用 Clion 开发 Linux C++ 项目 关于CLion CLion是一款专为开发C及C++所设计的跨平台IDE.它是以IntelliJ为基础设计的,包含了许多智能功能来提高开发人员 ...

  6. ArduinoYun教程之Arduino环境与Linux环境的桥梁Bridge

    ArduinoYun教程之Arduino环境与Linux环境的桥梁Bridge Arduino环境与Linux环境的桥梁--Bridge 在第一章中介绍Arduino Yun硬件的时候提到过,它上面有 ...

  7. 求职特训营火热来袭 阿里大咖教你制作专业简历

    **简介:**金三银四黄金求职季,阿里专家倾心打造五节求职精品课程,从面试官角度切入讲解,帮助同学们五天快速掌握简历过关的技能,更有资深专家直播在线答疑! 一份高通过率的简历是什么样子?为什么你投了这 ...

  8. 求职特训营火热来袭,阿里大咖教你制作专业简历

    **简介:**金三银四黄金求职季,阿里专家倾心打造五节求职精品课程,从面试官角度切入讲解,帮助同学们五天快速掌握简历过关的技能,更有资深专家直播在线答疑! 一份高通过率的简历是什么样子?为什么你投了这 ...

  9. 手把手教你制作AppPreview视频并上传到appStore进行审核

    手把手教你制作AppPreview视频并上传到appStore进行审核 注意,你需要使用iMovie才能够制作AppPreview视频文件,用QuickTime录制的无效! 最终效果 1. 新建一个事 ...

最新文章

  1. LA 5717枚举+最小生成树回路性质
  2. 如何删除“最刺激的游戏”(Dotop.lik)
  3. python在线课程-《Python程序设计与应用》在线课程使用说明
  4. 个人出路......
  5. 谋定重整衍生新360行-李玉庭:协同电商经信研究生态系统
  6. Java Spring MVC
  7. pythonista3安装stash_Pythonista下stash安装教程
  8. EFDC水模型 初学者入门 及软件下载学习指导
  9. collection集合 介绍_五分钟了解MongoDB介绍,安装与使用
  10. KendoUI 基础:Grid 绑定template展示
  11. Java中Collection接口
  12. 基于R语言的模型组合
  13. WPE1.3C的详细使用教程
  14. linux服务器告警信息:Free inodes is less than xx% on /volume 排查
  15. 微信公众号接口调试流程
  16. 新媒体数据分析:新媒体运营主要做什么?
  17. 阿里云倒逼亚马逊提高市场竞争?AWS CEO安迪·贾西谈量子计算与AI
  18. js基础知识:es6中,当对象中的key名称为一个变量时,需要用`[]`括起来
  19. 常用的数学函数以及浮点数处理函数
  20. Moments无法识别人像解决方法

热门文章

  1. 在线HTML实体转字符串工具
  2. 【linux高级程序设计】(第九章)进程间通信-管道 3
  3. 关于Patter类和Match类
  4. Linux—文件系统
  5. 自定义SharePoint Webservice
  6. Dotnet程序集自动生成版本号
  7. [小功能]禁用模板默认CSS
  8. 从0到1打造推荐系统-架构篇
  9. python 获取硬盘信息_使用python获取电脑的磁盘信息方法
  10. ascii码为0的字符_2.4 序列之字符串