通过Linux内核源码制作操作系统

   日期:2024-12-27    作者:boaohuagong 移动:http://ljhr2012.riyuangf.com/mobile/quote/72432.html

Linux源码只有运行起来才能成为操作系统,否则她只能静静的躺在存储介质上沉睡,本文就讲解如何将这个睡美人唤醒,唤醒后给他穿上旗袍她就成为RedHat,给她换上包臀裙她就成为SUSE,再或者给她换上超短裙,她就成为Ubuntu,总之就是你可以按照自己的想象,随意打扮这个小姑娘,当然我们也可让她裸奔。

没有编译过内核的朋友,可以查看我之前写过的一篇文章

CentOS下编译Linux内核_巭犇的博客-CSDN博客_centos 编译内核,本文在此基础之上,将唤醒这个沉睡的美人。

如果想要唤醒这个沉睡的少女(睡你MB,起来嗨,需要对计算机启动过程的原理有基本的认识,这里不再赘述,我只简单的讲解下关键的过程。

PC上电--->BIOS--->Bootloader加载OS kernel和initramfs

创建磁盘文件

 

对磁盘分区

 

将磁盘分区关联到/dev/loop设备

 

磁盘第一个扇区是MBR,紧跟着MBR的是2043个空闲的扇区,实际上GRUB就嵌入到这个空闲的扇区,因此磁盘真正用于保存数据是从2049扇区开始

 

losetup用于将磁盘文件与linux中的设备文件进行关联,为后续磁盘分区与格式化做准备, 命令中的“-o“”表示磁盘正在用于存储数据的起始位置(单位是字节,即2048 x 512 = 1048576 )


格式化分区并挂载分区

 

挂载分区

 

安装grub到MBR之后的空闲分区

 

配置内核文件

将编译好的内核文件放入/boot/目录下

 

配置initramfs文件

 

制作initramfs时,需要与内核版本一致,因为我当前的内核正是系统使用的内核,因此直接用uname -r 代替。


配置grub.cfg

 

hd0表示第一个硬盘,而msdos1表示该硬盘的第一个分区

linux (hd0,msdos1)/boot/bzImage console=tty0
表示:系统第一个硬盘,第一个分区的boot/bzImage文件是内核压缩镜像,而后面的console=tty0是内核启动参数,告诉内核输出到控制台上,而非图形化界面。

initrd (hd0,msdos1)/boot/initramfs
表示:系统第一个硬盘,第一个分区的boot/initramfs是内存文件系统。

到此为止,磁盘文件已制作完成,只需卸载磁盘文件即可,如下所示

 

唤醒沉睡的少女(从磁盘运行Linux

通过qemu-system-x86_64命令启动磁盘文件

至此内核已载入内存并通过cpu控制计算机

截止到目前,系统一直在使用initramfs作为临时的根文件系统,initramfs的主要目的之一就是辅助系统顺利地切换到真正的根文件系统。既然现在已经正确的驱动了硬盘,那么接下来,我们就切换到硬盘上的真正的根文件系统。

在grub.cfg中的内核文件后通过添加“root=/dev/sda2”可以指定根文件系统所在的介质,并通在修改initramfs中的init脚本即可以实现根文件系统的挂载。

接下来请尽情蹂躏吧,比如给她配个房子(切换到真正的根)、给房子配把锁(ssh)。。。

想进一步了解操作系统如何启动的道友,强烈推荐阅读《深度探索Linux操作系统》以及访问Welcome to Linux From Scratch!,Linux From Scratch (LFS) 完全通过源码一步一步引导你构建自己的Linux操作系统。

以下输出分为三部分

  1. 关机
  2. 加载内核与initramfs
  3. 切换到真正的根文件系统,并启动相关服务

 

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号