Hi!

I currently try to create a simple linux driver (for test purposes) just like in [1] in D based on [2]. The main difficulty is to call register_chrdev. It expects an argument "fops" of type file_operations which can look like that in C:

static struct file_operations fops = {
        .read = device_read,
        .write = device_write,
        .open = device_open,
        .release = device_release
};

device_read and so on are functions. Originally, file_operations has much more fields and it's possible to omit unused fields.

What I tried so far: I declared "register_chrdev" as follows:

extern (C):
int register_chrdev (uint major, char *name, file_operations *fops);

My try for the translation of file_operations looks like that:

struct file_operations {
        int function() open;
        int function() release;
};

In init_module() I have the following code:

char[] DEVICE_NAME = "dtestdev";
file_operations fops;
fops.open = &device_open;
fops.release = &device_close;
Major = register_chrdev(0, std.string.toStringz(DEVICE_NAME), &fops);

The code compiles with some warnings, and if I try to insert it into the kernel, I get some messages in the kernel log.

WARNING: "_D3std6string9toStringzFAaZPa" [...../hello.ko] undefined!
WARNING: "_Dmodule_ref" [...../hello.ko] undefined!
WARNING: "_D15TypeInfo_Struct6__vtblZ" [...../hello.ko] undefined!
WARNING: "register_chrdev" [...../hello.ko] undefined!
WARNING: "_D3std6string12__ModuleInfoZ" [...../hello.ko] undefined!

Nov 14 21:12:39 eeepc1104 kernel: [17127.068990] hello: Unknown symbol _D3std6string12__ModuleInfoZ (err 0) Nov 14 21:12:39 eeepc1104 kernel: [17127.069613] hello: Unknown symbol register_chrdev (err 0) Nov 14 21:12:39 eeepc1104 kernel: [17127.070462] hello: Unknown symbol _D15TypeInfo_Struct6__vtblZ (err 0) Nov 14 21:12:39 eeepc1104 kernel: [17127.071359] hello: Unknown symbol _Dmodule_ref (err 0) Nov 14 21:12:39 eeepc1104 kernel: [17127.072352] hello: Unknown symbol _D3std6string9toStringzFAaZPa (err 0)

Any help greatly appreciated.

Greetings

Michael

[1] http://tldp.org/LDP/lkmpg/2.6/html/lkmpg.html#AEN680
[2] http://iainbuclaw.wordpress.com/2010/05/22/writing-a-linux-kernel-module-in-d/

Reply via email to