Hinweise zum BS2 Übungszettel 3 =============================== Kernel-Modul bauen: - Makros module_init, module_exit, MODULE_DESCRIPTION, MODULE_AUTHOR, MODULE_LICENSE $ make modules $ make modules_install (als root) Loop-Device einrichten: $ dd if=/dev/zero bs=512 count=1024 of=image $ losetup /dev/loop0 image (als root) Dateisystem registrieren - register_filesystem() - struct file_system_type - struct super_block (include/linux/fs.h) - blocksize setzen (sb_set_blocksize()) - Superblock vom Device lesen (sb_bread()) - private daten in s_fs_info - s_maxbytes (max. Dateigröße) setzen - s_op setzen - s_root: root-Inode laden/anlegen, dentry bauen (d_alloc_root()) - struct super_operations - wichtige Funktionen: .read_inode (leer, wenn keine On-Disk-Inodes) .write_inode (leer, wenn keine On-Disk-Inodes) .delete_inode (clear_inode()) .write_super (mark_buffer_dirty(), sync_dirty_buffer()) .put_super (brelse() nach sync) .statfs (struct kstatfs ausfüllen (include/linux/statfs.h) - struct inode - entweder in read_inode() oder bei manuellem Konstruieren i_op und i_fop setzen - struct inode_operations - wichtige Funktionen: - für Directories: .create .lookup .unlink .mkdir .rmdir .rename - für Files: .truncate struct file_operations - wichtige Funktionen - für Directories: .readdir .read (Fehler zurückgeben) .fsync - für Files: .llseek .read .write .ioctl (hier den eigenen Ioctl einbauen) .fsync struct dentry: - zu finden in include/linux/dcache.h - Sonstiges: - eigene Blockverwaltung (frei/belegt) - eigene Verzeichniseintrags-struct (auch physisch auf Device) - ggf. physische Inode-struct