標籤:3g上網卡撥接 buzybox的mdev實現usb熱拔插
___________________________________
主機作業系統:Centos 6.5
交叉編譯器環境:arm-linux-gcc-4.5.4
開發板平台: FL2440
Linux核心版本: 3.0
songyong<[email protected]>
___________________________________
一、配置核心支援3G驅動以及PPP協議
開啟ppp相關配置:
Device Drivers --->
[*] Network device support --->
<*> PPP (point-to-point protocol) support
[*] PPP multilink support (EXPERIMENTAL)
[*] PPP filtering
<*> PPP support for async serial ports
<*> PPP support for sync tty ports
開啟usb串口相關配置:
[*] USB support --->
<*> USB Serial Converter support --->
[*] USB Serial Console device support
[*] USB Generic Serial Driver
<*> USB driver for GSM and CDMA modems
自行在開發板上#lsusb 查看3G上網卡的廠商ID與裝置ID,並將其添加到usb通用驅動option.c中(因為查看之後發現option.c中並沒有我的3G上網卡資訊,所以需要自行添加。如若能通過ID找到則可不添加)
以及在在option_ids數組中添加子項
二 、交叉編譯撥號軟體ppp-2.4.5和usb_modeswitch-1.2.4及其依賴的libusb-1.0.0和libusb-compat-0.1.4
usb_modeswitch;因為3G上網卡在linux下首次插入時是處於CD-ROM模式,我們如果要pppd撥接,則需要將預設被識別為存放裝置的3g usb modem轉換為可以通訊的多個串口裝置。
usb_modeswitch-current_data.tar.bz2:這個包裡包括提供給UDEV的驅動裝置資訊,和很多裝置使用usb_mdoeswitch進行轉換模式時需要配置的參數。下載它用於參考,usb_modeswitch.conf裡面的參數就會參考到。
因為網上編譯文檔眾多,在此不贅述。只是一開始我用的是usb_modeswitch-2.2.5,編譯不通過。若只是想像我一樣玩一下的話,可換此低版本通過。
:
ppp-2.4.5.tar.gz ;usb-modeswitch-1.2.4.tar.bz2 ; usb-modeswitch-data-20150627.tar.bz2 ;libusb-1.0.0.tar.bz2
都通過之後,將ppp檔案夾中的pppd和chat放入開發板/usr/sbin目錄下;
三、配置usb_modeswitch.conf;並編寫ppp撥號指令碼
我們進入usb_modeswitch-data....../usb_modeswitch.d目錄中開啟對應ID的檔案
一開始HuaweiMode=1不通過,然後我改為0後通過。至此,到這裡我們發現12d1:1446其實並沒有什麼實際性的參考價值.....
網上的設定檔原本還有各種參數,但是又都不給出解釋。我這樣最簡陋的基本配置,所幸能使用。有更具體需求的可以自行添加。
改好之後執行:
# mount -t usbfs usbfs /proc/bus/usb/ //掛載usb檔案系統
#/apps/3G/usb_modeswitch -c /apps/3G/usb_modeswitch.conf //-c是指指定設定檔
如若成功:# ls /dev/ttyUSB* 可看到USB0-3等串口裝置出現。
接下來重頭------->串口下的AT指令集
首先我們執行microcom --help ,發現-s是serial串口調試
#microcom -s 115200 /dev/ttyUSB1
這時候螢幕可能就“卡”在這,也無任何回顯。不要慌,我們敲at斷行符號等待回應
如果回應 OK則可使用串口通訊,可能可以實現撥號。
ate1斷行符號 可開啟回顯,這樣就不會沒有安全感了,不信就試試
以下是比較常用的AT命令。對於不同的廠商裝置可能AT指令不完全相同,但是大多是一致的。所以可去網上隨便找個datasheet看看。
ate0關閉
at+cgmm 可查看模組名
at+cgmr 可查看模組版本資訊
at+cgmi 可查看模組製造商
at+csq 可查看訊號強度
at+cpin? 查看SIM卡是否到位
at+creg? 查看SIM卡是否註冊上,網路註冊的情況。
at+cops? 查看SIM卡電訊廠商
對於撥號指令碼,其實大多都相同,稍加修改即可。
wcdma:
chat-wcdma-connect:
chat-wcdma-disconnect:
將這三個放到/etc/ppp/peers路徑下。
當我們的microcom -s 115200 /ttyUSB1
在at+creg?回複1或者5之後表示可以撥號了。
執行pppd call wcdma撥號
至此,3G上網卡手動實現usb_modeswitch切換串口然後ppp撥接的基本需求就完成了。
下面使用mdev自動切換.
mdev是busybox內建的一個簡化版的udev
作用是在系統啟動和熱拔插或動態載入驅動程式時,自動產生驅動程式所需的節點檔案,在檔案系統中的/dev目錄下的裝置節點都是由mdev建立的。記得一開始學習驅動的時候,當時就知道了熱拔插hotplug這個機制。簡單地說核心裡面的hotplug機智就是說當我們存在裝置熱拔插時,核心會調用使用者空間層的一些指令碼來進行處理。
==============================================================================================
busybox的mdev是一個精簡了的udev管理程式,它可以間接的以hotplug方式被核心調用,進而在arm平台上/dev目錄下動態建立裝置節點,因為hotplug會被核心發送uevent之前調用,所以如果動態可插拔裝置很多,很頻繁,那麼每次核心都會調用elf格式的使用者空間的hotplug,產生一個獨立的hotplug程式來處理,所以hotplug是一個非常笨重的實現方法,但是在我們的arm開發板上,可插拔裝置並沒有想象中的頻繁
目前還沒有必要移植完全版的udev,所以完全可以在不複雜的嵌入式裝置上使用mdev來管理動態節點==============================================================================================以上引用網上一位前輩的說法:http://blog.csdn.net/lanmanck/article/details/4558500
首先我們在製作根檔案系統的時候,需要在系統最先讀取的自啟檔案inittab或者是rsc裡面先掛載/sys和/proc檔案系統。
因為mdev的另外一個很有用的地方是,他可以通過proc和sys檔案系統來動態整理出註冊的裝置,進而到/dev/下產生他們對應的節點。但前提是使用該功能之前必須mount上proc和sys檔案系統
然後我們還需要添加最關鍵的兩句:
echo /sbin/mdev > /proc/sys/kernel/hotplug //發現調用hotplug機制時就使用我們使用者層的應用程式/sbin/mdev來處理
mdev -s //會掃描並自動建立相應的節點.
現在當我們出現裝置節點之後還有個設定檔mdev.conf ,裡麵包含了對相關裝置節點的具體操作。
上面是我的配置,當檢測到sg*這些裝置節點時,就執行/apps/etc/modem_hotplug這個指令碼。
因為手中就這一個3G上網卡,所以我就只是簡單的只配置了它的指令碼。如果是要普遍使用於大多數的話,還需要lsusb解析上網卡型號然後找對應的配置實現轉串口。以後工作了做到這塊了再深入研究花時間編寫吧。至此,我們就已經可以實現板子上mdev自動掛載3G上網卡了。下一步如果想要撥號之後發出熱點wifi的話也很簡單,再配置一次nat表應該就行。我這裡就不做了,開始看socket編程去咯
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
FL2440 3G上網卡撥接,並實現mdev自動掛載