如何在kernel module中使用sqlite库

发布于 2022-09-04 12:19:27 字数 1177 浏览 31 评论 0

以下是我的尝试:

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的通信(还未深入学习,只是知道有这么一种方法,感觉应该可行)。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

‖放下 2022-09-11 12:19:27

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文