我有一个主要用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上,其中应用程序主要在内核空间中运行.但我想有可能在用户空间中实时拥有,所以,我应该像迈克建议的那样,将代码分离到内核和用户空间部分,并在它们之间与共享内存进行通信.