Re: Accessing filesystem from a KLD
Andrey Simonenko wrote : You got page fault from namei(), which is called from vn_open() to lookup a path name. namei() tries to obtain a reference on current directory for the current thread. This current directory (fd_cdir field) is NULL in your kthread. At this point a page fault in kernel address space is generated. You were right :) It works now. Can you change fd_cdir in kthread to rootvnode I don't know, haven't checked this yet. It works - and that's what NDISulator does. You also need to set fd_rdir. Thanks ! Mike Silbersack wrote : Ask [EMAIL PROTECTED] for his code that does exactly what you're asking for. :) I've looked at Damien's source, but AFAIK in his driver, the firmware is loaded from userspace through an ioctl call on the network interface. ___ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to [EMAIL PROTECTED]
Re: Accessing filesystem from a KLD
There's also a desire to provide an easier to use interface for drivers to load, for example, firmware. Is there an existing development ? I think I'll separate retreiving firmware from the filesystem in another KLD, so maybe I should contact the developers... ___ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to [EMAIL PROTECTED]
Re: Accessing filesystem from a KLD
Why not to use VOP_READ? See how it is called in dev/md.c:mdstart_vnode, check kern/vfs_vnops.c:vn_open_cred for information how to lookup a file name and open it. That's what I do, however I use the wrapper functions vn_open(), vn_rdwr() and so. But I have a problem, when I call this code : void *request_firmware(const char *name, size_t *size) { int flags; char filename[40]; struct nameidata nd; struct thread *td = curthread; [...] NDINIT(nd, LOOKUP, FOLLOW, UIO_SYSSPACE, filename[0], td); flags = FREAD; vn_open(nd, flags, 0, -1); [...] } from the KLD handler function (for testing) it works. But when I call it from a thread created by kthread_create() in another KLD, I have a page fault. A few printfs show that the call to vn_open() is responsible for the fault. I have not forgotten to lock Giant in my kernel thread. Any ideas ? Thanks, Sebastien ___ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to [EMAIL PROTECTED]
Accessing filesystem from a KLD
Hello, How can I access the filesystem from a kernel module ? In fact, I want my device driver to retreive a firmware image stored on the filesystem (instead of putting the firmware data in a static array at compile-time) for memory usage and legal concerns. Blocking calls are OK. I have searched the manpages and the web, but I haven't found anything relevant. Thanks, Sebastien ___ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to [EMAIL PROTECTED]