Difference between revisions of "IoTGateway/Features/Linux/Module"

From ESS-WIKI
Jump to: navigation, search
Line 179: Line 179:
  
 
  pppd connect 'chat -v -s -t 10 "" "AT" "" "ATDT*99#" "CONNECT" ""' user username password password /dev/ttyUSB2 460800 nodetach crtscts debug usepeerdns defaultroute &
 
  pppd connect 'chat -v -s -t 10 "" "AT" "" "ATDT*99#" "CONNECT" ""' user username password password /dev/ttyUSB2 460800 nodetach crtscts debug usepeerdns defaultroute &
 +
 +
=== Sierra AirPrime MC7430 ===
 +
 +
Modify drivers/usb/serial/option.c
 +
 +
--- a/drivers/usb/serial/option.c
 +
+++ b/drivers/usb/serial/option.c
 +
@@ -1123,6 +1123,8 @@ static const struct usb_device_id option_ids[] = {
 +
        { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */
 +
        { USB_DEVICE_INTERFACE_CLASS(SIERRA_VENDOR_ID, 0x68c0, 0xff),
 +
          .driver_info = (kernel_ulong_t)&sierra_mc73xx_blacklist }, /* MC73xx */
 +
+      { USB_DEVICE_INTERFACE_CLASS(SIERRA_VENDOR_ID, 0x9071, 0xff),
 +
+        .driver_info = (kernel_ulong_t)&sierra_mc73xx_blacklist }, /* MC7430 */
 +
        { USB_DEVICE_INTERFACE_CLASS(SIERRA_VENDOR_ID, 0x9041, 0xff),
 +
          .driver_info = (kernel_ulong_t)&sierra_mc73xx_blacklist }, /* MC7305/MC7355 */
 +
        { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },
  
 
=== AM Telecom AMM561KT ===
 
=== AM Telecom AMM561KT ===
Line 321: Line 337:
  
 
[[File:Lsmod 4704 1.png|400x500px|lsmod_4704_1.png]]
 
[[File:Lsmod 4704 1.png|400x500px|lsmod_4704_1.png]]
 
  
 
2. If login by normal user (not root user), you have to place '''drivers\driver_base\src\lnx_ko\71-bionic-daq.rules'''
 
2. If login by normal user (not root user), you have to place '''drivers\driver_base\src\lnx_ko\71-bionic-daq.rules'''
  
 
to '''/etc/udev/rules.d/''' in Root File System
 
to '''/etc/udev/rules.d/''' in Root File System
 
  
 
3. Make sure the DAQ driver has been successfully matched with the DAQ device.
 
3. Make sure the DAQ driver has been successfully matched with the DAQ device.
Line 341: Line 355:
  
 
example:
 
example:
 +
 
  #define  deviceDescription  L"USB-4704,BID#0"
 
  #define  deviceDescription  L"USB-4704,BID#0"
  

Revision as of 09:12, 20 November 2017

3G

EWM-C106FT01E

pppd connect 'chat -v -s -t 10 "" "AT" "" "ATDT*99#" "CONNECT" ""' user username password password /dev/ttyUSB2 460800 nodetach crtscts debug usepeerdns defaultroute &

Sierra AirPrime MC8090

The following operations are performed with UBC-221 using U221LBV1050.

  • linux kernel config
set the following lines to meta-advantech/recipes-kernel/linux/linux-yocto-clanton/advantech.cfg
CONFIG_USB_SERIAL_FTDI_SIO=m
CONFIG_USB_SERIAL_SIERRAWIRELESS=m
add the following line to meta-advantech/recipes-kernel/advantech-init/files/advantech.conf
sierra
execute the following command
$ bitbake advantech-init
  • rebuild the kernel
$ bitbake linux-yocto-clanton
  • rebuild the full image
$ bitbake image-full
  • practical test on target board
# pppd connect 'chat -v -s -t 10 "" "AT" "" "ATDT*99#" "CONNECT" ""' \
user username password password /dev/ttyUSB3 460800 nodetach crtscts debug usepeerdns defaultroute &
Sierra AirPrime MC8090 connecting.png
# ifconfig
Sierra AirPrime MC8090 ifconfig.png
# ping -c5 8.8.8.8
Sierra AirPrime MC8090 ping.png

Telit HE910-D

The following operations are performed with UBC-221 using U221LBV1050.

  • practical test on target board
# modprobe cdc-acm
Telit HE910-D modprobe.png
# dmesg | grep ttyACM
Telit HE910-D dmesg.png
# pppd connect 'chat -v -s -t 10 "" "AT" "" "ATDT*99#" "CONNECT" ""' \

user username password password /dev/ttyACM0 460800 nodetach crtscts debug usepeerdns defaultroute &

  1. pinc -c5 8.8.8.8
RTENOTITLE RTENOTITLE

Quectel UC20

3G module Porting (QUECTEL UC20)

In linux kernel

1. You need to add the mechanism for processing zero packets during transmission of “usb_wwan.c” file under “[KERNEL]/drivers/usb/serial”.

You need to add the following statements to the “usb_wwan_write” and “usb_wwan_setup_urb” function, as shown below:

…
#include "usb-wwan.h"

+ #ifdef CONFIG_ARCH_ADVANTECH
+ #define HW_bcdUSB 0x0110
+ #define HUAWEI_VENDOR_ID 0x12d1
+ #endif

void usb_wwan_dtr_rts(struct usb_serial_port *port, int on)
…
…
…

int usb_wwan_write(struct tty_struct *tty, struct usb_serial_port *port,
		   const unsigned char *buf, int count)
{
…
…
	int left, todo;
	struct urb *this_urb = NULL;	/* spurious */
+ #ifdef CONFIG_ARCH_ADVANTECH
+ 	 struct usb_host_endpoint *ep=NULL;
+ #endif
	int err;
	unsigned long flags;
…
…
…
	/* send the data */
	memcpy(this_urb->transfer_buffer, buf, todo);
	this_urb->transfer_buffer_length = todo;

+ #ifdef CONFIG_ARCH_ADVANTECH  
+   if (IS_RSB_6410)
+   {
+       if((HUAWEI_VENDOR_ID == port->serial->dev->descriptor.idVendor)
+       	&& (HW_bcdUSB != port->serial->dev->descriptor.bcdUSB)){
+       	ep = usb_pipe_endpoint(this_urb->dev, this_urb->pipe);
+       	if(ep && (0 != this_urb->transfer_buffer_length)
+       		&& (0 == this_urb->transfer_buffer_length %
+       		ep->desc.wMaxPacketSize)){
+       		this_urb->transfer_flags |= URB_ZERO_PACKET;
+       	}
+       }
+   }
+ #endif

		spin_lock_irqsave(&intfdata->susp_lock, flags);
		if (intfdata->suspended) {
			usb_anchor_urb(this_urb, &portdata->delayed);
…
…
…
}
…
…
…
/* Helper functions used by usb_wwan_setup_urbs */
static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port,
				      int endpoint,
				      int dir, void *ctx, char *buf, int len,
				      void (*callback) (struct urb *))
{
	struct usb_serial *serial = port->serial;
	struct urb *urb;

	urb = usb_alloc_urb(0, GFP_KERNEL);	/* No ISO */
	if (!urb)
		return NULL;

	/* Fill URB using supplied data. */
	usb_fill_bulk_urb(urb, serial->dev,
			  usb_sndbulkpipe(serial->dev, endpoint) | dir,
			  buf, len, callback, ctx);

+ #ifdef CONFIG_ARCH_ADVANTECH
+     	if (dir == USB_DIR_OUT) {
+     		struct usb_device_descriptor *desc = &serial->dev->descriptor;
+     		if (desc->idVendor == 0x05C6 && (desc->idProduct == 0x9003 || desc->idProduct ==
+     			0x9090 || desc->idProduct == 0x9215))
+     			urb->transfer_flags |= URB_ZERO_PACKET;
+     	}
+ #endif
	return urb;
}

2. Add UC15/UC20/EC20's Vendor ID and Product ID in "option_ids[]" in the file "drivers/usb/serial/option.c":

static const struct usb_device_id option_ids[] = {
…
+	{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9090) }, //for Quectel UC15
+	{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9003) }, //for Quectel UC20
+	{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9215) }, //for Quectel EC20
…
}

