linux下识别U盘
- 格式:docx
- 大小:14.39 KB
- 文档页数:2
如何实现Linux下的U盘(USB Mass Storage)驱动How to Write Linux USB MSC (Mass Storage Class) Driver版本: 0.4作者: crifan联系方式:green-waste (at) 版本历史目录1正文之前 (6)1.1本文目的 (6)1.2阅读此文所需要的前提知识 (7)1.3声明 (7)2USB基本知识 (8)2.1USB的硬件 (8)2.2USB相关的协议 (8)2.3USB相关的软件实现 (8)3USB Mass Storage大容量存储的基本知识 (9)3.1USB Mass Storage相关的协议 (13)3.1.1USB Mass Storage相关协议简介 (14)3.1.1.1USB MSC Control/Bulk/Interrupt (CBI) Transport (14)3.1.1.2USB MSC Bulk-Only (BBB) Transport (15)3.1.1.2.1为何USB MSC中Bulk-only Transport被叫做 BBB (15)3.1.1.2.2为何已经有了CBI,又再弄出个BBB (15)3.1.1.3USB MSC UFI Command Specification (16)3.1.1.4USB MSC Bootability Specification (16)3.1.1.5USB MSC Compliance Test Specification (17)3.1.1.6USB Lockable Storage Devices Feature Specification (17)3.1.1.7USB MSC USB Attached SCSI Protocol (UASP) (17)3.1.1.7.1已有SCSI协议,为何还要再弄一个UASP (17)3.1.2USB MSC的各个协议之间关系总结 (19)3.1.3U盘与USB中的Class,Subclass和Protocol的对应关系 (20)3.1.3.1bInterfaceClass=0x08=Mass Storage (21)3.1.3.2bInterfaceSubClass=0x06=SCSI Transparent (21)3.1.3.3bInterfaceProtocol=0x50=Bulk Only Transport (21)3.2USB Mass Storage相关的软件实现 (22)4实现U盘驱动的整个流程是什么样的 (23)5Linux系统下,USB驱动的框架已经做了哪些事情 (24)6Linux下实现U盘驱动,自己需要做哪些事情以及如何做 (25)7引用文章 (26)图表图表 1 U盘 (6)图表 2 USB Mass Storage Framework (9)图表 3 PC和U盘 (10)图表 4 PC和U盘的芯片内部结构 (10)图表 5 PC和U盘的内部逻辑框图 (11)图表 6 PC和USB MSC设备 (12)图表 7 USB MSC的分类 (12)图表 8 USB Storage Class Protocol Relation (19)图表 9 SubClass Codes Mapped to Command Block Specifications (21)图表 10 Mass Storage Transport Protocol (21)图表 11 USB数据流向图 (23)缩写1 正文之前1.1 本文目的关于U盘,估计大家都用过。
Linux下的硬件驱动——USB设备什么是USB设备?USB即Universal Serial Bus,翻译过来就是通用串行总线。
它是一种规范化的、快速的、热插拔的串行输入/输出接口。
USB接口常被用于连接鼠标、键盘、打印机、扫描仪、音频设备、存储设备等外围设备。
Linux下的USB驱动在Linux系统中,每个USB设备都需要一个相应的驱动程序来驱动。
从Linux 2.4开始,内核提供了完整的USB设备支持。
对于每个USB设备,内核都会自动加载对应的驱动程序。
Linux下的USB设备驱动程序主要分为以下几个部分:USB核心驱动程序USB核心驱动程序是操作系统内核中处理USB设备的核心模块,负责与各种类型的USB设备进行通信,包括主机控制器、USB总线、USB设备等。
它与驱动程序和应用程序之间起到了桥梁的作用,为驱动程序提供了USB设备的基础支持。
USB设备驱动程序USB设备驱动程序是与特定USB设备相对应的驱动程序,为USB设备提供具体的读写功能和其他控制功能。
USB核心驱动程序和USB设备驱动程序之间的接口USB核心驱动程序和USB设备驱动程序之间的接口是指USB层和应用程序层之间的接口,负责传递各种USB操作的命令和数据。
如何编译一个USB设备驱动编译一个USB设备驱动程序需要按照以下步骤进行:步骤一:安装必要的软件包首先需要安装编译和调试USB设备驱动所需的软件包,包括编译工具链、内核源代码、内核头文件等。
sudo apt-get install build-essential linux-source linux-headers-`una me -r`步骤二:编写代码现在可以编写USB设备驱动程序的代码,此处不做详细介绍。
步骤三:编译代码在终端窗口中进入USB设备驱动程序所在的目录下,输入以下命令进行编译:make此命令将会编译USB设备驱动程序,并生成一个将驱动程序与内核进行连接的模块文件。
Linux系统写入U盘方法教程之前我们介绍过怎么把Windows系统放进U盘备份,那么对于Linux系统方法也一样吗?有一些地方不同的,需要注意,所以下面我们就来教大家如何在U盘中安装Linux系统,把Linux系统写入U盘。
操作步骤第一步:首先插入u盘到电脑主机usb接口处(建议插入到主机箱后置的usb接口),然后打开UltraISO软件,再打开选择需要写入u 盘的Ubuntu 10.04或者其他版本的Linux系统的iso镜像包3 第二步:点击“启动光盘”,然后鼠标移动选择到“写入硬盘映像”并点击鼠标左键弹出一个写入硬盘映像的窗口,值得注意的是:硬盘驱动器那里我们要看清楚,是我们刚才插入usb接口的那个u盘,也就是我们需要写入的u盘,千万别搞错了。
写入方式我们默认即可,然后点击“便捷启动”,选择到“写入新的驱动器引导区”,再鼠标右移选择到“Syslinux”项,点击鼠标!u启动温馨提示:“Syslinux”这一项选择很重要,网络上流传的很多关于此类的教程由于都忽略了这一步,导致最终制作失败。
点击“是(Y)”继续接下来会弹出一个“写入引导扇区成功”的提示窗口第三步:也就是继续上一步的操作,我们点击“写入”继续,意思是把整个iso镜像包写入到我们的u盘里面点击了“写入”按钮以后将会弹出一个确定窗口,其表达的意思是让您进一步确认是否将iso镜像包写入到该u盘里面,我们只要点击“是(Y)”按钮即可,如下图:现在开始写入Linux系统的iso镜像包到u盘在写入u盘的时候我们要注意的是:尽量不要去做其他操作,建议耐心等待其写入成功!OK,大功告成,u盘写入Ubuntu Linux系统就完成了,我们接下来可以做的就是利用这个制作好引导的u盘来安装Ubuntu系统了。
补充:系统常用维护技巧1,在“开始” 菜单中选择“控制面板” 选项,打开“控制面板” 窗口,单击“管理工具” 链接2,在打开的“管理工具” 窗口中双击“事件查看器” 图标3,接着会打开“事件查看器” 窗口4,在右侧窗格中的树状目录中选择需要查看的日志类型,如“事件查看器本地--Win日志--系统日志,在接着在中间的“系统” 列表中即查看到关于系统的事件日志5,双击日志名称,可以打开“事件属性” 对话框,切换到“常规” 选项卡,可以查看该日志的常规描述信息6,切换到“详细信息” 选项卡,可以查看该日志的详细信息7,打开“控制面板” 窗口,单击“操作中心” 链接,打开“操作中心” 窗口,展开“维护” 区域8,单击“查看可靠性历史记录” 链接,打开“可靠性监视程序” 主界面,如图所示,用户可以选择按天或者按周为时间单位来查看系统的稳定性曲线表,如果系统近日没出过什么状况,那么按周来查看会比较合适。
linux设备驱动(27)usb驱动-热插拔详解1 热插拔的基本概念1.1 usb热插拔的硬件原理在USB集线器(hub)的每个下游端⼝的D+和D-上,分别接了⼀个15K欧姆的下拉电阻到地。
这样,在集线器的端⼝悬空时,就被这两个下拉电阻拉到了低电平。
⽽在USB设备端,在D+或者D-上接了1.5K欧姆上拉电阻。
对于全速和⾼速设备,上拉电阻是接在D+上;⽽低速设备则是上拉电阻接在D-上。
这样,当设备插⼊到集线器时,由1.5K的上拉电阻和15K的下拉电阻分压,结果就将差分数据线中的⼀条拉⾼了。
集线器检测到这个状态后,它就报告给USB主控制器(或者通过它上⼀层的集线器报告给USB主控制器),这样就检测到设备的插⼊了。
USB⾼速设备先是被识别为全速设备,然后通过HOST和DEVICE两者之间的确认,再切换到⾼速模式的。
在⾼速模式下,是电流传输模式,这时将D+上的上拉电阻断开。
1.2 热插拔的概念热插拔(hot-plugging或Hot Swap)即带电插拔,热插拔功能就是允许⽤户在不关闭系统,不切断电源的情况下取出和更换损坏的硬盘、电源或板卡等部件,从⽽提⾼了系统对灾难的及时恢复能⼒、扩展性和灵活性等,例如⼀些⾯向⾼端应⽤的磁盘镜像系统都可以提供磁盘的热插拔功能。
具体⽤学术的说法就是:热替换(Hot replacement)、热添加(hot expansion)和热升级(hot upgrade)1.3 热插拔的优点在系统开机情况下将损坏的模块移除,还可以在开机情况下做更新或扩容⽽不影响系统操作。
由于热插拔零件的可靠度提升,还可以将它们⽤做断电器,⽽且因为热插拔能够⾃动恢复,有很多热插拔芯⽚为系统提供线路供电情况的信号,以便系统做故障分析,因此减少了成本。
2 热插拔的实现2.1 Linux下USB HUB的驱动的实现和分析:在系统初始化的时候在usb_init函数中调⽤usb_hub_init函数,就进⼊了hub的初始化。
虚拟机VMware下的UbuntuUSB设备识别问题的解决方法方法一:在Linux下手动挂载U盘1,先确定u盘的位置:如果你的Linux操作系统是安装在虚拟机上的,那么首先打开虚拟机进入Linux系统。
(注意:首先确认把当前活动界面是定位在Linux系统上的,然后把U盘插到电脑的USB 接口上。
)此时,在Linux里以root身份运行#fdisk -l(#号不用输入)命令(或者直接输入命令:#sudo fdisk -l),然后观察命令运行的结果(如下图所示),看看有没有与你的u盘容量、文件系统格式相符的设备符号出来。
如果能找到的话,那出来的结果应该和下图类似(图1处为系统为当前虚拟机分配的空间;图2显示的即为所插U盘的容量大小;图3为U盘的硬盘分区文件名:/dev/sdb1 即第二个(b)SCSI硬盘(sd)的第1分区);如果没有找到相符的设备符号,则跳过以下的步骤看下面的方法。
~_~或者第一步也可以这样:在保证当前焦点在Linux操作系统中,在命令终端中先执行#cat /proc/partitions这条命令来查看当前系统中有哪些分区;插上U盘之后再执行#cat /proc/partitions命令来查看多出来什么分区(通常是多出来sda1,由于我的是在虚拟机下装的,所以多出来的是sdb1),所以也可以找到当前U盘的位置即为:/dev/sdb1。
2,创建挂载位置一般都是挂载在/mnt 文件夹之下,因为mnt文件夹主要存放光盘,软盘等移动存储介质的信息。
运行命令#sudo mkdir /mnt/usb,在/mnt目录下新建一个/usb目录。
3,挂载U盘由第一步的U盘位置和第二步创建的挂载位置就可以执行第三条指令了,#sudo mount -t vfat /dev/sdb1 /mnt/usb参数-t vfat指明挂载的文件类型,U盘一般为vfat(文件系统为Fat32格式)格式;如果你U盘的文件系统为ntfs,那么参数改为-t ntfs;如果文件系统为Fat16,那么参数相应改为-t msdos;如果文件系统为ext2,那么参数改为-t ext2。
vmware安装的Linux下用mount挂载cdrom和U盘文章分类:操作系统转载/vipkx/blog/item/993d8cf3b51605c10b46e07f.html我说以下我的具体操作:1:用鼠标点一下vmware里,把焦点转移到vmware2。
插入u盘,系统会自动识别(只要VM有装USB驱动即可)3。
建立挂载目录,一般#mkdir /mnt/udisk这时候他会自动检测到,然后用fdisk- l看一眼,,[root@yyl-0377 root]# fdisk -lDisk /dev/sda: 5368 MB, 5368709120 bytes255 heads, 63 sectors/track, 652 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesDevice Boot Start End Blocks Id System/dev/sda1 * 1 574 4610623+ 83 Linux/dev/sda2 575 652 626535 82 Linux swapDisk /dev/sdb: 130 MB, 130416640 bytes8 heads, 32 sectors/track, 995 cylindersUnits = cylinders of 256 * 512 = 131072 bytesDevice Boot Start End Blocks Id System/dev/sdb1 * 1 995 127344 b Win95 FAT324。
最后一行的设备名最关键。
挂载# mount /dev/sdb1 /mnt/udisk然后进入/mnt/udisk 就可以了。
然后可以进行读写,想卸掉时用#umount -l /dev/sdb1============================================================================================补充:我被这个问题困扰了很久,研究了N中方法,,现在我就吧我的方法告诉大家,一定能够搞定。
Linux虚拟机怎么挂载U盘
Linux虚拟机怎么挂载U盘
U盘是一种使用USB接口的无需物理驱动器的微型高容量移动存储产品,那么大家知道Linux虚拟机怎么挂载U盘吗?店铺分享了Linux虚拟机挂载U盘的方法,希望对大家有所帮助。
Linux虚拟机挂载U盘方法
在电脑上直接插入U盘,其实是可以直接使用的,会自动弹出一个窗口,不会像网上所说的那样,必须要自己挂载,但是为了学习手动用命令行挂载U盘,我关掉了那个窗口。
可以用df –h查看文件系统的磁盘空间占用情况,我用了这个命令:
从上图可以看出,我的U盘的默认挂载点是/media/MYFENG(MYFENG是我U盘的盘符),此时,可以直接打开该目录,使用U盘。
为了学习挂载U盘,我选择了将U盘挂载在常用的挂载目录/mnt。
首先,我在/mnt下新建一个目录且命名为usb:
再将U盘挂载在/mnt/usb下:
然后,再用df –h命令查看文件系统的磁盘空间占用情况:
发现,U盘出现了两个挂载点/media/MYFENG和/mnt/usb,再仔细观察,其实两个挂载点的设备文件名都一样的,都是/dev/sdb1,由此也可以得出一个结论:一个硬件挂载的设备文件只有一个,但是挂载点可以有多个,关于这个结论的解释以及设备文件到底是什么东西?以后再做总结。
最后使用完了,就要注意卸载U盘的挂载点:
注意,如果是上面那种情况,要卸载两次,因为我用了两个挂载点。
图解Linux虚拟机如何挂载U盘并显示中文目录和文件名LinuxU图解虚拟机如何挂载盘并显示中文目录和文件名VMware Workstation 7redhat 首先介绍一下我的环境,虚拟机版本是,虚拟系统是9.02.4.20-8 # rpm -qa|grep ,内核版本是。
如果不清楚的话,可以用下面的命令查一下:kernel我看到的是如下界面:。
UFAT32 首先声明一下,我的盘是文件系统。
ULinuxlocale 为了使盘中的中文文件可以正常显示。
首先要确认所用的系统的(这个localeLinux locale包括了系统使用的语言和字符的编码等信息)。
中文常用的是zh_CN.gb2312zh_CN.gbkzh_CN.gb18030 zh_CN.UTF-8 ,,和。
通过如下命令可以查询系locale#echo $LANG统的:localezh_CN.gb18030 可见,我所用系统的是。
准备好,后续使用。
#fdisk -l U 接下来,可以通过命令查询虚拟机是否识别盘了,如下:U 在这儿,可以看到,虚拟机系统并没有识别盘。
有两种处理办法,如下: 1windows XPU )在主系统(我的是)中弹出盘,点击虚拟系统界面,将活动光USB标置于虚拟系统中,找到右下角和相关的图标,点击右键在弹出的菜单,选择Connection”UU“。
此时再次插入盘,可以看到主系统右下角弹出虚拟机识别盘的消息提U示,否则,重新上述操作,直到虚拟机识别盘为止。
这种方法比较笨的,大家可以采取,第二种方法如下:2VM )在虚拟机界面的菜单选项中设置即可,如下:XPUSB 此时,可以看到系统右下角弹出安全退出设备的消息提示,说U明盘已被虚拟系统识别。
#fdisk -lU 再次通过命令确认虚拟系统是否识别盘,如下:2GUsdb1 呵呵,虚拟系统终于认识到的盘的存在了,并且给取名为。
2: /mntUSB 在目录下建立一个挂装存储器的目录,用下面的命令就可以创建: #mkdir /mnt/usbudiskusb 当然,你也可以取其他的名称,比如等等,在这儿我设置其为。
Linux上扫描检测新的LUN和SCSI磁盘背景Linux 服务器中的磁盘可以分为本地磁盘和LUN(logical unit number),本地磁盘即为物理服务器的本地磁盘,或虚拟机的本地虚拟磁盘,⽽LUN是逻辑单元号,这是⼀个逻辑对象,所以很多时候被称为Logical Device。
在FC SAN中(还有IP SAN)它是远端集中式存储通过光交、光纤和主机端的HBA卡共享给服务器的逻辑磁盘,但看起来和本地磁盘没有什么区别,访问速度不输本地磁盘。
在以前解决了很多主机本地磁盘空间不⾜和需要共享磁盘的问题,如ORACLE RAC集群。
存在这样的场景,就是存储侧划了新的LUN或扩容了虚拟磁盘,如何在 Linux 上扫描/检测新的 LUN 和 SCSI 磁盘呢?如果是新主机还没有业务,那⼤可重启系统识别新添加的设备,但⼤多数情况下主机上运⾏这业务,我们更希望在线操作,来保持业务的连续性。
这可以通过三种⽅式进⾏,扫描每个 scsi 主机设备或运⾏ rescan-scsi-bus.sh 脚本来检测新磁盘。
扫描后可以在 /dev/disk/⽬录下已不同的标识找到它们。
[root@irora01 ~]# ll /dev/disk/total 0drwxr-xr-x 2 root root 2480 Sep 2 03:00 by-iddrwxr-xr-x 2 root root 1980 Sep 2 03:00 by-pathdrwxr-xr-x 2 root root 260 Sep 2 03:00 by-uuid你还可以通过如下的命令发现新增的磁盘fdisk -llsscsilsblk对于LUN通常是有链路冗余的,所以同⼀磁盘(scsci_id相同)在主机上能看到4个或8个,⼀般需要使⽤多路径软件聚合后使⽤,多路径软件配合存储可实现主备或负载形式提供存储访问。
多路径软件有很多,不通⼚商有各⾃的多路径软件,通⽤的为 multipath。
linux下识别U盘
方案一:
Linux不像Windows一样,接上新硬件后可以自动识别,在Linux下无法自动识别新硬件的,需要手动去识别。
USB移动存储设备通常被识别为sda1,具体可以通过fdisk -l命令查询。
在使用U盘前,我们先要为外挂点新建一个子目录,一般外挂点的子目录都是建立在/mnt 里面的,我们也建在那里,当然也可以建在/目录下,名字可以自己定,我们就取名为usb,终端下的命令如下:
mkdir /mnt/usb
然后我们就可以接上我的U盘了,然后在终端下输入命令并击Enter键即可:
mount /dev/sda1 /mnt/usb
在Windows下当我们用完U盘后,在我们取下U盘前我们先要删除,同样在Linux下我们也要删除挂起点,方法是:
umount /dev/sda1 /mnt/usb 或 umount /dev/sda1
如果不把U盘给umount掉,那样很容易造成数据的丢失
方案二:
USB的支持关键在于驱动,没有驱动设备时mount执行是肯定不成的。
我在Red Hat里使用U盘的通用方法如下,屡试不爽
1. 先别插U盘,/sbin/lsmod看是否有usb-storage。
如果没有的话:
cd /lib/modules/2.4.20-8/kernel/drivers/usb
for v in *.o storage/*.o do /sbin/insmod $v done
2. 这里再/sbin/lsmod,应该有usbcore、usb-ohci(或usb-uhci,根据主板芯片组而不同)、usb-storage、scsi_mod等。
其中usb-storage的状态应该为
(unused)。
3. 插入U盘,不停的/sbin/lsmod,这期间usb-storage的状态应为Initializing,持续时间大约半分钟,其实就相当于Windows在右下角不停的弹汽球:)
4. 初始化结束后, /sbin/fdisk -l,应该能看到/dev/sda1设备。
这时,执行
mount /dev/sda1 /mnt/udisk 才能成功。
如果是MSDOS格式,又想看到中文,可以
mount -t vfat /dev/sda1 /mnt/udisk -o iocharset=gb2312。
(为方便可以/etc/fstab加一行,以后就可以 mount /mnt/udisk就行了)。
5. 奇怪的是有时候fdisk是看不到sda1,但是也能mount上
使用以上步骤挂U盘基本上可说是“万全”了。
台式机、笔记本、VMware都一样。
mkdir /mnt/usb
mount /dev/sda1 /mnt/usb
笔记本上安装linux用法和台式机一样 ps:
首先要检查lsmod|grep usb-storage 这是支持USB的模块。
如果没有的话,是无法操作USB接
口的设备的。
如没有的话,可以手功modprobe usb-storage,一般查看U盘可以用fdisk -l可以很清楚的看到这个硬件的设备名。