如何在kernel module中使用sqlite库

以下是我的尝试:

1.使用sqlite-amalgamation的代码直接在源码目录里Include进去:

test.c:

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include "sqlite3.h"

static int __init  test_init(void)
{
    sqlite3 *db;
    char *em =0;
    int rc;

    rc = sqlite3_open("mdb", &db);
    if(rc){
        printk(KERN_INFO "%s",em);
        sqlite3_close(db);
        return(1);
    }

    printk(KERN_INFO "success....................................................... \n");
    return 0;
}

static void __exit test_exit(void){
    return ; 
}

module_init(test_init);
module_exit(test_exit);

Makefile:

obj-m += sqltest.o
sqltest-objs := sqlite3.o test.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

2.当然这样是不可行的,因为sqlite源码中大量使用了 stdio.h 等用户空间库。

我google搜了一下,就看到有一个人和我的问题一样,有一个人回复他说使用sqlite的embedded mode 。 但是我并没有在哪里看见sqlite还有这个模式。

3.其实我觉得以上的思路挺不靠谱的,我认为还有一种要在kernel module中使用数据库的方案,就是使用字符设备实现kernel-space和user-space的通信(还未深入学习,只是知道有这么一种方法,感觉应该可行)。

阅读 3.2k
1 个回答

能把你一定要在内核空间使用数据库的理由给出来?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题