是否可以在 CLion 中开发 linux 内核模块?
Is it possible to develop linux kernel module in CLion?
我想在 CLion 中开发一些小的 linux 内核模块。例如,我要编译这些文件:
stack.h:
#ifndef _LL_STACK_H
#define _LL_STACK_H
#include <linux/list.h>
typedef struct stack_entry {
struct list_head lh;
void *data;
} stack_entry_t;
stack_entry_t* create_stack_entry(void *data);
void delete_stack_entry(stack_entry_t *entry);
void stack_push(struct list_head *stack, stack_entry_t *entry);
stack_entry_t* stack_pop(struct list_head *stack);
#define stack_empty(stack) list_empty((stack))
#define STACK_DATA(stack_entry, data_ptr_type) \
((data_ptr_type)(stack_entry)->data)
#define STACK_DATA_RESET(stack_entry, new_data) \
do { \
(stack_entry)->data = new_data; \
} while(0)
#endif //_LL_STACK_H
main.c:
#include <stdio.h>
#include "stack.h"
int main() {
printf("hello");
return 0;
}
是否可以配置 CMakeLists.txt 来完成我的任务?我尝试 add 一些目录(linux、包含、内核),但我没有成功。
是的,是的。但是你需要编写构建内核模块的make文件。
更新 1:
我推荐使用 QtCreator 编写 linux 内核模块。
看我的 manual
更新二:
我也推荐eclipse cdt。
参见日食 manual about how to prepare it for linux kernel.
我通过 clion 探查 linux 内核的方法是:
- 使用截获的构建
为内核创建compile_commands.json
- 使用 ruby 脚本将
compile_commands.json
转换为友好的 clion CMakeLists.txt
这允许代码导航和合理的编辑体验。
如果您只是在谈论适当的 auto-suggestions 但可以自己调用“make”,那么请检查此演示设置:https://gitlab.com/phip1611/cmake-kernel-module
这是https://gitlab.com/christophacham/cmake-kernel-module/-/blob/master/CMakeLists.txt的简化版(我分叉了)。
我将它用于:out-of-tree 内核模块开发(独立开发)以及 in-tree 开发。
始终确保安装了最新的内核头文件!
$ sudo apt install kernel-headers-$(uname -r)
我想在 CLion 中开发一些小的 linux 内核模块。例如,我要编译这些文件:
stack.h:
#ifndef _LL_STACK_H
#define _LL_STACK_H
#include <linux/list.h>
typedef struct stack_entry {
struct list_head lh;
void *data;
} stack_entry_t;
stack_entry_t* create_stack_entry(void *data);
void delete_stack_entry(stack_entry_t *entry);
void stack_push(struct list_head *stack, stack_entry_t *entry);
stack_entry_t* stack_pop(struct list_head *stack);
#define stack_empty(stack) list_empty((stack))
#define STACK_DATA(stack_entry, data_ptr_type) \
((data_ptr_type)(stack_entry)->data)
#define STACK_DATA_RESET(stack_entry, new_data) \
do { \
(stack_entry)->data = new_data; \
} while(0)
#endif //_LL_STACK_H
main.c:
#include <stdio.h>
#include "stack.h"
int main() {
printf("hello");
return 0;
}
是否可以配置 CMakeLists.txt 来完成我的任务?我尝试 add 一些目录(linux、包含、内核),但我没有成功。
是的,是的。但是你需要编写构建内核模块的make文件。
更新 1: 我推荐使用 QtCreator 编写 linux 内核模块。 看我的 manual
更新二: 我也推荐eclipse cdt。 参见日食 manual about how to prepare it for linux kernel.
我通过 clion 探查 linux 内核的方法是:
- 使用截获的构建 为内核创建
- 使用 ruby 脚本将
compile_commands.json
转换为友好的 clionCMakeLists.txt
compile_commands.json
这允许代码导航和合理的编辑体验。
如果您只是在谈论适当的 auto-suggestions 但可以自己调用“make”,那么请检查此演示设置:https://gitlab.com/phip1611/cmake-kernel-module 这是https://gitlab.com/christophacham/cmake-kernel-module/-/blob/master/CMakeLists.txt的简化版(我分叉了)。
我将它用于:out-of-tree 内核模块开发(独立开发)以及 in-tree 开发。
始终确保安装了最新的内核头文件!
$ sudo apt install kernel-headers-$(uname -r)