Table des matières
如何写一个简易的文件系统(4):umount
Maison php教程 php手册 如何写一个简易的文件系统(4):umount

如何写一个简易的文件系统(4):umount

Jun 13, 2016 am 08:43 AM
android

如何写一个简易的文件系统(4):umount

哈哈,时隔几年,又从磁盘深处找出了原始代码myfs.zip。
-----------------------------------------无敌分割线------------------------------

最近准备从新写一个基于block设备的小文件系统来完成这个系列的博客。 这次是基于3.10的kernel来写的。可能跟前3篇稍有差异。
umount就是将文件系统卸载掉。那么卸载文件系统需要做什么事情呢?需要将所有的数据全部更新的设备上(不管是文件数据 ,还是文件系统数据)
以后我会将文件数据称为media data,而将文件系统数据(inode,superblock等等)称为meta data。
前一篇的mount的fill super中看到下面一行代码:
sb->s_op = &dfs_sops;
就是给sb一个super block的操作结构体。当然如果你不给的话,暂时不影响umount操作,但是所有的数据都不会更新设备上去。
const struct super_operations dfs_sops = {
.alloc_inode = dfs_alloc_inode,
.put_super = dfs_put_super,
.sync_fs = dfs_sync_fs,
};
除了mount过程中要用到的alloc_inode之外,这边又添加了两个函数,一个叫put_super,另外一个叫sync_fs.
其中put_super用于更新设备上的super block,而sync_fs用于同步文件系统,也就是将所有的dirty文件全部更新到设备上去。
暂时我们还没有做好创建/更新文件的准备,所以这边只实现了put_super函数。
static void dfs_put_super(struct super_block *sb)
{
struct dfs_sb_info *sbi = DFS_SB(sb);


dfs_trace("%s\n", __func__);
if (sbi->dirty)
return dfs_write_super(sb);
kfree(sbi);
}


static int dfs_sync_fs(struct super_block *sb, int wait)
{
dfs_trace("%s\n", __func__);
dfs_put_super(sb);
/* todo: sync files as well*/
return 0;
}

static void dfs_write_super(struct super_block *sb)
{
struct dfs_sb_info *sbi = DFS_SB(sb);
struct buffer_head *bh;
struct dfs_super_block ds;

dfs_trace("%s\n", __func__);
#defineDFS_SB_BLOCK 0
if (!(bh = sb_bread(sb, DFS_SB_BLOCK)))
return;
/* update super block */
ds.inode_count = sbi->inode_count;
ds.block_size = sbi->block_size;
ds.total_blocks = sbi->total_blocks;
ds.free_blocks = sbi->free_blocks;
ds.used_blocks = sbi->used_blocks;
ds.bad_blocks = sbi->bad_blocks;
ds.inode_size = sbi->inode_size;
ds.magic = sbi->magic;
ds.max_inode_no = sbi->max_inode_no;
memcpy((void*)(bh->b_data), &ds, sizeof(struct dfs_super_block));
mark_buffer_dirty(bh);
sync_dirty_buffer(bh);
return brelse(bh);
}

root:/ # mount -t dfs /dev/block/bootdevice/by-name/oem /oem
mount -t dfs /dev/block/bootdevice/by-name/oem /oem
root/ # mount
rootfs / rootfs ro,seclabel 0 0
tmpfs /dev tmpfs rw,seclabel,nosuid,relatime,mode=755 0 0
devpts /dev/pts devpts rw,seclabel,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,seclabel,relatime 0 0
selinuxfs /sys/fs/selinux selinuxfs rw,relatime 0 0
debugfs /sys/kernel/debug debugfs rw,seclabel,relatime 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
none /sys/fs/cgroup tmpfs rw,seclabel,relatime,mode=750,gid=1000 0 0
tmpfs /mnt tmpfs rw,seclabel,relatime,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
adb /dev/usb-ffs/adb functionfs rw,relatime 0 0
/dev/block/dm-0 /system ext4 ro,seclabel,relatime,discard,data=ordered 0 0
/dev/block/bootdevice/by-name/cache /cache ext4 rw,seclabel,nosuid,nodev,relatime,data=ordered 0 0
/dev/block/bootdevice/by-name/persist /persist ext4 rw,seclabel,nosuid,nodev,relatime,data=ordered 0 0
/dev/block/bootdevice/by-name/dsp /dsp ext4 rw,seclabel,nosuid,nodev,relatime,data=ordered 0 0
/dev/block/bootdevice/by-name/modem /firmware vfat ro,context=u:object_r:firmware_file:s0,relatime,uid=1000,gid=1000,fmask=0337,dmask=0227,codepage=437,iocharset=iso8859-1,shortname=lower,errors=remount-ro 0 0
tmpfs /storage tmpfs rw,seclabel,relatime,mode=755,gid=1000 0 0
/dev/block/dm-1 /data ext4 rw,seclabel,nosuid,nodev,relatime,discard,noauto_da_alloc,data=ordered 0 0
/dev/fuse /mnt/runtime/default/emulated fuse rw,nosuid,nodev,noexec,noatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
/dev/fuse /storage/emulated fuse rw,nosuid,nodev,noexec,noatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
/dev/fuse /mnt/runtime/read/emulated fuse rw,nosuid,nodev,noexec,noatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
/dev/fuse /mnt/runtime/write/emulated fuse rw,nosuid,nodev,noexec,noatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
/dev/block/bootdevice/by-name/oem /oem dfs rw,relatime 0 0
root:/ # umount /oem
umount /oem

