我有一个大的系统,主要用C语言编写,到目前为止一直在用户空间中运行。现在我需要将代码编译为内核模块。为此,AFAIK,我应该至少重写代码和替换功能作为malloc
,calloc
,free
,printf
与他们的内核当量,因为这些都是仅仅用户空间的功能。但问题是,我没有系统中使用的一些定制库的源代码,这些库在它们的函数内调用malloc
等。所以,基本上,我可能需要重新实现整个图书馆。将用户空间代码移植到内核空间
现在的问题:会是一个非常肮脏的黑客,如果我写我自己的实施malloc
作为一个包装周围kmalloc
,这样的事情:
void *malloc(size_t size) {
return kmalloc(size, GFP_USER);
}
然后这个实现链接到系统代码,这将消除模块中的所有未知符号错误。
其实我认为这将是一个普遍的问题,有人会已经写这样的kmalloc的包装,但我一直在google搜索了两天,现在,没有发现任何有用的。
编辑:这样做的原因是我所说的系统是一个在VxWorks实时操作系统上运行的实时应用程序,现在我们要将它移植到Linux RTAI上,其中应用程序主要在内核中运行空间。但我想在用户空间中也有实时的可能性,因此,我应该按照Mike的建议做,并将代码分离到内核和用户空间部分,并使用共享内存在它们之间进行通信。
我刚刚看到[这个破解](http://stackoverflow.com/a/14728092/912144)对于gcc可能对你有用。 – Shahbaz 2013-02-08 12:32:10
通常情况下,人们试图将内容从内核移出,而不是相反。我个人的经验是,如果你认为你需要制作一个你的程序的内核模块,那么你可能做错了。 – 2013-02-08 12:34:35
@JoachimPileborg他可能会认为它会在内核空间更快 – Ulterior 2013-02-08 12:37:07