android usb挂载分析---FAT文件系统原理详细介绍

经典FAT文件系统格式详解 FAT/FAT32曾经是windows下主流文件格式,虽然FAT已经这么多年了,也见识到一些缺点,但熟悉FAT,还是对文件系统认识有很大帮助。 一般来说,需要具备一些前期知识: 1. 文件存在flash或硬盘里,还是一个个字节进行存储的,存储介子本身不负责具体内容。如果要对硬盘的数据进行识别,必须需要一定格式,还需要一个驱动程序进行识别。 2. 文件格式最主要作用:格式化管理,快速查找文件 还有几个知识点: 扇区:一般为512,最小分割单位,但不是最小管理单位。 簇:管理最小单位,一.. 阅读详情

FAT 文件起源于 70 年代末 80 年代初,用于微软的 MS-DOS 操作系统。它开始被设计成一个简单的文件系统用于小于 500K 的软件盘。后来被功能被大大增强用于支持越来越大的媒质。现在的文件系统有 FAT12 , FAT16 和 FAT32 三种子类。
FAT12 是最早的一版,主要用于软盘,它对簇的编址采用 12bit 宽度的数,所以称为 FAT12 。 12bit 的地址可以寻址 4096 个簇,事实上在 FAT12 中只能寻址 4078 个簇(在 Linux 下可寻址 4084 个簇),有一些簇号是不能用的,在后面会给出具体的说明。磁盘的扇区是用 16bit 的数进行计算的,所以磁盘的容量就被局限在 32M 空间之内。
在 FAT16 中,采用了 16bit 宽的簇地址, 32bit 宽扇区地址。虽然 32bit 的扇区地址可以寻址 2^32*512 ,约 2 个 TB 的容量, 但于由规定每簇最大的容量不超过 1024*32 ,所以 FAT16 文件系统的容量也就限制到了 2^16*1024*32 ,大约 2.1GB 的空量,并且实际还达不到这个值。
FAT32 文件系统使用了 32bit 宽的簇地址,所以称为 FAT32 。但在微软件的文件系统中只使用了低 28 位,最大容量为 2^28*1024*32, 约 8.7TB 的空量。有的人认为 32bit 全用,最大容量为 2^32*1024*32 ,这种说法是不正确的。
虽然 FAT32 具有容纳近乎 8.7TB 的容量,但实际应用中通常不使用超过 32GB 的 FAT32 分区。 WIN2000 及之上的 OS 已经不直接支持对超过 32GB 的分区格式化成 FAT32 ,但 WIN98 依然可以格式化大到 127GB 的 FAT32 分区,但不推荐这样做。
下面是一个 FAT 分区的构成概况

引导扇区
其他保留扇区(可选)
FAT 表 1
FAT 表 2
根目录区
(仅 FAT12/16 )
数据区
(用于文件和目录)

需要说明的是:
1 .引导扇区和其他保留扇区一起称为保留扇区,而其他保留扇区是可选的,当没有时候,引导扇区后紧跟的就是 FAT 表 1
2 .根目录区是仅 FAT12/16 才有, FAT32 的目录项位于数据区。由于 FAT12/16 的根目录区是一个固定的区域,所以它的根目录的项数是有限制的,意即不能在根录建立超过这个定数的目录项数。
(一)引导扇区与 BPB
BPB ( BIOS Parametre Block )是 FAT 文件系统中第一个重要的数据结构,它位于该 FAT 分区的第一个扇区,同时也属于 FAT 文件系统基本区域的保留区,
 
        在下面的描述中。凡名称以 BPB_ 开头的都是 BPB 的一部分,凡名称与 BS_ 开头的项都是启动扇区的一部分,而不是属于 BPB 的内容,以下是启动扇区的结构

 