尝试cd /oem的时候发现一个问题。
root/ # cd oem
cd oem
/system/bin/sh: cd: /oem: Not a directory

原来内核没有实现lookup功能,添加如下
static struct dentry *dfs_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags)
{
return NULL;//暂时为空,没啥好找的。
}

const struct inode_operations dfs_inode_operations = {
.getattr = dfs_getattr,
.lookup = dfs_lookup,
};

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Un nouveau rapport fournit une évaluation accablante des rumeurs de mise à niveau des appareils photo des Samsung Galaxy S25, Galaxy S25 Plus et Galaxy S25 Ultra Un nouveau rapport fournit une évaluation accablante des rumeurs de mise à niveau des appareils photo des Samsung Galaxy S25, Galaxy S25 Plus et Galaxy S25 Ultra Sep 12, 2024 pm 12:23 PM

Un nouveau rapport fournit une évaluation accablante des rumeurs de mise à niveau des appareils photo des Samsung Galaxy S25, Galaxy S25 Plus et Galaxy S25 Ultra

Le Samsung Galaxy S25 Ultra fuit dans les premières images de rendu avec des rumeurs de modifications de conception révélées Le Samsung Galaxy S25 Ultra fuit dans les premières images de rendu avec des rumeurs de modifications de conception révélées Sep 11, 2024 am 06:37 AM

Le Samsung Galaxy S25 Ultra fuit dans les premières images de rendu avec des rumeurs de modifications de conception révélées

IFA2024 | Le NXTPAPER 14 de TCL n'égalera pas la Galaxy Tab S10 Ultra en termes de performances, mais il lui correspond presque en taille IFA2024 | Le NXTPAPER 14 de TCL n'égalera pas la Galaxy Tab S10 Ultra en termes de performances, mais il lui correspond presque en taille Sep 07, 2024 am 06:35 AM

IFA2024 | Le NXTPAPER 14 de TCL n'égalera pas la Galaxy Tab S10 Ultra en termes de performances, mais il lui correspond presque en taille

Vivo Y300 Pro contient une batterie de 6 500 mAh dans un boîtier mince de 7,69 mm Vivo Y300 Pro contient une batterie de 6 500 mAh dans un boîtier mince de 7,69 mm Sep 07, 2024 am 06:39 AM

Vivo Y300 Pro contient une batterie de 6 500 mAh dans un boîtier mince de 7,69 mm

Un nouveau rapport fournit une évaluation accablante des rumeurs de mise à niveau des appareils photo des Samsung Galaxy S25, Galaxy S25 Plus et Galaxy S25 Ultra Un nouveau rapport fournit une évaluation accablante des rumeurs de mise à niveau des appareils photo des Samsung Galaxy S25, Galaxy S25 Plus et Galaxy S25 Ultra Sep 12, 2024 pm 12:22 PM

Un nouveau rapport fournit une évaluation accablante des rumeurs de mise à niveau des appareils photo des Samsung Galaxy S25, Galaxy S25 Plus et Galaxy S25 Ultra

Le Samsung Galaxy S24 FE est annoncé pour un lancement moins cher que prévu en quatre couleurs et deux options de mémoire Le Samsung Galaxy S24 FE est annoncé pour un lancement moins cher que prévu en quatre couleurs et deux options de mémoire Sep 12, 2024 pm 09:21 PM

Le Samsung Galaxy S24 FE est annoncé pour un lancement moins cher que prévu en quatre couleurs et deux options de mémoire

Le Motorola Razr 50s se présente comme un nouveau budget pliable possible lors d'une fuite précoce Le Motorola Razr 50s se présente comme un nouveau budget pliable possible lors d'une fuite précoce Sep 07, 2024 am 09:35 AM

Le Motorola Razr 50s se présente comme un nouveau budget pliable possible lors d'une fuite précoce

Xiaomi Redmi Note 14 Pro Plus arrive en tant que premier smartphone Qualcomm Snapdragon 7s Gen 3 avec caméra Light Hunter 800 Xiaomi Redmi Note 14 Pro Plus arrive en tant que premier smartphone Qualcomm Snapdragon 7s Gen 3 avec caméra Light Hunter 800 Sep 27, 2024 am 06:23 AM

Xiaomi Redmi Note 14 Pro Plus arrive en tant que premier smartphone Qualcomm Snapdragon 7s Gen 3 avec caméra Light Hunter 800

See all articles