如何在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的通信(还未深入学习,只是知道有这么一种方法,感觉应该可行)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
能把你一定要在内核空间使用数据库的理由给出来?