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

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


咨詢
建站咨詢
