專利名稱:Linux系統(tǒng)下USB設(shè)備的處理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及操作系統(tǒng)領(lǐng)域,特別涉及一種Linux系統(tǒng)下USB設(shè)備的處理方法。
背景技術(shù):
作為一個(gè)開放源代碼并且免費(fèi)的操作系統(tǒng),Linux已經(jīng)廣泛應(yīng)用在服務(wù)器、嵌入式等領(lǐng)域, 針對(duì)Linux開發(fā)的應(yīng)用程序也越來越多。USB (Universal Serial Bus,通用串行總線)設(shè)備由 于其快速的傳輸速率,近年來也得到了廣泛的發(fā)展和應(yīng)用。在Linux系統(tǒng)下,所有的設(shè)備都 是以文件的形式存在的,稱作設(shè)備文件,通常都存儲(chǔ)于/dev目錄下。當(dāng)USB設(shè)備接入Linux 系統(tǒng)時(shí),也是以設(shè)備文件的形式存儲(chǔ)于/dev目錄下,該設(shè)備文件描述了USB設(shè)備的類型,設(shè) 備號(hào)等信息,Linux系統(tǒng)可以通過讀取該設(shè)備文件來達(dá)到與USB設(shè)備進(jìn)行通信的目的。
但是,Linux系統(tǒng)的超級(jí)用廣具有對(duì)USB設(shè)備的讀寫權(quán)限,而普通用戶對(duì)USB設(shè)備只有 讀的權(quán)限卻沒有寫的權(quán)限,需要用戶手動(dòng)修改權(quán)限才能完成對(duì)USB設(shè)備寫入的操作,這給很 多用戶帶來了很大不便。
另夕卜,在現(xiàn)有的2.4和2.6版本的Linux系統(tǒng)內(nèi)核(kernel)中,對(duì)于大多數(shù)USB設(shè)備尤 其是標(biāo)準(zhǔn)USB設(shè)備,Linux系統(tǒng)會(huì)自動(dòng)加載相應(yīng)的驅(qū)動(dòng)程序,如HID(Human Interface Device, 人機(jī)接口設(shè)備)、CCID (USB Chip/Smart Card Interface Devices, USB芯片智能卡接口沒備)、 SCSI (Small Computer System Interface,小型計(jì)算機(jī)系統(tǒng)接口)驅(qū)動(dòng)程序等等,從而保證用 戶可以使用該USB設(shè)備。但是,如果Linux系統(tǒng)接入智能卡類型的USB設(shè)備,則有可能發(fā) 生通信錯(cuò)誤。由于這類USB設(shè)備通常內(nèi)置有智能卡芯片,存儲(chǔ)有相關(guān)的程序和算法,當(dāng)Li皿x 系統(tǒng)與這類USB設(shè)備進(jìn)行通信時(shí),通常需要運(yùn)行智能卡芯片的相關(guān)程序才能完成通信,但是 由于Linux系統(tǒng)與USB設(shè)備通信的端口被加載的驅(qū)動(dòng)程序所占用了,因此Linux系統(tǒng)會(huì)識(shí)別 為USB設(shè)備忙,導(dǎo)致Linux系統(tǒng)無法運(yùn)行該相關(guān)程序,從而不能與USB設(shè)備進(jìn)行通信。
發(fā)明內(nèi)容
本發(fā)明提供了一種Linux系統(tǒng)下USB設(shè)備的處理方法,可以自動(dòng)修改用戶對(duì)USB設(shè)備 的讀寫權(quán)限,減輕了用戶的負(fù)擔(dān),改善了 Linux系統(tǒng)下與智能卡類型的USB設(shè)備通信出現(xiàn)錯(cuò)
4誤的問題。所述技術(shù)方案如下
一種Linux系統(tǒng)下USB設(shè)備的處理方法,所述方法包括 在Linux系統(tǒng)啟動(dòng)時(shí),加載預(yù)先建立的守護(hù)進(jìn)程;
所述守護(hù)進(jìn)程實(shí)時(shí)判斷是否有通用串行總線USB設(shè)備接入所述Linux系統(tǒng); 如果有USB設(shè)備接入,則判斷所述USB設(shè)備是否符合預(yù)設(shè)的匹配規(guī)則; 如果符合,則獲取所述USB設(shè)備的設(shè)備文件,修改所述USB設(shè)備的操作權(quán)限; 如果不符合,則返回實(shí)時(shí)判斷是否有USB設(shè)備接入的步驟。
所述守護(hù)進(jìn)程采用輪詢或阻塞等待的方式實(shí)時(shí)判斷是否有USB設(shè)備接入所述Linux系統(tǒng)。
所述守護(hù)進(jìn)程采用輪詢的方式判斷是否有USB設(shè)備接入所述Linux系統(tǒng),具體包括 所述守護(hù)進(jìn)程每隔預(yù)先約定的時(shí)間獲取所述Linux系統(tǒng)的USB總線上USB設(shè)備的數(shù)量; 判斷所述數(shù)量是否為零,如果為零,則確定所述Linux系統(tǒng)沒有USB設(shè)備接入,如果不
為零,則確定所述Linux系統(tǒng)有USB設(shè)備接入。
所述守護(hù)進(jìn)程采用阻塞等待的方式實(shí)時(shí)判斷是否有USB設(shè)備接入所述Linux系統(tǒng),具體
包括
所述守護(hù)進(jìn)程等待USB設(shè)備拔插事件;
如果有USB設(shè)備拔插事件發(fā)生,則確定所述Lirmx系統(tǒng)有USB設(shè)備接入,如果沒有USB 設(shè)備拔插事件發(fā)生,則繼續(xù)等待USB設(shè)備拔插事件。 所述預(yù)設(shè)的匹配規(guī)則包括 USB設(shè)備制造商的標(biāo)識(shí)符合預(yù)設(shè)的值,和/或, USB設(shè)備產(chǎn)品標(biāo)識(shí)符合預(yù)設(shè)的值。
所述預(yù)設(shè)的匹配規(guī)則存儲(chǔ)于所述守護(hù)進(jìn)程的程序中,或存儲(chǔ)于配置文件中。 修改所述USB設(shè)備的操作權(quán)限,具體包括
判斷所述USB設(shè)備的操作權(quán)限是否為所有用戶均具有讀和寫的權(quán)限,如果不是,則將所 述USB設(shè)備的操作權(quán)限修改為所有用戶均具有讀和寫的權(quán)限。 修改當(dāng)前用戶對(duì)所述USB設(shè)備的操作權(quán)限之后,還包括
向所述Linux系統(tǒng)發(fā)送釋放消息,所述Linux系統(tǒng)收到后釋放掉所述Linux系統(tǒng)為所述 USB設(shè)備加載的驅(qū)動(dòng)程序。
本發(fā)明提供的技術(shù)方案帶來的有益效果是1、可以自動(dòng)修改USB設(shè)備的讀寫權(quán)限,減 少了使用者的負(fù)擔(dān);2、適用于2.4和2.6的Linux系統(tǒng)內(nèi)核(Kernel) 3、改善了 Linux系統(tǒng)
5下與智能卡類型的USB設(shè)備通信出現(xiàn)錯(cuò)誤的問題。
圖1是本發(fā)明實(shí)施例1提供的Linux系統(tǒng)下USB設(shè)備的處理方法流程圖; 圖2是本發(fā)明實(shí)施例2提供的Limix系統(tǒng)下USB設(shè)備的處理方法流程圖。
具體實(shí)施例方式
為使木發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn) 一步地詳細(xì)描述。
本發(fā)明實(shí)施例提供了一種Linux系統(tǒng)下USB設(shè)備的處理方法,包括
在Linux系統(tǒng)啟動(dòng)時(shí),加載預(yù)先建立的守護(hù)進(jìn)程;該守護(hù)進(jìn)程實(shí)時(shí)判斷是否有USB設(shè)備 接入所述Linux系統(tǒng);如果有USB設(shè)備接入,則判斷所述USB設(shè)備是否符合預(yù)設(shè)的匹配規(guī) 則;如果符合,則獲取所述USB設(shè)備的設(shè)備文件,修改當(dāng)前用戶對(duì)所述USB設(shè)備的操作權(quán) 限;如果不符合,則返回實(shí)時(shí)判斷是否有USB設(shè)備接入的步驟。
在本發(fā)明實(shí)施例中,當(dāng)有USB設(shè)備插入Linux系統(tǒng)時(shí),Linux系統(tǒng)會(huì)為USB設(shè)備創(chuàng)建設(shè) 備文件,Linux系統(tǒng)中的程序可以通過讀寫設(shè)備文件來達(dá)到與USB通信的目的。
上述守護(hù)進(jìn)程是在Linux系統(tǒng)內(nèi)新建的進(jìn)程,用于修改USB設(shè)備的設(shè)備文件中用戶的讀 寫權(quán)限。該守護(hù)進(jìn)程屬于超級(jí)用戶組,當(dāng)有非超級(jí)用戶組的用戶登錄Linux系統(tǒng)吋,守護(hù)進(jìn) 程可以修改該非超級(jí)用戶對(duì)USB設(shè)備的讀寫權(quán)限。另外,可以設(shè)置該守護(hù)進(jìn)程在Linux系統(tǒng) 啟動(dòng)時(shí)自動(dòng)啟動(dòng),進(jìn)一步地,還可以設(shè)置該守護(hù)進(jìn)程在非超級(jí)用戶登錄Linux系統(tǒng)時(shí)自動(dòng)啟 動(dòng)。
實(shí)施例1
如圖1所示,本實(shí)施例提供了一種Linux系統(tǒng)下USB設(shè)備的處理方法,其中,守護(hù)進(jìn)程 采用輪詢的方式實(shí)時(shí)監(jiān)控USB設(shè)備的接入,該方法具體包括如下步驟
步驟101: Linux系統(tǒng)啟動(dòng),加載各項(xiàng)服務(wù),預(yù)先建立的守護(hù)進(jìn)程啟動(dòng),執(zhí)行該守護(hù)進(jìn)程 中所寫入的稃序。
步驟102:守護(hù)進(jìn)程每隔預(yù)先約定的時(shí)間掃描USB總線,獲取USB總線上USB設(shè)備的數(shù)量。
步驟103:守護(hù)進(jìn)程判斷該數(shù)量是否為零,如果為零,則返回步驟102;如果不為零,執(zhí) 行歩驟104。
6具體地,上述輪詢監(jiān)控的方式可以由以下代碼來實(shí)現(xiàn)if((usb_find—busses() <= 0) && (usb—find—devices() <= O))
usle印(500"000);continue;
優(yōu)選地,守護(hù)進(jìn)程每500毫秒掃描一次USB總線。
步驟104:守護(hù)進(jìn)程確定當(dāng)前有USB設(shè)備接入Linux系統(tǒng),則停止掃描USB總線,遍歷USB總線上的所有USB設(shè)備。
其中,優(yōu)選地,停止掃描USB總線的代碼可以為usleep(l 000* 1000); 〃程序停止一秒
步驟105:分別判斷每一個(gè)USB設(shè)備是否符合預(yù)設(shè)的匹配規(guī)則,如果有接入的USB設(shè)備符合該匹配規(guī)則,則表明該USB設(shè)備為指定的待修改操作權(quán)限的USB設(shè)備,因此執(zhí)行步驟106:如果所有USB設(shè)備均不符合該匹配規(guī)則,則返回步驟102。
具體地,判斷一個(gè)USB設(shè)備是否符合預(yù)設(shè)的匹配規(guī)則,可以由以下代碼實(shí)現(xiàn)
〃查找設(shè)備的路徑
for (bus = usb一busses; bus; bus = bus->next)
for (dev = bus->devices5 dev^ dev = dev->next)
〃對(duì)比設(shè)備,判斷是否為預(yù)設(shè)待修改操作權(quán)限的設(shè)備if(dev->descriptor.idVendor != kMyVendorID)
continue;
本實(shí)施例中,預(yù)設(shè)的匹配規(guī)則可以具體為USB設(shè)備制造商的標(biāo)識(shí)符合預(yù)設(shè)的值,和/
或,USB設(shè)備產(chǎn)品標(biāo)識(shí)符合預(yù)設(shè)的值。
預(yù)設(shè)的匹配規(guī)則可以存儲(chǔ)于守護(hù)進(jìn)程的程序中,也可以存儲(chǔ)于在Linux系統(tǒng)中新建的配置文件中。
例如,在守護(hù)進(jìn)程的程序中預(yù)設(shè)匹配規(guī)則為USB設(shè)備的制造商ID為0x096e,具體地,可以在守護(hù)進(jìn)程中定義如下#include <stdio.h>
#include <usb.h> 〃usb-init USB庫初始化#include <memory.h>新nclude <sys/types.h>#include <sys/stat.h>射nclude <unistd.h>
#defme kMyVendorID 0x096e 〃定義待修改權(quán)限的設(shè)備的匹配規(guī)則
該代碼中還包含了守護(hù)進(jìn)程的程序初始化,其中定義一的匹配規(guī)則表明,對(duì)于USB設(shè)備的制造商ID為0x096e的所有USB設(shè)備,可能為一個(gè),也可能為多個(gè),均進(jìn)行操作權(quán)限的修改。
本實(shí)施例中,優(yōu)選地,采用配置文件保存預(yù)設(shè)的匹配規(guī)則,從而可以方便地修改匹配規(guī)則,如可以隨時(shí)在配置文件中添加或刪除一類USB設(shè)備,與采用守護(hù)進(jìn)程保存匹配規(guī)則的方式相比,不需要修改守護(hù)進(jìn)程的代碼,更便于維護(hù)。
步驟106:獲取符合匹配規(guī)則的USB設(shè)備的設(shè)備文件,讀取該設(shè)備文件,獲取該USB設(shè)備的操作權(quán)限信息。
具體地,可以査找USB設(shè)備的目錄,根據(jù)USB設(shè)備的完整路徑獲取到USB設(shè)備的設(shè)備文件。優(yōu)選地,可以用以下代碼來實(shí)現(xiàn)memset(cTemp,0,PATH—MAX*2);
sprintf(cTemp,7proc/bus/usb/%s/%s",bus->dirname,dev->filename);
通常地,USB設(shè)備的設(shè)備文件中都會(huì)存儲(chǔ)有該USB設(shè)備的制造商1D、產(chǎn)品ID、容量大小、最后一次寫入時(shí)間、用戶操作權(quán)限等多種信息。在本實(shí)施例中,守護(hù)進(jìn)程讀取USB設(shè)備的設(shè)備文件,以獲取當(dāng)前用戶對(duì)該USB設(shè)備的操作權(quán)限信息。
進(jìn)一步地,還可以先判斷讀取設(shè)備文件是否成功,如果成功,則執(zhí)行步驟107;如果失敗,則返回步驟102。具體地,可以用如下代碼實(shí)現(xiàn)
memset(&dev—file—stat,O ,sizeof(struct stat));
if(stat(cTemp,&dev—file—stat))
〃發(fā)生錯(cuò)誤break;步驟107:判斷該USB設(shè)備的操作權(quán)限是否為所有用戶均具有讀和寫的權(quán)限,如果是,則返回歩驟102;否則,執(zhí)行步驟108。
例如,可以用如下代碼來判斷
if(((dev—file—stat.st一mode & S—IRUSR) == 0) II((dev_file_stat.st—mode & SJWUSR) == 0) II((dev—file_stat.st—mode & S_IRGRP) == 0) II((dev—file—statst mode & S—IWGRP) == 0) II((dev_file_stat.st_mode & S—IROTH) ==0) II((dev一fie—stat.st一mode & S—IWOTH) == O))本實(shí)施例中,當(dāng)非超級(jí)用戶組的用戶登錄Linux系統(tǒng)時(shí),在Linux系統(tǒng)生成的USB設(shè)備的設(shè)備文件中,包含的該USB設(shè)備的操作權(quán)限通常是-rw-r-r--,其含義如下
"一rw"是指設(shè)備文件的擁有者,即root用戶(登錄系統(tǒng)吋的登錄名為root),具有讀和寫USB設(shè)備的權(quán)限,root用戶是超級(jí)管理員用戶;
第一個(gè)"一r"是指與root同組的用戶,具有讀USB設(shè)備的權(quán)限,但是沒有寫的權(quán)限;第二個(gè)"一r"是指其他用戶,即除了以上兩種用戶以外的其余用戶,具有讀USB設(shè)備的權(quán)限,但是沒有寫的權(quán)限。
歩驟108:將該USB設(shè)備的操作權(quán)限修改為所有用戶均可以對(duì)該USB設(shè)備進(jìn)行讀和寫的操作。
具體地,可以用如下代碼實(shí)現(xiàn)chmod(cTemp, 0666);
步驟109:在修改USB設(shè)備的操作權(quán)限后,如果該USB設(shè)備為智能卡類型的USB設(shè)備,則守護(hù)進(jìn)程向Linux系統(tǒng)發(fā)送釋放該USB設(shè)備的消息,Linux系統(tǒng)收到該消息后,將Linux系統(tǒng)為該USB設(shè)備自動(dòng)加載的驅(qū)動(dòng)程序從Linux系統(tǒng)的內(nèi)核中釋放。
由于USB設(shè)備插入Linux系統(tǒng)后,Linux系統(tǒng)會(huì)加載相應(yīng)的驅(qū)動(dòng)程序,如HID、 CCID、SCSI驅(qū)動(dòng)程序等等,導(dǎo)致USB設(shè)備與Linux系統(tǒng)的通信端口被占用,通過在Linux系統(tǒng)內(nèi)釋放USB設(shè)備,可以解除被占用的通信端口,從而保證了 USB設(shè)備可以繼續(xù)與Linux系統(tǒng)進(jìn)行正常的通信,避免了發(fā)生通信錯(cuò)誤。
具體地,可以采用如下代碼來實(shí)現(xiàn)
usb—open(dev);
usb一detach—kerner一driver—np(udev,O);usb_close(udev);
其中,守護(hù)進(jìn)程通過usb—detach—kerner—driver—np(udev,O)向系統(tǒng)內(nèi)核發(fā)送消息#defme USBDEVFS_DISCONNECT _IO('U', 22),從而使得Linux系統(tǒng)釋放該USB設(shè)備。
在本實(shí)施例中,如果Linux系統(tǒng)上插入多個(gè)USB設(shè)備,則守護(hù)進(jìn)程會(huì)逐一對(duì)USB設(shè)備 的操作權(quán)限進(jìn)行修改,每從/dev目錄得到一個(gè)設(shè)備文件,判斷其讀寫權(quán)限并進(jìn)行修改,完成 后繼續(xù)實(shí)時(shí)監(jiān)控USB總線,得到下一個(gè)設(shè)備文件,然后進(jìn)行相同的操作,從而使得守護(hù)進(jìn)程 可以支持多USB設(shè)備接入的情況。
實(shí)施例2
如圖2所示,本實(shí)施例提供了一種Linux系統(tǒng)下USB設(shè)備的處理方法,其中,守護(hù)進(jìn)程 采用阻塞等待的方式監(jiān)控USB設(shè)備的接入,該方法具體包括如下步驟
步驟201: Linux系統(tǒng)啟動(dòng),加載各項(xiàng)服務(wù),預(yù)先建立的守護(hù)進(jìn)程啟動(dòng),執(zhí)行該守護(hù)進(jìn)程 中所寫入的程序。
步驟202:守護(hù)進(jìn)程等待Linux系統(tǒng)內(nèi)核中USB設(shè)備的拔插事件,直到有USB設(shè)備的拔 插事件發(fā)生;如果沒有USB設(shè)備的拔插事件發(fā)生,則守護(hù)進(jìn)程始終處于等待USB設(shè)備拔插 事件發(fā)生的狀態(tài)。
在本實(shí)施例中,實(shí)現(xiàn)步驟202的主要代碼如下
fd = open("/proc/bus/usb/devices",0一RDONLY); if(fd < 0)
printf("0/os\n",strerro"errnoX); return -1;
while(l)
FD一ZERO(&fdset); FD—SET(fd, &fdset);
rv = select(fd + 1, &fdset, NULL, NULL, NULL); if((rv > 0) && (FD—ISSET(fd,&fdset》)
其中,守護(hù)進(jìn)程打開系統(tǒng)內(nèi)核中描述USB總線上USB設(shè)備狀況的文件,該文件路徑為/proc/bus/usb/devices,該文件記錄了接入該Linux系統(tǒng)USB總線上的所有USB設(shè)備的信息,
關(guān)于USB設(shè)備的插入、拔出情況都會(huì)反映到該文件中,守護(hù)進(jìn)程以只讀的方式讀取這個(gè)文件,
上述代碼中fd表示這個(gè)文件,如果fdO,則讀文件出錯(cuò),fdset為USB設(shè)備文件描述符集,
守護(hù)進(jìn)程通過返回這個(gè)描述符得到USB設(shè)備的拔插情況。
步驟203:守護(hù)進(jìn)程對(duì)USB總線上的所有USB設(shè)備遍歷,判斷是否有符合預(yù)設(shè)的匹配規(guī)
則的USB設(shè)備,如果有匹配的USB設(shè)備,執(zhí)行步驟204;如果沒有,返回歩驟202。 '本實(shí)施例中,預(yù)設(shè)的匹配規(guī)則可以具體為USB設(shè)備制造商的標(biāo)識(shí)符合預(yù)設(shè)的值,和/
或,USB設(shè)備產(chǎn)品標(biāo)識(shí)符合預(yù)設(shè)的值。預(yù)設(shè)的匹配規(guī)則可以存儲(chǔ)于守護(hù)進(jìn)程的程序中,也可
以存儲(chǔ)于在Linux系統(tǒng)中新建的配置文件中。
步驟204:獲取符合匹配規(guī)則的USB設(shè)備的設(shè)備文件,讀取該設(shè)備文件。
步驟205:判斷讀取該設(shè)備文件是否成功,如果成功,則執(zhí)行步驟206;否則,返回步驟
202。
步驟206:獲取該USB設(shè)備的操作權(quán)服信息。
步驟207:判斷該USB設(shè)備的操作權(quán)限是否為所有用戶均具有讀和寫的權(quán)限,如果是, 則返回步驟202;否則,執(zhí)行歩驟208。
歩驟208:將該USB設(shè)備的操作權(quán)限修改為所有用戶均可以對(duì)該USB設(shè)備進(jìn)行讀和寫的 操作。
歩驟209:在修改USB設(shè)備的操作權(quán)限后,如果該USB設(shè)備為智能卡類型的USB設(shè)備, 則守護(hù)進(jìn)程向Linux系統(tǒng)發(fā)送釋放該USB設(shè)備的消息,將Linux系統(tǒng)為該USB設(shè)備自動(dòng)加 載的驅(qū)動(dòng)從Liimx系統(tǒng)的內(nèi)核中釋放,避免了 USB設(shè)備與安裝在Linux系統(tǒng)中的軟件通信受 到影響。
本發(fā)明實(shí)施例提供的上述技術(shù)方案可以自動(dòng)修改USB設(shè)備的讀寫權(quán)限,減少了使用者的 負(fù)擔(dān),而且適用于2.4和2.6的Linux系統(tǒng)內(nèi)核(Kernel),還改善了 Linux系統(tǒng)下與智能卡類 型的USB設(shè)備通信出現(xiàn)錯(cuò)誤的問題。
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之 內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
1權(quán)利要求
1. 一種Linux系統(tǒng)下USB設(shè)備的處理方法,其特征在于,所述方法包括在Linux系統(tǒng)啟動(dòng)時(shí),加載預(yù)先建立的守護(hù)進(jìn)程;所述守護(hù)進(jìn)程實(shí)時(shí)判斷是否有通用串行總線USB設(shè)備接入所述Linux系統(tǒng);如果有USB設(shè)備接入,則判斷所述USB設(shè)備是否符合預(yù)設(shè)的匹配規(guī)則;如果符合,則獲取所述USB設(shè)備的設(shè)備文件,修改所述USB設(shè)備的操作權(quán)限;如果不符合,則返回實(shí)時(shí)判斷是否有USB設(shè)備接入的步驟。
2. 根據(jù)權(quán)利要求1所述的Liimx系統(tǒng)下USB設(shè)備的處理方法,其特征在于,所述守護(hù)進(jìn)程采用輪詢或阻塞等待的方式實(shí)時(shí)判斷是否有USB設(shè)備接入所述Linux系統(tǒng)。
3. 根據(jù)權(quán)利要求2所述的Linux系統(tǒng)下USB設(shè)備的處理方法,其特征在于,所述守護(hù)進(jìn)程采用輪詢的方式判斷是否有USB設(shè)備接入所述Linux系統(tǒng),具體包括所述守護(hù)進(jìn)程每隔預(yù)先約定的時(shí)間獲取所述Linux系統(tǒng)的USB總線上USB設(shè)備的數(shù)量;判斷所述數(shù)量是否為零,如果為零,則確定所述Linux系統(tǒng)沒有USB設(shè)備接入,如果不為零,則確定所述Linux系統(tǒng)有USB設(shè)備接入。
4. 根據(jù)權(quán)利要求2所述的Linux系統(tǒng)下USB設(shè)備的處理方法,其特征在于,所述守護(hù)進(jìn)程采用阻塞等待的方式實(shí)時(shí)判斷是否有USB設(shè)備接入所述Linux系統(tǒng),具體包括所述守護(hù)進(jìn)程等待USB設(shè)備拔插事件;如果有USB設(shè)備拔插事件發(fā)生,則確定所述Linux系統(tǒng)有USB設(shè)備接入,如果沒有USB設(shè)備拔插事件發(fā)生,則繼續(xù)等待USB設(shè)備拔插事件。
5. 根據(jù)權(quán)利要求1所述的Linux系統(tǒng)下USB設(shè)備的處理方法,其特征在于,所述預(yù)設(shè)的匹配規(guī)則包括USB設(shè)備制造商的標(biāo)識(shí)符合預(yù)設(shè)的值,和/或,USB設(shè)備產(chǎn)品標(biāo)識(shí)符合預(yù)設(shè)的值。
6. 根據(jù)權(quán)利要求1所述的Linux系統(tǒng)下USB設(shè)備的處理方法,其特征在于,所述預(yù)設(shè)的匹配規(guī)則存儲(chǔ)于所述守護(hù)進(jìn)程的程序中,或存儲(chǔ)于配置文件中。
7. 根據(jù)權(quán)利要求1所述的Linux系統(tǒng)下USB設(shè)備的處理方法,其特征在于,修改所述USB設(shè)備的操作權(quán)限,具體包括判斷所述USB設(shè)備的操作權(quán)限是否為所有用戶均具有讀和寫的權(quán)限,如果不是,則將所述USB設(shè)備的操作權(quán)限修改為所有用戶均具有讀和寫的權(quán)限。
8. 根據(jù)權(quán)利要求l所述的Linux系統(tǒng)下USB設(shè)備的處理方法,其特征在于,修改當(dāng)前用戶對(duì)所述USB設(shè)備的操作權(quán)限之后,還包括向所述Linux系統(tǒng)發(fā)送釋放消息,所述Linux系統(tǒng)收到后釋放掉所述Linux系統(tǒng)為所述USB設(shè)備加載的驅(qū)動(dòng)程序。
全文摘要
本發(fā)明公開了一種Linux系統(tǒng)下USB設(shè)備的處理方法,屬于操作系統(tǒng)領(lǐng)域。所述方法包括在Linux系統(tǒng)啟動(dòng)時(shí),加載預(yù)先建立的守護(hù)進(jìn)程;所述守護(hù)進(jìn)程實(shí)時(shí)判斷是否有通用串行總線USB設(shè)備接入所述Linux系統(tǒng);如果有USB設(shè)備接入,則判斷所述USB設(shè)備是否符合預(yù)設(shè)的匹配規(guī)則;如果符合,則獲取所述USB設(shè)備的設(shè)備文件,修改所述USB設(shè)備的操作權(quán)限;如果不符合,則返回實(shí)時(shí)判斷是否有USB設(shè)備接入的步驟。本發(fā)明可以自動(dòng)修改用戶對(duì)USB設(shè)備的讀寫權(quán)限,減輕了用戶的負(fù)擔(dān),改善了Linux系統(tǒng)下與智能卡類型的USB設(shè)備通信出現(xiàn)錯(cuò)誤的問題。
文檔編號(hào)G06F13/10GK101488114SQ20091007733
公開日2009年7月22日 申請(qǐng)日期2009年2月18日 優(yōu)先權(quán)日2009年2月18日
發(fā)明者于華章, 舟 陸 申請(qǐng)人:北京飛天誠信科技有限公司