设备文件及字符设备驱动复习--Apple的学习笔记

一,前言

最近翻出了3年前买的《Linux设备驱动开发详解》4.0内核版本,想重新再学习下之前忽略掉的内容。进行技能进阶。

  1. 对VFS虚拟文件系统的功能及所处的模块位置加深了理解。
  2. 对Knob和Kobject的功能,关联关系及配合contain_of使用技巧加深了理解。

二,加深理解get到的点

a) 驱动对象和设备号联系在一起。设备号和设备文件联系在一起。那么用户操作设备文件就可以操作驱动了。
b) 一个inode就是对应一个设备。
c) Kobject继承了很多类,其成员通过contain_of可以找到首地址,然后通过首地址再找其它成员。这是一种c语言面向对象的设计技巧。
d) VFS的创建只存在于内存。

三,好奇地扩展了解下单片机如何从FAT32的MMC中读取文件

由于存储方面我以前不关注,所以FAT32存储格式之前也就是uboot引导的时候,了解了MBR和GPT。但是数据内容的格式我忽略了,参考网上说的比较详细的文件,终于多学了一个簇的的概念,关于如何在MMC找到FAT32的某个文件的方法我也知道了。
方法为先找到数据区域的根目录中的文件信息,文件信息中包括簇的起始地址。若某个簇有内容,则FAT表中保存了簇的下一个簇地址,最后一个簇中的内容为NULL。(块设备是随机存储的。一个簇是2的次方,最大包含64个扇区,就是说一个簇最大32K)

FAT32中每个簇的簇地址是有32bit(4个字节),FAT表中的所有字节位置以4字节为单位进行划分,并对划分后的位置由0进行地址编号。0号地址与1号地址被系统保留并存储特殊标志内容。从2号地址开始,每个地址对应于数据区的簇号,FAT表中的地址编号与数据区中的簇号相同。
当文件系统被创建,也就是进行格式化操作时,分配给FAT区域的空间将会被清空,在FAT1与FAT2的0号表项与1号表项写入特定值。由于创建文件系统的同时也会创建根目录,也就是为根目录分配了一个簇空间,通常为2号簇,与之对应的2号FAT表项记录为2号簇,被写入一个结束标记。
关于FAT32格式参考网址
https://blog.csdn.net/mjx91282041/article/details/8904705
https://blog.csdn.net/u010650845/article/details/60780979

四,记录并总结

image.png

你可能感兴趣的:(设备文件及字符设备驱动复习--Apple的学习笔记)