專利名稱:實(shí)現(xiàn)輸入設(shè)備熱插拔的系統(tǒng)及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及基于Linux操作系統(tǒng)的實(shí)現(xiàn)輸入設(shè)備熱插拔的系統(tǒng)及方法。
背景技術(shù):
目前,Linux操作系統(tǒng)作為一個(gè)開(kāi)放源代碼的操作系統(tǒng),已經(jīng)廣泛應(yīng)用在服務(wù)器、嵌入式等領(lǐng)域。Linux操作系統(tǒng)分為內(nèi)核空間和用戶空間的,在內(nèi)核空間里面主要包括驅(qū)動(dòng)模塊、操作系統(tǒng)的核心模塊以及處理模塊,行業(yè)里把內(nèi)核空間內(nèi)的所有模塊統(tǒng)稱為L(zhǎng)inux內(nèi)核空間,而用戶空間一般包含用戶程序,用戶程序不能無(wú)限制的使用內(nèi)核空間的功能,用戶程序必須按照內(nèi)核空間提供的既有功能、既有方法來(lái)使用。傳統(tǒng)的Linux操作系統(tǒng)中,有兩種不同的方法來(lái)看待熱插拔。Linux操作系統(tǒng)的內(nèi)核空間看待熱插拔為硬件,是內(nèi)核空間和硬件之間的交互。而用戶看待熱插拔是內(nèi)核空間和用戶空間中的用戶程序的交互,用戶程序通過(guò)內(nèi)核空間發(fā)給用戶空間的通知來(lái)得知設(shè)備的熱插拔。目前,Linux操作系統(tǒng)關(guān)于設(shè)備熱插拔的實(shí)現(xiàn)隨著版本的升級(jí)不斷再變化。Linux操作系統(tǒng)的熱插拔的原有實(shí)現(xiàn),依賴于Linux操作系統(tǒng)的設(shè)備模型。在Linux操作系統(tǒng)現(xiàn)有的設(shè)備模型下,當(dāng)輸入設(shè)備熱插拔時(shí),在設(shè)備模型子系統(tǒng)下,將產(chǎn)生事件以通知用戶空間,即內(nèi)核空間通知用戶空間發(fā)生了某種熱插拔事件時(shí),內(nèi)核空間調(diào)用用戶空間的處理程序。當(dāng)用戶向Linux操作系統(tǒng)添加或刪除輸入設(shè)備時(shí),內(nèi)核空間會(huì)產(chǎn)生一個(gè)熱插拔事件,并在/proc/sys/kernel/hotplug (Linux操作系統(tǒng)下的一個(gè)文件)里查找處理輸入設(shè)備連接的用戶空間內(nèi)的用戶程序。這個(gè)用戶空間內(nèi)的用戶程序主要有:Hotplug用戶程序:這個(gè)程序是一個(gè)典型的bash腳本,只傳遞執(zhí)行權(quán)給一系列位于/etc/hot-plug.d/目錄樹(shù)的程序。hotplug腳本搜索所有的具有.hotplug后綴的可能對(duì)這個(gè)事件進(jìn)行處理的程序并調(diào)用它們,并傳遞給它們?cè)S多不同的已經(jīng)被內(nèi)核空間設(shè)置的環(huán)境變量,目前這個(gè)用戶程序基本被淘汰;Udev用戶程序:用于linux2.6.13或更高版本的內(nèi)核空間上,為用戶空間提供使用固定設(shè)備名的動(dòng)態(tài)/dev目錄的解決方案。它通過(guò)在sysfs的/class/和/block/目錄樹(shù)中查找一個(gè)稱為dev的文件,以確定所創(chuàng)建的設(shè)備節(jié)點(diǎn)文件的主次設(shè)備號(hào),所以要使用udev,驅(qū)動(dòng)模塊必須為輸入設(shè)備在sysfs中創(chuàng)建類接口及其dev屬性文件,方法和sculld模塊中創(chuàng)建dev屬性相同。上述采用hotplug、udev用戶程序?qū)崿F(xiàn)輸入設(shè)備熱插拔的系統(tǒng)及方法,必須結(jié)合內(nèi)核空間和用戶空間才能實(shí)現(xiàn)實(shí)現(xiàn)輸入設(shè)備熱插拔,由此可知,目前還沒(méi)有一種可以在Linux操作系統(tǒng)的內(nèi)核空間中直接實(shí)現(xiàn)輸入設(shè)備熱插拔的系統(tǒng)及方法。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種可以在Linux操作系統(tǒng)的內(nèi)核空間中直接實(shí)現(xiàn)輸入設(shè)備熱插拔的系統(tǒng)及方法,通過(guò)在Linux操作系統(tǒng)的內(nèi)核空間中直接獲取輸入設(shè)備熱插拔事件,結(jié)合在Linux操作系統(tǒng)的內(nèi)核空間的圖形庫(kù)直接渲染技術(shù)來(lái)實(shí)現(xiàn)設(shè)備的熱插拔。為了達(dá)到上述的目的,本發(fā)明采用如下技術(shù)方案: 一種實(shí)現(xiàn)輸入設(shè)備熱插拔的系統(tǒng),基于Linux操作系統(tǒng),包括分別屬于Linux操作系統(tǒng)的內(nèi)核空間的驅(qū)動(dòng)模塊、輸入核心模塊和輸入設(shè)備處理模塊;當(dāng)輸入設(shè)備熱插或熱拔時(shí),驅(qū)動(dòng)模塊將輸入設(shè)備的熱插拔類型傳遞給輸入核心模塊;輸入核心模塊調(diào)用Linux操作系統(tǒng)的系統(tǒng)函數(shù)匹配對(duì)應(yīng)的輸入設(shè)備處理模塊,匹配成功后在Linux操作系統(tǒng)的內(nèi)核空間中直接截取輸入設(shè)備的熱插拔事件,并將輸入設(shè)備的熱插拔事件發(fā)送給輸入設(shè)備處理模塊;所述輸入設(shè)備處理模塊根據(jù)所述輸入設(shè)備的熱插拔事件,進(jìn)行有關(guān)所述輸入設(shè)備的處理??蛇x的,在上述的實(shí)現(xiàn)輸入設(shè)備熱插拔的系統(tǒng)中,所述驅(qū)動(dòng)模塊或者所述輸入設(shè)備處理模塊包括連接函數(shù)模塊與斷開(kāi)函數(shù)模塊,所述連接函數(shù)模塊用于將輸入設(shè)備加入到Linux操作系統(tǒng)的輸入設(shè)備列表中并截取所述輸入設(shè)備的熱插事件,所述斷開(kāi)函數(shù)模塊用于將輸入設(shè)備從Linux操作系統(tǒng)的輸入設(shè)備列表中刪除并截取輸入設(shè)備的熱拔事件,所述輸入核心模塊在匹配成功后,根據(jù)輸入設(shè)備的熱插拔類型調(diào)用所述連接函數(shù)模塊或所述斷開(kāi)函數(shù)模塊實(shí)現(xiàn)對(duì)所述輸入設(shè)備的熱插拔事件的截取??蛇x的,在上述的實(shí)現(xiàn)輸入設(shè)備熱插拔的系統(tǒng)中,所述輸入設(shè)備是鼠標(biāo)、鍵盤(pán)、觸摸屏中的一種或多種。本發(fā)明還公開(kāi)了一種實(shí)現(xiàn)輸入設(shè)備熱插拔的方法,包括如下步驟:步驟S1:當(dāng)輸入設(shè)備熱插或熱拔時(shí),驅(qū)動(dòng)模塊將輸入設(shè)備的熱插拔類型傳遞給輸入核心模塊;步驟S2:輸入核心模塊調(diào)用Linux操作系統(tǒng)的系統(tǒng)函數(shù)匹配到對(duì)應(yīng)的輸入設(shè)備處理模塊,匹配成功后根據(jù)輸入設(shè)備的熱插拔類型在Linux操作系統(tǒng)的內(nèi)核空間中直接截取輸入設(shè)備的熱插拔事件;步驟S3:輸入核心模塊將輸入設(shè)備的熱插拔事件發(fā)送給輸入設(shè)備處理模塊,輸入設(shè)備處理模塊根據(jù)輸入設(shè)備的熱插拔事件,進(jìn)行關(guān)于輸入設(shè)備的處理。優(yōu)選的,在上述的實(shí)現(xiàn)輸入設(shè)備熱插拔的方法中,所述驅(qū)動(dòng)模塊或者所述輸入設(shè)備處理模塊包括連接函數(shù)模塊和斷開(kāi)函數(shù)模塊,所述連接函數(shù)模塊用于將輸入設(shè)備加入到Linux操作系統(tǒng)的輸入設(shè)備列表中并截取所述輸入設(shè)備的熱插事件,所述斷開(kāi)函數(shù)模塊用于將輸入設(shè)備從Linux操作系統(tǒng)的輸入設(shè)備列表中刪除并截取輸入設(shè)備的熱拔事件。優(yōu)選的,在上述的實(shí)現(xiàn)輸入設(shè)備熱插拔的方法中,當(dāng)輸入設(shè)備熱插時(shí),所述步驟S2具體包括如下子步驟:輸入核心模塊遍歷驅(qū)動(dòng)模塊和輸入設(shè)備處理模塊,并為所述輸入設(shè)備掛載對(duì)應(yīng)的輸入設(shè)備處理模塊;輸入核心模塊掛載成功后調(diào)用所述連接函數(shù)模塊;輸入核心模塊截取輸入設(shè)備的熱插事件。所述步驟S3具體包括如下子步驟:輸入核心模塊將輸入設(shè)備的熱插事件發(fā)送給輸入設(shè)備處理模塊;輸入設(shè)備處理模塊建立所述輸入設(shè)備相關(guān)的數(shù)據(jù)結(jié)構(gòu),允許所述輸入設(shè)備的輸入事件。
優(yōu)選的,在上述的實(shí)現(xiàn)輸入設(shè)備熱插拔的方法中,當(dāng)輸入設(shè)備熱拔時(shí),所述步驟S2具體包括如下子步驟:輸入核心模塊遍歷驅(qū)動(dòng)模塊和輸入設(shè)備處理模塊,為所述輸入設(shè)備卸載對(duì)應(yīng)的輸入設(shè)備處理模塊;輸入核心模塊卸載成功后調(diào)用所述斷開(kāi)函數(shù)模塊;輸入核心模塊截取輸入設(shè)備的熱拔事件。所述步驟S3具體包括如下子步驟:輸入核心模塊將輸入設(shè)備的熱拔事件發(fā)送給輸入設(shè)備處理模塊;輸入設(shè)備處理模塊刪除所述輸入設(shè)備相關(guān)的數(shù)據(jù)結(jié)構(gòu),禁止所述輸入設(shè)備的輸入事件。本發(fā)明提供的實(shí)現(xiàn)輸入設(shè)備熱插拔的系統(tǒng)及方法,包括分別屬于Linux操作系統(tǒng)的內(nèi)核空間的驅(qū)動(dòng)模塊、輸入核心模塊及輸入設(shè)備處理模塊;當(dāng)輸入設(shè)備熱插或熱拔時(shí),驅(qū)動(dòng)模塊將輸入設(shè)備的熱插拔類型傳遞給輸入核心模塊;輸入核心模塊調(diào)用Linux操作系統(tǒng)的系統(tǒng)函數(shù)匹配對(duì)應(yīng)的輸入設(shè)備處理模塊,匹配成功后在Linux操作系統(tǒng)的內(nèi)核空間中直接截取輸入設(shè)備的熱插拔事件,并將輸入設(shè)備的熱插拔事件發(fā)送給輸入設(shè)備處理模塊;所述輸入設(shè)備處理模塊根據(jù)所述輸入設(shè)備的熱插拔事件,進(jìn)行有關(guān)所述輸入設(shè)備的處理。由于所述驅(qū)動(dòng)模塊、輸入核心模塊及輸入設(shè)備處理模塊屬于Linux操作系統(tǒng)的內(nèi)核空間,因此,本發(fā)明可在Linux操作系統(tǒng)的內(nèi)核空間中直接實(shí)現(xiàn)輸入設(shè)備的熱插拔技術(shù),可以提高Linux操作系統(tǒng)的處理效率。
本發(fā)明的實(shí)現(xiàn)輸入設(shè)備熱插拔的系統(tǒng)及方法由以下的實(shí)施例及附圖給出。圖1是本發(fā)明的實(shí)現(xiàn)輸入設(shè)備熱插拔的系統(tǒng)的結(jié)構(gòu)示意圖;圖2是本發(fā)明的實(shí)現(xiàn)輸入設(shè)備熱插拔的方法的總體流程圖;圖3是本發(fā)明的實(shí)現(xiàn)輸入設(shè)備熱插拔的方法熱插時(shí)的詳細(xì)流程圖;圖4是本發(fā)明的實(shí)現(xiàn)輸入設(shè)備熱插拔的方法熱拔時(shí)的詳細(xì)流程圖;圖中,10-輸入設(shè)備、20-內(nèi)核空間、21-驅(qū)動(dòng)模塊、22-輸入核心模塊、23-輸入設(shè)備處理模塊。
具體實(shí)施例方式以下將對(duì)本發(fā)明的實(shí)現(xiàn)輸入設(shè)備熱插拔的系統(tǒng)及方法作進(jìn)一步的詳細(xì)描述。實(shí)施例一請(qǐng)參閱圖1,本實(shí)施例提供的實(shí)現(xiàn)輸入設(shè)備熱插拔的系統(tǒng),基于Linux操作系統(tǒng),包括:驅(qū)動(dòng)模塊21,用于負(fù)責(zé)輸入設(shè)備10和輸入核心模塊22之間通信;輸入核心模塊22,用于根據(jù)所述輸入設(shè)備10的熱插拔類型實(shí)現(xiàn)輸入設(shè)備10或輸入設(shè)備處理模塊23的注冊(cè)或注銷;以及輸入設(shè)備處理模塊23,用于實(shí)現(xiàn)應(yīng)用程序和輸入核心模塊22之間的通信;其中,所述的驅(qū)動(dòng)模塊21、輸入核心模塊22與輸入設(shè)備處理模塊23屬于Linux操作系統(tǒng)的內(nèi)核空間20,當(dāng)輸入設(shè)備10熱插或熱拔時(shí),驅(qū)動(dòng)模塊21將輸入設(shè)備10的熱插拔類型傳遞給輸入核心模塊22 ;其中,所述輸入設(shè)備10可以是鼠標(biāo)、鍵盤(pán)、觸摸屏等中的一種或多種。在驅(qū)動(dòng)模塊21中,為每個(gè)特定的輸入設(shè)備10配有對(duì)應(yīng)的驅(qū)動(dòng)模塊21,相應(yīng)地,在輸入設(shè)備10處理模塊22中,為每個(gè)特定的輸入設(shè)備10配有對(duì)應(yīng)的輸入設(shè)備處理模塊23,例如,鍵盤(pán)對(duì)應(yīng)驅(qū)動(dòng)模塊21中的鍵盤(pán)驅(qū)動(dòng)模塊(PS/2),并對(duì)應(yīng)輸入設(shè)備處理模塊23中的鍵盤(pán)處理模塊(Keyboard Handler)。輸入核心模塊22調(diào)用Linux操作系統(tǒng)的系統(tǒng)函數(shù)匹配對(duì)應(yīng)的輸入設(shè)備處理模塊23,匹配成功后在Linux操作系統(tǒng)的內(nèi)核空間20中直接截取輸入設(shè)備10的熱插拔事件,并將輸入設(shè)備10的熱插拔事件發(fā)送給輸入設(shè)備處理模塊23 ;所述輸入設(shè)備處理模塊23根據(jù)所述輸入設(shè)備10的熱插拔事件,進(jìn)行有關(guān)所述輸入設(shè)備10的處理。所述驅(qū)動(dòng)模塊21或者所述輸入設(shè)備處理模塊23還包括連接函數(shù)模塊與斷開(kāi)函數(shù)模塊。本實(shí)施例中,所述連接函數(shù)模塊用于將輸入設(shè)備10加入到Linux操作系統(tǒng)的輸入設(shè)備列表中并截取所述輸入設(shè)備10的熱插事件,所述斷開(kāi)函數(shù)模塊用于將輸入設(shè)備10從Linux操作系統(tǒng)的輸入設(shè)備列表中刪除并截取輸入設(shè)備10的熱拔事件,所述輸入核心模塊22在匹配成功后,會(huì)根據(jù)輸入設(shè)備10的熱插拔類型相應(yīng)調(diào)用所述連接函數(shù)模塊或所述斷開(kāi)函數(shù)模塊實(shí)現(xiàn)對(duì)所述輸入設(shè)備10的熱插拔事件的截取。由于所述驅(qū)動(dòng)模塊21、輸入核心模塊22、輸入設(shè)備處理模塊23屬于Linux操作系統(tǒng)的內(nèi)核空間20,因此,本發(fā)明可在Linux操作系統(tǒng)的內(nèi)核空間20中直接獲取輸入設(shè)備10的熱插拔事件,從而可以結(jié)合在內(nèi)核空間20中的圖形庫(kù)直接渲染技術(shù)來(lái)實(shí)現(xiàn)輸入設(shè)備10的熱插拔,能夠提高Linux操作系統(tǒng)的處理效率。實(shí)施例二請(qǐng)參閱圖2,并請(qǐng)結(jié)合參閱圖1,本實(shí)施例的實(shí)現(xiàn)輸入設(shè)備熱插拔的方法,包括如下步驟:步驟SI,當(dāng)輸入設(shè)備10熱插或熱拔時(shí),驅(qū)動(dòng)模塊21將所述輸入設(shè)備10的熱插拔類型(熱插或熱拔)傳遞給輸入核心模塊22,本實(shí)施例中,輸入設(shè)備10的熱插拔類型是熱插,所述輸入設(shè)備10是鼠標(biāo);步驟S2,輸入核心模塊22調(diào)用Linux操作系統(tǒng)的系統(tǒng)函數(shù)匹配到對(duì)應(yīng)的輸入設(shè)備處理模塊23,匹配成功后根據(jù)輸入設(shè)備10的熱插拔類型在Linux操作系統(tǒng)的內(nèi)核空間20中直接截取輸入設(shè)備10的熱插拔事件;步驟S3,輸入核心模塊22將輸入設(shè)備10的熱插拔事件發(fā)送給輸入設(shè)備處理模塊23,輸入設(shè)備處理模塊23根據(jù)輸入設(shè)備10的熱插拔事件,進(jìn)行關(guān)于輸入設(shè)備10的處理。請(qǐng)參閱圖3,本實(shí)施例中,所述步驟S2具體包括如下子步驟:步驟S2-1,輸入核心模塊22遍歷驅(qū)動(dòng)模塊21和輸入設(shè)備處理模塊23,為新注冊(cè)的輸入設(shè)備10掛載對(duì)應(yīng)的輸入設(shè)備處理模塊23,此步驟S2-2即為上文所述的輸入核心模塊22調(diào)用Linux操作系統(tǒng)的系統(tǒng)函數(shù)匹配對(duì)應(yīng)的輸入設(shè)備處理模塊23的匹配過(guò)程;步驟S2-2,輸入核心模塊22掛載成功后調(diào)用驅(qū)動(dòng)模塊21中的連接函數(shù)模塊;步驟S2-3,輸入核心模塊22截取輸入設(shè)備10的熱插事件。
繼續(xù)參閱圖3,本實(shí)施例中,所述步驟S3具體包括如下子步驟:步驟S3-1,輸入核心模塊22將輸入設(shè)備10的熱插事件發(fā)送給輸入設(shè)備處理模塊23 ;步驟S3-2,輸入設(shè)備處理模塊23建立輸入設(shè)備10相關(guān)的數(shù)據(jù)結(jié)構(gòu),允許輸入設(shè)備10的輸入事件,由此在Linux操作系統(tǒng)的內(nèi)核空間20中直接實(shí)現(xiàn)輸入設(shè)備的熱插拔。實(shí)施例三請(qǐng)參閱圖4,并請(qǐng)結(jié)合參閱圖1,本實(shí)施例與實(shí)施例二的區(qū)別在于,輸入設(shè)備10是鍵盤(pán),輸入設(shè)備10的熱插拔類型是熱拔,輸入設(shè)備處理模塊23中包括連接函數(shù)模塊與斷開(kāi)函數(shù)模塊。本實(shí)施例的實(shí)現(xiàn)輸入設(shè)備熱插拔的方法,具體包括如下步驟:步驟SI,驅(qū)動(dòng)模塊21將輸入設(shè)備10的熱插拔類型傳遞給輸入核心模塊22 ;步驟S2-1,輸入核心模塊22遍歷驅(qū)動(dòng)模塊21和輸入設(shè)備處理模塊23,為新注銷的輸入設(shè)備10卸載對(duì)應(yīng)的輸入設(shè)備處理模塊23,此步驟S2-2也為上文所述的輸入核心模塊22調(diào)用Linux操作系統(tǒng)的系統(tǒng)函數(shù)匹配對(duì)應(yīng)的輸入設(shè)備處理模塊23的匹配過(guò)程;步驟S2-2,輸入核心模塊22卸載成功后調(diào)用輸入設(shè)備處理模塊23中的斷開(kāi)函數(shù)模塊;步驟S2-3,輸入核心模塊22截取輸入設(shè)備10的熱拔事件;步驟S3-1,輸入核心模塊22將輸入設(shè)備10的熱拔事件發(fā)送給輸入設(shè)備處理模塊23 ;步驟S3-2,輸入設(shè)備處理模塊23刪除輸入設(shè)備10相關(guān)的數(shù)據(jù)結(jié)構(gòu),禁止所述輸入設(shè)備10的輸入事件,由此在Linux操作系統(tǒng)的內(nèi)核空間20中直接實(shí)現(xiàn)輸入設(shè)備的熱插拔。本發(fā)明提供的實(shí)現(xiàn)輸入設(shè)備熱插拔的系統(tǒng)及方法,當(dāng)輸入設(shè)備熱插或熱拔時(shí),驅(qū)動(dòng)模塊將輸入設(shè)備的熱插拔類型傳遞給輸入核心模塊;輸入核心模塊調(diào)用Linux操作系統(tǒng)的系統(tǒng)函數(shù)匹配對(duì)應(yīng)的輸入設(shè)備處理模塊,匹配成功后在Linux操作系統(tǒng)的內(nèi)核空間中直接截取輸入設(shè)備的熱插拔事件,并將輸入設(shè)備的熱插拔事件發(fā)送給輸入設(shè)備處理模塊;所述輸入設(shè)備處理模塊根據(jù)所述輸入設(shè)備的熱插拔事件,進(jìn)行有關(guān)所述輸入設(shè)備的處理。由于所述驅(qū)動(dòng)模塊、輸入核心模塊及輸入設(shè)備處理模塊屬于Linux操作系統(tǒng)的內(nèi)核空間,因此,本發(fā)明可在Linux操作系統(tǒng)的內(nèi)核空間中直接實(shí)現(xiàn)輸入設(shè)備的熱插拔技術(shù),可以提高Linux操作系統(tǒng)的處理效率。本說(shuō)明書(shū)中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見(jiàn)即可。對(duì)于實(shí)施例公開(kāi)的系統(tǒng)而言,由于與實(shí)施例公開(kāi)的方法相對(duì)應(yīng),所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法部分說(shuō)明即可。專業(yè)人員還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開(kāi)的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來(lái)實(shí)現(xiàn),為了清楚地說(shuō)明硬件和軟件的可互換性,在上述說(shuō)明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來(lái)執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來(lái)使用不同方法來(lái)實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1.一種實(shí)現(xiàn)輸入設(shè)備熱插拔的系統(tǒng),基于Linux操作系統(tǒng),其特征在于,包括分別屬于Linux操作系統(tǒng)的內(nèi)核空間的驅(qū)動(dòng)模塊、輸入核心模塊和輸入設(shè)備處理模塊;當(dāng)輸入設(shè)備熱插或熱拔時(shí),驅(qū)動(dòng)模塊將輸入設(shè)備的熱插拔類型傳遞給輸入核心模塊;所述輸入核心模塊調(diào)用Linux操作系統(tǒng)的系統(tǒng)函數(shù)匹配對(duì)應(yīng)的輸入設(shè)備處理模塊,匹配成功后在Linux操作系統(tǒng)的內(nèi)核空間中直接截取輸入設(shè)備的熱插拔事件,并將輸入設(shè)備的熱插拔事件發(fā)送給輸入設(shè)備處理模塊;所述輸入設(shè)備處理模塊根據(jù)所述輸入設(shè)備的熱插拔事件,進(jìn)行有關(guān)所述輸入設(shè)備的處理。
2.根據(jù)權(quán)利要求1所述的實(shí)現(xiàn)輸入設(shè)備熱插拔的系統(tǒng),其特征在于,所述驅(qū)動(dòng)模塊或者所述輸入設(shè)備處理模塊包括連接函數(shù)模塊與斷開(kāi)函數(shù)模塊,所述連接函數(shù)模塊用于將輸入設(shè)備加入到Linux操作系統(tǒng)的輸入設(shè)備列表中并截取所述輸入設(shè)備的熱插事件,所述斷開(kāi)函數(shù)模塊用于將輸入設(shè)備從Linux操作系統(tǒng)的輸入設(shè)備列表中刪除并截取輸入設(shè)備的熱拔事件,所述輸入核心模塊在匹配成功后,根據(jù)輸入設(shè)備的熱插拔類型調(diào)用所述連接函數(shù)模塊或所述斷開(kāi)函數(shù)模塊實(shí)現(xiàn)對(duì)所述輸入設(shè)備的熱插拔事件的截取。
3.根據(jù)權(quán)利要求1或2所述的實(shí)現(xiàn)輸入設(shè)備熱插拔的系統(tǒng),其特征在于,所述輸入設(shè)備是鼠標(biāo)、鍵盤(pán)、觸摸屏中的一種或多種。
4.一種實(shí)現(xiàn)輸入設(shè)備熱插拔的方法,其特征在于,包括如下步驟: 步驟S1:當(dāng)輸入設(shè)備熱插或熱拔時(shí),驅(qū)動(dòng)模塊將輸入設(shè)備的熱插拔類型傳遞給輸入核心豐旲塊; 步驟S2:輸入核心模塊調(diào)用Linux操作系統(tǒng)的系統(tǒng)函數(shù)匹配到對(duì)應(yīng)的輸入設(shè)備處理模塊,匹配成功后根據(jù)輸入設(shè)備的熱插拔類型在Linux操作系統(tǒng)的內(nèi)核空間中直接截取輸入設(shè)備的熱插拔事件; 步驟S3:輸入核心模塊將輸入設(shè)備的熱插拔事件發(fā)送給輸入設(shè)備處理模塊,輸入設(shè)備處理模塊根據(jù)輸入設(shè)備的熱插拔事件,進(jìn)行關(guān)于輸入設(shè)備的處理。
5.根據(jù)權(quán)利要求4所述的實(shí)現(xiàn)輸入設(shè)備熱插拔的方法,其特征在于,所述驅(qū)動(dòng)模塊或者所述輸入設(shè)備處理模塊包括連接函數(shù)模塊和斷開(kāi)函數(shù)模塊,所述連接函數(shù)模塊用于將輸入設(shè)備加入到Linux操作系統(tǒng)的輸入設(shè)備列表中并截取所述輸入設(shè)備的熱插事件,所述斷開(kāi)函數(shù)模塊用于將輸入設(shè)備從Linux操作系統(tǒng)的輸入設(shè)備列表中刪除并截取輸入設(shè)備的熱拔事件。
6.根據(jù)權(quán)利要求5所述的實(shí)現(xiàn)輸入設(shè)備熱插拔的方法,其特征在于,當(dāng)輸入設(shè)備熱插時(shí),所述步驟S2具體包括如下子步驟: 輸入核心模塊遍歷驅(qū)動(dòng)模塊和輸入設(shè)備處理模塊,并為所述輸入設(shè)備掛載對(duì)應(yīng)的輸入設(shè)備處理模塊; 輸入核心模塊掛載成功后調(diào)用所述連接函數(shù)模塊; 輸入核心模塊截取輸入設(shè)備的熱插事件。
7.根據(jù)權(quán)利要求6所述的實(shí)現(xiàn)輸入設(shè)備熱插拔的方法,其特征在于,所述步驟S3具體包括如下子步驟: 輸入核心模塊將輸入設(shè)備的熱插事件發(fā)送給輸入設(shè)備處理模塊; 輸入設(shè)備處理模塊建立所述輸入設(shè)備相關(guān)的數(shù)據(jù)結(jié)構(gòu),允許所述輸入設(shè)備的輸入事件。
8.根據(jù)權(quán)利要求5所述的實(shí)現(xiàn)輸入設(shè)備熱插拔的方法,其特征在于,當(dāng)輸入設(shè)備熱拔時(shí),所述步驟S2具體包括如下子步驟: 輸入核心模塊遍歷驅(qū)動(dòng)模塊和輸入設(shè)備處理模塊,為所述輸入設(shè)備卸載對(duì)應(yīng)的輸入設(shè)備處理模塊; 輸入核心模塊卸載成功后調(diào)用所述斷開(kāi)函數(shù)模塊; 輸入核心模塊截取輸入設(shè)備的熱拔事件。
9.根據(jù)權(quán)利要求8所述的實(shí)現(xiàn)輸入設(shè)備熱插拔的方法,其特征在于,所述步驟S3具體包括如下子步驟: 輸入核心模塊將輸入設(shè)備的熱拔事件發(fā)送給輸入設(shè)備處理模塊; 輸入設(shè)備處理模塊刪除所述輸入設(shè)備相關(guān)的數(shù)據(jù)結(jié)構(gòu),禁止所述輸入設(shè)備的輸入事 件。
全文摘要
本發(fā)明公開(kāi)了一種實(shí)現(xiàn)輸入設(shè)備熱插拔的系統(tǒng)及方法,包括分別屬于Linux操作系統(tǒng)的內(nèi)核空間的驅(qū)動(dòng)模塊、輸入核心模塊和輸入設(shè)備處理模塊;當(dāng)輸入設(shè)備熱插或熱拔時(shí),所述驅(qū)動(dòng)模塊將輸入設(shè)備的熱插拔類型傳遞給輸入核心模塊;所述輸入核心模塊調(diào)用Linux操作系統(tǒng)的系統(tǒng)函數(shù)匹配到對(duì)應(yīng)的輸入設(shè)備處理模塊,匹配成功后根據(jù)輸入設(shè)備的熱插拔類型在Linux操作系統(tǒng)的內(nèi)核空間中直接截取輸入設(shè)備的熱插拔事件;所述輸入核心模塊將輸入設(shè)備的熱插拔事件發(fā)送給輸入設(shè)備處理模塊,輸入設(shè)備處理模塊根據(jù)輸入設(shè)備的熱插拔事件,進(jìn)行關(guān)于輸入設(shè)備的處理。本發(fā)明可在Linux操作系統(tǒng)的內(nèi)核空間中直接實(shí)現(xiàn)輸入設(shè)備的熱插拔技術(shù),可以提高Linux操作系統(tǒng)的處理效率。
文檔編號(hào)G06F9/44GK103186373SQ20111045445
公開(kāi)日2013年7月3日 申請(qǐng)日期2011年12月29日 優(yōu)先權(quán)日2011年12月29日
發(fā)明者梁金祥 申請(qǐng)人:盛樂(lè)信息技術(shù)(上海)有限公司