ฉันกำลังพยายามค้นหาวิธีที่เร็วที่สุดในการย้ายข้อมูลขนาดใหญ่จากเคอร์เนลไปยังพื้นที่ผู้ใช้ ตอนนี้ฉันกำลังลองใช้การดีบักของ GKH แต่ฉันกำลังดิ้นรนเพื่อให้ blob wrapper ทำงาน
นี่คือสิ่งที่ฉันได้รับ:
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/debugfs.h>
MODULE_AUTHOR("CREED0R");
MODULE_LICENSE("GPL");
struct dentry *dfs;
struct debugfs_blob_wrapper *myblob;
int my_init(void)
{
int stats[10];
int i;
for (i = 0; i < 10; i++)
stats[i] = i;
myblob->data = (void *) stats;
myblob->size = (unsigned long) 10;
dfs = debugfs_create_blob("test", 0644, NULL, myblob);
if (dfs == NULL) {
printk("Could not create debugfs blob\n");
return 1;
}
printk("DebugFS file created\n");
return 0;
}
void my_exit(void)
{
printk("DebugFS file deleted\n\n");
debugfs_remove(dfs);
}
module_init(my_init);
module_exit(my_exit);
มันสร้างขึ้น แต่ถ้าฉันรัน insmod อินสแตนซ์ qemu ของฉันก็ตายอย่างน่ากลัว
ไม่แน่ใจว่าทำไมถึงเป็นเช่นนั้น ฉันพลาดอะไรไป?
my_init()
และ BTW การส่งคืนค่าบวกจากmy_init()
เมื่อเกิดข้อผิดพลาดอาจไม่ใช่ความคิดที่ดี IIRC ระบบจะถือว่าmy_init()
สำเร็จในกรณีนี้ วิธีปฏิบัติทั่วไปคือการส่งคืนรหัสข้อผิดพลาดเชิงลบ เช่น-EINVAL
,-ENOMEM
เป็นต้น - person Eugene   schedule 03.02.2013