免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 79662 | 回复: 156

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

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-04-11 02:22 |显示全部楼层
刚看到一个问题,如何把 Linux 系统安装在 U 盘里。

说实在话,这个话题在新手园地来谈,确实有些大了,不过为了解答新手园区的问题,还是放这里了。

一、问题:如何打造一个 Linux 系统,并将之安装到 U 盘里。(这里的打造是指自己编译内核,自己编译命令。)

说实在话,这个问题,新手能提出来,俺还是很佩服这个勇气的。

在开始讲这个话题之前,首先得说一下什么是操作系统,操作系统是干什么的?操作系统又是如何驱动硬件,并为我们提供一个人机交互环境的?操作系统与开发语言的关系是什么?

简单说,操作系统是一个中间层,它位于应用软件和计算机硬件之间,用于将应用软件的指令翻译成机器指令并提交给机器执行。这个机器指令其实就是二进制代码,对应于机器硬件的指令就是电路中的通、断。

操作系统通过与固化到 flash 中的硬件指令来驱动硬件,并提供一个人机交互的环境。(这里说简单点,说太多咱就漏了,毕竟只有半桶水啊^_^.)。做过嵌入式开发的朋友可能知道,所谓的“烧板”其实就是把硬件指令写入到硬件的 flash 中。更形象一点,就是我们的 x86 指令集、mips指令集等等 。

开发语言实际上是通过一定的编译程序,将我们用中、高级语言写成的代码首先翻译成汇编代码,再由汇编器翻译成机器码,然后由链接器将一个一个的代码片段链接成能执行完整程序功能的执行代码,并保存在非易失存储器上。

计算机系统的启动过程。

(本部分以 x86 系列为例,MBR模式,非 EFI 模式,其实说太多了,俺也说不清楚了。)

系统加电以后,首先会有一个自己检测的过程,这一个过程主要是通过接口来测试各个硬件能否正常工作,如果可以,那么系统首先会以实模式启动,此时系统仅能访问 1 MB 内存的内容,实际上由于还有留部分内存给硬件中断,我们实际能访问到的是 640KB。然后系统会根据 cmos 中设置的启动顺序,从外部的硬件中查找能启动系统的信息,此时如果找到,则系统将转入到这个外部的介质上,读取最初的启动信息,这个最初的启动信息很小,它只是指明了真正的操作系统内核加载的地址位,并将继承器的第20位置为1,开启虚模式,此时系统能使用较大的内存了(一般是 4GB , 特殊的方式【PAE】能映射到 16GB)。然后系统移到这个偏移地址,将真正的操作系统内核装入,完成系统的进一步自检,如果没有错误,开始初始化系统的软件环境。

最后进入到一个提供人机交互的环境,这个环境下供用户选择自己使用的 shell 。(DOS 年代,没有选择 ,就是 command.com )

我们执行的可执行文件,有一定的格式,在 linux 下一般是 ELF 格式,这个格式下,系统的指令是动态装入的,需要的时候才装入,不需要的时候,系统并不装入执行的动态链接库信息。需要指出的是,不同的可执行文件格式,其实真正的执行码,在同一种硬件架构上是一样的,不同的是这个可执行文件的文件头。操作系统根据这个文件头决定在什么时候,什么地址装入可执行指令和数据。


好了,前面说这么多,只是一个引子,目的是抛砖引玉。

评分

参与人数 2可用积分 +14 收起 理由
send_linux + 6 很辛苦,值得鼓励!
chenyx + 8 赞一个!

查看全部评分

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-04-11 02:39 |显示全部楼层
本帖最后由 snow888 于 2012-04-11 14:12 编辑

前面已经说了操作系统一般的基础知识,下面开始谈谈如何自己打造自己的操作系统,并将其安装到 U 盘上。

我们先来谈谈需要的软、硬件环境。

