可以說,我有一個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