国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

內置存儲fuse文件系統(tǒng)

2019-11-09 15:35:19
字體:
來源:轉載
供稿:網友

fuse把/data/media映射為 /storage/emulated/0,供上層app用這個路徑。/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 0root@nikel:/ # ls -l /mnt/runtime/read/emulated/                               drwxr-x--- root     everybody          2015-01-01 00:08 0drwxr-x--- root     everybody          2015-01-02 16:28 obbroot@nikel:/ # ls -l /mnt/runtime/read/emulated/0/                             drwxr-x--- root     everybody          2015-01-01 00:00 Alarmsdrwxr-x--- root     everybody          2015-01-01 00:00 Androiddrwxr-x--- root     everybody          2015-01-01 00:00 DCIMdrwxr-x--- root     everybody          2015-01-01 00:00 Downloaddrwxr-x--- root     everybody          2015-01-01 00:07 DuoKandrwxr-x--- root     everybody          2015-01-01 00:27 MIUIdrwxr-x--- root     everybody          2015-01-01 00:00 Moviesdrwxr-x--- root     everybody          2015-01-01 00:00 Musicdrwxr-x--- root     everybody          2015-01-01 00:00 Notificationsdrwxr-x--- root     everybody          2015-01-01 00:00 Picturesdrwxr-x--- root     everybody          2015-01-01 00:00 Podcastsdrwxr-x--- root     everybody          2015-01-01 00:00 Ringtonesdrwxr-x--- root     everybody          2015-01-01 00:06 Tencentdrwxr-x--- root     everybody          2015-01-01 00:00 Xiaomi-rw-r----- root     everybody        2 2015-01-01 00:27 dctp-rw-r----- root     everybody       41 2015-01-01 00:27 diddrwxr-x--- root     everybody          2015-01-01 00:00 mi_drivedrwxr-x--- root     everybody          2015-01-01 00:00 miaddrwxr-x--- root     everybody          2015-01-01 00:08 mtklogdrwxr-x--- root     everybody          2015-01-01 00:00 sogouroot@nikel:/ # ls -l /mnt/runtime/write/emulated/0/                            drwxrwx--- root     everybody          2015-01-01 00:00 Alarmsdrwxrwx--- root     everybody          2015-01-01 00:00 Androiddrwxrwx--- root     everybody          2015-01-01 00:00 DCIMdrwxrwx--- root     everybody          2015-01-01 00:00 Downloaddrwxrwx--- root     everybody          2015-01-01 00:07 DuoKandrwxrwx--- root     everybody          2015-01-01 00:27 MIUIdrwxrwx--- root     everybody          2015-01-01 00:00 Moviesdrwxrwx--- root     everybody          2015-01-01 00:00 Musicdrwxrwx--- root     everybody          2015-01-01 00:00 Notificationsdrwxrwx--- root     everybody          2015-01-01 00:00 Picturesdrwxrwx--- root     everybody          2015-01-01 00:00 Podcastsdrwxrwx--- root     everybody          2015-01-01 00:00 Ringtonesdrwxrwx--- root     everybody          2015-01-01 00:06 Tencentdrwxrwx--- root     everybody          2015-01-01 00:00 Xiaomi-rw-rw---- root     everybody        2 2015-01-01 00:27 dctp-rw-rw---- root     everybody       41 2015-01-01 00:27 diddrwxrwx--- root     everybody          2015-01-01 00:00 mi_drivedrwxrwx--- root     everybody          2015-01-01 00:00 miaddrwxrwx--- root     everybody          2015-01-01 00:08 mtklogdrwxrwx--- root     everybody          2015-01-01 00:00 sogouroot@nikel:/ # root@nikel:/ # ls -l /mnt/runtime/default/ /emulated/0/                        emulated/ sdcard0/  self/     root@nikel:/ # ls -l /mnt/runtime/default/emulated/0/                          drwxrwx--x root     sdcard_rw          2015-01-01 00:00 Alarmsdrwxrwx--x root     sdcard_rw          2015-01-01 00:00 Androiddrwxrwx--x root     sdcard_rw          2015-01-01 00:00 DCIMdrwxrwx--x root     sdcard_rw          2015-01-01 00:00 Downloaddrwxrwx--x root     sdcard_rw          2015-01-01 00:07 DuoKandrwxrwx--x root     sdcard_rw          2015-01-01 00:27 MIUIdrwxrwx--x root     sdcard_rw          2015-01-01 00:00 Moviesdrwxrwx--x root     sdcard_rw          2015-01-01 00:00 Musicdrwxrwx--x root     sdcard_rw          2015-01-01 00:00 Notificationsdrwxrwx--x root     sdcard_rw          2015-01-01 00:00 Picturesdrwxrwx--x root     sdcard_rw          2015-01-01 00:00 Podcastsdrwxrwx--x root     sdcard_rw          2015-01-01 00:00 Ringtonesdrwxrwx--x root     sdcard_rw          2015-01-01 00:06 Tencentdrwxrwx--x root     sdcard_rw          2015-01-01 00:00 Xiaomi-rw-rw---- root     sdcard_rw        2 2015-01-01 00:27 dctp-rw-rw---- root     sdcard_rw       41 2015-01-01 00:27 diddrwxrwx--x root     sdcard_rw          2015-01-01 00:00 mi_drivedrwxrwx--x root     sdcard_rw          2015-01-01 00:00 miaddrwxrwx--x root     sdcard_rw          2015-01-01 00:08 mtklogdrwxrwx--x root     sdcard_rw          2015-01-01 00:00 sogo127|root@nikel:/ # dumpsys mount                                               Disks:Volumes:  VolumeInfo{emulated}:    type=EMULATED diskId=null partGuid=null mountFlags=PRIMARY|VISIBLE mountUserId=-1 state=MOUNTED     fsType=null fsUuid=null fsLabel=null     path=/storage/emulated internalPath=/data/media Disks:  DiskInfo{disk:179,128}:    flags=ADOPTABLE|SD size=1002962944 label=     sysPath=/sys//devices/mtk-msdc.0/11240000.msdc1/mmc_host/mmc1/mmc1:0001/block/mmcblk1 Volumes://sd卡  VolumeInfo{public:179,129}:    type=PUBLIC diskId=disk:179,128 partGuid=null mountFlags=VISIBLE mountUserId=0 state=MOUNTED     fsType=vfat fsUuid=88FC-16F9 fsLabel=     path=/storage/88FC-16F9 internalPath=/mnt/media_rw/88FC-16F9(path是fuse提供給上層的路徑,internalPath是實際路徑)//內部存儲  VolumeInfo{emulated}:    type=EMULATED diskId=null partGuid=null mountFlags=PRIMARY|VISIBLE mountUserId=-1 state=MOUNTED     fsType=null fsUuid=null fsLabel=null     path=/storage/emulated internalPath=/data/media 