硬件部分:首先,你需要一台电脑(废话,没电脑下面的都是空谈)、一个 U 盘(建议是 8 ~ 16 GB 的)、一套 Linux 系统光盘(俺喜欢 CentOS )。
软件部分:gcc 源码、binutils 源码、glibc 源码、linux-libc-headers 源码、其它的工具软件源码若干(根据你自己的需要)。

准备工作:
            1、首先安装 Linux 系统到你的电脑中(没有母亲,生不出儿子)。
            2、挂载并分区你的 U 盘。

系统安装: 论坛 搜吧,说多了就是口水话了。
挂载并分区你的 U 盘:
            插入你的 U 盘,系统应该能认到,此时是 fat32 的格式的,我们得删除,并在这个 U 盘上构建一个自己的小型的分区环境。
            建议的分区为   /boot                   200MB
                                  /swap                 2GB
                                  /                          剩余部分。
            建立分区使用到的命令是 fdisk 和 mke2fs ,有关这两个命令的使用方法,可以 man 或者是 google 。
            分区完成以后,修改 /etc/fstab , 将你的新建立的分区挂载上去(注意: /boot 和 / 都需要挂载,这两个分区是我们后面工作的关键,)。为了避免与你的系统发生冲突,建议在你的系统根目录下面建立一个 My_Operation 的子目录,在这个目录下创建两个子,目录,一个是 boot , 另一个是 myuser ,将你的 /boot 和 / 挂载到这个下面去)


时间关系,今天就先说到这里。


接着说:

如果是建立 swap 分区,你需要用到 mkswap 命令,这个命令的使用你可以通过 man 或者是 google 的方式获得。

如果以上这些基本的命令不会,那下面就别看了,先把基础打一下再来。

swap 分区干嘛的?

其实就是 windows 系统下的 profiles.sys ,是一个在硬盘上的数据交换区,如果你的系统内存使用完了,系统会将当前内存中需要长时间运行得程序进程(不是完整的程序,只是程序的部分执行片段)保存到这个交换区 swap 里面,等待系统进行一个轮询后,再次装入并执行。

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
发表于 2012-04-11 13:53 |显示全部楼层
写的不错,赞一个.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-04-11 14:01 |显示全部楼层
回复 3# chenyx


    才开个头呢,你给个精华吧。

俺花点时间写完。

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
发表于 2012-04-11 14:02 |显示全部楼层
回复 4# snow888


    等你完全写完全的.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-04-11 14:51 |显示全部楼层
本帖最后由 snow888 于 2012-04-11 14:51 编辑

经过上面的过程,咱们的这个基本的空间就建好了。这个空间就是我们以后需要独立运行的 linux 的系统空间。
好了,我们在这个空间上构建自己的工作目录。

mkdir /My_Operation/myuser/usr                       ;  你的新系统的 /usr 目录,以后脱离母体的时候,这咚咚就是你的基本用户的命令目录了。
mkdir /My_Operation/myuser/bin                       ;  你的新系统的 /bin 目录,以后脱离母体的时候,这咚咚就是你的系统用户的命令目录了。
mkdir /My_Operation/myuser/tools_src             ;   你的编译工作目录。

下面我们来开始第一个过程。

下载 Autoconf (2.59) - 904KB:
下载主页:  http://www.gnu.org/software/autoconf
干嘛用的:  用来生成和解析 configure 的。

configure 是啥子?
我们一般通过源码发行的程序包都带有这个咚咚,通过运行这个咚咚来建立一个适合于你的系统环境的编译参数,为下面的 make & make install 做准备。

下载 Automake (1.9.6) - 748KB:
下载主页:  http://www.gnu.org/software/automake
其它解释部分同 autoconf

下载 Bash (3.1) - 2,475KB:
下载主页: http://www.gnu.org/software/bash
干嘛用的? 见第一楼,操作系统基础部分。

下载:  Binutils (2.16.1) - 12,256 KB:
下载主页: http://www.gnu.org/software/binutils
干嘛用的: 汇编器与链接器(也包括其它的打包工具,如 ar , 反汇编工具 objdump ,反汇编码转移工具 objcopy 等)。
解释部分: 见第一楼,操作系统基础部分。

