Michael Kremser <mkspamx-use...@yahoo.de> writes: > 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.
This looks like you don't have druntime or phobos linked into your module code. Does the original C example work for you?