offset ( byte )
长度( byte )
描述
BS_jmpBoot
0x00
3
跳转指令,指向启动代码
BS_OEMName
0x03
8
建议值为“ MSWIN4.1”。有些厂商的FAT 驱动可能会检测此项,所以设为“ MSWIN4.1”可以尽量避免兼容性的问题
BPB_BytsPerSec
0x0b
2
每扇区的字节数,取值只能是以下几种: 512 , 1024 , 2048 或是 4096 。设为 512 会取得最好的兼容性,目前有很多 FAT 代码都是硬性规定每扇区的字节数为 512 ,而不是实际的检测此值。但微软的操作系统能够很好支持 1024 , 2048 或是 4096
BPB_SecPerClus
0x0d
1
每簇的扇区数,其值必须中 2 的整数次方(该整数必须 >=0 ),同时还要保证每簇的字节数不能超过 32K ,也就是 1024*32 字节
BPB_RsvdSecCnt
0x0e
2
保留扇区的数目,此域不能为 0 , FAT12/FAT16 必须为 1 , FAT32 的典型值取为 32 ,,微软的系统支持任何非 0 值
BPB_BumFATs
0x10
1
分区中 FAT 表的份数,,任何 FAT 格式都建议为 2
BPB_RootEntCnt
0x11
2
对于 FAT12 和 FAT16 此域包含根目录中目录的个数(每项长度为 32bytes ),对于 FAT32 ,此项必须为 0 。对于 FAT12 和 FAT16 ,此数乘以 32 必为 BPB_BytesPerSec 的偶数倍,为了达到更好的兼容性, FAT12 和 FAT16 都应该取值为 512
BPB_ToSec16
0x13
2
早期版本中 16bit 的总扇区,这里总扇区数包括 FAT 卷上四个基本分区的全部扇区,此域可以为 0 ,若此域为 0 ,那么 BPB_ToSec32 必须为 0 ,对于 FAT32 ,此域必为 0 。对于 FAT12/FAT16 ,此域填写总扇区数,如果该值小于 0x10000 的话, BPB_ToSec32 必须为 0
BPB_Media
0x15
1
对于“固定”(不可移动)存储介质而言, 0xF8 是标准值,对于可移动存储介质,经常使用的数值是 0xF0 ,此域合法的取值可以取 0xF0,0xF8,0xF9,0xFA,0xFC,0xFD,0xFE,0xFF 。另外要提醒的是,无沦此域写入什么数值,同时也必须在 FAT[0] 的低字节写入相同的值,这是因为早期的 MSDOS 1.x 使用该字节来判定是何种存储介质
BPB_FATz16
0x16
2
FAT12/FAT16 一个 FAT 表所占的扇区数,对于 FAT32 来说此域必须为 0 ,在 BPB_FATZ32 中有指定 FAT 表的大小
BPB_SecPerTrk
0x18
2
每磁道的扇区数,用于 BIOS 中断 0x13 ,此域只对于有“特殊形状”(由磁头和柱面每分割为若干磁道)的存储介质有效,同时必须可以调用 BIOS 的 0x13 中断得到此数值
BPB_NumHeads
0x1A
2
磁头数,用于 BIOS 的 0x13 中断,类似于上面的 BPB_ SecPerTrk ,只对特殊的介质才有效,此域包含一个至少为 1 的数值,比如 1,4M 的软盘此域为 2
BPB_HidSec
0x1C
4
在此 FAT 分区之前所隐藏的扇区数,必须使得调用 BIOS 的 0x13 中断可以得到此数值,对于那些没有分区的存储介质,此域必须为 0 ,具体使用什么值由操作系统决定
BPB_ToSec32
0x20
4
该卷总扇区数( 32bit ),这里的扇区总数包括 FAT 卷四个个基本分的全部扇区,此域可以为 0 ,若此域为 0 , BPB_ToSec16 必须为非 0 ,对 FAT32 ,此域必须是非 0 。对于 FAT12/FAT16 如果总扇区数大于或等于 0x10000 的话,此域就是扇区总数,同时 BPB_ToSec16 的值为 0 。

