1

我正在做一个项目,旨在控制一个应该踢足球的双板机器人。所有程序都是用简单的 C++ 编写的,链接到各种共享库(例如 OpenCV、伺服电机控制器等)

该系统对性能至关重要,应该是 95% 的硬实时,因此 Xenomai 补丁已应用于内核。不幸的是,关于线程切换延迟的基准测试表明,系统在所有情况下都不能满足硬实时需求。朵朵为了这个作品。我们可以通过将所有东西移植到内核空间来提高性能。

我从未开发过内核模块......只是阅读一些文档。似乎与常规用户空间程序不同。甚至构建系统也不同。

我的问题:这是否可以将完全用 C++ 编写、广泛使用共享库和 POSIX 线程的常规用户空间应用程序转换为内核模块?

如果答案是否定的,我将静态重新编译所有库并改用 C ......这将是有害且耗时的过程。

4

1 回答 1

3

首先,如果你想要硬实时,你应该使用硬实时系统,而不是 Linux。Linux 可以做一些实时的,但不能推断出最后期限的硬性保证。

但是要回答您的问题,不,不可能将 C++ 应用程序转换为内核模块,因为内核缺少使之成为可能的 C++ 运行时。在内核空间中你甚至不能使用 libc,更不用说 libstdc++了。

静态重新编译所有库不会更好。首先,这意味着您最终必须将 libc 移植到内核空间,这是不可行的(因为 libc 通过系统调用调用内核本身)。此外,您通常希望将进入内核的代码量(并在它失败时连同它一起关闭整个系统)尽可能少。

如果听起来更像您的应用程序需要重新设计以限制线程延迟(通过使用更轻的线程库,或者通过减少线程切换的数量)。无论如何,如果您在内核中使用线程,您仍然会有延迟——您可能获得的唯一好处就是没有系统调用。

所以我的猜测是你需要考虑设计而不是把东西移到内核中。

于 2012-08-30T01:36:16.923 回答