PC机上调试lmosem操作系统内核

内核开发 置顶精帖
7 1675
LMOS LMOS 2018-03-13
积分:15

为什么写这个

IMG_20160828_181752

感谢很多朋友买了我的书,并且还看了下去,这一点令人兴奋,然后看着看着就出现了问题——手上没ARM开发板,我隔着屏幕都已经听到:我靠,买了书还不够还要买板子, 为什么不用ARM虚拟机,可是我没有找到一款正确无误的ARM虚拟机,我给人家提过BUG,但是人家财大气粗不鸟我这种菜鸡。

书光看不练是没有效果的,但很多读者手里没有ARM板子,又想边看边玩一把,我就为lmosem内核移植增加了 x86hal,这样读者们就可以在自己pc或者pc中的虚拟机上做实验了,如果你在pc上玩,书的前三章就不用看了,如果你不太了解x86,有些关键代码看不懂,欢迎私信,也欢迎有能力的大神对其进行扩展、移植……

好了,废话不多话了

宿主环境

首先你要台装有x86cpu的计算机,不管它是服务器、pc、笔记本、平板、还是VM,其次你要在其上安装linux,我用的deepin,你们随意,但是一定要是64位的linux,因为lmosem的编译工具有两个是我自己写的,不巧的是我写成了64位的代码,32位系统将无法运行。我不会教你们安装linux,程序员都“不会”安装系统,写内核的程序员就更“不会”了,如果不能完成,就可能需要电脑城的工作人员帮助,他们精于此道。

深度截图_20171225153105

深度截图_选择区域_20171225153443

编译工具链

有了宿主环境,就可以安装编译工具链了,编译lmosem需要make、nasm、gcc、ld、virtualbox、qemu、git,安装很容易,只要在终端中输入:

sudo apt-get install nasm、回车,输入密码 再回车……

……

如果你不想一次又一次的回车、输入密码、回车,这里有一键式安装:

sudo apt-get install build-essential nasm qemu viirtualbox git 

qemu 是为了生成virtaulbox的硬盘文件,virtaulbox是为了运行测试lmosem

深度截图_deepin-terminal_20171225154013

配置虚拟机

virtaulbox操作很简单,但是你若一遍一遍的操作,就很烦,很火大了,所以我写好了命令脚本,make一下就ok了,但是第一次你得手动配置好,请看如下图,由于virtaulbox为很多OS进行了优化,我们为了不受优化的影响,请使用other模式。一开始并不需要建立虚拟机硬盘,因为每次编译内核,脚本都会动态生新的虚拟机硬盘,虚拟机硬盘是由一个RAW文件转换的,该文件中已经格式化成了ext3文件系统,安装了grub引导器,编译脚本会自动挂载文件系统将新内核文件复制到了相应目录下,以便grub引导。

深度截图_选择区域_20171225154513

深度截图_选择区域_20171225154628深度截图_选择区域_20171225154831深度截图_选择区域_20171225155014


下载代码

github.com是个全球性代码托管网站,上面有数千万记的开源项目,我的lmosem也托管在上面,只要clone到本地就行了。程序员间“开撕”是常有的事,经常是大水冲了龙王庙,有github就不同了,可以先各自报上github账号,互查一下,然后“开撕”也不迟,当然clone lmosem代码如下操作:

git clone https://github.com/lmnos/lmosem.git

编译

lmosem代码clone到本地之后,就可以编译了,使用“cd lmosem/”切到lmosem目录下,然后“make vboxtest”,就可以坐看结果了。  

深度截图_deepin-terminal_20171226095658

深度截图_deepin-terminal_20171226100005

深度截图_选择区域_20171225160433

安装

如果你觉得虚拟机毕竟是虚拟机,没有物理机来的过瘾,你完全可以把lmosem安装到你的pc上,你安装了LINUX,一定会有grub吧。说点题外话,为什么要用grub引导,一是,grub引导很好用,支持各种现有的文件系统;二是,自己写引导不能识别现有文件系统,要用独立的分区,然后宿主系统又不支持独立分区直接写入lmosem内核文件,这给编译测试带了困难,好了回过头来安装lmosem。

1.make release 建立lmosem内核文件

2.从release目录下复制lmosemkrnl.eki文件到linux的boot目录

3.修改/boot/grub/目录下的grub.cfg,加入如下代码,保存(需要root权限) 

menuentry 'LMOSEM' {

       insmod part_msdos

       insmod ext2

       set root='hd0,msdos4'  #注意boot目录挂载的分区,这是我机器上的情况

       multiboot2 /boot/lmosemkrnl.eki

       boot

       }

深度截图_选择区域_20171226100758

4.重启计算机就可以看到LMOSEM启动选项了



  • yason.li yason.li
    2018-03-13

    LMOSEM已经支持X86啦,感谢老大!!!貌似我抢到了沙发!!!


    4 回复
  • Jacklli Jacklli
    2018-03-13

    非常强大!

    0 回复
  • Brucee Brucee
    2018-03-13

    Mark.

    0 回复
  • 看来只能是地板了

    1 回复
  • chengang chengang
    2018-03-13

    确实相当不错!!!

    1 回复
  • EricJiang EricJiang
    2018-03-14

    留名


    1 回复
  • a133333 a133333
    2018-04-07

    我隔着屏幕都已经听到


    0 回复