[usb/uart]內核添加USB轉串口驅動支持


轉自:http://blog.csdn.net/gatieme/article/details/49491325

目錄

1. 問題

2. 驅動源碼

3. 內核配置

4. 編譯內核和模塊驅動

5. 加載驅動

問題


這兩天為了做gps和arm的通訊,不得不搗鼓這個東東。開發板是創維特jx2410,usb轉串口線的芯片是pl2303。還好是這個芯片,讓我沒費多少力氣,就達成了目的。因為linux對它已經支持了,我們只要編譯、加載它的驅動就ok了。

驅動源碼


一般來說USB轉串口的驅動已經集成在內核中,我們無需下載,只需要在編譯時進行一些配置即可. 
因此在編譯之前我們需要確認自己的內核中有沒有USB轉串口的驅動. 
usb轉串口的驅動位於內核源碼根目錄下/drivers/usb/serial

Usb轉串口驅動源碼 
主要的源碼包括usb-serial.coption.c,pl2303.c
針對不同的芯片還有cp210x.c 和 pl2303.c 
例如在我們本例中使用的就是pl2303

內核配置


使用make menuconfig進行配置

主要配置信息如下

-->Device Driver

  -->usb support

    -->USB Serial Converter Surpport相關的選項。

  • usb generic serial driver選中
  • usb prolific 2303 single port serial driver配成M。

具體配置如下圖所示 
首先打開menuconfig,進入Device Drivers驅動配置頁面 
這里寫圖片描述 
進入usb support USB驅動配置頁面主要配置信息如下 
usb support下 
這里寫圖片描述

選擇USB Serial Converter Surpport相關的選項。 
這里寫圖片描述

這里寫圖片描述

選中USB Serial Converter Surpport和 
usb generic serial driver 
這里寫圖片描述

最后選擇對應的芯片,注意這里選擇為M,將驅動編譯成模塊,動態加載

編譯內核和驅動模塊

make zImage, make modules 
這里寫圖片描述 
make modules 
這里寫圖片描述

加載驅動


最后在源碼目錄下pl2303.ko 就是我們需要的驅動,在板子上直接insmod即可

這里寫圖片描述

 

問題:

1. usb設備調試命令

lsusb: 列出usb設備和屬性, lsusb -v可以查看設備的詳細屬性

ls /dev/tty*: 查看usb設備是否有加載成功

2. make dep/make module, insmod/rmmod, depmode/modprobe三組的具體用法

http://www.cnblogs.com/jacklikedogs/p/4659249.html

  • 這里面提到加載內核驅動的正常流程,首先拷貝*.ko文件到/lib/module/`uname -r`/kernel/driver/usb, 其次執行depmode -a建立依賴,更新module.dep,最后運行modprobe加載模塊
  • modprobe相較於insmod的話,更加智能,會根據module.dep建立的模塊依賴關系,安排加載順序,若insmod則可能會出現undefined symbol等問題
  • 所以在加載pl2303.ko驅動,只要depmod -a, 后使用modprobe pl2303.ko即可,不需要再有insmod usb-serial.ko, insmod option.ko, insmod pl2303.ko等操作

3. 除了在rc中添加insmod, 在開機使用modprobe如何自動加載模塊

  • /lib/modules/version: cp yourdrivername.ko /lib/modules/`uname -r`/kernel/drivers/misc
  • depmod -a: 使用depmod -a應該也是可以的,該文件,會一直保存的,不隨斷電而消失, 或者編輯/lib/modules/`uname -r`/modules.dep,設置驅動程序之間的關聯,增加一行: /lib/modules/`uname -r`/kernel/drivers/misc/yourdrivername.ko
  • modprobe: 編輯/etc/rc.d/rc.local,增加一行: /sbin/modprobe yourdrivername

4. 理解depmod -a和modprobe

  • depmod -a: 通過讀取/lib/modules/version下的每一個模塊來創建模塊的依賴性列表,也就是/lib/modules/version下的modules.dep文件,所以執行depmod -a不需要到特定目錄下,且待加載模塊需要拷貝到/lib/modules/version目錄下
  • modprobe: modprobe pl2303, 不需要pl2303.ko, modprobe會讀取modules.dep文件,並決定模塊加載順序。

 

5. 將pl2303.ko和option.ko, usb-serial.ko拷貝到板子的/lib/modules/3.14.**/kernel/drivers/usb下->depmod -a->modprobe, 系統啟動會自動加載嗎?

在測試pl2303.ko,發現系統啟動會自動加載,不知什么原因

6. Make zImage, make modules, make modules_install怎么理解?

當menuconfig中將模塊設置為"M"時,make zImage不會把模塊編譯進內核。這時,可以使用make modules編譯模塊源碼為*.ko文件,然后通過make modules_install動態加載該模塊。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM