11

我想在 CLion 中开发一些小的 linux 内核模块。例如,我想编译这些文件:

堆栈.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

主.c:

#include <stdio.h>
#include "stack.h"

int main() {
    printf("hello");
    return 0;
}

是否可以配置CMakeLists.txt来完成我的任务?我尝试添加一些目录(linux、include、内核),但没有成功。

4

3 回答 3

7

是的。但是您需要编写 make 文件来构建内核模块。

更新 1: 我推荐 QtCreator 来编写 linux 内核模块。看我的手册

更新 2: 我也推荐eclipse cdt有关如何为 linux 内核准备它的信息,请参阅 eclipse手册。

于 2015-02-24T08:55:51.347 回答
1

我用来通过 clion 探索 linux 内核的方法是:

  • compile_commands.json使用拦截的构建为内核创建一个
  • 使用 ruby​​ 脚本转换compile_commands.json为 clion 友好CMakeLists.txt

这允许代码导航和合理的编辑体验。

有关更多详细信息,请参阅https://github.com/habemus-papadum/kernel-grok

于 2017-11-08T14:27:50.467 回答
0

如果您只是在谈论正确的自动建议,但可以自己调用“make”,那么请检查此演示设置:https ://gitlab.com/phip1611/cmake-kernel-module 这是https:// 的简化版本gitlab.com/christophacham/cmake-kernel-module /-/blob/master/CMakeLists.txt (我分叉了它)。

我将它用于:树外内核模块开发(独立开发)和树内开发。

始终确保安装了最新的内核头文件! $ sudo apt install kernel-headers-$(uname -r)

于 2020-10-23T21:31:18.527 回答