《Linux作業系統-系統移植》第8章 USB-4G/LTE移植 -第2節 USB-4G移植(中興ME3760移植)
ME3760 是一款Mini PCI-E介面的LTE 模組,支援LTE TDD band38(2.6GHz),band39(1.9GHz),band40(2.3GHz); LTE FDD band7(2.6GHz),向下相容TD-SCDMA A頻段(2.1GHz)和F頻段(1.9GHz)以及GSM900MHz,GSM1800MHz. 支援最大100M/50Mbps的理論上下行資料傳輸速率.
2.1核心檔案修改
1. 增加具體裝置驅動
檔案:linux-2.6.35.3/drivers/usb/serial/option.c
找到如下行:
static struct usb_device_id option_ids[] = {}
在其下新增內容:
{ USB_DEVICE(0x19d2, 0x0199) }
2. Usb 串列埠驅動過濾 NDIS 介面
由於 usb 串列埠跟 ndis 都屬於非標準 cdc 裝置,需要防止 ndis 口被 usb 串列埠驅動載入導致 ndis 驅動無法順利完成載入。
檔案linux-2.6.35.3/drivers/usb/serial/usb-serial.c
找到 usb_serial_probe 函式,在函式中找到如下行:
type = search_serial_device(interface);
在其前面新增如下內容:
3.複製原始碼
把官方驅動包裡的usb/cdc_ether.c cdc_encap_ok.c cdc_encap_ok.h三個檔案複製到核心linux-2.6.35.3/drivers/net/usb目錄下。
【注意】核心原始碼本來就修改過這個檔案,則不宜直接覆蓋,請注意保留原來的修改。
4.修改Makefile檔案
在linux-2.6.35.3/drivers/net/usb/下的Makefile
找到如下行:
obj-$(CONFIG_USB_USBNET) += usbnet.o
在其下新增內容:
obj-m += cdc_encap.o
5.修改cdc_ether.c 檔案
方式一:按照下圖所示註釋掉所有語句,在有if語句後面加;
方式二:
717行: (以717這一處為例修改)
devdbg (dev, "no rx skb");
改成
netif_dbg(dev, timer, dev->net, "no rx skb");
【注】這都是除錯資訊,可以註釋掉。
6.修改cdc_encap.c檔案
新增如下紅框中的標頭檔案。
#include <linux/slab.h>
2.2編譯核心
- 進入核心目錄,執行 make menuconfig
- 依次進入 device drivers—>usb support—>usb serial converter support 將如下元件作為模組進行編譯:USB driver for GSM and CDMA modems(新增usb轉串列埠驅動)
- 依次進入 device drivers—>Network device support—>usb Network Adapters 將如下元件作為模組進行編譯:Mutil-purpose USB Networking Framework(新增Ndis驅動)
- 重新編譯並安裝核心
$make uImage -j4
$make modules
5.載入模組
把drivers/net/usb/usbnet.ko cdc_encap.ko cdc_ether.ko三個模組複製到開發板上,然後按順序載入,如下:
# insmod usbnet.ko
# insmod cdc_encap.ko
# insmod cdc_ether.ko
如果ME3760模組已經插在開發板上了,驅動安裝成功後則會列印如下資訊:
6.檢查驅動
把ME3760模組插入開發板,執行如下命令:
$lsusb
$ll /dev/ttyUSB*
$ ifconfig -a
can0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
NOARP MTU:16 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:64
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
can1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
NOARP MTU:16 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:64
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
eth0 Link encap:Ethernet HWaddr 00:04:00:00:00:00
inet addr:192.168.1.111 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:50 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:8772 (8.5 KiB) TX bytes:0 (0.0 B)
eth1 Link encap:Ethernet HWaddr 00:04:00:00:00:01
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Base address:0x8000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
usb0 Link encap:Ethernet HWaddr 26:BB:59:1C:0D:AA
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
usb1 Link encap:Ethernet HWaddr AE:DE:12:C9:54:BD
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
【注】usb1是ME3760模組的網路名,不同模組可以不一樣。
2.3 ME3760聯網應用
2.3.1方式一:minicom撥號
步驟一:撥號獲取IP地址
$minicom(進入撥號,在撥號前需要設定minicom,關於minicom用法請看[minicom移植筆記-點選進入](https://blog.csdn.net/u013162035/article/details/80363681)])
AT+CFUN=0
AT+CGDCONT=1,"IP"
AT+CFUN=1
AT+CREG=1
AT+CEREG=1
AT+CGACT=1,1
AT+ZGACT=1,1
撥號成功後會返回如下資訊。
本4G網絡卡繫結在usb1上,因此需要對映到usb1上。
步驟二:設定IP地址
$ifconfig usb1 up
步驟三:設定閘道器
$ifconfig usb1 10.66.85.114
$route add default gw 10.66.85.114
步驟四:設定DNS
$vi /etc/resolve.conf
新增nameserver 8.8.8.8
【注】不新增DNS也可ping。
步驟五:測試
$ping www.baidu.com
成功後返回返回如下資訊。
2.3.2方式二:microcom撥號
步驟一:撥號獲取IP地址
$microcom -s 115200 /dev/ttyUSB0(進入撥號)
AT+CFUN=0
AT+CGDCONT=1,"IP"
AT+CFUN=1
AT+CREG=1
AT+CEREG=1
AT+CGACT=1,1
AT+ZGACT=1,1
撥號成功後會返回如下資訊。
本4G網絡卡繫結在usb1上,因此需要對映到usb1上。
步驟二:設定IP地址
$ifconfig usb1 up
步驟三:設定閘道器
$ifconfig usb1 10.66.85.114
$route add default gw 10.66.85.114
步驟四:設定DNS
$vi /etc/resolve.conf
新增nameserver 8.8.8.8
【注】不新增DNS也可ping。
步驟五:測試
$ping www.baidu.com
成功後返回返回如下資訊。
【注】microcom測試
microcom是在製作根檔案系統時busybox裡自帶命令。-s指定波特率為115200,也可以在前面加 -t 7000(表示監聽的時間為7000ms), 通過ctrl+x可以退出監聽
使用串列埠工具向ME3760模組傳送AT命令:
$ microcom -s 115200 /dev/ttyUSB0
傳送AT,返回OK
傳送AT+CSCS=?,返回+CSCS: (“GSM”,“HEX”,“UCS2”)
則表示ME3760模組已經可以正常工作了。
【注1】usb驅動檔案
【注2】移植環境
虛擬機器:Ubuntu12.04
開發板:IMX283 - ARM9
核心:linux-2.6.35(版本不同可能會導致移植不成功)
4G模組:中興ME3760(如果是其他模組,要支援USB,才可採用此法移植)
相關推薦
《Linux作業系統-系統移植》第8章 USB-4G/LTE移植 -第2節 USB-4G移植(中興ME3760移植)
ME3760 是一款Mini PCI-E介面的LTE 模組,支援LTE TDD band38(2.6GHz),band39(1.9GHz),band40(2.3GHz); LTE FDD band7(2.6GHz),向下相容TD-SCDMA A頻段(2.1GHz
【學習筆記】慕課網—Java設計模式精講 第3章 軟體設計七大原則-3-6 迪米特原則(最少知道原則)
/** * 軟體設計七大原則-迪米特原則 學習筆記 * @author cnRicky * @date 2018.11.10 */ 迪米特原則(最少知道原則) 一個物件應該對其他物件保持最少的瞭解。又叫最少知道原則 迪米特原則主要強調:儘量降低類與類之間的耦合 優點:降低類與類之
第六章樹和二叉樹--Huffman樹-計算機17級(帶詳細解析)
解析在下面,有什麼問題歡迎各位大佬指正 p1-1: 這個主要得看懂題,其實就是在考你哈夫曼樹的構造:每次把權值最小的兩顆二叉樹合併 ,越往下肯定權值越小,所以這句話肯定是對的 x2-1: d肯定不一定啊 x2-2: x2-3: x2-4
《Linux作業系統-系統移植》第8章 USB-4G/LTE移植 -第4節 USB-4G移植(移遠EC20開發-Gobi撥號)
開發環境 主機:ubuntu12.04 開發板核心版本:linux-2.6.35 【注】EC20支援PPP撥號,Gobi撥號和QMI撥號,筆者使用的是Gobi撥號,關於另外兩種撥號請參考官方文件,後文的附件連結中已經給出了參考文件。 3.1 USB Serial
《Linux作業系統-系統移植》第8章 USB-4G/LTE移植 -第1節 USB-4G移植C(華為E392u924G移植)
1.3 PPP編譯 1.獲取原始碼 PPP官網下載:https://download.samba.org/pub/ppp/ 下載解壓ppp-2.4.7.tar.gz原始碼,存放在/home/farsig
《Linux作業系統-系統移植》第8章 USB-4G/LTE移植 -第3節 USB-4G移植(移遠AG35開發-GPS解析及程式設計)
檢視參考手冊,移遠帶有GPS的晶片的USB Serial如下。 2.1應用簡介 1、若不使用 AT+QGPSCFG 指令對AG35進行配置,則會以預設引數開啟GPS引數,NMEA埠開始上報,"gpsnmeatype"預設值為31,上報間隔為1s,每次上報所有種
《Linux作業系統-系統移植》第8章 USB-4G/LTE移植 -第1節 USB-4G移植 F(華為E392u924G移植)
1.6啟動撥號指令碼 $mkdir shell_script $cd /shell_script $ vi usb.sh 輸入以下內容,然後儲存退出。 usb_modeswitch -W -c /etc
《Linux作業系統-系統移植》第7章 工具移植 -第3節 Mini-xml移植
開發環境: 主機環境:Ubuntu 12.04 目標機環境:Exynos4412開發板(Linux 3.0.5) 一個輕量級的xml庫,可完成讀寫。適合系統資源受限的嵌入式裝置。 原始碼下載:https
《Linux作業系統-系統移植》第7章 工具移植 -第2節 SSH服務移植
開發環境: 主機:Ubuntu12.04 開發板:Exynos4412 2.1編譯相關檔案 SSH協議族可以用來進行遠端控制, 附加的SFTP協議可輕鬆實現在計算機之間傳送檔案。而實現此功能的傳統方式,如telnet(終端模擬協議)、 rcp ftp、 rlog
Linux命令應用大詞典-第8章 日期和時間
硬件時鐘 顯示 linu 時鐘 主機 style hwclock 硬件 暫停 8.1 cal:顯示日歷信息 8.2 date:顯示和設置系統日期和時間 8.3 hwclock:查看和設置硬件時鐘 8.4 clock:查看和設置硬件時鐘 8.5 clockdiff:主機之間
【Linux學習筆記】第8章 Linux shell基礎知識
linux centos shell 通配 8.1shell介紹shell是一個命令解釋器,提供人機交互。支持特定語法。每個用戶都可以有自己特定的shell(bash)。CentOS7默認bash(Bourne Agin Shell)。其他還有zsh、ksh等。 8.2命令歷史命令歷史存放於
易學筆記-Linux命令-第8章:從shell眼中看世界
第8章:從shell眼中看世界/8.0 echo:單詞分割機制 echo:單詞分割機制 格式:echo 結果集,這裡的結果集可能是 某個字串:abc 多個字串:abc edf 命令結果: ls
連結裝載與庫 第8章 linux共享庫的組織
由於動態連結的優點,大量的程式使用動態連結機制,導致系統裡面存在數量極為龐大的共享物件。必須得有很好的機制來管理這些共享庫,否則這些共享物件散落在各個目錄下,長期的維護,升級,都有會很大的問題。 8.1 共享庫版本 8.1.1 共享庫的相容性 共享庫的版本會不斷的更新,以修正原有
linux核心設計與實現 —— 中斷和中斷處理(第7章,第8章)
中斷和中斷處理 中斷的目的:讓處理器最快地響應外部硬體的請求。 中斷本質上是一種特殊的電訊號,由硬體裝置發向處理器,處理器反映到作業系統中,最後由作業系統處理這個中斷電訊號。 不同的裝置對應的中斷不同。每個中斷都通過一個唯一的數字標記,這個標記通常被稱為中
第8章第2講特殊函數介紹
turn 函數介紹 spl .cn scan margin urn printf return #include"stdio.h" int fact(int n) //求階乘函數 { int f=1,i; fo
第8章:Shell腳本歸檔與壓縮
extract config 生成 -- dir exclude 硬盤分區 txt name 第8章:Shell腳本歸檔與壓縮 定期備份不可小視,我們可以通過shell腳本來實現備份自動化。其中數據備份一般要使用到歸檔與壓縮,歸檔與壓縮對於系統
第8章2節《MonkeyRunner源代碼剖析》MonkeyRunner啟動執行過程-解析處理命令行參數
path 轉載 iss 命令 code rst pri bsp ack MonkeyRunnerStarter是MonkeyRunner啟動時的入口類,由於它裏面包括了main方法.它的整個啟動過程主要做了以下幾件事情:解析用戶啟動MonkeyRunner時從命令行傳輸
第8章 包管理
重新 裝包 自己的 align love ocs 重定向 客戶端程序 target 本文目錄: 8.1 Linux上構建C程序的過程 8.2 包基礎知識 8.3 rpm管理包 8.4 yum管理包 8.5 補丁工具diff和patch 8.6 源碼編譯安裝程序 8.1
【C語言學習】《C Primer Plus》第8章 字符輸入/輸出和輸入確認
multipl 字符輸入 信號 first while 目的 bcd 問題 img 學習總結 1、緩沖區分為完全緩沖區(fully buffered)I/O和行緩沖區(line-buffered)I/O。對完全緩沖輸入來說,當緩沖區滿的時候會被清空(緩沖區內容發送至
Java編程思想讀書筆記_第8章
讀書筆記 div spl class alt oid ava 函數 opened 覆蓋私有方法 1 class Father { 2 private void f() { System.out.println("Father::f()"); } 3