轉自:http://blog.csdn.net/gatieme/article/details/49491325
目錄
問題
這兩天為了做gps和arm的通訊,不得不搗鼓這個東東。開發板是創維特jx2410,usb轉串口線的芯片是pl2303。還好是這個芯片,讓我沒費多少力氣,就達成了目的。因為linux對它已經支持了,我們只要編譯、加載它的驅動就ok了。
驅動源碼
一般來說USB轉串口的驅動已經集成在內核中,我們無需下載,只需要在編譯時進行一些配置即可.
因此在編譯之前我們需要確認自己的內核中有沒有USB轉串口的驅動.
usb轉串口的驅動位於內核源碼根目錄下/drivers/usb/serial
主要的源碼包括usb-serial.c
,option.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動態加載該模塊。