欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

巧用FreeBSD 5.3内核启动做了点手脚的麒麟2.1

程序员文章站 2022-06-13 15:50:17
...

[将非技术内容独立出去,文字无改动] 巧用FreeBSD 5.3内核启动做了点手脚的麒麟 2.1-01 上回书说到,麒麟开发组在我的分析发布之后不久,就删除了网站上的 2.0-14/21 的光盘镜像,取而代之的是发布了一个新版本 2.1-01 。 如上回我所提到的那样,麒麟 2.1-01

[将非技术内容独立出去,文字无改动]


巧用FreeBSD 5.3内核启动做了点手脚的麒麟2.1-01

上回书说到,麒麟开发组在我的分析发布之后不久,就删除了网站上的2.0-14/21的光盘镜像,取而代之的是发布了一个新版本2.1-01

如上回我所提到的那样,麒麟2.1-01相对于以前版本(2.0-14/21)进行了特殊化处理。主要是做了两件事情,一个是用objcopy/strip去掉了符号信息,strip了,而且还有一些额外的小动作,这样“成功的”回避了我那篇相似性分析中所用的分析方法;再一个就是修改了引导程序,所以用直接引导内核的方式已经是不可以用FreeBSD内核启动麒麟了,给大家尝试新版本情况下FreeBSD内核同麒麟内核的兼容性带来了一些障碍。

我之前不理解这种换门的行为有什么意义,有一位网友点醒的好,这叫做“迅雷不及掩耳盗铃”--(形容掩耳盗铃速度之快,呵呵)。

也有些人对我的“换门说”产生了质疑,怀疑是不是麒麟2.1真的在结构上有重大改进才导致的无法启动。那么好吧,今天,我们就来证实麒麟2.1确实是换了一个门而已。

系统引导

系统引导,一般为多级,大多数情况下,从MBR接过引导权后,稍加处理后,会转交给一个比较高级的引导程序,一般由这个引导程序来负责启动内核。在Windows NT/2000中是NT LoaderLinux中可能是Grub;在FreeBSD中是Boot Loader。有很多的引导程序比较高级具有多系统的引导能力,有的还具有传递引导权给下一级引导程序的能力。Grub就是其中之一。

麒麟的引导过程

麒麟为了多系统引导和图形化界面,采用了Grub作为第一级引导程序。在选择了"Kylin"后,Grub将加载第二级引导程序,对于2.0-14/21来说使用的是FreeBSDBoot Loader,而2.1-01开始,麒麟开发组调整了这个引导程序,虽然大体上还是和FreeBSDBoot Loader相同,但是修改了一些东西,导致这个Boot Loader属于Kylin 2.1-01专用的Boot Loader,既无法启动FreeBSD,也无法启动Kylin 2.0-14/21。也就所谓的自家人不认自家门了。呵呵。

在这个过程中,Boot Loader相当于一个点火器或者钥匙,只有和内核配套,遵循加载内核的约定,才能够成功的将内核加载起来。但是这个引导程序对于运行中的系统安全性和稳定性影响甚微,所以,修改其引导程序的目的,大家可以发挥想象力了。

证明我所说的换门问题很简单,我们只要将门再换回来就行了。今天我们所做的,就是使用FreeBSDBoot Loader来帮助加载FreeBSD 5.3的内核,最后成功的挂载各个系统模块,并引导图形界面成功。

需求:

1、一个FreeBSD 5.3的内核。我建议重新编译一个内核(和上回一样,要是上回编译了就不用再编译了),加上Linux兼容等可选模块,这样更贴近麒麟的做法。不过最低要求不需要加很多,只要加上Linux兼容的部分就行,我建议至少加上下面的选项:

options COMPAT_LINUX
options LINPROCFS
device sound

2、一个可以运行的麒麟操作系统,是2.1-01版本。

操作步骤:

1. 将新编译的内核随便起一个名,在这个例子中,我将其命名为freebsd_5.3_sl,并存在home目录中。

2. 在FreeBSD 5.3中做下列准备工作:

mkdir ~/boot
mkdir ~/boot/kernel
cp ~/freebsd_5.3_sl ~/boot/kernel/
cp /boot/loader ~/boot/
echo "load /boot/kernel/freebsd_5.3_sl" > ~/boot/loader.rc
echo "boot" >> ~/boot/loader.rc
cd ~
tar -czvf boot.tar.gz boot

3. 将boot.tar.gz传到Kylin/root目录下,然后在Kylin中开一个shell,执行:

cd /
tar -zxvf /root/boot.tar.gz

这样,就把FreeBSDBoot Loader和内核已经放好位置了,并且也已经写好了启动脚本。装好了钥匙也装好了门,一切就绪了。

4. 下面,来开始我们的引导之旅吧。:)reboot 重新引导麒麟操作系统。
5. 在GRUB的引导界面移动光标到Kylin上后按e (如果默认就在Kylin上,就直接按e

巧用FreeBSD 5.3内核启动做了点手脚的麒麟2.1

6. 将光标移动到第二行,kernel那行,然后按e

巧用FreeBSD 5.3内核启动做了点手脚的麒麟2.1

7. 我们会看到如下的行。

巧用FreeBSD 5.3内核启动做了点手脚的麒麟2.1
修改/boot/booter mute/boot/loader。呵呵,人家从2.0-18loader换成了booter就是为了不让我们能够启动FreeBSD,今天我们就给它换回来。

巧用FreeBSD 5.3内核启动做了点手脚的麒麟2.1

8. 回到这个页面后按b,将引导boot loader

巧用FreeBSD 5.3内核启动做了点手脚的麒麟2.1

9. 好,现在系统开始真正引导了,但是大家会从随后的几个画面发现,麒麟从2.0-01开始,再也不显示Copyright信息了,不但连加州大学的版本信息不显示,连他自己的版本信息也不显示了。据传闻,这样是为了让界面更加干净。嗯,确实挺“干净”。呵呵。不过谁要是特意的想看Copyright,还是可以从dmesg来看到的。

巧用FreeBSD 5.3内核启动做了点手脚的麒麟2.1

巧用FreeBSD 5.3内核启动做了点手脚的麒麟2.1

10. 成功的启动了X Window,进入图形界面的登录窗口。

巧用FreeBSD 5.3内核启动做了点手脚的麒麟2.1

11. 输入口令登录后,开始加载Gnome各个组件

巧用FreeBSD 5.3内核启动做了点手脚的麒麟2.1

12. 成功的启动了完整的图形界面,大家可以从uname中看到FreeBSD 5.3-RELEASE
(其实也可以cat /proc/version的,这回抓图的时候忘了,不好意思,呵呵。)

巧用FreeBSD 5.3内核启动做了点手脚的麒麟2.1

巧用FreeBSD 5.3内核启动做了点手脚的麒麟2.1

至此,我们完成了仅仅替换为FreeBSD 5.3的内核和引导内核用的引导程序,就做到了完整系统的启动。虽然还有一些警告信息,但是系统服务基本都是正常启动的。和上回的2.0-14/18一样,麒麟开发组新发布的2.1-01FreeBSD“兼容性”依旧很不错