FAT32 的 BPB 的内容和 FAT12/16 的内容在地址 36 以前是完全一样的,从偏移量 36 开始,他们的内容有所区别,具体的内容要看 FAT 类型为 FAT12/16 还是 FAT32 ,这点保证了在启动扇区中包含一个完整的 FAT12/16 或 FAT32 的 BPB 的内容,这么做是为了达到最好的兼容性,同时也为了保证所有的 FAT 文件系统驱动程序能正确的识别和驱动不同的 FAT 格式,并让他们良好地工作,因为他们包含了现有的全部内容
从 offset 36 开始 FAT12/FAT16 的内容开始区别于 FAT32 ,下面分两个表格列出,下表为 FAT12/FAT16 的内容

名称
offset ( byte )
长度( byte )
描述
BS_drvNum
0x24
1
用于 BIOS 中断 0x13 得到磁盘驱动器参数,( 0x00 为软盘, 0x80 为硬盘)。此域实际上由操作系统决定
BS_Reseved1
0x25
1
保留(供 NT 使用),格式化 FAT 卷时必须设为 0
BS_VolID
0x26
1
扩展引导标记( 0x29 )用于指明此后的 3 个域可用
BS_BootSig
0x27
4
卷标序列号,此域以 BS_VolLab 一起可以用来检测磁盘是否正确, FAT 文件系统可以用此判断连接的可移动磁盘是否正确,引域往往是由时间和日期组成的一个 32 位的值
BS_VolLab
0x2B
11
磁盘卷标,此域必须与根目录中 11 字节长的卷标一致。
FAT 文件系统必须保证在根目录的卷标文件列改或是创建的同时,此域的内容能得到时的更新,当 FAT 卷没有卷标时,此域的内容为“ NO NAME ”
BS_FilSysType
0x36
8
以下的几种之一:“ FAT12 ”,“ FAT16 ”,“ FAT32 ”
不少人错误的认为 FAT 文件系统的类型由此域来确认,他细点你就能发现此域并不是 BPB 的一部分,只是一个字符串而已,微软的操作系统并不使用此此域来确定 FAT 文件的类型,;因为它常常被写错或是根本就不存在。

 
下表为 FAT32 的内容

名称
offset ( byte )
长度( byte )
描述
BPB_FATSz32
0x24
4
一个 FAT 表所占的扇区数,此域为 FAT32 特有,同时 BPB_FATSz16 必须为 0
BPB_Flags
0x28
2
此域 FAT32 特有。
Bits0-3: 不小于 0 的 FAT ( active FAT )数目,只有在镜像( mirrorig )禁止时才有效。
Bits 4-6:  保留
Bits 7 :  0 表示 FAT 实时镜像到所有的 FAT 表中
        1  表示只有一个活动的 FAT 表。这个表就是 Bits0-3 所指定的那个
Bits8-15 : 保留
BPB_FSVer
0x2A
2
此域为 FAT32 特有,
高位为 FAT32 的主版本号,低位为次版本号,这个版本号是为了以后更高级的 FAT 版本考虑,假设当前的操作系统只能支持的 FAT32 版本号为 0.0 。那么该操作系统检测到此域不为 0 时,它便会忽略 FAT 卷,因为它的版本号比系统能支持的版式本要高
BPB_RootClus
0x2C
4
根目录所在第一个簇的簇号,通常该数值为 2 ,但不是必须为 2
磁盘工具在改变根目录位置时,必须想办法让磁盘上第一个非坏簇作为根目录的第一个簇(比如第 2 簇,除非它已经被标记为坏簇),这样的话,如果此域正好为 0 的话磁盘检测工具也能轻松的找到根目录所在簇的位置
BPB_FSIfo
0x30
2
保留区中 FAT32 卷 FSINFO 结构所占的扇区数,通常为 1
在 Backup Boot  中会有一个 FSINFO 的备份,但该备份只是更新其中的指针,也就是说无论是主引导记录还是备份引导记录都是指向同一个 FSINFO 结构
BPB__BkBootSec
0x32
2
如果不为 0 ,表示在保留区中引导记录的备数据所占的扇区数,通常为 6 。同时不建议使用 6 以外的其他数值
BPB_Reserved
0x34
12
用于以后 FAT 扩展使用,对 FAT32 。此域用 0 填充
BS_DrvNum
0x40
1
与 FAT12/16 的定义相同,只不过两者位于启动扇区不同的位置而已
BS_Reserved1
0x41
1
与 FAT12/16 的定义相同,只不过两者位于启动扇区不同的位置而已
BS_BootSig
0x42
1
与 FAT12/16 的定义相同,只不过两者位于启动扇区不同的位置而已
BS_VolID
0x43
4
与 FAT12/16 的定义相同,只不过两者位于启动扇区不同的位置而已
BS_FilSysType
0x47
11
与 FAT12/16 的定义相同,只不过两者位于启动扇区不同的位置而已
BS_FilSysType
0x52
8
通常设置为“ FAT32 ”,请参照 FAT12/16 此部分的陈述。

