新聞中心
探究Linux USB事件:解析設(shè)備識(shí)別、驅(qū)動(dòng)安裝及調(diào)試技巧

隨著計(jì)算機(jī)技術(shù)的持續(xù)發(fā)展,USB技術(shù)的逐漸成熟,Linux作為一個(gè)開(kāi)源的操作系統(tǒng)也得到了廣泛的應(yīng)用。然而,在使用Linux系統(tǒng)中,出現(xiàn)USB設(shè)備無(wú)法識(shí)別、驅(qū)動(dòng)無(wú)法安裝、設(shè)備無(wú)法正常通信等問(wèn)題,這些問(wèn)題給我們的使用帶來(lái)了很多困擾。因此,在本文中,我們將探究Linux USB事件,并解析其設(shè)備識(shí)別、驅(qū)動(dòng)安裝及調(diào)試技巧,從而為大家提供一些實(shí)用的解決方案。
一、設(shè)備識(shí)別
Linux系統(tǒng)的USB子系統(tǒng)有一個(gè)名為ucore的內(nèi)核模塊,它用于管理和識(shí)別USB設(shè)備,并提供相應(yīng)的設(shè)備驅(qū)動(dòng)程序。當(dāng)USB設(shè)備入Linux系統(tǒng)時(shí),操作系統(tǒng)會(huì)自動(dòng)檢測(cè)USB設(shè)備并自動(dòng)加載相應(yīng)的驅(qū)動(dòng)程序,這一過(guò)程如下:
1. 內(nèi)核檢測(cè)USB設(shè)備的插入
當(dāng)USB設(shè)備插入Linux主機(jī)時(shí),硬件層面上可以通過(guò)USB控制器進(jìn)行檢測(cè),此時(shí)硬件會(huì)發(fā)送一個(gè)中斷信號(hào)給CPU,提示有新的設(shè)備插入,CPU接收到該信號(hào)后會(huì)通過(guò)內(nèi)核USB子系統(tǒng)進(jìn)行處理。
2. 內(nèi)核添加USB設(shè)備驅(qū)動(dòng)程序
內(nèi)核USB子系統(tǒng)會(huì)檢查系統(tǒng)中是否已存在匹配當(dāng)前USB設(shè)備的驅(qū)動(dòng)程序,如果存在,則會(huì)加載此次驅(qū)動(dòng)程序,如果不存在,則會(huì)在當(dāng)前系統(tǒng)中的內(nèi)核模塊尋找設(shè)備對(duì)應(yīng)的驅(qū)動(dòng)程序。
3. 設(shè)備驅(qū)動(dòng)程序啟動(dòng)
一旦內(nèi)核識(shí)別到USB設(shè)備并加載了對(duì)應(yīng)的驅(qū)動(dòng)程序,設(shè)備驅(qū)動(dòng)程序?qū)?huì)以用戶(hù)空間進(jìn)程的形式運(yùn)行,此時(shí)USB設(shè)備就可以使用了。
由此可見(jiàn),在Linux系統(tǒng)中,設(shè)備識(shí)別主要依賴(lài)于內(nèi)核USB子系統(tǒng)的驅(qū)動(dòng)匹配和加載過(guò)程,而一般情況下,內(nèi)核都可以自動(dòng)地完成設(shè)備的識(shí)別工作,但是在有些情況下,由于驅(qū)動(dòng)程序無(wú)法正常加載或USB設(shè)備異常導(dǎo)致無(wú)法識(shí)別,需要進(jìn)行一些手動(dòng)操作來(lái)解決問(wèn)題。
二、驅(qū)動(dòng)安裝
在Linux系統(tǒng)中,驅(qū)動(dòng)程序是一系列命令和數(shù)據(jù)的組合,它會(huì)告訴內(nèi)核怎樣與硬件設(shè)備進(jìn)行通信。接下來(lái),我們來(lái)看看如何手動(dòng)安裝Linux驅(qū)動(dòng)程序:
1. 下載相應(yīng)的驅(qū)動(dòng)程序
在Linux系統(tǒng)中,驅(qū)動(dòng)程序可以由多個(gè)源頭提供,例如:官方內(nèi)核、社區(qū)維護(hù)的驅(qū)動(dòng)程序、第三方驅(qū)動(dòng)程序或者自己編寫(xiě)驅(qū)動(dòng)程序。因此,在安裝相應(yīng)的驅(qū)動(dòng)程序之前,需要確保已經(jīng)下載了驅(qū)動(dòng)程序包。
2. 解壓驅(qū)動(dòng)程序包
一般情況下,下載的驅(qū)動(dòng)程序都是壓縮包格式,需要先解壓縮驅(qū)動(dòng)程序包,使用以下命令:
“`
tar zxvf
“`
3. 編譯安裝驅(qū)動(dòng)程序
解壓之后,進(jìn)入目錄,針對(duì)不同的驅(qū)動(dòng)程序包,可有多種配置方法,一般情況下,都會(huì)有一個(gè)Makefile文件,使用以下命令:
“`
make
make install
“`
4. 加載驅(qū)動(dòng)程序
驅(qū)動(dòng)程序安裝完畢后,可以通過(guò)如下命令進(jìn)行加載:
“`
modprobe
“`
以上是手動(dòng)安裝Linux驅(qū)動(dòng)程序的過(guò)程,當(dāng)然,在Linux系統(tǒng)中,大多數(shù)情況下,內(nèi)核都會(huì)自動(dòng)加載所需的驅(qū)動(dòng)程序,因此,我們需要安裝驅(qū)動(dòng)程序的情況比較少。
三、USB調(diào)試技巧
在使用Linux系統(tǒng)中,USB設(shè)備出現(xiàn)通信異常或無(wú)法識(shí)別的情況也較為常見(jiàn)。接下來(lái),我們將介紹一些USB調(diào)試技巧,幫助大家快速解決問(wèn)題。
1. 查看設(shè)備是否識(shí)別
使用以下命令可以查看Linux系統(tǒng)中是否已經(jīng)成功識(shí)別USB設(shè)備:
“`
lsu
“`
其中,該命令會(huì)羅列出Linux系統(tǒng)中所有USB設(shè)備的信息,對(duì)于標(biāo)準(zhǔn)的USB設(shè)備,會(huì)顯示出設(shè)備的廠(chǎng)商ID和產(chǎn)品ID。
2. 查看設(shè)備是否已連接
在出現(xiàn)USB設(shè)備連接異常時(shí),可以通過(guò)使用以下命令來(lái)查看USB設(shè)備是否已經(jīng)連接:
“`
dmesg
“`
3. 使用USBView進(jìn)行調(diào)試
USBView是一個(gè)特別的工具,能夠幫助用戶(hù)查看USB系統(tǒng)中包括控制器、端口和設(shè)備等方面的詳細(xì)信息。運(yùn)行該工具后,會(huì)提供完整的USB樹(shù)形結(jié)構(gòu),以概述USB系統(tǒng)的拓?fù)浣Y(jié)構(gòu)。
4. 使用Umon進(jìn)行調(diào)試
Umon是Linux內(nèi)核中實(shí)現(xiàn)的USB監(jiān)視程序,其主要功能是能夠?qū)崟r(shí)監(jiān)視USB系統(tǒng)上事件的發(fā)生情況,包括USB設(shè)備的連接狀態(tài)、USB數(shù)據(jù)的傳輸?shù)鹊?,使用該工具可以更好的分析和調(diào)試USB設(shè)備的問(wèn)題。
相關(guān)問(wèn)題拓展閱讀:
- linux 下 USB的熱插拔問(wèn)題?
linux 下 USB的熱插拔問(wèn)題?
目前一些主流桌面系統(tǒng)(如Gnome,KDE,Xfce)的較新版本都支持自動(dòng)掛載(mount)U盤(pán)了. 一個(gè)流傳很廣的說(shuō)法是 HAL(硬件抽象層) 起了自動(dòng)掛載的作用, 其實(shí)這是誤解. 對(duì)于2.6內(nèi)核而言, udev 才是直接從內(nèi)核接收設(shè)備連接或斷開(kāi)信息的主體.
udev 從內(nèi)核得到信息后,根據(jù)一些簡(jiǎn)單規(guī)則(注意,是簡(jiǎn)單規(guī)則), 在 /dev 目錄下創(chuàng)建相應(yīng)的設(shè)備節(jié)點(diǎn), 并進(jìn)行某些相關(guān)操作. HAL 所做的事情是在 udev 的規(guī)則中加上一條(或幾條), 讓 udev 把收到的信息也傳遞給 HAL. 接派顫裂下來(lái), HAL 用更為復(fù)雜的規(guī)則來(lái)匹配和描述當(dāng)前連接著的硬件. 舉一個(gè)簡(jiǎn)單的例子, udev 知道的是U盤(pán)已經(jīng)連接了并且有一個(gè)分區(qū); 而 HAL 能更進(jìn)一步知道這個(gè)分區(qū)的卷標(biāo)名及其它一些信息.
上面這些都還不能自動(dòng)掛載U盤(pán). Gnome 等桌面系統(tǒng)會(huì)啟動(dòng)一個(gè)守護(hù)進(jìn)程(daemon), 通過(guò) D-Bus 從 HAL 那里得到硬件信息, 如果發(fā)現(xiàn)有U盤(pán)連接了就由它們來(lái)掛載它(實(shí)際是調(diào)用 pmount).
問(wèn)題是, 如果你不想用Gnome,KDE,Xfce這些桌面系統(tǒng), 那么由它們提供的U盤(pán)自動(dòng)掛載功能也洞鄭就失效了,有解決辦法么?
解決的辦法之一, 便是讓 udev 來(lái)干這件事情!
udev 的主要功能是實(shí)時(shí)地在 /dev 目錄下創(chuàng)建和刪除設(shè)備節(jié)點(diǎn), 但它也能在創(chuàng)建節(jié)點(diǎn)的同時(shí), 執(zhí)行一個(gè)額外地程序. 具體的原理這里就不詳說(shuō)了, 有時(shí)間請(qǐng)仔細(xì)閱讀 Writing udev rules 這篇文章. 寫(xiě)規(guī)則時(shí)特別注意 KERNEL, SUBSYSTEM 等這些關(guān)鍵字單數(shù)和復(fù)數(shù)(最后有沒(méi)有’S’)的區(qū)別. 復(fù)數(shù)(比如 KERNELS)表示你想用父設(shè)備的屬性來(lái)匹配, 單數(shù)(比如 KERNEL)是要匹配設(shè)備本身的屬性.
在 /etc/udev/rules.d 目錄下創(chuàng)建文件 10_ukey.rules, 其內(nèi)容如下
KERNEL==”sda1″, SUBSYSTEM==”block”, RUN+=”/root/umount.sh”
然后, 在 /root 目錄中創(chuàng)建文件 umount.sh, 其內(nèi)容為
#!/bin/bash
LOG=/var/log/u-hotplug.log
lap=$(date –rfc-3339=ns)
echo “$lap: $DEVPATH requesting $ACTION” >> $LOG
if
then
mount -t vfat -o umask=000,noatime,async,codepage=936,iocharset=gb2312 \
/dev/sda1 /media/ukey
elif
then
umount -l /media/ukey
fi
并把該文件屬性設(shè)置為可執(zhí)行, chmod a+x umount.sh
注意, 如果你的 linux 上 locale 是 zh_CN.utf-8, 需要把上面的 iocharset=gb2312 改成 iocharset=utf8
最后創(chuàng)建目塵閉錄, mkdir /media/ukey
這是一個(gè)非常簡(jiǎn)單但可用的例子. U盤(pán)插上后自動(dòng) mount 到 /media/ukey , 拔出后自動(dòng) umount. 你可以查看 /var/log/u-hotplug.log , 里面會(huì)有些簡(jiǎn)單的調(diào)用記錄.
關(guān)于linux u事件的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級(jí)標(biāo)準(zhǔn)機(jī)房資源,具備完善的安防設(shè)施、三線(xiàn)及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機(jī)柜接入千兆交換機(jī),能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運(yùn)行;創(chuàng)新互聯(lián)專(zhuān)注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶(hù)的一致認(rèn)可。
網(wǎng)頁(yè)題目:探究linuxu事件:解析設(shè)備識(shí)別、驅(qū)動(dòng)安裝及調(diào)試技巧(linuxu事件)
標(biāo)題鏈接:http://www.5511xx.com/article/dhcigee.html


咨詢(xún)
建站咨詢(xún)
