正在阅读:

树莓派跑4G模块

2,335

一. 目的:

          实现在树莓派嵌入式系统上开发4G模块,支持4G上网,短信等移动网络功能

二. 硬件材料:

          1. 树莓派3b
          2. 4G模块:U9300C U8300C ME909s-821等4G模块
          3. PCIE转USB开发板   淘宝可以直接购买
          4. 外置天线
          具体硬件所需要的材料看下面的截图
          

三. 开发准备:

为了防止接下来的内核编译开发,影响到某些软件更新不全导致功能失效,所以提前更新系统。

更新树莓派的内核方法如下:

          1. sudo apt-get update    //获得最近的软件包的列表 包的信息有这些包是否更新过
          2. sudo apt-get dist-upgrade  //如果这个包没有发布更新,就不管它, 有则更新
          3. sudo rpi-update //老外开发的一个更新树莓派firmware的工具,方便好用 (强烈建议!)

apt-get upgrade 与apt-get dist-upgrade的区别:

upgrade只是简单的更新包,不管这些依赖,它不和添加包,或是删除包.

而dist-upgrade可以根据依赖关系的变化,添加包,删除包.

一般在运行upgrade或dist-upgrade之前,要运行update.

四. 树莓派交叉编译环境:

我这里采用的是在自己搭建的交叉编译环境,而不是直接在树莓派上直接编译。

原因如下:

          1. 做嵌入式开发的需要,希望能熟悉整个流程
          2. 树莓派上编译非常缓慢,而且容易导致树莓派发热严重
          3. 使用自己的交叉环境,移植和离线发布都变得非常方便

我使用的虚拟机编译环境:

交叉编译系统:  Linux kali 4.13.0-kali1-amd64  (2017-11-08) x86_64 GNU/Linux

交叉编译器:      arm-linux-gnueabihf-gcc

交叉编译版本:  gcc version 7.2.1 20171011 (Linaro GCC 7.2-2017.11)

Kali下载地址:

https://www.kali.org/downloads/

交叉工具链下载地址:

http://releases.linaro.org/components/toolchain/binaries/latest-5/arm-linux-gnueabihf/

添加工具链到系统目录:

vim /root/.bashrc

export PATH=$PATH:/home/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/bin/

source /root/.bashrc

输入arm-linux-gnueabihf-gcc -v 查看是否有正常的输出信息,显示GCC编译信息和版本信息

编译环境依赖:

sudo apt-get install git bc bison flex libssl-dev

 

五. BSP开发:

树莓派内核分支:

https://github.com/raspberrypi/linux

可以使用命令下载:  git clone  --depth=1 https://github.com/raspberrypi/linux

git clone xxx.git “指定目录”

树莓派官方内核编译说明:

https://www.raspberrypi.org/documentation/linux/kernel/building.md

树莓派内核修改

添加系统组件

cd kernel

make menuconfig

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

device drivers--->usb support--->usb serial converter support

选中如下组件:

USB driver for GSM and CDMA modems

添加PPP协议支持

Device Drivers--→Network device support

选中后保存配置,重新编译内核即可

错误提示:

make menuconfig启动报错

原因:

出现该错误的原因是在使用menuconfig时,需要ncurses库的支持。

原来是最小系统不支持图形的原因,安装libncurses5-dev套件后即可。

解决办法:

sudo apt-get install libncurses5-dev libncursesw5-dev

sudo apt-get install libncurses5-dev libncursesw5-dev --fix-missingsudo

apt-get install bc  添加丢失的依赖

sudo apt-get install bison

总之缺什么库就安装什么东西, 保证编译没有问题。

添加驱动

找到内核源码文件c(一般情况下,路径在..\drivers\usb\serial\option.c)

在源码中查找 option_ids 表,请参照上面1 节中项目信息添加 龙尚产品的 VID 0x1c9e和 PID0x9b3c

添加完成后,跟系统一起编译,烧入目标设备.

说明:

在比较早的 linux 版本中,路径在..\drivers\usb\serial\usb-serial.c

编译完成应该包含下面的三个ko驱动文件

注意:树莓派是编译到内核中的,所以设备起来之后,就直接加载了三个驱动.

实际驱动加载情况如下,查看dmesg内核信息:

树莓派内核编译

编译前清理:

因为是首次编译,所以并没有要清除的文件,但原来编译过内核就最好还是清理一下

一般在源码编译的时候都使用make clean,但会保留内核的配置文件.

        

 

内核配置:

KERNEL=kernel7 (需要在树莓派机器上查看uname -a 看下arm版本)

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-  bcm2709_defconfig

 编译zImagemodulesdtbs

zImage算是最终内核镜像的半成品,modules是内核模块,

dtbs作用于/boot,个人觉得应该与树莓派加电启动有关,类似BIOS

Note:多处理系统可以添加选项-j n ,n为数字,表示多处理器的数量*1.5。加快编译速度

make  ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 zImage modules dtbs

耗时40分钟到80分钟之间

如果遇到下面的编译错误:

说当前的内核配置disable了modules这个特性

所以你需要make config & enable loadable module support

然后在重新编译内核即可

内核打包:

INSTALL_MOD_PATH=/home/image  modules_install

sudo make modules_install

sudo cp arch/arm/boot/dts/*.dtb    /home/image/boot/

sudo cp arch/arm/boot/dts/overlays/*.dtb*    /home/image/boot/overlays/

sudo cp arch/arm/boot/dts/overlays/README /home/image/boot/overlays/

arch/arm/boot/zImage 编译的内核文件, zImage 是 Compressed kernel image 文件,

要转换为 kernel.img 还需要进一步处理。

Sudo scripts/mkknlimg arch/arm/boot/zImage   /home/image/boot/$KERNEL.img

错误:

net/ipv4/netfilter/ipt_ecn.c:99: error: 'IPT_ECN_OP_MATCH_CWR' undeclared (first use in this function)

http://patchwork.ozlabs.org/patch/966874/

解决方法:在make menuconfig中精简network support

内核安装:

 

mount.cifs -o username="pi",password="raspberry",rw //192.168.0.110/share /home/nfs

通过把树莓派(开启samba)挂载编译系统, CIFS挂载的可以直接操作目录很方便

内核安装完成后,重启树莓派,

sudo reboot

内核验证:

执行命令:  cat /proc/version

替换前:

替换后:

4G USB口验证:

使用自己写的串口小工具,也可以使用minicom开源工具:

https://alioth.debian.org/projects/minicom/

六. APP开发(ppp拨号):

应用层通过AT指令和4G模块通信,达到拨号和发送短信的功能

pppd开源库编译

下载地址:https://ppp.samba.org/

编译后产生pppd和chat工具

使用自己写的mobile程序测试功能:

 

目前有:1条访客评论,博主回复1

  1. jsp
    2018-02-05 18:27

    描述得很详细,不错,把你的模块使用方法也贴出来吧

    • admin
      2018-02-06 00:10

      @1楼
      代码都放在github上了,慢慢更新.

留下脚印,证明你来过。

*

*

流汗坏笑撇嘴大兵流泪发呆抠鼻吓到偷笑得意呲牙亲亲疑问调皮可爱白眼难过愤怒惊讶鼓掌
关闭