可以说,我有一个h和.c文件,最初是为内核空间。编译为用户空间相同的C代码以及内核空间
#ifndef __TREE_H__
#define __TREE_H__
/* #includes for kernel headers*/
struct tree_node_t{
int data;
struct tree_node_t *left;
struct tree_node_t *right;
};
struct tree{
int data;
struct tree_node_t *root;
};
void insert_node(struct tree *tree, int data);
#endif
可以说,相应的.c文件包含无效insert_node FN的定义,使用kmalloc()
,营造出tree_node并将其插入到一棵树。我能够使用Makefile编译代码来编译内核模块,因为.h/.c文件是内核模块的一部分。
现在,我想用在用户空间相同的数据结构和FNS为好。我需要使用新的用户空间中的特定的Makefile它负责更换像kmalloc
和kfree
与malloc
和free
而不是特定的内核调用编译它?我如何使用#ifdef #else #endif的各种组合,以便通过使用各自的make文件在用户空间和内核空间中编译这些文件。
PLS NTE:kmalloc/kfree
只是简单的例子来解释。文件包含其他内核特定的API,在编译用户空间中的文件时需要将其排除/替换。
听起来像一个XY问题。重构代码并将其分成不同的模块。如果它与内核函数深深交织在一起,将它用于用户空间也是一个坏主意。 – Olaf