___________________________________
主机操作系统:Centos 6.5 交叉编译器环境:arm-linux-gcc-4.5.4 开发板平台: FL2440 Linux内核版本: 3.0 作者:songyong<handy_sky@>
___________________________________
一、配置内核支持3G驱动以及PPP协议
打开ppp相关配置:
Device Drivers --->
[*] Network device support --->
<*> PPP (point-to-point protocol) support
[*] PPP multilink support (EXPERIMENTAL)
[*] PPP filtering
<*> PPP support for async serial ports
<*> PPP support for sync tty ports
打开usb串口相关配置:
[*] USB support --->
<*> USB Serial Converter support --->
[*] USB Serial Console device support
[*] USB Generic Serial Driver
<*> USB driver for GSM and CDMA modems
自行在开发板上#lsusb 查看3G上网卡的厂商ID与设备ID,并将其添加到usb通用驱动option.c中(因为查看之后发现option.c中并没有我的3G上网卡信息,所以需要自行添加。如若能通过ID找到则可不添加)
以及在在option_ids数组中添加子项
二 、交叉编译拨号软件ppp-2.4.5和usb_modeswitch-1.2.4及其依赖的libusb-1.0.0和libusb-compat-0.1.4
usb_modeswitch;因为3G上网卡在linux下首次插入时是处于CD-ROM模式,我们如果要pppd拨号上网,则需要将默认被识别为存储设备的3g usb modem转换为可以通讯的多个串口设备。
usb_modeswitch-current_data.tar.bz2:这个包里包括提供给UDEV的驱动设备信息,和很多设备使用usb_mdoeswitch进行转换模式时需要配置的参数。下载它用于参考,usb_modeswitch.conf里面的参数就会参考到。
因为网上编译文档众多,在此不赘述。只是一开始我用的是usb_modeswitch-2.2.5,编译不通过。若只是想像我一样玩一下的话,可换此低版本通过。
下载地址:
ppp-2.4.5.tar.gz ;usb-modeswitch-1.2.4.tar.bz2;usb-modeswitch-data-0627.tar.bz2;libusb-1.0.0.tar.bz2
都通过之后,将ppp文件夹中的pppd和chat放入开发板/usr/sbin目录下;
三、配置usb_modeswitch.conf;并编写ppp拨号脚本
我们进入usb_modeswitch-data....../usb_modeswitch.d目录中打开对应ID的文件
一开始HuaweiMode=1不通过,然后我改为0后通过。至此,到这里我们发现12d1:1446其实并没有什么实际性的参考价值.....
网上的配置文件原本还有各种参数,但是又都不给出解释。我这样最简陋的基本配置,所幸能使用。有更具体需求的可以自行添加。
改好之后执行:
# mount -t usbfs usbfs /proc/bus/usb/ //挂载usb文件系统
#/apps/3G/usb_modeswitch -c/apps/3G/usb_modeswitch.conf //-c是指指定配置文件
如若成功:# ls /dev/ttyUSB* 可看到USB0-3等串口设备出现。
接下来重头------->串口下的AT指令集
首先我们执行microcom --help ,发现-s是serial串口调试
#microcom -s 115200 /dev/ttyUSB1
这时候屏幕可能就“卡”在这,也无任何回显。不要慌,我们敲at回车等待回应
如果回应 OK则可使用串口通讯,可能可以实现拨号。
ate1回车 可开启回显,这样就不会没有安全感了,不信就试试
以下是比较常用的AT命令。对于不同的厂商设备可能AT指令不完全相同,但是大多是一致的。所以可去网上随便找个datasheet看看。
ate0关闭
at+cgmm 可查看模块名
at+cgmr 可查看模块版本信息
at+cgmi 可查看模块制造商
at+csq 可查看信号强度
at+cpin? 查看SIM卡是否到位
at+creg? 查看SIM卡是否注册上,网络注册的情况。
at+cops? 查看SIM卡运营商
对于拨号脚本,其实大多都相同,稍加修改即可。
wcdma:
chat-wcdma-connect:
chat-wcdma-disconnect:
此时我们将这三个文件放到/etc/ppp/peers路径下。
当我们的microcom -s 115200 /ttyUSB1
在at+creg?回复1或者5之后表示可以拨号了。
执行pppd call wcdma拨号
至此,3G上网卡手动实现usb_modeswitch切换串口然后ppp拨号上网的基本需求就完成了。
下面使用mdev自动切换.
mdev是busybox自带的一个简化版的udev
作用是在系统启动和热拔插或动态加载驱动程序时,自动产生驱动程序所需的节点文件,在文件系统中的/dev目录下的设备节点都是由mdev创建的。记得一开始学习驱动的时候,当时就知道了热拔插hotplug这个机制。简单地说内核里面的hotplug机智就是说当我们存在设备热拔插时,内核会调用用户空间层的一些脚本来进行处理。
==============================================================================================
busybox的mdev是一个精简了的udev管理程序,它可以间接的以hotplug方式被内核调用,进而在arm平台上/dev目录下动态创建设备节点,因为hotplug会被内核发送uevent之前调用,所以如果动态可插拔设备很多,很频繁,那么每次内核都会调用elf格式的用户空间的hotplug,生成一个独立的hotplug程序来处理,所以hotplug是一个非常笨重的实现方法,但是在我们的arm开发板上,可插拔设备并没有想象中的频繁
目前还没有必要移植完全版的udev,所以完全可以在不复杂的嵌入式设备上使用mdev来管理动态节点
==============================================================================================
以上引用网上一位前辈的说法:/lanmanck/article/details/4558500
首先我们在制作根文件系统的时候,需要在系统启动时最先读取的自启文件inittab或者是脚本里面注明的fstab文件里面先挂载/sys和/proc文件系统。
因为mdev的另外一个很有用的地方是,他可以通过proc和sys文件系统来动态整理出注册的设备,进而到/dev/下生成他们对应的节点。但前提是使用该功能之前必须mount上proc和sys文件系统
然后我们还需要最关键的两句:
echo /sbin/mdev > /proc/sys/kernel/hotplug //发现调用hotplug机制时就使用我们用户层的应用程序/sbin/mdev来处理
mdev -s //扫描并自动创建相应的节点.
现在当我们出现设备节点之后还有个配置文件mdev.conf ,里面包含了对相关设备节点的具体操作。
上面是我的配置,当检测到sg*这些设备节点时,就执行/apps/etc/modem_hotplug这个脚本。
注:上面的@表示插入,$表示拔出,*表示任意动作.
因为手中就这一个3G上网卡,所以我就只是简单的只配置了它的脚本。如果是要普遍使用于大多数的话,还需要lsusb解析上网卡型号然后找对应的配置实现转串口。以后工作了做到这块了再深入研究花时间编写吧。至此,我们就已经可以实现板子上mdev自动挂载3G上网卡了。下一步如果想要拨号之后发出热点wifi的话也很简单,再配置一次nat表应该就行。我这里就不做了,开始看socket编程去咯
Reference:关于热拔插usb hotplug