專利名稱:硬件設備控制方法及驅動模塊的制作方法
技術領域:
本發明涉及設備驅動技術領域,尤其涉及一種硬件設備控制方法及驅動模塊。
背景技術:
計算機的操作系統用于管理計算機的硬件資源與軟件資源,其架構如圖I所示,包括應用層、內核層和驅動程序,其中驅動程序與計算機的硬件設備對應,若硬件設備為聲卡,則對應的驅動程序為聲卡驅動程序,若硬件設備為磁盤,則對應的驅動程序為磁盤驅動程序,若硬件設備為網卡,則對應的驅動程序為網卡驅動程序,驅動程序與對應的硬件設備之間的接口為硬件接口 ;內核層包括系統調用接口、虛擬文件系統以及虛擬設備;·虛擬設備可以分為三類字符類設備、塊設備以及網絡設備,例如,聲卡驅動程序對應的虛擬設備為字符類設備,磁盤驅動程序對應的虛擬設備為塊設備,網卡驅動程序對應的虛擬設備為網絡設備,每個虛擬設備對應一個驅動程序,應用層通過虛擬設備控制對應的驅動程序,驅動程序與對應的虛擬設備之間的接口為驅動接口。現有技術中,每個硬件設備均對應一個驅動程序,如圖2所示,硬件設備I對應的驅動程序為驅動程序A,硬件設備I與驅動程序A之間的接口為硬件接口 1A,驅動程序A與對應的虛擬設備a之間的接口為驅動接口 Aa,驅動程序A部署在驅動文件A中。隨著用戶要求的提高,可能需要對計算機中的硬件設備的功能進行擴展,但是硬件設備的原有驅動程序無法針對擴展的功能進行控制,因此需要同時對硬件設備的驅動程序進行擴展。現有技術在對硬件設備的驅動程序進行擴展時,一般將用于對擴展的功能進行控制的新增驅動程序與原有驅動程序部署在兩個獨立的驅動文件中,新增驅動程序獨立完成對擴展的功能的控制,如圖3所示,硬件設備I對應的驅動程序包括原有驅動程序A和新增驅動程序B,硬件設備I與原有驅動程序A之間的硬件接口為硬件接口 1A,硬件設備I與新增驅動程序B之間的硬件接口為硬件接口 1B,原有驅動程序A與對應的虛擬設備a之間的驅動接口為驅動接口 Aa,新增驅動程序B與對應的虛擬設備b之間的驅動接口為驅動接口 Bb,原有驅動程序A部署在驅動文件A中,新增驅動程序B部署在驅動文件B中。基于現有技術提出的驅動程序擴展方法對硬件設備進行控制時,至少存在下述兩個缺陷I、新增驅動程序在對硬件設備進行控制時,需要使用驅動資源,例如子函數和全局變量,新增驅動程序需要使用的某些子函數可能已經部署在原有驅動程序中,但是新增驅動程序無法直接調用處于不同驅動文件中的原有驅動程序中的子函數,因此新增驅動程序需要重新部署這些子函數,也就是說某些子函數既要在原有驅動程序中部署,也要在新增驅動程序中部署,從而浪費了操作系統較多的存儲資源;2、新增驅動程序需要使用的某些全局變量可能已經部署在原有驅動程序中,新增驅動程序在對硬件設備進行控制時,若需要使用這些全局變量,則向原有驅動程序請求獲取這些全局變量的內容,原有驅動程序讀取這些全局變量的內容,然后再反饋給新增驅動程序,新增驅動程序利用接收到的全局變量的內容對硬件設備進行控制,此外,新增驅動程序在對硬件設備進行控制之后,若對全局變量的內容進行了修改,則需要將修改后的內容發送給原有驅動程序,由原有驅動程序對這些全局變量進行內容更新,因此使得新增驅動程序和原有驅動程序之間需要進行較多的信息交互,浪費了較多的處理資源。
發明內容
本發明實施例提供一種硬件設備控制方法及驅動模塊,用以解決現有技術中存在的浪費了操作系統較多的存儲資源及處理資源的問題。本發明實施例技術方案如下一種硬件設備控制方法,該方法包括步驟硬件設備的第一驅動模塊通過對應的虛擬設備接收控制操作信息,其中,所述第一驅動模塊與所述硬件設備的第二驅動模塊部署于同一驅動文件中;所述第一驅動模塊根據接收到的控制操作信息,確定對所述硬件設 備進行控制時所需的驅動資源;并在確定出的驅動資源中,查找部署于所述第二驅動模塊中的驅動資源;所述第一驅動模塊從所述第二驅動模塊中調用查找到的驅動資源;并根據部署于所述第一驅動模塊中的驅動資源以及從第二驅動模塊中調用的驅動資源,對所述硬件設備進行控制。一種驅動模塊,所述驅動模塊與對應同一硬件設備的另一驅動模塊部署于同一驅動文件中,所述驅動模塊包括控制操作信息接收單元,用于通過所述驅動模塊對應的虛擬設備接收控制操作信息;驅動資源確定單元,用于根據控制操作信息接收單元接收到的控制操作信息,確定對所述硬件設備進行控制時所需的驅動資源;驅動資源查找單元,用于在驅動資源確定單元確定出的驅動資源中,查找部署于所述另一驅動模塊中的驅動資源;驅動資源調用單元,用于從所述另一驅動模塊中調用驅動資源查找單元查找到的驅動資源;硬件設備控制單元,用于根據部署于所述驅動模塊中的驅動資源以及驅動資源調用單元從所述另一驅動模塊中調用的驅動資源,對所述硬件設備進行控制。本發明實施例技術方案中,硬件設備的第一驅動模塊與該硬件設備的第二驅動模塊部署于同一驅動文件中,第一驅動模塊首先根據接收到的控制操作信息,確定對該硬件設備進行控制時所需的驅動資源,并在確定出的驅動資源中,查找部署于第二驅動模塊中的驅動資源,第一驅動模塊從第二驅動模塊中調用查找到的驅動資源后對該硬件設備進行控制。由上可見,本發明實施例技術方案中,硬件設備對應的第一驅動模塊和第二驅動模塊部署在同一驅動文件中,因此第一驅動模塊可以直接調用第二驅動模塊中的驅動資源,無需再重新部署這些驅動資源,也無需和第二驅動模塊之間進行信息交互來獲得這些驅動資源,從而有效地節省了操作系統較多的存儲資源和處理資源。
圖I為現有技術中,操作系統架構示意圖;圖2為現有技術中,硬件設備與驅動程序的關系示意圖;圖3為現有技術中,驅動程序擴展方法實現示意圖;圖4為本發明實施例中,硬件設備控制方法流程示意圖;圖5為本發明實施例中,驅動程序擴展方法實現示意 圖6為本發明實施例中,驅動模塊結構示意圖。
具體實施例方式下面結合各個附圖對本發明實施例技術方案的主要實現原理具體實施方式
及其對應能夠達到的有益效果進行詳細地闡述。如圖4所示,為本發明實施例中硬件設備控制方法流程圖,其具體處理流程如下步驟41,硬件設備的第一驅動模塊通過對應的虛擬設備接收控制操作信息,其中,所述第一驅動模塊與所述硬件設備的第二驅動模塊部署于同一驅動文件中;其中,上述第一驅動模塊對應硬件設備的新增驅動程序,第二驅動模塊對應硬件設備的原有驅動程序,本發明實施例在對硬件設備的驅動程序進行擴展時,不再將新增驅動程序和原有驅動程序部署在兩個獨立的驅動文件中,而是部署在同一驅動文件中;新增驅動程序和原有驅動程序共用原有的硬件接口,即新增驅動程序與原有驅動程序均通過原 有驅動程序對應的硬件接口與硬件設備相連;為了實現應用層對驅動程序的控制,每個驅動程序均與一個虛擬設備對應,因此新增驅動程序和原有驅動程序分別對應不同的虛擬設備,也就分別對應不同的驅動接口。如圖5所示,硬件設備I對應的驅動程序包括原有驅動程序A和新增驅動程序B,新增驅動程序A和新增驅動程序B均部署在驅動文件A中,原有驅動程序A與硬件設備I之間的硬件接口為硬件接口 1A,新增驅動程序B與硬件設備I之間的硬件接口也為硬件接口 1A,原有驅動程序A對應的虛擬設備為虛擬設備a,新增驅動程序B對應的虛擬設備為虛擬設備b,原有驅動程序A與虛擬設備a之間的驅動接口為驅動接口 Aa,新增驅動程序B與虛擬設備b之間的驅動接口為驅動接口 Bb。應用層首先確定需要對硬件設備進行控制的驅動程序,然后通過該驅動程序對應的虛擬設備,將控制操作信息傳輸給該驅動程序,驅動程序根據接收到的控制操作信息對硬件設備進行相應的控制。步驟42,所述第一驅動模塊根據接收到的控制操作信息,確定對所述硬件設備進行控制時所需的驅動資源;新增驅動程序需要根據驅動資源,針對擴展的功能對硬件設備進行控制,其中,新增驅動程序所需的驅動資源既包括部署在新增驅動程序中的驅動資源,也包括部署在原有驅動程序中的驅動資源。步驟43,在確定出的驅動資源中,查找部署于所述第二驅動模塊中的驅動資源;本發明實施例中,查找到的驅動資源可以為子函數和/或全局變量。步驟44,所述第一驅動模塊從所述第二驅動模塊中調用查找到的驅動資源;由于新增驅動程序和原有驅動程序部署在同一驅動文件中,因此新增驅動程序可以直接從位于同一驅動文件中的原有驅動程序中調用某些驅動資源,例如某些子函數或全局變量。若查找到的驅動資源為子函數,則新增驅動程序直接從原有驅動程序中調用該子函數,而無需在新增驅動程序中重新部署該子函數,從而節省了操作系統較多的存儲資源。若查找到的驅動資源為全局變量,則新增驅動程序直接從原有驅動程序中讀取該全局變量的內容,而無需新增驅動程序向原有驅動程序獲取這些全局變量的內容,從而減少了新增驅動程序和原有驅動程序之間的信息交互,節省了操作系統較多的處理資源。步驟45,根據部署于所述第一驅動模塊中的驅動資源以及從第二驅動模塊中調用的驅動資源,對所述硬件設備進行控制。若查找到的驅動資源為全局變量,則新增驅動程序在對硬件設備進行控制時,可能會修改該全局變量的內容,那么新增驅動程序就需要在對硬件設備進行控制之后,對部署在原有驅動程序中的該全局變量進行內容更新,由于新增驅動程序和原有驅動程序部署在同一驅動文件中,因此新增驅動程序直接對該全局變量進行內容更新,而無需新增驅動程序將修改后的內容發送給原有驅動程序,由原有驅動程序進行內容更新,因此減少了新增驅動程序和原有驅動程序之間的信息交互,節省了操作系統較多的處理資源。本發明實施例中,新增驅動程序對應的虛擬設備可以為字符類設備、塊設備或網絡設備。
以新增驅動程序對應的虛擬設備為字符類設備、操作系統為Linux系統為例,下面介紹新增驅動程序的驅動接口函數
static struct file—operations driver—a—fops = {
.owner = THIS—MODULE,
.open = driver a open,//打開該字符類設備
.release = driver—a—release, Il關閉該字符類設備 .ioctl = driver—a—ioctl,//控制該字符類設備
.write = driver—a—write, //寫該字符類設備.read = driver—a—read,//讀該字符類設備
};
static ssize—t driver—a—open(struct inode *inode, struct file *file)
{
//在此處填寫代碼,可以為 空,也可填寫對硬件設備控制的代碼 }
static ssize t driver a release(struct inode *inode, struct file *file)
{
//在此處填寫代碼,可以為空,也可填寫對硬件設備控制的代碼 }
static ssize—t driver—a—ioctl(struct inode *inode, struct file * file,unsigned intcmd, unsigned long arg)
{
//在此處填寫代碼,可以為空,也可填寫對硬件設備控制的代碼 //cmd來至Linux系統應用層的命令字 //arg來至Linux系統應用層的變量或指針地址 }
static ssize—t driver—a—write(struct file * file,const char *buf, size—t len, loff t* offset)
{
//在此處填寫代碼,可以為空,也可填寫對硬件設備控制的代碼 //*buf來至Linux系統應用層的數據
//Ien來至Linux系統應用層的數據的長度(*buf指向空間內數據字節數) //*offset來至Linux系統應用層的數據地址偏移量,一般=0 }
static ssize—t driver_a_read(struct file *file, char *buf, size—t len, IofF t * offset) {
//在此處填寫代碼,可以為空,也可填寫對硬件設備控制的代碼
//*buf來至Linux系統應用層的數據//Ien來至Linux系統應用層的數據的長度(*buf指向空間內數據字節數)//*offset來至Linux系統應用層的數據地址偏移量,一般=0}在新增驅動程序中,driver_a_open()函數和driver_a_release ()函數是必須實現的,其它函數可以根據實際需要有選擇的增加。 新增驅動程序的虛擬設備注冊代碼可以但不限于為下述
static —devinit int driver—A_probe(.··)
{
driver—a—major = register—chrdev(0, '’driver—a' & driver—a—fops);driver—a—class = class—create(THIS—MODULE, "driver—a”);temp—class = device—create(driver—a—class, NULL,MKDEV(driver a major, 0), NULL, ”driver—a”);
} 若新增驅動程序對應的驅動模塊為驅動模塊driver_a. ko, Linux系統運行起來后,執行insmod driver_a. ko,安裝新增驅動程序,即可成功創建新增驅動程序對應的虛擬設備/dev/driver_a。Linux系統應用層通過虛擬設備打開或關閉新增驅動程序,實現代碼如下fd = open(" /dev/driver_a" , 0_RDWR) ;// 打開//可以創建進程對設備進行write () ;read() ;ioctl ();close (fd) ;// 關閉下面以對某家庭信息終端中的聲卡進行控制的方法為例,說明對驅動程序進行擴展的方法。某家庭信息終端中,聲卡的原有驅動程序僅支持來自操作系統的數字流媒體聲音,原有驅動程序通過I2S接口發送給聲卡的音頻編碼器(codec)芯片,通過I2C接口控制音頻codec芯片的工作狀態。若需要針對聲卡進行功能擴展,例如增加頻率調制(FM,Frequency Modulation)收音機的功能,這就需要在用戶收聽收音機時,將音頻codec的音源切換到FM接收芯片輸出的模擬音頻上。基于本發明實施例提出的驅動程序擴展方法,利用原有驅動程序的I2C接口來控制音頻codec芯片,在原有驅動程序所在的驅動文件中部署新增的字符類設備的驅動程序,即新增驅動程序,擴展出新的驅動接口與新增驅動程序對應。由于現有技術中,對硬件設備的驅動程序進行擴展時,需要對新增驅動程序進行重新部署,那么就需要程序編程人員完成驅動接口、新增驅動程序以及硬件接口三部分的代碼,代碼量比較大,因此編程難度較高。本發明實施例中,在對硬件設備的驅動程序進行擴展時,只需要在原有驅動程序所在的驅動文件中嵌入新增驅動程序即可,因此能夠有效地減少新增的代碼量,降低了編程難度。本發明實施例中的硬件控制方法可以但不限于適用于Linux操作系統,還適用于Windows操作系統。由上述處理過程可知,本發明實施例技術方案中,硬件設備的第一驅動模塊與該硬件設備的第二驅動模塊部署于同一驅動文件中,第一驅動模塊首先根據接收到的控制操作信息,確定對該硬件設備進行控制時所需的驅動資源,并在確定出的驅動資源中,查找部署于第二驅動模塊中的驅動資源,第一驅動模塊從第二驅動模塊中調用查找到的驅動資源
后對該硬件設備進行控制。由上可見,本發明實施例技術方案中,硬件設備對應的第一驅動模塊和第二驅動模塊部署在同一驅動文件中,因此第一驅動模塊可以直接調用第二驅動模塊中的驅動資源,無需再重新部署這些驅動資源,也無需和第二驅動模塊之間進行信息交互來獲得這些驅動資源,從而有效地節省了操作系統較多的存儲資源和處理資源。相應的,本發明實施例還提供一種驅動模塊,其結構如圖6所示,該驅動模塊與對應同一硬件設備的另一驅動模塊部署于同一驅動文件中,所述驅動模塊包括控制操作信息接收單元61、驅動資源確定單元62、驅動資源查找單元63、驅動資源調用單元64和硬件設備控制單兀65,其中控制操作信息接收單元61,用于通過所述驅動模塊對應的虛擬設備接收控制操作
信息;驅動資源確定單元62,用于根據控制操作信息接收單元61接收到的控制操作信息,確定對所述硬件設備進行控制時所需的驅動資源;驅動資源查找單元63,用于在驅動資源確定單元62確定出的驅動資源中,查找部署于所述另一驅動模塊中的驅動資源;驅動資源調用單元64,用于從所述另一驅動模塊中調用驅動資源查找單元63查找到的驅動資源;硬件設備控制單元65,用于根據部署于所述驅動模塊中的驅動資源以及驅動資源調用單元64從所述另一驅動模塊中調用的驅動資源,對所述硬件設備進行控制。較佳地,部署于所述另一驅動模塊中的驅動資源包含下述至少一種資源子函數;
全局變量。更佳地,若驅動資源查找單元63查找到的驅動資源為全局變量,則驅動資源調用單元64從所述另一驅動模塊中讀取所述全局變量的內容。更佳地,若驅動資源查找單元63查找到的驅動資源為全局變量,則所述驅動模塊還包括內容確定單元,用于確定硬件設備控制單元65對所述硬件設備進行控制后,所述全局變量的內容;內容更新單元,用于根據內容確定單元確定出的內容,對部署在所述另一驅動模塊中的所述全局變量進行內容更新。較佳地,所述驅動模塊對應的虛擬設備與所述另一驅動模塊對應的虛擬設備不同。較佳地,所述驅動模塊對應的虛擬設備為字符類設備、塊設備或網絡設備。顯然,本領域的技術人員可以對本發明進行各種改動和變型而不脫離本發明的精神和范圍。這樣,倘若本發明的這些修改和變型屬于本發明權利要求及其等同技術的范圍之內,則本發明也意圖包含這些改動和變型在 內。
權利要求
1.一種硬件設備控制方法,其特征在于,包括 硬件設備的第一驅動模塊通過對應的虛擬設備接收控制操作信息,其中,所述第一驅動模塊與所述硬件設備的第二驅動模塊部署于同一驅動文件中; 所述第一驅動模塊根據接收到的控制操作信息,確定對所述硬件設備進行控制時所需的驅動資源;并 在確定出的驅動資源中,查找部署于所述第二驅動模塊中的驅動資源; 所述第一驅動模塊從所述第二驅動模塊中調用查找到的驅動資源;并根據部署于所述第一驅動模塊中的驅動資源以及從第二驅動模塊中調用的驅動資源,對所述硬件設備進行控制。
2.如權利要求I所述的硬件設備控制方法,其特征在于,查找到的驅動資源包含下述至少一種資源子函數;全局變量。
3.如權利要求2所述的硬件設備控制方法,其特征在于,若查找到的驅動資源為全局變量,則所述第一驅動模塊從所述第二驅動模塊中調用查找到的驅動資源,具體包括 所述第一驅動模塊從所述第二驅動模塊中讀取所述全局變量的內容。
4.如權利要求2所述的硬件設備控制方法,其特征在于,若查找到的驅動資源為全局變量,則還包括 所述第一驅動模塊確定對所述硬件設備進行控制后,所述全局變量的內容;以及 根據確定出的內容,對部署在第二驅動模塊中的所述全局變量進行內容更新。
5.如權利要求I所述的硬件設備控制方法,其特征在于,所述第一驅動模塊與所述第二驅動模塊對應不同的虛擬設備。
6.如權利要求I所述的硬件設備控制方法,其特征在于,所述第一驅動模塊對應的虛擬設備為字符類設備、塊設備或網絡設備。
7.—種驅動模塊,其特征在于,所述驅動模塊與對應同一硬件設備的另一驅動模塊部署于同一驅動文件中,所述驅動模塊包括 控制操作信息接收單元,用于通過所述驅動模塊對應的虛擬設備接收控制操作信息;驅動資源確定單元,用于根據控制操作信息接收單元接收到的控制操作信息,確定對所述硬件設備進行控制時所需的驅動資源; 驅動資源查找單元,用于在驅動資源確定單元確定出的驅動資源中,查找部署于所述另一驅動模塊中的驅動資源; 驅動資源調用單元,用于從所述另一驅動模塊中調用驅動資源查找單元查找到的驅動資源; 硬件設備控制單元,用于根據部署于所述驅動模塊中的驅動資源以及驅動資源調用單元從所述另一驅動模塊中調用的驅動資源,對所述硬件設備進行控制。
8.如權利要求7所述的驅動模塊,其特征在于,部署于所述另一驅動模塊中的驅動資源包含下述至少一種資源子函數;全局變量。
9.如權利要求8所述的驅動模塊,其特征在于,若驅動資源查找單元查找到的驅動資源為全局變量,則驅動資源調用單元從所述另一驅動模塊中讀取所述全局變量的內容。
10.如權利要求8所述的驅動模塊,其特征在于,若驅動資源查找單元查找到的驅動資源為全局變量,則所述驅動模塊還包括內容確定單元,用于確定硬件設備控制單元對所述硬件設備進行控制后,所述全局變量的內容; 內容更新單元,用于根據內容確定單元確定出的內容,對部署在所述另一驅動模塊中的所述全局變量進行內容更新。
全文摘要
本發明公開了一種硬件設備控制方法及驅動模塊,該方法包括步驟硬件設備的第一驅動模塊通過對應的虛擬設備接收控制操作信息,其中,所述第一驅動模塊與所述硬件設備的第二驅動模塊部署于同一驅動文件中;所述第一驅動模塊根據接收到的控制操作信息,確定對所述硬件設備進行控制時所需的驅動資源;并在確定出的驅動資源中,查找部署于所述第二驅動模塊中的驅動資源;所述第一驅動模塊從所述第二驅動模塊中調用查找到的驅動資源;并根據部署于所述第一驅動模塊中的驅動資源以及從第二驅動模塊中調用的驅動資源,對所述硬件設備進行控制。采用本發明技術方案,解決了現有技術中存在的浪費了操作系統較多的存儲資源及處理資源的問題。
文檔編號G06F13/10GK102902638SQ20111021043
公開日2013年1月30日 申請日期2011年7月26日 優先權日2011年7月26日
發明者張宏海, 何晗春, 戴寅 申請人:北大方正集團有限公司