龙尚(LONGSUNG) U9300 模块 Linux驱动

硬件环境:友善之臂(FriendlyARM)Smart4418 SDK 1606
固件环境:s5p4418-eflasher-friendlycore-xenial-4.4-armhf-20180906.img
交叉编译环境:ubuntu-16.04.4-server-amd64

注意:NetworkManager会导致ppp模式拨号异常,请使用network管理网络
vi rmnm.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash

apt-get --yes --force-yes remove --auto-remove --purge network-manager
apt autoremove -y

cat >/etc/network/interfaces <<INTERFACEEOL
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
INTERFACEEOL

cat >/etc/network/interfaces.d/eth0 <<ETH0EOLB
auto eth0
iface eth0 inet dhcp
hwaddress 76:92:d4:85:f3:0f
ETH0EOLB

chmod 755 rmnm.sh
sudo ./rmnm.sh

一、交叉编译环境

  • 安装系统
  • apt-get update
  • apt安装
    vim-gtk
    git
    make
    bc
    lsb-core
    libssl-dev
    libncurses*
    minicom

1.1、工具链下载(操作目录:普通用户~)

1
git clone https://github.com/friendlyarm/prebuilts.git

1.2、工具链配置(export最好配置到开机启动里)

1
2
3
4
sudo mkdir -p /opt/FriendlyARM/toolchain
sudo tar xf prebuilts/gcc-x64/arm-cortexa9-linux-gnueabihf-4.9.3.tar.xz -C /opt/FriendlyARM/toolchain/
export PATH=/opt/FriendlyARM/toolchain/4.9.3/bin:$PATH
export GCC_COLORS=auto

1.3、内核下载

1
git clone https://github.com/friendlyarm/linux.git -b nanopi2-v4.4.y --depth 1

1.4、内核配置(操作目录:普通用户~/linux,即内核根目录)

1
2
3
touch .scmversion
make ARCH=arm nanopi2_linux_defconfig
make ARCH=arm CROSS_COMPILE=arm-cortexa9-linux-gnueabihf- menuconfig
1
2
3
4
5
6
7
8
Device Drivers  --->
[*] Network device support --->
<*> PPP (point-to-point protocol) support
<*> PPP support for async serial ports
<*> PPP support for sync tty ports
[*] USB support --->
<*> USB Serial Converter support --->
<*> USB driver for GSM and CDMA modems

1.5、增加具体设备驱动、USB 串口驱动过滤NDIS 接口

drivers/usb/serial/option.c

在源码中找到option_ids 数组, 在数组中添加Longsung 产品的VID(0x1C9E) 和
PID(0x9B3C)。

1
2
#define LONGSUNG_VENDOR_ID			0x1c9e
#define LONGSUNG_U9300_PRODUCT_ID 0x9b3c

在option.c 中的opiton_ids 中添加blacklist,驱动在加载时会自动跳过blacklist 指定的interface;设置interface 4 不加载option驱动;

1
2
3
static const struct option_blacklist_info longssung_u9300_blacklist = {
.reserved = BIT(4),
};

添加blacklist 到option_ids 数组中。

1
2
3
{ USB_DEVICE(LONGSUNG_VENDOR_ID, LONGSUNG_U9300_PRODUCT_ID),
.driver_info = (kernel_ulong_t)&longssung_u9300_blacklist
},

1.6、内核编译(操作目录:普通用户~/linux,即内核根目录)

1
make ARCH=arm

编译成功结束后,新生成的内核是 arch/arm/boot/zImage,目录arch/arm/boot/dts/下还包括新的DTB文件(s5p4418-nanopi2-rev*.dtb),用于替换掉SD卡boot分区下对应的文件。
s5p4418-nanopi2-rev01.dtb
s5p4418-nanopi2-rev02.dtb
s5p4418-nanopi2-rev03.dtb
s5p4418-nanopi2-rev04.dtb
s5p4418-nanopi2-rev07.dtb
s5p4418-nanopi2-rev103.dtb
zImage

1.7、内核替换

挂载boot分区(mount /dev/mmcblk0p1 /boot/)
使用sftp传输替换文件
更新完成后,输入 reboot 命令重启即可,注意不要直接断电或按Reset键,否则可能会损坏文件。

二、板上环境

2.1、加载USB 串口驱动

1
sudo modprobe option

2.2、使能设备(1c9e 9b3c分别为VID、PID)

1
sudo echo 1c9e 9b3c > /sys/bus/usb-serial/drivers/option1/new_id

这个操作之后应该就能够看到 /dev 下多了 ttyUSB0、ttyUSB1、ttyUSB2 几个设备节点了。
使用dmesg 命令查看系统log,USB 串口驱动已经被加载。

2.3、交互AT配置

1
2
3
4
minicom –s 
Serial port setup -> Serial device -> /dev/ttyUSB2
Save setup as df1
exit

注意:串口中AT(ttyUSB2),Modem(ttyUSB1)可以发AT 命令,其他不能发AT指令

2.4、AT命令

打开回显(ATE)
查询版本信息(AT+LCTSW)
查询信号(AT+CSQ)
注册状态(AT+CREG?)
网络运营商信息(AT+COPS?)

2.5、拨号上网配置

vim /etc/ppp/chat/gprs-connect-chat

1
2
3
4
5
6
7
8
9
10
11
12
13
TIMEOUT		15
ABORT "DELAYED"
ABORT "BUSY"
ABORT "ERROR"
ABORT "NO DIALTONE"
ABORT "NO CARRIER"
TIMEOUT 40
'' \rAT
OK ATS0=0
OK ATE0V1
OK AT+CGDCONT=1,\"IP\",\"CMNET\"
OK ATDT*99***1#
CONNECT ''

其中CMNET为中国移动的APN,按需修改

vim /etc/ppp/options

找到auth 字样的行然后将其改为#auth,这样在拨号过程中就不会提示需要身份验证

vim /etc/ppp/peer/gprs

必须指定Modem口是ttyUSB1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Usage: root>pppd call gprs
/dev/ttyUSB1
9600
crtscts
modem
#noauth
debug
nodetach
#hide-password
usepeerdns
noipdefault
defaultroute
0.0.0.0:0.0.0.0
ipcp-accept-local
ipcp-accept-remote
#lcp-echo-failure 12
#lcp-echo-interval 3
#noccp
#novj
#novjccomp
#persist
connect '/usr/sbin/chat -s -v -f /etc/ppp/chat/gprs-connect-chat'

2.6、拨号上网

1
pppd call gprs

通过ifconfig、ping、apt-get update来检查网络