移植DragonOS到公有云:调试思路分享(1)

前言

最近在尝试把DragonOS移植到腾讯云/阿里云。然后由于云上的一些环境与本地的虚拟机,以及我本地的openstack不太一致。有些bug必须在云上才能复现得出来。

本文旨在简单介绍如何在腾讯云上导入镜像&启动云服务器&让dragonos停留在报错的地方。

首先特别感谢@黄铭涛,本文内容主要是他教我的。

在云上创建一台专门用于打包的虚拟机

由于网络带宽的问题,为了提高效率,我们在云上专门开一台虚拟机,装好dragonos的编译环境,并导出为系统镜像保存。(这个方法在阿里云上面也是一样的)

接着每次要调试的时候,先启动这个打包用的机器(简称“打包机”)。在打包机上面挂载对象存储(腾讯云用cosfs,阿里云的也有对应的工具)

使用抢占式实例并设置按流量计费,能比较省钱。

修改代码的head.S里面描述的分辨率以适配云平台的vnc显示

由于DragonOS目前不能自动切换vnc分辨率,因此需要再kernel/arch/x86_64/asm/head.S里面的这里,修改参数,使得云端的vnc连接能够显示更大的画面。对于腾讯云,参数如下:

image

创建DragonOS镜像

接着,本地修改代码,编译之后,把本地的bin/kernel/kernel.elf通过scp传到打包机里面的DragonOS/bin/kernel/kernel.elf 接着,在打包机运行make write_diskimage,就能生成磁盘镜像bin/disk-x86_64.img

接着在打包机上面,把img拷贝到对象存储里面。

导入镜像

在腾讯云的CVM的镜像页面,导入镜像。注意展开选项卡,选择“强制导入”。

上图中,镜像文件的url,就是对应的COS存储桶里面,你传上去的那个img文件的临时链接。

接着等待几分钟(必须吐槽一下,这个有点久,2GB镜像需要5~6分钟,太慢了,严重影响我调试)

创建实例

image

创建的时候选择抢占式实例,按流量计费就行。

登录

接着登录实例,选择vnc登录(因为目前我们还在移植,还没支持ssh登录云平台)。就能看到内核打印的日志了。

如何让DragonOS停在报错的地方?

答案很简单,跟本地差不多。关中断+loop{}就行.

云端跟本地很不一样的地方就是,他没法保存串口输出。太难顶了,有时候画面一闪而过。所以我们目前的解决方案就是,手机慢动作录像或者是连拍屏幕,然后“盯帧”,接着本地修改代码,重复上述流程,直到解决问题。

1 个赞