关于 FAT 启动扇区还有一点重要的说明,我们假设里面的内容是按字节排序的,那么扇区 [510] 的内容一定 0x55 ,扇区 [511] 的内容一定是 0xAA
很多 FAT 资数文档会把 0xAA55 说成是“启动扇区最后两字节的内容”,这样的陈述是正确的 — 仅仅是如果 —BPB_BytsPerSec 的值为 512 的话。若 BPB_BytsSec 的值大于 512 ,该标记的位置并没有改变(虽然在启动扇区的最后两个字节写 0xAA55 并没有问题)
关于 BPB_ToSec16/32 这里再作一点补充:假设一现在我们有一块磁盘或一个分区,它的扇区数为 DskSz ,如果 BPB_aToSec(BPB_ToSec16 或是 BPB_ToSec32 基中不为 0 的那个 ) 的值小于或等于 DskSz 并不会使该 FAT 卷在使用中出现什么错误,实际上 BPB_ToSec16/32 的值不要比 DskSz 小得离谱就不会有什么错误
这样做将造成磁盘空间的浪费,程序本身并不会认为该 FAT 卷存在什么错误,但是,如果 BPB_ToSec16/32 的值比 DskSz 大将会使 FAT 卷遭到严重的损坏,因为它超出了存储介质或是磁盘分区的边界。当 BPB_ToSec16/32 的值比 DskSz 大时,一些数据将不幸地被丢失
   
FAT文件系统数据结构C语言表示
FAT文件系统相关数据结构
struct fat_boot_sector {
    uint8_t    ignored[3];    /* 0x00 Boot strap short or near jump */
    int8_t    system_id[8];    /* 0x03 Name - can be used to special case
                   partition manager volumes */
    uint8_t    sector_size[2];    /* 0x0B bytes per logical sector */
    uint8_t    sectors_per_cluster;    /* 0x0D sectors/cluster */
    uint16_t    reserved;    /* 0x0E reserved sectors */
    uint8_t    fats;        /* 0x10 number of FATs */
    uint8_t    dir_entries[2];    /* 0x11 root directory entries */
    uint8_t    sectors[2];    /* 0x13 number of sectors */
    uint8_t    media;        /* 0x15 media code (unused) */
    uint16_t    fat_length;    /* 0x16 sectors/FAT */
    uint16_t    secs_track;    /* 0x18 sectors per track */
    uint16_t    heads;        /* 0x1A number of heads */
    uint32_t    hidden;        /* 0x1C hidden sectors (unused) */
    uint32_t    total_sect;    /* 0x20 number of sectors (if sectors == 0) */

    /* The following fields are only used by FAT32 */
    uint32_t    fat32_length;    /* 0x24=36 sectors/FAT */
    uint16_t    flags;        /* 0x28 bit 8: fat mirroring, low 4: active fat */
    uint8_t    version[2];    /* 0x2A major, minor filesystem version */
    uint32_t    root_cluster;    /* 0x2C first cluster in root directory */
    uint16_t    info_sector;    /* 0x30 filesystem info sector */
    uint16_t    backup_boot;    /* 0x32 backup boot sector */
    uint8_t    BPB_Reserved[12];    /* 0x34 Unused */
    uint8_t    BS_DrvNum;        /* 0x40 */
    uint8_t    BS_Reserved1;        /* 0x41 */
    uint8_t    BS_BootSig;        /* 0x42 */
    uint8_t    BS_VolID[4];        /* 0x43 */
    uint8_t    BS_VolLab[11];        /* 0x47 */
    uint8_t    BS_FilSysType[8];    /* 0x52=82*/