4G

Sierra AirPrime MC7304

For Yocto 1.8

We have to enable CONFIG_USB_SERIAL_QUALCOMM=m

For Yocto 2.0 and later

We have to enable CONFIG_USB_SERIAL_OPTION=y


Using command as below to connect
pppd connect 'chat -v -s -t 10 "" "AT" "" "ATDT*99#" "CONNECT" ""' user username password password /dev/ttyUSB2 460800 nodetach crtscts debug usepeerdns defaultroute &

Sierra AirPrime MC7430

Modify drivers/usb/serial/option.c

--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -1123,6 +1123,8 @@ static const struct usb_device_id option_ids[] = {
        { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */
        { USB_DEVICE_INTERFACE_CLASS(SIERRA_VENDOR_ID, 0x68c0, 0xff),
          .driver_info = (kernel_ulong_t)&sierra_mc73xx_blacklist }, /* MC73xx */
+       { USB_DEVICE_INTERFACE_CLASS(SIERRA_VENDOR_ID, 0x9071, 0xff),
+         .driver_info = (kernel_ulong_t)&sierra_mc73xx_blacklist }, /* MC7430 */
        { USB_DEVICE_INTERFACE_CLASS(SIERRA_VENDOR_ID, 0x9041, 0xff),
          .driver_info = (kernel_ulong_t)&sierra_mc73xx_blacklist }, /* MC7305/MC7355 */
        { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },

AM Telecom AMM561KT

The following operations are performed with UBC-222(U222LBV2011).

  • linux kernel config


Device Drivers --->
[*] USB support --->
<M> Support for Host-side USB
[*] Network device support --->
USB Network Adapters --->
<M> Multi-purpose USB Networking Framework
<M> Host for RNDIS and ActiveSync devices (EXPERIMENTAL)


  • load drivers
# rmmod usbserial
# modprobe rndis_host
# modprobe usbserial vendor=0x1ECB product=0x0205

e.g. put the 3 lines to /etc/rc.local
AMM561KT load drivers.png

  • list usb devices
# lsusb
# ll /dev/ttyUSB[012]

AMM561KT list usb devices.png

Bluetooth

EWM-W155H01E

Please refer to Bluetooth Testing Guide for Quark Platform for all operations performed using UBC-222 with U222LBV2011.

AW-CB178NF

Porting AzureWave Wifi BT module

1. Add compile option ins arch/arm/configs/imx_v7_adv_deconfig

… 
CONFIG_BT_HIDP=y 
CONFIG_BT_HCIBTUSB=y 
CONFIG_BT_HCIVHCI=y 
+ CONFIG_BT_MRVL=m 
+ CONFIG_BT_MRVL_SDIO=m 
CONFIG_BT_ATH3K=m 
CONFIG_CFG80211=m 
CONFIG_CFG80211_WEXT=y 
… 
… 
CONFIG_USB_NET_RNDIS_HOST=y CONFIG_USB_NET_CDC_SUBSET=m 
CONFIG_USB_NET_ZAURUS=m 
+ CONFIG_LIBERTAS_THINFIRM=m 
CONFIG_ATH_CARDS=m 
CONFIG_ATH9K=m 
CONFIG_ATH9K_LEGACY_RATE_CONTROL=y 
… 
CONFIG_RT2800USB_RT55XX=y 
CONFIG_RT2800USB_UNKNOWN=y 
CONFIG_RTL8188EE=m 
+ CONFIG_MWIFIEX=m 
+ CONFIG_MWIFIEX_SDIO=m 
CONFIG_INPUT_POLLDEV=y
#CONFIG_INPUT_MOUSEDEV_PSAUX is not set
CONFIG_INPUT_EVDEV=y …

2. Modify in arch/arm/boot/dts/imx6qdl-advantech.dtsi

...
usdhc1 {
		pinctrl_usdhc1_1: usdhc1grp-1 {
			fsl,pins = <
				MX6QDL_PAD_SD1_CMD__SD1_CMD    0x17059
				MX6QDL_PAD_SD1_CLK__SD1_CLK    0x10059
				MX6QDL_PAD_SD1_DAT0__SD1_DATA0 0x17059
				MX6QDL_PAD_SD1_DAT1__SD1_DATA1 0x17059
				MX6QDL_PAD_SD1_DAT2__SD1_DATA2 0x17059
				MX6QDL_PAD_SD1_DAT3__SD1_DATA3 0x17059
			>;
		};
	};
...

3. add in arch/arm/boot/dts/imx6q-[board].dts

...
&iomuxc {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_hog_1 &pinctrl_hog_2>;

	hog {
		pinctrl_hog_1: hoggrp-1 {
                        fsl,pins = <
                                MX6QDL_PAD_SD3_DAT4__GPIO7_IO01         0x80000000      /* SD3_CD */
                                MX6QDL_PAD_SD3_DAT5__GPIO7_IO00         0x80000000      /* SD3_WP */
                                MX6QDL_PAD_SD2_CMD__GPIO1_IO11         	0x80000000      /* SDIO RST */
                                MX6QDL_PAD_SD2_CLK__GPIO1_IO10         	0x80000000      /* SDIO WAKE */
+                               MX6QDL_PAD_NANDF_D7__GPIO2_IO07        	0x80000000      /* M.2 WLAN OFF */
+                               MX6QDL_PAD_NANDF_D1__GPIO2_IO01        	0x80000000      /* M.2 BT OFF */
                                MX6QDL_PAD_GPIO_0__CCM_CLKO1            0x130b0     /* AUDIO CLK */
                        >;
                };
...

Testing Operations

hciconfig hci0 up
hcitool dev | grep hci
hcitool scan

RTENOTITLE

WiFi

EWM-W142F01E

EWM-W151H01E

EWM-W155H01E

USB

EMIO-200U3

Set CONFIG_USB_XHCI_HCD=y in kernel config

ADC

USB-4702/4704

Driver Confirmation

1. Make sure the DAQ device driver has been loaded by the kernel

lsmod_4704_1.png

2. If login by normal user (not root user), you have to place drivers\driver_base\src\lnx_ko\71-bionic-daq.rules

to /etc/udev/rules.d/ in Root File System

3. Make sure the DAQ driver has been successfully matched with the DAQ device.

daq_device.png

Change Device Description

To check deviceDescription

cat /sys/class/daq/daq0/desc

and change deviceDescription of your device in sample codes

example:

#define  deviceDescription  L"USB-4704,BID#0"

Compile sample code

First, download this package for arm64-oecore

Linux_driver_source_3.2.10.6_arm64-oecore.zip

These libraries in ./libs are only for arm64-oecore cross-compiler and have to be copyed into /usr/lib/ in Root File System

If you want to use these libraries on other platforms (ex: I.MX6 ...), please contact with Advantech.

Set-up arm64-oecore environment

source [your cross-compiler path]/environment-setup-aarch64-oe-linux

Compile sample code

[your cross-compiler path]/sysroots/x86_64-oesdk-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux-g++ -o $Example_NAME $Example_NAME.cpp \
--sysroot=[your cross-compiler path]/sysroots/aarch64-oe-linux/ \
-I [your cross-compiler path]/sysroots/aarch64-oe-linux/usr/include/ \
-L [your cross-compiler path]/sysroots/aarch64-oe-linux/usr/lib/ \
-L [USB-4704 driver source path]/libs \
-lbiodaq

usb-4704_1.png