Linux文件系统与设备驱动

宋宝华,《Linux设备驱动开发详解:基于最新的Linux4.0内核》,第5章,Linux文件系统与设备文件

image-20210304161554016

从上图中可以看出,我们可以得出如下结论:

  • 用户的应用程序通过系统调用来访问VFS(虚拟文件系统)

  • VFS(虚拟文件系统)通过file_operations数据结构的成员函数来与它下层的文件系统、设备文件进行交互。file_operations数据结构的成员函数包含对文件的打开、关闭、读写、控制等功能

    image-20210304164001112

  • 对于字符设备,它的上层并没有类似于硬盘的ext2等文件系统,

    • 字符设备驱动程序会创建该设备对应的设备文件,也称为设备节点,例如/dev/ttyS1
    • 字符设备驱动程序中需要实现file_operations数据结构的各个成员函数。
    • 当应用程序访问设备文件时,VFS将根据系统调用的类型来调用字符设备驱动程序中提供的file_operations数据结构的成员函数,从而完成对字符设备的硬件访问。
  • 对于块设备,有两种访问方式。

    • 块设备的上层有文件系统,所以我们可以通过文件系统来访问块设备。在Linux的文件系统代码中,实现了file_operations数据结构。文件系统代码负责把针对文件的读写转换成对块设备原始扇区的读写。

    • 也可以通过设备文件的方式访问块设备。例如,插上U盘时,在Linux系统下会有类似/dev/sdb1的设备文件,我们也可以通过该文件访问U盘设备。针对该方式,Linux内核源码中实现了一个名为def_blk_fopsfile_operations数据结构,位于fs/block_dev.c中:

      image-20210304163451642

      当我们通过类似dd if=/dev/sdb1 of=sdb1.img命令对/dev/sdb1设备文件进行访问时,内核会调用def_blk_fops的成员函数。

    • 虽然文件系统或者fs/block_dev.c中实现了file_operations数据结构,但这些结构最终还是需要调用我们写的块设备驱动程序完成对硬件的访问。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值