    /* */
    uint8_t    nothing[420];    /* 0x5A */
    uint16_t    marker;
} __attribute__ ((__packed__));

struct msdos_dir_entry {
    int8_t    name[8],ext[3];        /* 00 name and extension */
    uint8_t    attr;            /* 0B attribute bits */
    uint8_t    lcase;        /* 0C Case for base and extension */
    uint8_t            ctime_ms;    /* 0D Creation time, milliseconds */
    uint16_t    ctime;        /* 0E Creation time */
    uint16_t    cdate;        /* 10 Creation date */
    uint16_t    adate;        /* 12 Last access date */
    uint16_t        starthi;    /* 14 High 16 bits of cluster in FAT32 */
    uint16_t    time;           /* 16 time, date and first cluster */
        uint16_t        date;        /* 18 */
        uint16_t        start;        /* 1A */
    uint32_t    size;        /* 1C file size (in bytes) */
};

/* Up to 13 characters of the name */
struct msdos_dir_slot {
    uint8_t    id;            /* 00 sequence number for slot */
    uint8_t    name0_4[10];        /* 01 first 5 characters in name */
    uint8_t    attr;        /* 0B attribute byte */
    uint8_t    reserved;        /* 0C always 0 */
    uint8_t    alias_checksum;    /* 0D checksum for 8.3 alias */
    uint8_t    name5_10[12];    /* 0E 6 more characters in name */
    uint16_t   start;        /* 1A starting cluster number, 0 in long slots */
    uint8_t    name11_12[4];    /* 1C last 2 characters in name */
};
具体可以参考下面的资料:http://download.youkuaiyun.com/detail/new_abc/4184969

MTK平台android recovery模式不删除FAT分区 原理:在android系统的recovery模式下,系统将进入data分区的格式化,而不是mount data分区后进入文件的删除,所以我们需要将系统进入recovery模式下格式化data分区修改成mount data分区,然后进入文件以及目录的删除。而MTK平台正常情况下MTK_SHARED_SDCARD = yes 这种模式下,系统编译后运行时FAT和data分区时合并在一起共享的,所以FAT的物理空间在data分区的范围内。在格式化data分区时会一并将FAT分区给格式化掉。所以需要进行mount后 阅读详情

相关推荐

macOS 挂载 MTP 设备:从协议原理到 Moorage 实战

在跨平台设备协作中,文件系统的互操作性是常见难题。Android 手机通过 MTP(媒体传输协议)与电脑通信时,并不像 U 盘那样暴露块设备,而是以对象形式提供数据访问,这让 macOS 的原生文件系统机制无法直接识别。理解 MTP 的请求-响应模型、对象枚举与数据读写原理,是解决此类问题的关键。借助 FUSE(用户态文件系统)技术,macOS 可以将 MTP 设备挂载为本地路径,从而让 Finder、终端及各类脚本无缝操作手机文件。这种挂载能力不仅简化了 Android 设备的日常文件管理,还为自动化备份

weixin_29303701的博客 265

硬盘文件系统系列之FAT

文件系统FAT介绍

存储随笔 1万+

Android USB文件传输原理与MTP协议详解

USB文件传输是移动设备与计算机数据交互的基础功能,其核心协议MTP(Media Transfer Protocol)在Android系统中扮演关键角色。MTP协议基于PTP扩展,通过设备枚举、会话管理和分块传输机制实现高效文件操作,相比传统UMS模式具有不独占存储、支持文件系统无关性和元数据传输三大优势。从技术实现看,该功能涉及USB描述符协商、驱动加载和系统服务协同,典型应用场景包括媒体文件管理、开发调试和数据备份。通过分析USB配置描述符和MTP操作码,可以深入理解Android设备在‘设置>USB文

