标签: rtai

将用户空间代码移植到内核空间

我有一个主要用C编写的大系统,到目前为止在用户空间中运行.现在我需要将代码编译为内核模块.为此,AFAIK,我应该至少重写代码和替换功能为malloc,calloc,free,printf与内核的等同物,因为这些都是仅仅用户空间的功能.但问题是,我没有系统中使用的某些定制库的源代码,而且这些库malloc在其函数内调用等.所以,基本上,我可能需要重新实现整个库.

现在的问题是:如果我将自己的实现编写malloc为包装器kmalloc,它会是一个非常脏的黑客,如下所示:

void *malloc(size_t size) {
    return kmalloc(size, GFP_USER);
}
Run Code Online (Sandbox Code Playgroud)

然后将此实现链接到系统代码,这将消除模块错误中的所有未知符号.

实际上我认为这将是一个常见的问题,而且有人已经写过这样的kmalloc包装,但是我已经在谷歌上搜索了几天而没有发现任何有用的东西.

编辑:这样做的原因是我所说的系统是在VxWorks实时操作系统上运行的实时应用程序,现在我们想将它移植到Linux RTAI上,其中应用程序主要在内核空间中运行.但我想有可能在用户空间中实时拥有,所以,我应该像迈克建议的那样,将代码分离到内核和用户空间部分,并在它们之间与共享内存进行通信.

c linux linux-kernel rtai

8
推荐指数
1
解决办法
1670
查看次数

给定浮点数时如何避免FPU?

嗯,这根本不是一个优化问题.

我正在写一个(现在)简单的Linux内核模块,我需要找到一些位置的平均值.这些位置存储为浮点(即float)变量.(我是整个事情的作者,所以我可以改变它,但我宁愿保持漂浮的准确性,如果我可以避免它,也不参与其中).

现在,这些位置值仅存储(或至少用于)内核中的存储空间.一个用户应用程序写入这些数据(通过共享内存(我正在使用RTAI,所以我在内核和用户空间之间共享内存))和其他人从中读取数据.我假设浮点变量的读写不会使用FPU,所以这是安全的.

安全的,我的意思是避免在内核中使用FPU,更不用说某些系统甚至可能没有FPU.我不会使用kernel_fpu_begin/end,因为这可能会破坏我的任务的实时性.

现在在我的内核模块中,我真的不需要太多的精度(因为无论如何平均位置),但我需要它说0.001.我的问题是,如何在不使用FPU的情况下将浮点数转换为整数(原始数字的1000倍)?

我想过从float的位模式中手动提取数字,但我不确定这是不是一个好主意,因为我不确定endian-ness如何影响它,或者即使所有架构中的浮点都是标准的.

c floating-point fpu linux-kernel rtai

3
推荐指数
2
解决办法
2220
查看次数

标签 统计

c ×2

linux-kernel ×2

rtai ×2

floating-point ×1

fpu ×1

linux ×1