Saya mencoba menemukan cara tercepat untuk memindahkan data besar dari kernel ke ruang pengguna. Saat ini saya sedang mencoba debugf GKH, tetapi saya kesulitan untuk membuat pembungkus gumpalan berfungsi.
Inilah yang saya dapatkan sejauh ini:
#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);
Itu dibangun, tetapi jika saya menjalankan insmod, instance qemu saya mati secara mengerikan.
Tidak yakin kenapa seperti itu. Apa yang saya lewatkan?
my_init()
. Dan BTW, mengembalikan nilai positif darimy_init()
pada kesalahan mungkin bukan ide yang baik. IIRC, sistem akan menganggap bahwamy_init()
berhasil dalam kasus ini. Praktik yang umum adalah mengembalikan kode kesalahan negatif, misalnya-EINVAL
,-ENOMEM
, dll. - person Eugene   schedule 03.02.2013