chaoyv 343

操作系统—简要分析FAT文件系统

简要分析FAT文件系统

Voltline的博客 4286

macOS 挂载 MTP 设备:从协议原理到 Moorage 实践指南

在 Mac 与 Android 手机、相机等设备之间传输文件,长期以来受限于 MTP(Media Transfer Protocol)与 macOS 文件系统机制的天然错位。macOS 对 U 盘、SD 卡等块存储设备支持良好,但面对 MTP 这种基于对象存储的交互协议,Finder 却无法直接识别和挂载。理解 MTP 协议的本质,是解决这一问题的关键——它并非传统文件系统,而是一套设备交互接口,因此需要中间件将对象枚举和文件读写映射为本地卷路径。Moorage 正是这样一款工具,它通过逻辑挂载让 MTP

weixin_28327051的博客 246

OTG U盘兼容性排查:从硬件供电到Android挂载的全链路优化

在嵌入式Android设备中,OTG外设兼容性问题常表现为U盘无法识别、读写掉线或挂载失败。这类问题根源往往跨越硬件供电、USB枚举、存储驱动与文件系统等多个环节。本文从分层排查思路出发,讲解VBUS电压跌落、CC/Rp/Rd切换、usb-storage参数调优、autosuspend关闭、vold与exFAT支持等关键技术,帮助开发者快速定位并解决U盘兼容性问题,适用于RK3568等平台的产品落地与量产优化。

weixin_30587927的博客 393

android 挂载多个u盘,android usb挂载分析

同ntfs一样,android默认的是不支持ext*格式的,可以自己把这些格式的支持加上去,但有一个问题,ext*不像fat那样挂载的时候支持uid、gid、fdmask等 参数,这会导致文件系统挂载上去后,发现还有一个问题,ext2,ext3,ext4的挂载上去后在应用中文件看不到,查了下原因是因为应用不能写u盘,说的具体点是应用的这个用户没有权限写u盘,我们看下fat挂载上去后的目录权限:ls...

weixin_35395562的博客 1282

Linux存储四层架构:块设备、分区、文件系统与挂载点详解

Linux存储体系基于分层抽象设计,核心包含块设备(block device)、分区(partition)、文件系统(filesystem)和挂载点(mount point)四个逻辑层级。块设备是内核对物理存储的统一接口,提供扇区级读写能力;分区在块设备上建立逻辑边界,由MBR或GPT表管理;文件系统则定义数据组织方式,如ext4、XFS等,负责inode、目录树与元数据管理;挂载点将文件系统接入VFS树,实现用户态可见路径。这一架构决定了磁盘识别、格式化、挂载及故障排查的技术路径——例如`lsblk`输出

weixin_30788619的博客 351

android usb挂载分析--各种格式支持

前面对usb挂载的流程及各种格式的支持做了分析,这一篇也基本是收尾篇了,主要是把各种格式的挂载在vold模块种加进去,这里对这部分做了一些更改,如直接 挂载到/mnt/sdcard,没有先挂载到/mnt/secure/staging,还有把一些状态的转换去掉了,以及格式化、格式检查的去掉了,因为暂时还没听到这方面的奢求,哈哈,也是为了省事吧,这里把所有的挂载都在一个文件中实现了,先看下Androi

new_abc的专栏 6848

Android USB挂载内核驱动层流程分析与编程

在Android系统中,USB挂载是一项重要的功能,它允许用户将Android设备连接到计算机并在两者之间进行数据传输。本文将详细介绍Android USB挂载的内核驱动层流程,并提供相应的源代码作为示例。综上所述,Android USB挂载的内核驱动层流程涉及到USB驱动模块的注册、USB设备的插入和拔出处理逻辑以及USB设备的挂载和卸载操作。请注意,以上示例代码仅为演示目的,并非完整的、可直接在Android系统中使用的代码。上述示例代码定义了一个USB驱动模块,包含了USB设备的插入和拔出处理逻辑。

