免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: snow888
打印 上一主题 下一主题

从 0 开始,打造自己的 Linux 。 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
51 [报告]
发表于 2012-04-15 23:49 |只看该作者
本帖最后由 snow888 于 2012-04-16 02:00 编辑

下面我们创建两个与系统用户有关的配置文件 /etc/passwd 和 /etc/group

这两个文件我们就不要手写了,直接拷贝母体的文件,然后将无用的信息删除即可。

下面我们开始安装 grub 和 linux 内核 。

安装 grub ,我们需要先打上补丁。
patch -Np1 -i ../grub-0.97-disk_geometry-1.patch
配置编译选项:
./configure --prefix=/usr
安装
make & make install

这里我们来停一下,还记得我们的这个物理磁盘(或者是 U 盘)是如何分区的么?
对 /dev/sdb1   /boot
/dev/sdb2       /swap
/dev/sdb3       /
我们的系统现在在 /dev/sdb3 上,我们需要将 /boot 挂载上来。
mount /dev/sdb1 /boot                   ;; 如果 /boot 目录没有,我们要先创建。

然后我们来执行如下的 copy 命令
mkdir -v /boot/grub
cp -v /usr/lib/grub/i386-pc/stage{1,2} /boot/grub

如果你的不是 i386 平台,你需要根据自己的实际环境来做相应的拷贝。

下面我们来安装 linux 内核,和前面一样,我们还是要先打上补丁。
patch -Np1 -i ../linux-2.6.16.27-utf8_input-1.patch

执行下面的命令来准备编译
make mrproper
这样做得目的是检查源码树,保证我们的内核源码绝对干净。

make menuconfig
以菜单方式配置内核选项,相信编译过内核的朋友,比我肯定熟悉多了。 ^_^.

编译内核镜像和模块:
make

安装模块,如果内核配置使用它们:
make modules_install

拷贝启动镜像到 /boot 目录。
cp -v arch/i386/boot/bzImage /boot/kernel-2.6.16.27
cp -v System.map /boot/System.map-2.6.16.27
cp -v .config /boot/config-2.6.16.27

安装 grub 引导到硬盘
# grub
grub> root (hd0,2)
grub> setup(hd0)
grub>exit
#
编写系统引导菜单 文件 /boot/grub/menu.lst。
  1. # By default boot the first menu entry.
  2. default 0
  3. # Allow 30 seconds before booting the default.
  4. timeout 30
  5. # Use prettier colors.
  6. color green/black light-green/black
  7. # The first entry is for My_Operation.
  8. title My_Operation 6.2
  9. root (hd0,2)
  10. kernel /boot/kernel-2.6.16.27 root=/dev/hda3
复制代码
特别注意:我们的硬盘编号和分区编号是从 0 开始的,即第一块硬盘的编号是 hd0 , 第一个分区的编号是 0 号。
在 /etc/grub 下创建一个启动链接。
mkdir -v /etc/grub &&
ln -sv /boot/grub/menu.lst /etc/grub

这一步非必须,但是我们强烈建议你这样做。

好了,我们现在退出新的系统,回到宿主机。
# exit

卸载新的系统
# umount /dev/sdb1
# umount /dev/sdb3

重新启动,进入 cmos 将宿主机的硬盘 disable,然后再重新启动,让你的新系统运行起来。
怎么样,出现了 login: 了么。 ^_^.

到这里,我们已经完成了从 0 开始打造自己的 linux 的全部过程,下一步,如果你需要安装图形界面,可以自己在这个新的系统上编译安装了。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
52 [报告]
发表于 2012-04-16 00:18 |只看该作者
本帖最后由 snow888 于 2012-04-16 02:04 编辑

晕乎乎,这系统终于出来了。

最后的总结。


系统实现的主要思想及流程:

从宿主机编译一个基本脱离母体系统的开发工具链 ——>利用这个工具链编译安装最初的基本命令——>利用这个工具链编译出完全脱离母体开发环境的新生系统的工具链——>挂载虚拟文件系统——>切换 shell 到新生系统上,并将根目录替换成我们自己的目录——>在新生系统上用二次编译的开发工具编译安装系统的核心文件系统和命令程序——>配置启动参数文件——>挂载 /boot 区并安装 grub 和 linux 内核 ——> 脱离母体并利用新生系统引导。



系统打造过程中需要注意的事项:
1、系统的命令部分,尽量以静态编译的方式来生成。避免进入新生系统后,由于 libgcc_s.so.2 等动态链接库的相对位置移动而造成命令无法使用的情况,尤其是二次编译 gcc 和 binutils 的时候,应注意让生成的命令全部是静态编译的方式实现的。
2、合理组织自己的文件系统,比如我的编译过程中,gcc 安装到了 / 根目录,这是极其不合理的,兄弟们在二次编译 gcc 和 binutils 的时候,安装目录应指向 /My_Operation/myuser/usr 目录,切记!切记!
3、除设置系统基本特征的工具Coreutils和系统的基本命令 Util-linux 安装到 /My_Operation/myuser/ 以外,其余部分我们建议安装到 /My_Operation/myuser/usr 。



