[将非技术内容独立出去,文字无改动]
巧用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 Loader ; Linux 中可能是 Grub ;在 FreeBSD 中是 Boot Loader 。有很多的引导程序比较高级具有多系统的引导能力,有的还具有传递引导权给下一级引导程序的能力。 Grub 就是其中之一。
麒麟的引导过程
麒麟为了多系统引导和图形化界面,采用了 Grub 作为第一级引导程序。在选择了 "Kylin" 后, Grub 将加载第二级引导程序,对于 2.0-14/21 来说使用的是 FreeBSD 的 Boot Loader ,而 2.1-01 开始,麒麟开发组调整了这个引导程序,虽然大体上还是和 FreeBSD 的 Boot Loader 相同,但是修改了一些东西,导致这个 Boot Loader 属于 Kylin 2.1-01 专用的 Boot Loader ,既无法启动 FreeBSD ,也无法启动 Kylin 2.0-14/21 。也就所谓的自家人不认自家门了。呵呵。
在这个过程中, Boot Loader 相当于一个点火器或者钥匙,只有和内核配套,遵循加载内核的约定,才能够成功的将内核加载起来。但是这个引导程序对于运行中的系统安全性和稳定性影响甚微,所以,修改其引导程序的目的,大家可以发挥想象力了。
证明我所说的换门问题很简单,我们只要将门再换回来就行了。今天我们所做的,就是使用 FreeBSD 的 Boot Loader 来帮助加载 FreeBSD 5.3 的内核,最后成功的挂载各个系统模块,并引导图形界面成功。
需求:
1 、一个 FreeBSD 5.3 的内核。我建议重新编译一个内核(和上回一样,要是上回编译了就不用再编译了),加上 Linux 兼容等可选模块,这样更贴近麒麟的做法。不过最低要求不需要加很多,只要加上 Linux 兼容的部分就行,我建议至少加上下面的选项:
options COMPAT_LINUX
options LINPROCFS
device sound2 、一个可以运行的麒麟操作系统,是 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 boot3. 将 boot.tar.gz 传到 Kylin 的 /root 目录下,然后在 Kylin 中开一个 shell ,执行:
cd /
tar -zxvf /root/boot.tar.gz这样,就把 FreeBSD 的 Boot Loader 和内核已经放好位置了,并且也已经写好了启动脚本。装好了钥匙也装好了门,一切就绪了。
4. 下面,来开始我们的引导之旅吧。:) reboot 重新引导麒麟操作系统。
5. 在 GRUB 的引导界面移动光标到 Kylin 上后按 e (如果默认就在 Kylin 上,就直接按 e )
6. 将光标移动到第二行, kernel 那行,然后按 e
7. 我们会看到如下的行。
修改 /boot/booter mute 为 /boot/loader 。呵呵,人家从 2.0-18 的 loader 换成了 booter 就是为了不让我们能够启动 FreeBSD ,今天我们就给它换回来。
8. 回到这个页面后按 b ,将引导 boot loader
9. 好,现在系统开始真正引导了,但是大家会从随后的几个画面发现,麒麟从 2.0-01 开始,再也不显示 Copyright 信息了,不但连 加州大学 的版本信息不显示,连他自己的版本信息也不显示了。据传闻,这样是为了让界面更加 干净 。嗯,确实挺[ 干净 ]。呵呵。不过谁要是特意的想看 Copyright ,还是可以从 dmesg 来看到的。
10. 成功的启动了 X Window ,进入图形界面的登录窗口。
11. 输入口令登录后,开始加载 Gnome 各个组件
12. 成功的启动了完整的图形界面,大家可以从 uname 中看到 FreeBSD 5.3-RELEASE 。
(其实也可以 cat /proc/version 的,这回抓图的时候忘了,不好意思,呵呵。)
至此,我们完成了仅仅替换为 FreeBSD 5.3 的内核和引导内核用的引导程序,就做到了完整系统的启动。虽然还有一些警告信息,但是系统服务基本都是正常启动的。和上回的 2.0-14/18 一样,麒麟开发组新发布的 2.1-01 同 FreeBSD 的 [兼容性] 依旧很不错 。
查看更多关于巧用FreeBSD5.3内核启动做了点手脚的麒麟2.1的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did98606