TechInk的博客 518

在Android上实现NTFS文件系统支持

Android系统是由Linux内核衍生而来,因此它继承了Linux文件系统的多用户、多进程、可移植等特性。在Android原生环境中,常用的文件系统包括ext4、F2FS等,这些文件系统能够提供稳定和高效的数据管理机制,支持广泛的硬件设备,但原生系统并不直接支持NTFS文件系统。NTFS(New Technology File System)是Windows操作系统中的文件系统,它具有高效率、高可靠性和大容量存储的优势。

weixin_32673065的博客 3046

Android12 U盘挂载流程学习(一)

这是开机流程的一个重要步骤,标志着user正式启动,而系统启动的第一个用户的id就是0,会走到这里。// /data/media/0/Android/data挂载到/mnt/user/0/emulated/0/Android/data。// /data/media/0/Android/obb挂载到/mnt/user/0/emulated/0/Android/obb。// 挂载/dev/fuse到/mnt/user/0/usb0,访问/mnt/user/0/usb0就会指向/dev/fuse。

c025200的博客 1659

MarkDown简介(深度解析MarkDown用法)

欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I...

酷酷的旭 7343

U盘格式介绍及vold进程简介

U盘,又称USB闪存盘、优盘,闪存盘又称优盘,是一种半导体存储器件,利用Flash闪存芯片作为存储介质,具备了防磁、防震、防潮等多种特性,加强了数据的安全性。重量很轻,体积很小方便携带。常与各种设备进行连接后使用,USB接口是最常见的接口。使用时不需要驱动器,无须外接电源,即插即用,支持热插拔,带写保护功能。优盘主要可用来在没有联网的电脑之间交流较大的文件,还可用来在笔记本电脑上替代软驱。vold(Volume Daemon)是Android操作系统中负责设备存储卷管理的后台进程。

qq_59270610的博客 247

新版本大疆智图4.5 永久许可摄影测量建模软件

大疆智图支持常见格式的成果输出,包括 TIFF 正射影像和高程模型、LAS 格式点云,以及 B3DM、OSGB、OBJ 等六种常用格式的三维模型,还包括 DXF 和 SHP 等格式的等高线。大疆智图 DJI Terra是领先的三维重建软件,提供先进的技术和简单的操作,一站式解决方案,从航线规划到数据的获取,以及模型重建、数据分析等都提供独一无二的支持,优化项目工程,提供自动化优势,获得更有效智能的决策和行动,最终用户可以获得理想的结果,减轻工作压力,提高作业效率。质量报告和剖面查看功能有助于分析点云质量。

qq_62821232的博客 6902

Windows Server下OnlyOffice Workspace社区版安装避坑指南(含局域网邮箱配置)

本文详细介绍了在Windows Server环境下部署OnlyOffice Workspace社区版的完整流程,特别针对企业内网环境中的邮箱配置和端口冲突等常见问题提供了实用解决方案。通过硬件资源配置建议、软件环境检查清单以及内网邮箱系统搭建方案对比,帮助用户高效搭建企业级协作平台,实现团队协作的无缝对接。

weixin_29231263的博客 449

Android SDCard Mount 流程分析

Android SDCard Mount 流程分析

tiantian715的专栏 1781

DESeq2实战:如何用LRT检验分析基因表达随时间变化的模式(附完整代码)

本文详细介绍了如何使用DESeq2中的LRT检验分析基因表达随时间变化的模式,包括实验设计、数据预处理、模型构建、结果提取与可视化等完整流程。通过实战案例和完整代码,帮助生物信息学研究者掌握时间序列RNA-seq分析的核心技术,特别适合需要快速上手的实践者。

weixin_42620255的博客 469

MTP模式与USB存储模式(MTP in Android)