下载:  Bison (2.2) - 1,052KB:
下载主页: http://www.gnu.org/software/bison
干嘛用的: C 语言词法分析工具,我们的 C 语言代码是否符合规范,首先得由它来分析检验。
解释部分: 见第一楼,操作系统基础部分。

下载:  Bzip2 (1.0.3) - 654KB:
下载主页: http://www.bzip.org/
干嘛用的: Linux 系统下一个非常优秀的压缩解压软件,我们在 linux 下的很大部分源码都是通过它来压缩的。

下载:  Gzip (1.3.5) - 324KB:
下载主页: http://www.gzip.org/
干嘛用的: Linux 系统下一个非常优秀的压缩解压软件,我们在 linux 下的很大部分源码都是通过它来压缩的。

下载: GCC (4.0.3) - 32,208KB:
下载主页:  http://ftp.gnu.org/gnu/gcc
干嘛用的: C 语言编译器 ( 我们下面的几乎所有的工作都需要用到它 )
解释部分: 见第一楼,操作系统基础部分。

下载:  Glibc (2.3.6) - 13,687KB
下载页面:  http://www.gnu.org/software/libc
干嘛用的:  系统的所有核心头文件和库文件,我们所有的系统命令,内核命令都与此有关。
解释部分: 见第一楼,操作系统基础部分。

下载:  Glibc LibIDN add-on (2.3.6) - 99 KB:
下载页面:  http://www.gnu.org/software/glibc
干嘛用的:  同上
解释部分:  同上。

下载:  GRUB (0.97) - 950KB:
下载页面:  http://www.gnu.org/software/grub
干嘛用的:  操作系统的引导器,一般我们会将其 bootloader 安装到你的新的空间的 mbr 部分,其基本的引导信息会安装到 /boot 分区里面。
解释部分:  见第一楼, 操作系统基础部分。

下载:  M4 (1.4.4) - 376KB:
下载页面:  http://www.gun.org/m4
干嘛用的:  ^_^.
解释部分:  见  autoconf 和 automake 部分,如果不知道可以 google 一下。

下载:  Make (3.80) - 900KB:
下载页面:  http://www.gnu.org/software/make
干嘛用的:  ^—^.
解释部分:  见 GCC 部分,如果不知道可以 google 一下。

下载:  Flex (2.5.33) - 680KB:
下载页面:  http://www.gnu.org/software/flex
干嘛用的:  GCC 语法分析。可参照 bison 部分。
解释部分:  见 GCC 部分,如果不知道可以 google 一下。

下载:  Vim (7.0) - 6,152KB:
下载页面:  http://www.vim.org
干嘛用的:  ^_^.


下载:  Linux (2.6.16.27) - 39,886 KB:
下载页面:   http://www.kernel.org/
干嘛用的:   ^_^.
解释部分: 见第一楼,操作系统基础知识部分。

下载:   Linux-Libc-Headers (2.6.12.0) - 2,481 KB:
下载页面:  http://www.kernel.org/
干嘛用的: Linux 系统内核所有的头文件和与 glibc 有关联的库文件源码。
解释部分: 见第一楼,操作系统基础知识部分。


^_^.

累死了。有时间继续。

以上下载的代码,全部放在 /My_Operation/myuser/tools_src 目录下,这是我们开始工作之前的准备。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-04-11 14:52 |显示全部楼层
本帖最后由 snow888 于 2012-04-11 14:53 编辑

回复 5# chenyx


    俺不敢保证写出来的咚咚没有错误,这写出来得累死,没精华,俺就不再写了。

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
发表于 2012-04-11 14:57 |显示全部楼层
看你这个架势,貌似要做LFS啊

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-04-11 15:02 |显示全部楼层
回复 8# chenyx


    人问的不就是做 lfs 么,咱就教他做一把呗。

你说还有必要再写么?

论坛徽章:
0
发表于 2012-04-11 15:09 |显示全部楼层
不错  写的不错
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP