用户程序实时上传

在Zulip上的该需求

描述

  • 编写用户程序时,很多时候时候是不需要重新编译内核的,但是目前的情况是在更新用户程序而未改变内核代码时也需要重启DragonOS重新编译整个项目,对于调试用户程序比较低效率。

dadk服务

  • 目前DragonReach能够支持开机自启动一些服务,可以考虑编写一个dadk服务在DragonOS后台运行,然后可以通过tftp协议传输文件。
  • 在更改用户程序代码后,使用dadk命令来编译上传新的二进制文件而无需重新启动DragonOS。

dadk程序

  • 拓展当前dadk,可以使用类似dadk update之类的命令来与dadk服务进行网络通信,更新DragonOS上的用户程序。

参考#465,我使用rs-tftpd来实现这个需求,但遇到了问题

DragonOS在read UdpSocket时,会在这里检查rx_buffer是否为空

我测试的时候,没有一次是通过检查的。我就在read TcpSocket时添加相同的调试输出,使用http_server来测试,却出现了一次检查成功,我还没有搞清楚这是为什么,希望有人能来解答

如果不检查的话就会阻塞在那里。这个相关可以去看看smoltcp那里的实现。DragonOS目前依赖的是0.9.1版本的

嗯,我的意思是,UdpSocket poll后,并没有数据被写入到rx_buffer

没收到应该就不会写入哈哈哈。这里对应对接到的是smoltcp的phy层。如果你使用的是virtio网卡,你可以看看virtio驱动有没有收到数据。(我没记错的话我是开了qemu的virtio的日志的。)如果那里没动静的话,有可能是你qemu端口转发的问题。
如果有qemu日志动静但是read没反应,可以先检查一下网卡中断里面更新socket状态的逻辑

1 个赞

image
确实有日志,这里看起来没问题,那应该是没有做好udp的支持