新聞中心
在linux下開(kāi)發(fā)USB設(shè)備驅(qū)動(dòng)程序是一項(xiàng)比較復(fù)雜的任務(wù),也是內(nèi)核開(kāi)發(fā)中重要的一環(huán)。本文將介紹如何開(kāi)發(fā)Linux下的USB設(shè)備驅(qū)動(dòng),并結(jié)合實(shí)際案例給出相應(yīng)的實(shí)踐體驗(yàn)。

讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、雅安服務(wù)器托管、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、古浪網(wǎng)站維護(hù)、網(wǎng)站推廣。
1.下載源代碼并編譯內(nèi)核
首先需要準(zhǔn)備好Linux內(nèi)核源代碼,并從官網(wǎng)上進(jìn)行下載安裝。下載完成后,利用Makefile編譯安裝內(nèi)核。Linux內(nèi)核中已經(jīng)有許多USB驅(qū)動(dòng)程序,所以,準(zhǔn)備編譯內(nèi)核時(shí)對(duì)預(yù)編譯的USB驅(qū)動(dòng)程序類(lèi)型需要進(jìn)行設(shè)置,使之與已有驅(qū)動(dòng)程序進(jìn)行匹配,這一步操作會(huì)比較繁瑣,所以務(wù)必要認(rèn)真操作,以免出現(xiàn)后續(xù)的麻煩。
2.設(shè)置usb設(shè)備的ID
當(dāng)準(zhǔn)備完成內(nèi)核編譯安裝后,就需要設(shè)置相應(yīng)的usb設(shè)備的vendor和product id,以此標(biāo)識(shí)不同的設(shè)備,這時(shí)候可以通過(guò)linux的設(shè)備熱插拔系統(tǒng)udev,調(diào)用udev_hset來(lái)配置usbid,需要?jiǎng)?chuàng)建一個(gè)文件,文件名為60-usbhid.rules,用于設(shè)置usbid,文件內(nèi)容如下:
# The vendor id 1003 is matching VID_1020 and VID_1047 with PID_0003
SUBSYSTEMS==”usb”, ENV{ID_VENDOR_ID}==”1003″, ENV{ID_MODEL_ID}==”0003″, MODE=”664″
通過(guò)以上文件配置完成后,就可以看到usb設(shè)備,udev會(huì)自動(dòng)發(fā)現(xiàn)識(shí)別設(shè)備,并調(diào)用內(nèi)核中相應(yīng)的usb驅(qū)動(dòng)程序,來(lái)使設(shè)備工作。
3.編寫(xiě)usb設(shè)備驅(qū)動(dòng)程序
只有當(dāng)usb設(shè)備的ID正確識(shí)別后,才能進(jìn)行后續(xù)的步驟,此時(shí)可以正式編寫(xiě)usb設(shè)備的驅(qū)動(dòng)程序。在Linux下寫(xiě)USB設(shè)備驅(qū)動(dòng)程序主要有兩種方法:一種是通過(guò)模塊驅(qū)動(dòng);另一種是通過(guò)用戶(hù)態(tài)驅(qū)動(dòng)程序,以運(yùn)行在用戶(hù)態(tài)下。兩種驅(qū)動(dòng)程序的區(qū)別在于執(zhí)行權(quán)限,模塊驅(qū)動(dòng)程序在內(nèi)核態(tài)中執(zhí)行,具有最高的權(quán)限,而用戶(hù)態(tài)的驅(qū)動(dòng)程序會(huì)依賴(lài)于內(nèi)核的接口,在用戶(hù)態(tài)下執(zhí)行,其權(quán)限要低于內(nèi)核態(tài)。
在模塊驅(qū)動(dòng)程序編寫(xiě)過(guò)程中,可以通過(guò)一my_usb.c文件中的usb_init函數(shù)來(lái)完成驅(qū)動(dòng)的提供,usb_init函數(shù)的編寫(xiě)如下:
static int __init my_usb_init(void)
{
int result;
/* Request resource for USB device*/
result = usb_register(&my_usb_driver);
if (result) {
printk(KERN_ERR “Failed to register Driver\n”);
return result;
}
printk(KERN_ERR “Succeed in registering Driver\n”);
return result;
}
然后在模塊程序中需要調(diào)用usb_register函數(shù)注冊(cè)驅(qū)動(dòng),用于關(guān)聯(lián)USB內(nèi)核驅(qū)動(dòng),這樣才能實(shí)現(xiàn)usb設(shè)備的驅(qū)動(dòng)程序編寫(xiě)。最后,需要通過(guò)insmod命令將編譯后的模塊文件安裝到系統(tǒng),來(lái)完成驅(qū)動(dòng)程序的加載
所以,從上面我們可以看出,大致步驟就是:準(zhǔn)備源代碼編譯安裝內(nèi)核,設(shè)置usb的id,編寫(xiě)usb設(shè)備驅(qū)動(dòng)程序,然后通過(guò)insmod命令將驅(qū)動(dòng)程序加載。完成以上步驟,就可以實(shí)現(xiàn)usb設(shè)備的驅(qū)動(dòng)程序開(kāi)發(fā),從而使得usb設(shè)備正常使用。
實(shí)踐體驗(yàn):本人此次參與在Linux上開(kāi)發(fā)usb設(shè)備驅(qū)動(dòng)程序,和同事一起分析源代碼,編寫(xiě)模塊驅(qū)動(dòng)程序,按照以上步驟,花費(fèi)大概半個(gè)小時(shí),最后成功完成驅(qū)動(dòng)的安裝,并使相應(yīng)的usb設(shè)
成都網(wǎng)站設(shè)計(jì)制作選創(chuàng)新互聯(lián),專(zhuān)業(yè)網(wǎng)站建設(shè)公司。
成都創(chuàng)新互聯(lián)10余年專(zhuān)注成都高端網(wǎng)站建設(shè)定制開(kāi)發(fā)服務(wù),為客戶(hù)提供專(zhuān)業(yè)的成都網(wǎng)站制作,成都網(wǎng)頁(yè)設(shè)計(jì),成都網(wǎng)站設(shè)計(jì)服務(wù);成都創(chuàng)新互聯(lián)服務(wù)內(nèi)容包含成都網(wǎng)站建設(shè),小程序開(kāi)發(fā),營(yíng)銷(xiāo)網(wǎng)站建設(shè),網(wǎng)站改版,服務(wù)器托管租用等互聯(lián)網(wǎng)服務(wù)。
網(wǎng)站名稱(chēng):開(kāi)發(fā)Linux下USB設(shè)備驅(qū)動(dòng)程序的方法及實(shí)踐體驗(yàn)(linuxusb開(kāi)發(fā))
轉(zhuǎn)載注明:http://www.5511xx.com/article/coihohh.html


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