LINUX系统识别外设(基于C的自动读写)【一】

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wjb123sw99/article/details/82726796

前言

最近在开发基于量子随机数的离线密钥充值系统,主要功能是对外设进行充值随机数密钥。软件部署在centos7系统上,因此需要软件自动识别系统是否有外设通过USB口接入设备。

识别外设

在linux系统中,外设连入系统是以文件形式存在的,设备文件存放在linux系统的/dev下面。外设有很多种:软盘、U盘、光驱、磁盘等。它们被系统自动识别和命名,命名规则为 主设备号(设备类型)+次设备号(具体设备);

例如:

软盘的设备文件为/dev/fdx。主设备号为fd(floppydosk),次设备号x为设备对应的编码;

U盘的设备文件为/dev/sdax或者sdbx或者sdcx...。主设备号为sda(SCSI disk),次设备号x为设备对应的编码;

IDE光驱的设备文件为/dev/hadx。主设备号为had(?),次设备号x为设备对应的编码;

SCSI光驱的设备文件为/dev/srx。主设备号为srx(?),次设备号x为设备对应的编码;

磁盘的设备文件为/dev/stx。主设备号为stx(SCSI tape),次设备号x为设备对应的编码;

实例:识别设备文件——U盘

环境:win10+VMware Workstation 12 Pro+Ubuntu 14.04.5

1、由于/mnt目录下东西太多(眼都花了),应此我们先将插入U盘前的/mnt下的设备文件进行记录

运行 ls /dev>before.txt

2、插入U盘后,我们对/mnt下的设备文件进行记录

运行 ls /dev>now.txt

3、使用wincmp比较二个文件的区别找到多出的设备文件即为U盘文件

4、可以看到插入U盘后多出三个文件sdb、sdb1、sg2;具体哪个设备文件为U盘,我们需要查看详细信息

运行 modprobe usb-storage 加载USB模块

运行 fdisk -l 查看USB设备信息

5、可以看到sdb1为U盘的设备文件,Blocks为13.4G ,system为HPFS或者NTFS或者exFAT

挂载外设

当我们识别到外设文件,我们便要将外设挂载到指定目录下,通过该目录便可以正常访问外设了。linux下的挂载命令如下:

mount -t 文件系统类型 设备名 挂载点

对于不同的外部设备,linux提供了不同的文件类型。常见的类型如下:

msdos      DOS文件系统类型

vfat          支持长文件名的DOS分区文件系统类型,也可以理解为Windows文件系统类型

iso9660    光盘格式文件系统类型

ext2/ext3 linux下文件系统类型

设备名就是对应的设备文件,挂载点就是在linux下指定的挂载目录,将设备指定到这个挂载目录后,以后访问这个挂载目录,就相当于访问了这个设备了。linux中有一个/mnt目录,专门用作挂载点(mount point)目录。如果安装的系统中有软盘和光驱,那么系统默认会在/mnt下创建/mnt/floppy(用于软驱的挂载目录)以及/mnt/cdrom(用于光驱的挂载目录)文件夹。因此建议在实际应用中,将设备都装载到此目录的子目录中。

实例:挂载设备文件——U盘

1、查看外设挂载情况

运行 df -h

2、部分linux设备会自动挂载U盘,例如上图/dev/sdb1为U盘的设备文件,linux系统自动挂载到/media/wang/869538952挂载点;我们便可以通过/media/wang/869538952文件夹对U盘进行读写操作;

3、在某些场景下,用户需要自定义挂载点,应此可以对原有的挂载点进行卸载,然后重新挂载设备;

运行:

umount /media/wang/869538952 卸载原有挂载点

mkdir /mnt/usb 创建自定义挂载点

mount  /dev/sdb1   /mnt/usb 挂载设备到自定义挂载点上

 

下一章节将会讲解如何用C代码实现自定义挂载设备,并提供读写接口

猜你喜欢

转载自blog.csdn.net/wjb123sw99/article/details/82726796