Linux设备驱动开发详解:基于最新的Linux4.0内核
上QQ阅读APP看书,第一时间看更新

1.4.2 Linux设备驱动与整个软硬件系统的关系

如图1.5所示,除网络设备外,字符设备与块设备都被映射到Linux文件系统的文件和目录,通过文件系统的系统调用接口open()、write()、read()、close()等即可访问字符设备和块设备。所有字符设备和块设备都统一呈现给用户。Linux的块设备有两种访问方法:一种是类似dd命令对应的原始块设备,如“/dev/sdb1”等;另外一种方法是在块设备上建立FAT、EXT4、BTRFS等文件系统,然后以文件路径如“/home/barry/hello.txt”的形式进行访问。在Linux中,针对NOR、NAND等提供了独立的内存技术设备(Memory Technology Device,MTD)子系统,其上运行YAFFS2、JFFS2、UBIFS等具备擦除和负载均衡能力的文件系统。针对磁盘或者Flash设备的FAT、EXT4、YAFFS2、JFFS2、UBIFS等文件系统定义了文件和目录在存储介质上的组织。而Linux的虚拟文件系统则统一对它们进行了抽象。

图1.5 Linux设备驱动与整个软硬件系统的关系

应用程序可以使用Linux的系统调用接口编程,但也可使用C库函数,出于代码可移植性的目的,后者更值得推荐。C库函数本身也通过系统调用接口而实现,如C库函数fopen()、fwrite()、fread()、fclose()分别会调用操作系统的API open()、write()、read()、close()。