用戶空間文件系統(tǒng)(Filesystem in Userspace,簡稱FUSE)指在用戶態(tài)實現的文件系統(tǒng)

FUSE文件系統(tǒng)由兩部分組成:

 kernel     fs/fuse用戶態(tài)    fuse daemon(開發(fā)者需要實現的)

以內置存儲為例:

data 分區(qū)以ext4格式被掛載

fuse的root node為data/media,即利用data分區(qū)的media目錄存儲sdcard與data共用

內置存儲的fuse daemon 為system/core/sdcard/sdcard.c

 

圖1-1 黑色箭頭表示             app通過fuse向sdcard daemon 發(fā)出文件系統(tǒng)操作請求(read write and so on)

          綠色箭頭表示             sdcard damon 實際完成操作

          紅色箭頭表示             sdcard damon 通過fuse(/dev/fuse)向app反饋操作結果

以 ls -l   storage/emulated/0 為例,看fuse文件系統(tǒng)操作過程

通過strace命令觀測系統(tǒng)調用過程

root@scorpio:/ # ps | grep -i sdcardmedia_rw 1978 468 9336 1864 inotify_re 7fa1959e3c S /system/bin/sdcard

root@scorpio:/ # strace ls -l storage/emulated/0

root@scorpio:/ # strace -ftt -p 1978                                         //1978 是 sdcard 進程號

下面是strace片段

root@scorpio:/ # strace -ftt -p 1978 Process 1978 attached with 4 threads

