基于迅为itop4412开发板的4G模块SIM7100的拨号上网的实现

为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长。

在这里插入图片描述


一、实验目的:

	实现4G模块sim7100在Linux系统上的拨号上网。

二、实验平台:

    开发板:迅为4412精英版;4G模块:SIM7100开发板。SIM7100C带有USB口和串口,考虑速率等问题,采用USB接口与开发板相连接。我的4412开发板运行的是Linux最小系统,我们需要向内核添加4G模块的驱动与PPP协议支持,然后在编译内核下载到开发板。

三、实验流程

1、内核配置:源码目录,通过mkae menuconfig进入配置。
(1)大容量存储驱动

Device Drivers > USB support

make ARCH=arm menuconfig配置USB驱动:

<*> USB Mass Storage support

[*] USB Mass Storage verbose debug

<*> Realtek Card Reader support

[*] Realtek Card Reader autosuspend support

<*> Datafab Compact Flash Reader support

(2)USB驱动

Device Drivers > USB support

<*> Inventra Highspeed Dual Role Controller (TI, ADI, …)

        MUSB Mode Selection (Dual Role mode)  --->            

<*>    Platform Glue Layer (TI DSPS platforms)  --->         

    MUSB DMA mode (Disable DMA (always use PIO))  --->

<*> USB Serial Converter support —>

[*] USBGeneric Serial Driver

<*> USBdriver for GSM and CDMA modems

(3)PPP驱动

Device Drivers > Network device support

<*> PPP (point-to-point protocol) support

<*>    PPP BSD-Compress compression                         

<*>    PPP Deflate compression                             

[*]    PPP filtering                                           

<*>    PPP MPPE compression (encryption)                         

 [*]    PPP multilink support                 

<*>    PPP over Ethernet               

<*>    PPP support for async serial ports   

<*>    PPP support for sync tty ports     

<*> SLIP (serial line) support

[*] CSLIP compressed headers
全部添加进入内核后,使用make编译,编译出来的zImage烧写到开发板。(注:zImage目录:源码的arch/arm/boot/目录下)


2、交叉编译libusb
这部分为提供USB支持,这一部分我是参考下面的连接:

