树莓派4B-连接Air720U模块抓取数据日志

本文详细介绍了如何配置树莓派系统,包括下载镜像、烧录SD卡、设置远程桌面和SSH服务,以及开启VNC服务。同时,教程还讲解了通过USB连接Air720模块到树莓派,涉及驱动安装、内核配置和数据接收的步骤。
摘要由CSDN通过智能技术生成

一:树莓派配置

配置所需的所有软件安装包可在https://www.yahboom.com/study/raspberry4B自取,密码nzv8

第一步 下载镜像文件

树莓派官网的下载地址:Raspberry Pi OS – Raspberry Pi,可在官网上下载最新的Raspbian树莓派系统。

第二步 载入SD卡

准备一张4G以上的SD卡及读卡器,使用专门的格式化工具SDFormatter格式化内存卡。

 

 windows系统下安装烧写镜像的工具:Win32DiskImager.zip

直接点击安装。

      安装:

        1. 解压下载的系统压缩文件,得到img镜像文件

        2. 将SD使用卡托或者读卡器后,连上电脑

        3. 解压并运行win32diskimager工具

        4. 在软件中选择img(镜像)文件,“Device”下选择SD的盘符,然后选择“Write”

            然后就开始安装系统了,根据你的SD速度,安装过程有快有慢。

 

 安装结束后会弹出完成对话框,说明安装就完成了,如果不成功,请关闭防火墙一类的软件,重新插入SD进行安装。请注意安装完,windows系统下看到SD只有200MB了,这是正常现象,因为linux下的磁盘分区win下是看不到的。

  1. 树莓派烧写成功。烧录成功后系统可能会因为无法识别分区而提示格式化分区,此时不要格式化!点击取消,然后弹出内存卡,插入到树莓派反面的micro SD卡槽内,给树莓派通电即可开机。

第三步 远程桌面

1:将网线的一端连接电脑(windows系统或者Ubuntu系统),另一端连接树莓派。以下以Windows系统为例。

2:电脑端连上wifi,打开电脑端的控制面板>>网络和Internet设置>>打开网络适配器>>更改适配器设置>>打开WLAN网络>>属性>>共享>>勾选第一个>>确定。

 

3:打开电脑端的命令行(win+R>>cmd)输入arp -a,在上一步控制面板>>网络和Internet设置>>打开网络适配器>>更改适配器设置>>打开以太网2网络>>Internet协议版本4(TCP/IPv4)>>属性,可以看到以太网2使用的IP地址是192.168.137.1。在这个IP地址下的接口192.168.137.106就是树莓派的IP地址

 

可以尝试ping一下树莓派,可以看到ping通后有字节传输。

 

 4:找到树莓派的IP地址后可以直接用SSH服务,还是刚才的命令行输入

ssh pi@192.168.137.106,进入树莓派系统

5:配置SSH服务:

在命令行输入:sudo raspi-config,然后回车,如下图所示

选择:“5 Interfacing Options”,回车,如下图

选择:“SSH”,回车,如下图

选择是,回车。如下图

最后点选“Finish”完成,等待重启即可。

6:可视化开启VNC服务

在命令行输入:sudo raspi-config,然后回车,如下图所示

 

依次操作:Interfacing Options -> VNC -> Yes。之后系统会提示你是否要安装 VNC 服务,输入 y 之后回车,等待系统自动下载安装完成,一切顺利的话 VNC 服务就启动了。

下载VNC-Viewer-6.19.107-Windows.exe安装VNC-Viewer,安装完成后在桌面双击VNC-Viewer打开软件,依次选择file->New cnnection

在VNC Server栏填写树莓派的IP地址,例如我的树莓派IP地址为:192.168.137.106,再点击ok。

 双击电脑图标进行连接,填写树莓派系统的用户名和密码,用户名是pi,密码是raspberry或者yahboom。

接下来,就进入了远程桌面界面了。

Raspberry pi 系统中的Raspbian默认用户是pi 密码为raspberry。重新开启root账号,可由pi用户登录后,在命令行下执行

sudo passwd root

执行此命令后系统会提示输入两遍的root密码,输入你想设的密码即可,然后在执行

sudo passwd --unlock root

这样root用户解锁成功。

通过USB连接设备(Air720模块)树莓派

第一步 检查RNDIS设备驱动

先检查是否接入:此处不需要装驱动也可以识别,通过命令行命令lsusb查看:

查看是否已安装RNDIS设备驱动可以通过ls /dev/ttyUSB*命令查看当前的USB设备,如果已安装查询结果如下:

如果没有安装,需要进行第二步增加RNDIS设备驱动(配置内核)

第二步 配置内核

1. 下载Linux源码

通过git下载源码,会在当前目录新建linux目录

git clone --recursive --depth=1 https://github.com/raspberrypi/linux

如果网络中断,可以重新续传

cd linux

git submodule update --init --recursiv

2. 添加头文件和构建依赖项

sudo apt update

sudo apt install raspberrypi-kernel-headers

sudo apt install bc libncurses5-dev bison flex libssl-dev make libc6-dev