转载:http://bbs.meizu.cn/thread-4747416-1-1.html MTP in Android MTP的全称是Media Transfer Protocol(媒体传输协议),它是微软公司提出的一套媒体文件传输协议。Android从3.0开始支持MTP。不过,在今天的智能手机领域内,Google和微软是一对冤家,为什么Android中会使用MTP呢?请看下文。 一 背景知...

hbcbgcx的博客 3万+

ANSYS Sherlock新手避坑:从ODB++文件导入到属性匹配的完整流程(附官方教程路径)

本文详细解析了ANSYS Sherlock从ODB++文件导入到属性匹配的完整流程,帮助新手避开常见陷阱。内容包括环境准备、官方教程使用技巧、ODB++导入关键检查点、属性验证策略及常见报错解决方案,特别强调了路径设置和材料匹配的重要性,提升仿真效率。

weixin_42519781的博客 455

【Linux】Petalinux使用QSPI FLASH引导启动

1. 预分配Flash空间使用Flash引导Petalinux做的系统,也有进阶的做法。部分图片和经验来源于网络,若有侵权麻烦联系我删除,主要是做笔记的时候忘记写来源了,做完笔记很久才写博客。1. 预分配Flash空间根据生成的bit文件大小估算BOOT.BIN文件的大小,为Flash大概分配四个分区:boot、bootenv、kernel、bootscr,分别存放BOOT.BIN文件、u-boot的环境变量、内核文件(image.ub/zImage/uImage等)、启动脚本boot.scr。

Tesseract_9527的博客 3375

Android SDCard Mount 流程分析(二)

上一篇关于Mount的分析,分析了main的作用和一些挂载系统的分析。下面深入分析Mount的流程走法。   Mount流程分为两个部分   主动挂载(插入SDCARD或者USB硬盘时系统自动挂载)手动挂载(卸载SDCARD或者USB硬盘后,再点击加载设备的手动挂载)  不同挂载走的流程并不相同,比如手动挂载是由上层发命令给vold 执行挂动作,而主动挂载是由kernel 分命令给v

u011279649的专栏 1250

麒麟服务器操作系统QT系列软件工具手册

对Qt提供的开发工具进行了一系列的优化之后,在日常的修复bug和维护框架的过程中,桌面研发对Qt的基础软件库也进行了部分优化工作,包括qtbase、qtwayland、qtscript、qt4-x11等Qt基础组件,涉及的Qt框架版本主要涉及到5.9和5.12两个版本。qt 的翻译,是由 ts 文件生成 qm 文件然后进行翻译,国产操作系统上qt 的翻译是由单独的qttranslations包中进行维护,其次部分汉化问题也是qt组件维护工作的一部分,qt的翻译机制如图4-7所示。

太极淘的博客 543

Android SDCard Mount流程分析(一)(二)(三)

Android SDCard Mount流程分析(一) 前段时间对Android 的SDCard unmount 流程进行了几篇简短的分析,由于当时只是纸上谈兵,没有实际上的跟进,可能会有一些误导人或者小错误。今天重新梳理了头绪,针对mount的流程再重新分析一次。  本篇大纲   • android 系统如何开机启动监听mount服务 • 默认挂载点在Android 系统的哪个目录

gangyanliang的专栏 1万+

物料分类账-返工工单(自身)差异分摊逻辑

如上图所示,当月入库的全部消耗,而返工消耗的数量为100PCS,所以返工消耗占总消耗的比例为100pcs/(205pcs+100pcs)=0.327868852。备注:红色箭头的物料号为产品自己本身所产生的价差,就是返工工单所承担的差异,而我们要计算的就是这个值,所以计算价差不会包括此项。价差合计就是不包括初始分摊的价差9153.7,剩下的价差合计就是返工工单自身所承担的差异4465.21。每一次返工工单所承担的差异都会按照价差*承担比例去计算承担的差异,知道承担完所有差异。

Yeol827的博客 2494

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: android usb挂载分析---vold处理内核消息
下一篇: android usb挂载分析---FrameWork层处理收到的vold消息
new_abc
new_abc 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄15年 701粉丝 396原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值