wklaczynski Napisano Czerwiec 1, 2005 Zgłoszenie Share Napisano Czerwiec 1, 2005 Mam mały problemik, chcę zrobić sobie systemik plików do mojej komórki, mam wszystkie biblioteki aby z niej czytać, ale mam problem od strony VFS, mimo wszystkich opisów i nawet próbowałem jakieś przykłady, a poniższy kod jest także ściągawką jakiegoś przykładu aby tylko jakoś ruszyć, mam problem, po wykonaniu opisanych czynności, mimo że moduł daje się zamontować za pomocą modprobe nie mam mojego systemu plików, mount -t siemens siemens /tmp/siemens wrzeszczy o braku systemu plików, co robi nie tak, examples był identyczny tylko nazwa inna i także nic nie dawał. mój sposób na instalacje w makefile ARGET = siemens OBJS = siemens.o MDIR = fs/ EXTRA_CFLAGS = -DEXPORT_SYMTAB CURRENT = $(shell uname -r) KDIR = /lib/modules/$(CURRENT)/build PWD = $(shell pwd) DEST = /lib/modules/$(CURRENT)/kernel/$(MDIR) ifneq (,$(findstring 2.4.,$(CURRENT))) install: su -c "cp -v $(TARGET).o $(DEST) && /sbin/depmod -a && modprobe siemens" else install: su -c "cp -v $(TARGET).ko $(DEST) && /sbin/depmod -a && modprobe siemens" endif montowanie dysku mount -t siemens siemens /tmp/siemens plik sismens.c #include <linux/kernel.h> #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/mount.h> #include <linux/list.h> MODULE_DESCRIPTION("System plików SIEMENS"); MODULE_AUTHOR("Waldemat Kłaczyński ([email protected])"); MODULE_LICENSE("$LICENSE$"); /* do nothing */ struct inode_operations siemens_iops = { NULL, }; struct file_operations siemens_fops = { NULL, }; /* This is called at mount time */ struct inode *siemens_get_inode(struct super_block *sb, int mode, dev_t dev) { struct inode * inode; /* only succeed for the root dir */ if ((mode & S_IFMT) != S_IFDIR) return NULL; if (!(inode = new_inode(sb))) return NULL; inode->i_mode = mode; inode->i_op = &siemens_iops; inode->i_fop = &siemens_fops; inode->i_nlink++; /* dirs have nlink >= 2 minimum */ return inode; } static struct super_operations siemens_ops = { .statfs = simple_statfs, .drop_inode = generic_delete_inode, }; int siemens_fill_sb(struct super_block * sb, void * data, int silent) { struct inode * inode; struct dentry * root; sb->s_op = &siemens_ops; inode = siemens_get_inode(sb, S_IFDIR | 0755, 0); root = d_alloc_root(inode); if (!root) { iput(inode); return -ENOMEM; } sb->s_root = root; return 0; } struct super_block *siefs_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, void *data) { return get_sb_nodev(fs_type, flags, data, siemens_fill_sb); } static struct file_system_type siemens_fs_type = { "siemens", FS_REQUIRES_DEV /* | FS_IBASKET */, /* ibaskets have unresolved bugs */ siefs_get_sb, NULL }; int __init init_siefs_fs(void) { int err; err = register_filesystem(&siemens_fs_type); if (err) printk("siemens: failed to register filesystem\n"); else { } return err; } EXPORT_NO_SYMBOLS; static int siemens_init_module(void) { printk( KERN_DEBUG "Module siemens init\n" ); return init_siefs_fs(); } static void siemens_exit_module(void) { printk( KERN_DEBUG "Module siemens exit\n" ); unregister_filesystem(&siemens_fs_type); } module_init(siemens_init_module); module_exit(siemens_exit_module); Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się