Difference between revisions of "IoTGateway/Features/Linux/Module"
Daniel.hung (talk | contribs) |
|||
Line 166: | Line 166: | ||
== 4G == | == 4G == | ||
+ | |||
+ | === Telit LE910C4 === | ||
+ | |||
+ | |||
+ | |||
+ | ;For Yocto 2.5 and later | ||
+ | |||
+ | We have to enable '''CONFIG_USB_SERIAL_OPTION=y''' | ||
+ | |||
+ | ;Using command as below to connect | ||
+ | : | ||
+ | Setup APN | ||
+ | echo -e "AT+CGDCONT=2,\"ip\",\"internet\"\r\n" >/dev/ttyUSB2 | ||
+ | Connect | ||
+ | pppd connect 'chat -v -s -t 10 "" "AT" "" "ATDT*99***2#" "CONNECT" ""' user username password password /dev/ttyUSB2 460800 nodetach crtscts debug usepeerdns defaultroute & | ||
=== Sierra AirPrime MC7304 === | === Sierra AirPrime MC7304 === | ||
Line 227: | Line 242: | ||
*load drivers | *load drivers | ||
− | <div style="margin-left: 2em | + | <div style="margin-left: 2em"> |
# rmmod usbserial | # rmmod usbserial | ||
# modprobe rndis_host | # modprobe rndis_host | ||
Line 235: | Line 250: | ||
</div> | </div> | ||
*list usb devices | *list usb devices | ||
− | <div style="margin-left: 2em | + | <div style="margin-left: 2em"> |
# lsusb | # lsusb | ||
# ll /dev/ttyUSB[012] | # ll /dev/ttyUSB[012] |
Revision as of 10:31, 5 August 2020
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 &
EWM-C109FT01E
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
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 &
# ifconfig
# ping -c5 8.8.8.8
Telit HE910-D
The following operations are performed with UBC-221 using U221LBV1050.
- practical test on target board
# modprobe cdc-acm
# dmesg | grep ttyACM
# pppd connect 'chat -v -s -t 10 "" "AT" "" "ATDT*99#" "CONNECT" ""' \
user username password password /dev/ttyACM0 460800 nodetach crtscts debug usepeerdns defaultroute &
# pinc -c5 8.8.8.8
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
Telit LE910C4
- For Yocto 2.5 and later
We have to enable CONFIG_USB_SERIAL_OPTION=y
- Using command as below to connect
Setup APN
echo -e "AT+CGDCONT=2,\"ip\",\"internet\"\r\n" >/dev/ttyUSB2
Connect
pppd connect 'chat -v -s -t 10 "" "AT" "" "ATDT*99***2#" "CONNECT" ""' user username password password /dev/ttyUSB2 460800 nodetach crtscts debug usepeerdns defaultroute &
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_File:4G_rndis.zip)&sierra_mc73xx_blacklist }, /* MC7305/MC7355 */ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },
Sierra AirPrime EM7565
Verified on RSB-4760 (Qualcomm db410c)
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)
- USB Network Adapters --->
- [*] USB support --->
- Device Drivers --->
- load drivers
# rmmod usbserial # modprobe rndis_host # modprobe usbserial vendor=0x1ECB product=0x0205
- list usb devices
EWM-C145
EWM-C117
Default RNDIS Mode
Use the script to connect to internet
Change to normal mode
File:module-ewm-117-for-ppp.zip
Connect to internet by pppd demand
Reference from AE Phill
:File:EWM-C117 RSB-4760 internaluse.docx
Made from RD
File:EWM-C117_for_RK3399_ds100.docx
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
WiFi
EWM-W142F01E
For Yocto 1.8
Check wlan0 existing or not
# ifconfig wlan0 up
- ifconfig
# wpa_passphrase "ASUS_RISC_SOM_ESBC_2.4" 1qaz2wsx > /tmp/wpa.conf
#wpa_supplicant -BDwext -iwlan0 -c/tmp/wpa.conf
# cat /tmp/wpa.conf
# udhcpc -b -i wlan0
Check wlan0 working or not
# ifconfig wlan0
# ping 8.8.8.8
For Debian 8
# apt-get update
# apt-get install network-manager-gnome
Check wlan0 existing or not
# ifconfig wlan0 up
- ifconfig
# wpa_passphrase "ASUS_RISC_SOM_ESBC_2.4" 1qaz2wsx > /tmp/wpa.conf
#wpa_supplicant -BDwext -iwlan0 -c/tmp/wpa.conf
# cat /tmp/wpa.conf
# dhclient wlan0
EWM-W151H01E
EWM-W155H01E
EWM-W157H01E
Support WiFi and BT function on Yocto 2.1.
For Yocto 2.1
Check wlan0 existing or not
# ifconfig wlan0 up
- ifconfig
# wpa_passphrase "ASUS_RISC_SOM_ESBC_2.4" 1qaz2wsx > /tmp/wpa.conf
#wpa_supplicant -BDwext -iwlan0 -c/tmp/wpa.conf
# cat /tmp/wpa.conf
# udhcpc -b -i wlan0
Check wlan0 working or not
# ifconfig wlan0
# ping 8.8.8.8
EWM-W163M201E
EWM-W163M201E_porting_guide_on_DS100.docx
EWM-W170
EWM-W170_WIFI_porting_guide_for_imx6.docx
EWM-W188
File:EWM-W188_Bluetooth_porting_guide_for_ds100-debian.docx
For Debian ( testing OS version : U220A1DIV8790_DualLiteSolo_2018-08-06.img)
Click the icon (Debian Desktop right side )
You can see the wifi list , then select your wilfi point and type wifi password .
USB
EMIO-200U3
Set CONFIG_USB_XHCI_HCD=y in kernel config
ADC
USB-4702/4704 & USB-4761
Driver Confirmation
1. Make sure the DAQ device driver has been loaded by the kernel
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.
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 the package for specific platform, e.g. arm64-oecore or TI am335x.
These libraries in ./libs are only for specific platform and have to be copied into /usr/lib/ in Root File System
If you want to support on other platforms (ex: i.MX6 ...), please contact with Advantech.
- [RSB-4760]
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
- [RSB-4220 / UBC-330]
Compile sample code
[your cross-compiler path]/sysroots/x86_64-arago-linux/usr/bin/arm-linux-gnueabihf-g++ -o $Example_NAME $Example_NAME.cpp \ --sysroot=[your cross-compiler path]/sysroots/armv7ahf-neon-linux-gnueabi/ \ -I [your cross-compiler path]/sysroots/armv7ahf-neon-linux-gnueabi/usr/include/ \ -L [your cross-compiler path]/sysroots/armv7ahf-neon-linux-gnueabi/usr/lib/ \ -L [USB-4704 driver source path]/libs \ -lbiodaq
Example List
For simple test, you can use AO_StaticAO to see if the output voltage of AO0 changes automatically.
- For USB-4702/4704
- For USB-4761