本文与 lfs 中相同和不一样的地方。
1、本文的二次编译开发工具链的目的及方法与 lfs 略有不同,同时本文大部分的新生系统的命令在宿主机上编译完成,避免了新系统上开发包不完整造成的命令编译安装失败。
2、本文的启动参数配置与 lfs 基本一样,事实上,几乎所有的自己打造系统都逃不出这样的模式,这也是 lfs 一文最为难能可贵之处。
3、构建过程中,部分编译参数与 lfs 不同,可能是考虑的角度不一样吧,究竟哪种编译参数优劣,朋友们可以自己去体会。


最后,我们来回顾一下操作系统的演化过程。

最早的计算器是什么——算盘。
最早的程序语言是什么——我们一起来:一上一、二上二、三下五去二、四去六进一 ... ..

这些东西也许大家忘记了,我们一起来回忆。

最早的机械计算器是一台带有 1千多个齿轮的大机器,后来发展到了电子管的计算器,从此出现了打孔编程,再后来,由于计算的结果不能保存,不能被重复利用,每次进行关联计算都需要将上次的计算结果输入一遍然后再计算,这就出现了外部的存储,最早是 4KB , 后来到 64KB ,再后来到了 1MB ,这个时候出现了能实现不同计算用途的需求,于是人们开始考虑将系统的接口部分独立出来,做一个中间层来进行翻译,这个中间层就是最早的操作系统雏形。

这个雏形最开始是用 0 、1 输入的,纯机器码组成。后来进行了扩展,为了解决用 0 和 1 编程的问题,出现了一种简单的机器描叙语言——汇编,然后有人用汇编重写了计算机的软件和硬件的接口部分,形成了早期的能与特定机器绑定的操作系统,最早的苹果、王安电脑等。

再到后来,在汇编语言发展的同时,出现了新的更为简洁的语言,如 B 语言等。

再后来,AT&T 公司的两位天才,用汇编重写了 C 语言,并用 C 语言编写了第一套能脱离具体硬件环境的操作系统 ——Unix 。

到这里,我们的真正意义上的操作系统就诞生了。

今天,我们已经不需要用 0,1 先写一个汇编语言出来,然后再用汇编写一个 C 语言出来,再用 C 语言开发一套操作系统出来了,我们已经有了很好的工具链,我们需要做的就是用这个工具链来开发系统(事实上,这个系统都有人替我们写好了,我们只是自己编译安装了一下而已)。

严格意义上来说,这个过程并非是真正意义上的从 0 开始,打造我们自己的 linux 系统。

最后,祝朋友们顺利打造出属于自己的 linux 系统。

论坛徽章:
0
53 [报告]
发表于 2012-04-16 10:04 |只看该作者
辛苦了

论坛徽章:
12
金牛座
日期:2014-06-14 12:18:07巨蟹座
日期:2014-06-14 21:49:00双鱼座
日期:2014-06-14 21:33:57未羊
日期:2014-06-14 21:24:39射手座
日期:2014-06-14 21:07:38亥猪
日期:2014-06-14 20:58:09午马
日期:2014-06-14 20:12:31辰龙
日期:2014-06-14 20:10:31戌狗
日期:2014-06-14 13:18:53摩羯座
日期:2014-06-14 13:11:18亥猪
日期:2014-06-14 13:06:04巨蟹座
日期:2014-06-14 12:44:53
54 [报告]
发表于 2012-04-19 14:15 |只看该作者
看着都很累啊,lz还得敲键盘啊

论坛徽章:
0
55 [报告]
发表于 2012-04-20 11:20 来自手机 |只看该作者
楼主''''。  我没得到我需要的''''。    initramfs'。 也就是说我的机器是裸机''''。 硬盘还没用过' 但是我想进入shell'。  不知你可否明白的意思'''求邮件交流'。xtdddd2000@163.com

论坛徽章:
0
56 [报告]
发表于 2012-04-20 15:40 |只看该作者
过来打个酱油!!!学习学习!

论坛徽章:
10
亥猪
日期:2013-08-15 14:50:422015年迎新春徽章
日期:2015-03-04 09:58:112015亚冠之吉达阿赫利
日期:2015-07-21 09:49:08神斗士
日期:2015-11-20 14:07:3815-16赛季CBA联赛之江苏
日期:2017-08-17 14:04:21CU大牛徽章
日期:2013-09-18 15:15:45CU大牛徽章
日期:2013-09-18 15:16:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34巳蛇
日期:2014-03-29 19:05:3215-16赛季CBA联赛之辽宁
日期:2022-04-08 16:41:44
57 [报告]
发表于 2012-04-23 13:37 |只看该作者
这种文章不顶对不起良心了lollol

论坛徽章:
0
58 [报告]
发表于 2012-04-25 17:02 |只看该作者
新手学习,感谢楼主

论坛徽章:
0
59 [报告]
发表于 2012-04-25 17:27 |只看该作者
好,   就是不懂!

论坛徽章:
0
60 [报告]
发表于 2012-04-26 09:01 |只看该作者
谢谢你~ 我是第一个收藏哦~ 留着以后学习用!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP