Inhaltsverzeichnis
如何写一个简易的文件系统(4):umount
Heim 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,
};

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Neuer Bericht liefert eine vernichtende Einschätzung der angeblichen Kamera-Upgrades für das Samsung Galaxy S25, Galaxy S25 Plus und Galaxy S25 Ultra Neuer Bericht liefert eine vernichtende Einschätzung der angeblichen Kamera-Upgrades für das Samsung Galaxy S25, Galaxy S25 Plus und Galaxy S25 Ultra Sep 12, 2024 pm 12:23 PM

Neuer Bericht liefert eine vernichtende Einschätzung der angeblichen Kamera-Upgrades für das Samsung Galaxy S25, Galaxy S25 Plus und Galaxy S25 Ultra

Beim Samsung Galaxy S25 Ultra sind erste Renderbilder durchgesickert und Gerüchte über Designänderungen wurden enthüllt Beim Samsung Galaxy S25 Ultra sind erste Renderbilder durchgesickert und Gerüchte über Designänderungen wurden enthüllt Sep 11, 2024 am 06:37 AM

Beim Samsung Galaxy S25 Ultra sind erste Renderbilder durchgesickert und Gerüchte über Designänderungen wurden enthüllt

IFA 2024 | Das NXTPAPER 14 von TCL wird in der Leistung nicht mit dem Galaxy Tab S10 Ultra mithalten können, in der Größe aber fast IFA 2024 | Das NXTPAPER 14 von TCL wird in der Leistung nicht mit dem Galaxy Tab S10 Ultra mithalten können, in der Größe aber fast Sep 07, 2024 am 06:35 AM

IFA 2024 | Das NXTPAPER 14 von TCL wird in der Leistung nicht mit dem Galaxy Tab S10 Ultra mithalten können, in der Größe aber fast

Das Vivo Y300 Pro bietet einen 6.500-mAh-Akku in einem schlanken 7,69-mm-Gehäuse Das Vivo Y300 Pro bietet einen 6.500-mAh-Akku in einem schlanken 7,69-mm-Gehäuse Sep 07, 2024 am 06:39 AM

Das Vivo Y300 Pro bietet einen 6.500-mAh-Akku in einem schlanken 7,69-mm-Gehäuse

Neuer Bericht liefert eine vernichtende Einschätzung der angeblichen Kamera-Upgrades für das Samsung Galaxy S25, Galaxy S25 Plus und Galaxy S25 Ultra Neuer Bericht liefert eine vernichtende Einschätzung der angeblichen Kamera-Upgrades für das Samsung Galaxy S25, Galaxy S25 Plus und Galaxy S25 Ultra Sep 12, 2024 pm 12:22 PM

Neuer Bericht liefert eine vernichtende Einschätzung der angeblichen Kamera-Upgrades für das Samsung Galaxy S25, Galaxy S25 Plus und Galaxy S25 Ultra

Das Samsung Galaxy S24 FE soll in vier Farben und zwei Speicheroptionen für weniger als erwartet auf den Markt kommen Das Samsung Galaxy S24 FE soll in vier Farben und zwei Speicheroptionen für weniger als erwartet auf den Markt kommen Sep 12, 2024 pm 09:21 PM

Das Samsung Galaxy S24 FE soll in vier Farben und zwei Speicheroptionen für weniger als erwartet auf den Markt kommen

Das Motorola Razr 50s zeigt sich in einem frühen Leak als mögliches neues preisgünstiges faltbares Gerät Das Motorola Razr 50s zeigt sich in einem frühen Leak als mögliches neues preisgünstiges faltbares Gerät Sep 07, 2024 am 09:35 AM

Das Motorola Razr 50s zeigt sich in einem frühen Leak als mögliches neues preisgünstiges faltbares Gerät

Xiaomi Redmi Note 14 Pro Plus erscheint als erstes Qualcomm Snapdragon 7s Gen 3 Smartphone mit Light Hunter 800 Kamera Xiaomi Redmi Note 14 Pro Plus erscheint als erstes Qualcomm Snapdragon 7s Gen 3 Smartphone mit Light Hunter 800 Kamera Sep 27, 2024 am 06:23 AM

Xiaomi Redmi Note 14 Pro Plus erscheint als erstes Qualcomm Snapdragon 7s Gen 3 Smartphone mit Light Hunter 800 Kamera

See all articles