[libusb交叉编译] (http://www.linuxidc.com/Linux/2016-03/129581.htm)
编译成功后,将生成的libusb-1.0.20和libusb-compat-0.1.5下的库文件(lib下的文件)复制到ARM板上的linux的/lib下面即可。(我这里是最小系统下的lib下如下图:(可以直接复制过去;也可以通过先放到最小系统的lib下,直接压缩到system.ing文件中,再下载到板子上)

这里写图片描述


3、交叉编译4G模块驱动:Gobiserial.ko

我觉得这个驱动是很重要的,厂家提供的资料里竟然没有。最终在谷歌上找到了。亲测可用[下载连接]
(http://www.reyax.com/httpdocs/index.files/4G_Module.htm)
具体的操作为:将压缩包复制到ubuntu下,解压,
这里写图片描述
进入到Gobiserial文件夹,把Makefile文件的源码目录替换为我们自己的(编我直接使用的是编译驱动写的),然后make
这里写图片描述
就可以得到驱动文件Gobiserial.ko文件
这里写图片描述
将此.ko文件拷贝到U盘或者开发板上均可。至此驱动方面的工作就完毕了!!!


4、加载驱动

我将Gobiserial.ko文件复制到了开发板的/bin/目录下
这里写图片描述
通过加载驱动的命令:insmod Gobiserial.ko 将驱动插入到内核中

这里写图片描述

查看此模块是否成功插入:lsmod
这里写图片描述
成功插入驱动后;插入4G模块,虚拟出6个ttyUSB,它们分别是:
这里写图片描述
具体的作用为:
这里写图片描述


5、交叉编译PPP

这个参考: [PPP编译] (http://www.linuxidc.com/Linux/2016-03/129580.htm)
我下载的是ppp-2.4.7,复制到ubuntu下,解压
编译:

(1)生成Makefile文件(也可直接./configure)

这里写图片描述

(2)编译(必须使用与开发板一致的编译器,迅为的4412用的是arm-2009q3)

这里写图片描述

(3)编译命令:

这里写图片描述

(4)安装:make install (有错,不用管)

这里写图片描述

(5)将编译出来的脚本复制到ARM开发板上:

按照上面的make好之后,由于make install出错,所以直接在目录中找到如下的四个文件:

chat pppd pppdump pppstats

复制到ARM开发板的/usr/sbin目录下:
这里写图片描述

(6)建立/etc/ppp目录:

从ppp-2.4.7相应目录中拷贝文件,建立如下目录结构:
注:前两个文件我是从ppp-2.4.7目录下拷贝的,另外的没找到,直接到/etc/ppp目录下复制:
/etc/ppp/chap-secrets
/etc/ppp/pap-secrets
/etc/ppp/ip-up
/etc/ppp/ip-down
/etc/ppp/peers/
拷贝之后放到开发板的对应目录下:如下图所示
这里写图片描述
至此,ppp编译顺利完成!!!!


(5)拨号脚本设置
(1)a.在/etc/ppp目录下使用 vi gprs-connect-chat 建立文件

内容如下:
#/etc/ppp/gprs-connect-chat
# chat script for China Mobile, used in SIMCOM sim4100 TD module.
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 AT+CGEQREQ=1,2,128,384,0,
OK ATDT991#
CONNECT
保存之后,退出

(2)进入/etc/ppp/peers/目录:vi gprsdial 建立文件

内容如下:
#/etc/ppp/peers/gprsdial
# This is pppd script for China Mobile, used SIMCOM SIM7100 Module
# Usage: root>pppd call gprs
#Interface which be used is the interface which connects physics interface of SIM7100 Module.

/dev/ttyUSB3
115200
crtscts
modem
#noauth
debug
nodetach
#hide-password
usepeerdns
noipdefault
defaultroute
user “cmnet”
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/gprs-connect-chat’
#disconnect '/bin/chat -v -f /etc/ppp/gprs-disconnect-chat
拨号的脚本成功完成!!!
*******

(6)进行拨号

超级终端输入:pppd calll gprsdial
现象:出现以下说明拨号成功(未全部列出)
这里写图片描述

查看模块运行状态:
我们使用:pppd call gprsdial & 将4G模块设置为后台运行,这样的话,有利于我们操作。
输入:ifconfig查看网络:

这里写图片描述

出现ppp0说明:4G模块确定拨号已经成功了。为了防止与本地的网络冲突,我将开发板上的网线拔掉!!


(7)测试

拨号之后进行测试,通过ping命令来看是否可以ping通IP和域名。

(1)a.ping IP:

出现 “ping: sendto: Network is unreachable”(内心崩溃。。。。。。。。)
解决方法:
[ping 不通ip解决] (http://www.cnblogs.com/embedded-linux/p/5258388.html)
测试是否ping通baidu的IP地址。如果ping不通,需要给本机加条路由,使用如下指令:
#route add default gw 10.212.18.13
注:10.212.18.13:运营商的ip地址,即下图黑色部分。完美解决!
这里写图片描述

查看IP信息:
这里写图片描述

(2)ping 域名:

此时可以ping通ip但是无法ping通域名。这需要设置/etc/resolv.conf来添加DNS解析服务器的地址。
解决:
在/etc/resolv.conf 中加入:下面两句,即可成功ping通域名
这里写图片描述
DNS出现在拨号信息的末尾:
这里写图片描述

成功ping通百度
这里写图片描述

至此,4G模块已经成功拨号。。。。。。。。。。。。。。。。。
若要开机自启动拨号:只需设置/etc/init.d/rcS 即可(参照网卡设置)


四、感悟

本人是新手,在移植的过程中遇到了很多的问题,多半是看了网上的文章,然后边学习边弄。如果有不准确的地方,还望大家勿喷,互相学习。从开始学习Linux驱动到现在,也有一段时间了,虽然还很菜,但至少不像开始一样蒙圈了。


五、感谢

在这个过程中,我主要参考了[在ARM Linux上实现4G模块PPP拨号上网] (http://www.linuxidc.com/Linux/2016-03/129581.htm)他的文章,还有一些相关3G模块的移植文章,再次感谢大家!!

### HRTF算法原理及应用 #### HRTF的基本原理 HRTF(Head Related Transfer Function,头部相关传递函数)是一种用于模拟三维空间声音定位的数字信号处理技术。其核心思想是通过数学模型来描述声音从声源传播到双耳过程中所受到的物理影响,包括头部、耳廓、耳道等结构对声波的反射、折射和衍射效应。 在实际环境中,当一个声音到达人的耳朵时,由于人体结构的影响,不同方向的声音会具有不同的频谱特征。大脑利用这些特征以及时间差和强度差来判断声音的方向。HRTF通过测量或计算特定方向下的这些特征,并将其表示为一对滤波器(分别对应左右耳),从而使得经过HRTF处理的声音能够在立体声耳机上重现原始的空间位置感[^1]。 #### HRTF的数据获取 为了构建准确的HRTF数据集,通常需要进行精确的测量实验。实验中使用人工头模型或者真人受试者,在自由场条件下放置多个扬声器于不同的方位角和仰角,然后记录每个位置处由扬声器发出的测试信号经过人头与耳朵后的响应。随后,将采集到的数据转换成频率域的形式,形成对应的HRTF滤波器组。这种个性化定制的数据能够提供更加真实的听觉体验,但同时也增加了获取成本[^1]。 #### HRTF的应用领域 - **虚拟现实(VR)与增强现实(AR)**:在VR/AR系统中,HRTF被用来创建沉浸式的音频环境,让用户即使闭着眼睛也能感知到周围世界的存在及其变化。 - **游戏开发**:特别是在射击类游戏中,玩家可以通过脚步声、枪击声等音效快速识别敌人的具体方位,提高游戏的真实性和互动性[^2]。 - **远程会议系统**:借助HRTF技术可以实现更自然的多方通话体验,让参与者更容易分辨说话者的身份。 - **助听设备**:对于某些类型的助听器而言,采用适当的HRTF策略可以帮助佩戴者更好地理解来自各个方向的声音信息。 #### HRTF面临的挑战 尽管HRTF提供了强大的空间音频解决方案,但在实际应用过程中仍然存在一些难题: - 个性化问题:每个人的身体构造都有所差异,因此通用型HRTF可能无法达到最佳效果; - 计算复杂度高:实时应用时需要大量的运算资源来执行卷积操作; - 动态跟踪:如果用户头部移动,则必须相应调整应用的HRTF以保持正确的空间感知。 针对上述问题的研究正在不断推进之中,比如通过机器学习方法预测个性化的HRTF参数、优化算法减少计算负担等手段来改善用户体验。 ```python import numpy as np from scipy.signal import convolve def apply_hrtf(audio_signal, hrtf_left, hrtf_right): """ Apply HRTF filters to mono audio signal to create binaural output. :param audio_signal: Mono input signal (numpy array) :param hrtf_left: Left ear HRTF filter coefficients (numpy array) :param hrtf_right: Right ear HRTF filter coefficients (numpy array) :return: Binaural output (numpy array with shape [length, 2]) """ left_channel = convolve(audio_signal, hrtf_left, mode='full') right_channel = convolve(audio_signal, hrtf_right, mode='full') return np.column_stack((left_channel, right_channel)) ``` 该代码示例展示了如何将给定方向的HRTF应用于单声道音频信号以生成双声道输出。这里使用了`scipy.signal.convolve`函数来进行卷积运算,这是实现HRTF效果的关键步骤之一。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值