[pid 2038] 22:42:28.162015 read(4, "P/0/0/0/34/0/0/0/n/20/0/0/0/0/0/0/0 0/241/177/0/0/0/0/0/0/0/0/0/0/0"..., 262224) = 80[pid 2038] 22:42:28.162310 getdents64(11, /* 0 entries */, 4200) = 0[pid 2038] 22:42:28.162466 write(4, "/20/0/0/0/0/0/0/0/n/20/0/0/0/0/0/0", 16) = 16[pid 2038] 22:42:28.163092 read(4, "8/0/0/0/3/0/0/0/v/20/0/0/0/0/0/0/0 0/241/177/0/0/0/0/0/0/0/0/0/0/0"..., 262224) = 56[pid 2038] 22:42:28.163294 newfstatat(AT_FDCWD, "/data/media/0", {st_mode=S_IFDIR|0770, st_size=4096, ...}, AT_SYMLINK_NOFOLLOW) = 0[pid 2038] 22:42:28.163507 writev(4, [{"x/0/0/0/0/0/0/0/v/20/0/0/0/0/0/0", 16}, {"/n/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/1/0/0/0/0/0/0/0/0/20/0/0/0/0/0/0"..., 104}], 2) = 120[pid 2038] 22:42:28.163700 read(4, "//0/0/0/1/0/0/0/f/20/0/0/0/0/0/0/0 0/241/177/0/0/0/0/0/0/0/0/0/0/0"..., 262224) = 47[pid 2038] 22:42:28.163866 faccessat(AT_FDCWD, "/data/media/0/Alarms", F_OK) = 0[pid 2038] 22:42:28.164053 newfstatat(AT_FDCWD, "/data/media/0/Alarms", {st_mode=S_IFDIR|0775, st_size=4096, ...}, AT_SYMLINK_NOFOLLOW) = 0[pid 2038] 22:42:28.164238 writev(4, [{"/220/0/0/0/0/0/0/0/f/20/0/0/0/0/0/0", 16}, {"/200/"0/241/177/0/0/0/5/0/0/0/0/0/0/0/n/0/0/0/0/0/0/0/n/0/0/0/0/0/0/0"..., 128}], 2) = 144[pid 2038] 22:42:28.164425 read(4, "-/0/0/0/1/0/0/0/r/20/0/0/0/0/0/0/0 0/241/177/0/0/0/0/0/0/0/0/0/0/0"..., 262224) = 45[pid 2038] 22:42:28.169564 faccessat(AT_FDCWD, "/data/media/0/DCIM", F_OK) = 0[pid 2038] 22:42:28.169775 newfstatat(AT_FDCWD, "/data/media/0/DCIM", {st_mode=S_IFDIR|0775, st_size=4096, ...}, AT_SYMLINK_NOFOLLOW) = 0[pid 2038] 22:42:28.169975 writev(4, [{"/220/0/0/0/0/0/0/0/r/20/0/0/0/0/0/0", 16}, {"/0%0/241/177/0/0/0/n/0/0/0/0/0/0/0/n/0/0/0/0/0/0/0/n/0/0/0/0/0/0/0"..., 128}], 2) = 144[pid 2038] 22:42:28.170184 read(4, "1/0/0/0/1/0/0/0/16/20/0/0/0/0/0/0/0 0/241/177/0/0/0/0/0/0/0/0/0/0/0"..., 262224) = 49[pid 2038] 22:42:28.171253 faccessat(AT_FDCWD, "/data/media/0/Download", F_OK) = 0[pid 2038] 22:42:28.171593 newfstatat(AT_FDCWD, "/data/media/0/Download", {st_mode=S_IFDIR|0775, st_size=4096, ...}, AT_SYMLINK_NOFOLLOW) = 0[pid 2038] 22:42:28.171855 writev(4, [{"/220/0/0/0/0/0/0/0/16/20/0/0/0/0/0/0", 16}, {"/200$0/241/177/0/0/0/t/0/0/0/0/0/0/0/n/0/0/0/0/0/0/0/n/0/0/0/0/0/0/0"..., 128}], 2) = 144

Android M sdcard daemon由vold啟動

static const char* kFusePath = "/system/bin/sdcard";

if (!(mFusePid = fork())) {if (execl(kFusePath, kFusePath,"-u", "1023", // AID_MEDIA_RW"-g", "1023", // AID_MEDIA_RW"-m","-w",mRawPath.c_str(),label.c_str(),NULL)) {PLOG(ERROR) << "Failed to exec";}

從sdcard 進程啟動的參數看sdcard 目錄權限是入參-u -g -w帶進去的.


上一篇:Swift3.0 反射

下一篇:效果動畫

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 张家口市| 右玉县| 桦川县| 大同市| 虹口区| 美姑县| 竹溪县| 乌鲁木齐县| 来宾市| 丹寨县| 五大连池市| 大荔县| 习水县| 盈江县| 平远县| 常山县| 西乌| 绥化市| 成都市| 博兴县| 高邑县| 耒阳市| 南开区| 景德镇市| 纳雍县| 綦江县| 白朗县| 新平| 离岛区| 织金县| 平度市| 图木舒克市| 邮箱| 称多县| 留坝县| 山西省| 灵石县| 万全县| 苍梧县| 乳源| 肃南|