一:树莓派配置
配置所需的所有软件安装包可在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下是看不到的。
- 树莓派烧写成功。烧录成功后系统可能会因为无法识别分区而提示格式化分区,此时不要格式化!点击取消,然后弹出内存卡,插入到树莓派反面的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
- 打开linux自带的RNDIS驱动:在管理员root权限下运行
cd linux
make menuconfig
- 修改内核
修改内核之前可以用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,里面是从设备接收到的数据。