3. 默认构建配置

cd linux

KERNEL=kernel7l  

make bcm2711_defconfig

  1. 打开linux自带的RNDIS驱动:在管理员root权限下运行

cd linux

make menuconfig

 

  1. 修改内核

修改内核之前可以用uname -r查看内核版本,以便修改过后比对

需要对Linux内核驱动做一定的修改,使操作系统能够支持Air720。

1.Add VID add PID

打开刚下载文件里的option.c文件进行修改,添加注释之间的内容

cd linux/drivers/usb/serial/option.c

static const struct usb_device_id option_ids[] = {

    //+add by airm2m for Air72x

    { USB_DEVICE(0x1782, 0x4e00) },

     //-add by airm2m for Air72x

   { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },

    { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },

    { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_LIGHT) },

    { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_QUAD) },

    { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_QUAD_LIGHT) },      

2. Add the Zero Packet Mechanism   

cd linux/drivers/usb/serial/usb_wwan.c

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;

    usb_fill_bulk_urb(urb, serial->dev,

              usb_sndbulkpipe(serial->dev, endpoint) | dir,

              buf, len, callback, ctx);

    //+add by airm2m for Air72x

    if(dir == USB_DIR_OUT){

        struct usb_device_descriptor *desc = &serial->dev->descriptor;

        if(desc->idVendor == cpu_to_le16(0x1782) && desc->idProduct == cpu_to_le16(0x4e00))

        {

            urb->transfer_flags |= URB_ZERO_PACKET;

        }

    }

    //-add by airm2m for Air72x

    return urb;

}

3. Add Reset Resume

cd linux/drivers/usb/serial/option.c

static struct usb_serial_driver option_1port_device = {

    .driver = {                                                                                                  

        .owner =    THIS_MODULE,

        .name =     "option1",

    },   

    ....

#ifdef CONFIG_PM

    .suspend           = usb_wwan_suspend,

    .resume            = usb_wwan_resume,

    //+add by airm2m for Air720

    .reset_resume      = usb_wwan_resume,

    //-add by airm2m for Air720

#endif

};   

 4. 为了禁止驱动将usb M0,M1加载为ttyUSB设备,需要将usb serial 驱动部分做如下修改:

cd linux/drivers/usb/serial/option.c

static int option_probe(struct usb_serial *serial,

                        const struct usb_device_id *id)

{

        struct usb_interface_descriptor *iface_desc =

                                &serial->interface->cur_altsetting->desc;

        struct usb_device_descriptor *dev_desc = &serial->dev->descriptor;

        /* Never bind to the CD-Rom emulation interface */

        if (iface_desc->bInterfaceClass == 0x08)

        i       return -ENODEV;

        //+add by airm2m for Air72x

        if(dev_desc->idVendor == cpu_to_le16(0x1782) &&

           dev_desc->idProduct == cpu_to_le16(0x4e00) &&

           iface_desc->bInterfaceNumber <= 1)

                return -ENODEV;

        //-add by airm2m for Air72x

        /*

         * Don't bind reserved interfaces (like network ones) which often have

         * the same class/subclass/protocol as the serial interfaces.  Look at

         * the Windows driver .INF files for reserved interface numbers.

         */

        if (is_blacklisted(

                iface_desc->bInterfaceNumber,

                OPTION_BLACKLIST_RESERVED_IF,

                (const struct option_blacklist_info *) id->driver_info))

                return -ENODEV;

6. Linux源码编译

make -j4 zImage modules dtbs

7. Linux源码编译

安装内核,模块和设备树

make -j4 zImage modules dtbs

sudo make modules_install

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

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

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

sudo cp arch/arm/boot/zImage /boot/kernel-my.img

修改config.txt,

sudo nano /boot/config.txt     # 修改启动配置文件

在最后添加一行

kernel=kernel-my.img

8. 重启

sudo reboot

重启之后通过ifconfig查看RNDIS网卡运行情况:每个设备的ethx可能不一样,插入Air720模块后增加的网卡即为RNDIS网卡。

通过dmesg命令查看启动信息:

再用uname -r查看新的内核版本,检查是否已经更改。

三 树莓派通过USB接收设备数据

1:将重新编译好的内核下载到开发板之后,待系统重新启动,如果是带RNDIS网卡的驱动,在/dev/目录下会出现如下设备节点:

用minicom等工具,运行命令sudo minicom -D /dev/ttyUSB0,测试结果如下:

 可以看到树莓派已经显示从设备上发送的数据了

2:设置树莓派开机自启接收数据:

在树莓派中新建run.sh文件,代码如下:

#!/bin/bash

while [ 1 -eq 1 ]

do

echo“try”

s=$(ls /dev/ttyUSB0)

day=$(date +%Y%m%d)

if  [$s = ‘/dev/ttyUSB0’]

then

echo“ok”

cat /dev/ttyUSB0 >>/home/pi/AT-$day, Log

else

sleep 3

fi

done

重启后会生成数据日志文件:AT-当天日期.log,里面是从设备接收到的数据。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值