谷动谷力

 找回密码
 立即注册
查看: 2524|回复: 0
打印 上一主题 下一主题
收起左侧

树莓派Raspberry PI 接入4G Cat1 模块上网

[复制链接]
跳转到指定楼层
楼主
发表于 2023-6-8 23:28:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    树莓派Raspberry PI 接入4G Cat1 模块上网




    一、烧录镜像



      1.1 烧录软件

建议用树莓派官方工具,可以直接设置添加SSH、树莓派在路由器后台的名字
暂时无法在飞书文档外展示此内容


下面还有设置登录的用户名密码啥的,也可以一次性设置了
1.2镜像文件的下载


1.2.1 镜像文件下载地址

镜像文件,建议使用32位的,也可以使用64位的,镜像文件下载地址(注:如果想要使用可视化界面,下载镜像时请选择桌面版本的镜像文件,最好是带常用软件的版本,还有尽量使用32位的,64位的我没编译成功过)
https://www.raspberrypi.com/software/operating-systems/

1.2.2 高速下载工具

如果下载进度慢,可以先下载一个motrix,然后把下载链接用它打开,motrix下载地址
https://motrix.app/zh-CN/

1.3烧录过程

下载完成后选择

使用自定义镜像,然后插SD卡,烧录就行,SD卡最好在32G及其以上,16G也行,最好选择速度快一点的SD卡,因为烧录,写入,包括后面的编译整个系统,都是在SD卡上完成的

二、远程控制

2.1 SSH方式

烧录完成后,SD卡会被分成两个区,一个是无法打开的系统区,一个是可以打开的文件系统区,如果你之前没有在官方烧写工具里打开SSH,需要用电脑打开那个文件系统区,新建一个文件,名字叫做SSH,不要加任何文件名后缀。

新建好文件以后,将内存卡插入树莓派中,路由器那接根网线给树莓派,上电开机,树莓派官方推荐的电源为5V3A,小于这个,你带的东西比较多还带个屏幕的话,会出现供电不稳导致的模块重启等现象。

打开路由器管理后台,找到树莓派,如果上一步你设置了树莓派的名字,那么后台还是比较好找的,如果没设置的话,树莓派的默认名字为raspberry,root用户默认密码也为raspberry,如果长期用树莓派,建议给它分配一个静态IP。上海办公室的路由器管理后台地址为miwifi.com,密码为Air123456,合肥办公室的路由器管理后台地址为http://192.168.39.1/,密码为airm2mtp
大概的管理界面如下


打开xshell,新建登录界面,ip选择你在路由器后台看到的树莓派的ip,用户名和密码都是你之前用镜像烧录软件设置的密码,如果没有设置,用户名为root,密码为raspberry,如果实在登录不上,建议重新烧录,重新设置(Xshell和Xftp是配套软件,建议一次都下载上)

登录上以后,建议使用sudo passwd命令,修改root用户密码,修改成你自己能记得住的

linux常见命令 :
ls(显示当前文件夹下的子文件夹及其文件)cd ./etc(进入etc文件夹)cd ../或者cd ..(进入上级目录)su(进入超级用户,下面要输入的是超级用户的密码,因为linux每次开机root用户密码随机,所以需要用sudo passwd命令固定一个好记的密码)sudo apt install LS(下载一个叫做LS的包管理器,不知道啥叫包管理器的可以当作手机上那个app看待)

2.1.1 VNC远程桌面

如果不太喜欢命令行方式,也可以用一堆配置打开VNC远程桌面[类似于PC上的向日葵],在这里仅作简单放一个链接,因为打开VNC以后还要有一堆配置,你才能用的舒服。(注:如果想要使用VNC,当时下载镜像那一步的时候就要选择桌面版本的镜像文件,最好是带常用软件的版本)
https://www.jianshu.com/p/b73f358849de
附一个pc端VNC的安装包和激活器

三、直插屏幕式控制

你插个屏幕过去,所有的输入输出都使用键盘和鼠标完成也可以。(注:如果想要使用屏幕,当时下载镜像那一步的时候就要选择桌面版本的镜像文件,最好是带常用软件的版本)
优点嘛就是可视化,操作文件夹比较方便,缺点就是在你图形化修改驱动文件的时候,可能会遇到驱动文件是只读文件,修改不成功,还得用命令行进root用户赋予文件/文件夹777权限(chmod -R 777 linux)

四、树莓派换源

因为树莓派默认使用的国外的源,下载东西比较慢,编译代码时候需要的各种工具和包管理,所以可以使用清华/阿里/中科大等镜像源
使用SSH的人,在命令行里输入uname -m,使用VNC和直插桌面的用户,打开命令行终端,一样输入uname -m
然后按照这篇指导来
https://mirrors.tuna.tsinghua.edu.cn/help/raspbian/
换源好了以后,可以尝试输入
sudo apt-get update  --(更新更新包管理)
apt-get upgrade --(更新已经安装的软件包)apt-get dist-upgrade --(更新依赖关系)

4.1换源可能遇到的问题

如果出现error,说什么key什么找不到的,他报错里有个key后面那串数字复制出来,将这篇文章里的命令最后的那个key换成你的,如果报了多个key,那就设置多次
https://blog.csdn.net/weixin_43592193/article/details/123177034

五、编译

编译分为本地编译和交叉编译,这两种方式都可以,本地编译就是树莓派自己编译自己,交叉编译就是用另一台比树莓派性能强大的机器(比如自己的电脑)去编译驱动,编译完进行一个内核替换,将编译好的内核替换到SD卡上,然后SD卡插回树莓派。

5.1本地编译

本地编译的好处是不需要太多的命令,对新手玩家友好,缺点就是受限于树莓派孱弱的性能,编译起来速度慢的要死,4个内核全开的话编译一次大概一两个小时,如果使用的默认编译指令,只开一个核,我试过一次,大概4个小时多。

5.1.1下载linux内核源码

打开命令行,进入你想要的目录,比如桌面或者dowon,新建一个目录也行,记得不要写中文,进入后用下面这条命令下载树莓派的最新内核
-depth=1的意思类似于浅拷贝,只clone当前项目下的代码,没有历史文件的修改记录,常见的git clone其实是深度拷贝,带了从init这个仓库以后的所有操作,我们只是学习/编译当前版本内核不需要看那些东西,全部拷贝过来的话,大概3G多,不走代理下载到猴年马月去了,即使走免费的代理,大多数也有最大仓库2G的限制,原始仓库在下面这里,直接clone这个仓库,慢的一批,所以走了热心群友提供的代理路径,详细命令在后面,这里就不说了
https://github.com/raspberrypi/linux
git clone --depth=1 https://hub.fantasygmm.top/raspberrypi/linux

5.1.2修改我们驱动对应的文件

如果使用的是SSH方式命令行修改,可以使用nano编辑器修改文件,记得先输入 su 进入超级用户,要不然修改可能会不成功。(注:大学接触过linux的话,应该知道VI编辑器和VIM编辑器,都可以用,nano编辑器方便一点)
具体命令如下
cd linux    --进入刚刚下载的内核源码目录

5.1.2.1 option.c文件的修改

sudo  nano drivers/usb/serial/option.c  --使用nano编辑器进入option.c文件(进入文件后,上下翻页不要用鼠标,用键盘的上下按键,使用鼠标会导致对应文件里输入一堆^H^L)
option.c文件里需要修改四处,

第一处






    static const struct usb_device_id option_ids[]函数的"{"下面加一句
    1. //+add by airm2m for 8910/1603/1802s/1802/EC618
    2.         { USB_DEVICE(0x1286, 0x4e3d) },
    3.         { USB_DEVICE(0x1782, 0x4e00) },
    4.         { USB_DEVICE(0x2ECC, 0xA000) },
    5.         { USB_DEVICE(0x19d1, 0x0001) },  
    6.       //+add by airm2m for 8910/1603/1802s/1802/EC618
    复制代码

第二处
static struct usb_serial_driver option_lport_device函数,最后一行,.resume = usb_wwan_resume,下面加一行
  1.         //+add by airm2m for 8910/1603/1802s/1802/EC618
  2.           .reset_resume      = usb_wwan_resume,
  3.         //+add by airm2m for 8910/1603/1802s/1802/EC618
复制代码

第三处
Struct usb_interface_descriptor那一行下面,加一句
struct usb_device_descriptor *dev_desc = & serial->dev->descriptor;第四处
If (iface_desc->bINterfaceClass一直到return -ENODEV;这句话下面加这几句
  1. //+add by airm2m for 8910/1603/1802s/1802/EC618

  2. if (dev_desc->idVendor == cpu_to_le16(0x1286) && dev_desc->idProduct == cpu_to_le16(0x4e3d) && iface_desc->bInterfaceNumber <= 1)                return -ENODEV;
  3.         if (dev_desc->idVendor == cpu_to_le16(0x1782) && dev_desc->idProduct == cpu_to_le16(0x4e00) && iface_desc->bInterfaceNumber <= 1)                return -ENODEV;
  4.        if (dev_desc->idVendor == cpu_to_le16(0x2ECC) && dev_desc->idProduct == cpu_to_le16(0xA000) && iface_desc->bInterfaceNumber <= 1)                return -ENODEV;
  5.        if (dev_desc->idVendor == cpu_to_le16(0x19d1) && dev_desc->idProduct == cpu_to_le16(0x0001) && iface_desc->bInterfaceNumber <= 1)                return -ENODEV;
  6. //+add by airm2m for 8910/1603/1802s/1802/EC618
复制代码

修改完成后,使用ctrl+o保存修改,ctrl+x退出文件编辑器

5.1.2.2 usb_wwan.c文件的修改

一样使用sudo nano drivers/usb/serial/usb_wwan.c--使用nano编辑器打开usb_wwan.c文件
这个文件修改的地方只有一处
static struct urb *usb_wwan_setup_urb函数,在if (intfdata->use_zlp到PACKET;行后面加上如下几句话
  1. //+add by airm2m for 8910/1603/1802s/1802/EC618
  2.         if(dir == USB_DIR_OUT){
  3.                 struct usb_device_descriptor
  4. *desc = &serial->dev->descriptor;   
  5.             if(desc->idVendor == cpu_to_le16(0x1286) && desc->idProduct == cpu_to_le16(0x4e3d))
  6.                {
  7.                        urb->transfer_flags |= URB_ZERO_PACKET;
  8.                 }
  9.                 if(desc->idVendor == cpu_to_le16(0x1782) && desc->idProduct == cpu_to_le16(0x4e00))
  10.                {
  11.                        urb->transfer_flags |= URB_ZERO_PACKET;
  12.                 }
  13.                 if(desc->idVendor == cpu_to_le16(0x2ECC) && desc->idProduct == cpu_to_le16(0x4000))
  14.                 {
  15.                     urb->transfer_flags |= URB_ZERO_PACKET;
  16.                 }
  17.                 if(desc->idVendor == cpu_to_le16(0x19d1) && desc->idProduct == cpu_to_le16(0x0001))
  18.                 {
  19.                         urb->transfer_flags |= URB_ZERO_PACKET;
  20.                 }
  21.         }
  22. //+add by airm2m for 8910/1603/1802s/1802/EC618
复制代码

修改完成后,使用ctrl+o保存修改,ctrl+x退出文件编辑器
至此驱动修改完成,可以进入内核编辑界面了,主要是为了配置些没有默认打开的功能,比如ECM/PPP

5.1.3 编译前非代码修改部分的准备工作

首先安装 Git 和构建依赖项:
sudo apt install git bc bison flex libssl-dev make看清你手上的树莓派版本以及下载的系统版本为32位还是64位,选择下面对应的命令,如果已经在linux目录下了,就不用第一句cd linux了

对于树莓派 1、零和零 W 以及树莓派计算模块 1 默认(仅限 32 位)构建配置
cd linuxKERNEL=kernelmake bcmrpi_defconfig适用于树莓派 2、3、3+ 和零 2 W,以及树莓派计算模块 3 和 3+ 默认 32 位构建配置
cd linuxKERNEL=kernel7make bcm2709_defconfig对于树莓派 4 和 400,以及树莓派计算模块 4 默认的 32 位构建配置
cd linuxKERNEL=kernel7lmake bcm2711_defconfig适用于树莓派 3、3+、4、400 和零 2 W 以及树莓派计算模块 3、3+ 和 4 默认 64 位构建配置
cd linuxKERNEL=kernel8make bcm2711_defconfig
准备完成以后,就可以愉快的进入内核配置界面了
如果上述指令任意一条指令报错,可自行百度解决,或咨询合宙FAE

5.1.4 内核配置

就在linux这个路径下,输入
make menuconfig进入内核配置界面,如果进不去,先确定下自己当前用户是否是超级用户,如果不是,输入su进入超级用户
然后在config

进入内核配置界面,按下"/",可以搜索想要改的地方,
比如搜索RNDIS时,如果相关配置项很多,这个界面下可以滚动鼠标查看,确保搜索结果中与RNDIS相关的选项状态为y或m,

下面有写相关配置项的路径

ECM/PPP/CMUX同理,CMUX需要注意的是,搜索的是N_GSM


可以选择一个项目配置完就按左右选择Save保存下配置,所有选项勾选完毕,点击键盘的左右按钮,选择Exit,直到退出到弹出对话框问你是否保存,选择yes保存完毕,就结束了所有配置工作

5.1.5 构建内核

生成并安装内核、模块和设备树 blob;此步骤可能需要很长时间,具体取决于所使用的树莓派模型。对于 32 位内核:
make V=1 -j4 zImage modules dtbssudo make modules_installsudo 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.img对于 64 位内核:
make V=1 -j4 Image.gz modules dtbssudo make modules_installsudo cp arch/arm64/boot/dts/broadcom/*.dtb /boot/sudo cp arch/arm64/boot/dts/overlays/*.dtb* /boot/overlays/sudo cp arch/arm64/boot/dts/overlays/README /boot/overlays/sudo cp arch/arm64/boot/Image.gz /boot/$KERNEL.img注1:第一句make后面的V=1为编译时候看的日志等级为1级,日志最多为S级,不加这个V=1可能看不到你修改的驱动哪里有问题
注2: -j4为启动4个内核一起编译
记得给树莓派拿个风扇怼着散热,会很烫
所有的项目完成以后,现在重新启动,你的树莓派应该运行你新编译的内核!
reboot--重启指令给树莓派插入724/780E/1802/1603的板子,开机以后,输入
Ls /dev/ttyUSB*或者ls /dev/tty*就能看见三个端口

注1:这三个端口是linux自己分配的,端口号可能不固定,如果想要固定端口号,可以使用这个链接里提到的方案
https://doc.openluat.com/article/2080/0
注2:618可能会出现不叫ttyUSB的端口,可能叫ttyACM,也有可能是其他

linux常见问题
https://doc.openluat.com/article/1850/0
linux下的串口调试工具很多,最知名的就是minicom,简单使用方式在下面
apt install minicomminicom -D /dev/ttyUSB0
我个人觉得不好用,所以我用的是我们自己写的一个串口工具,使用方法如下
https://doc.openluat.com/article/645/0
gcc sendat.c -o at.out编译完成后,在目录下会生成一个at.out的可执行文件,使用示例
./at.out /dev/ttyUSB1--使用串口工具打开ttyUSB1,这里端口号多少你就写多少

5.2交叉编译
。。。。。。。待写

5.3 编译完可能出现的问题


5.3.1 lsusb

可以显示出来对应模块的PID VID,但是找不到那几个虚拟串口
解决方法:发送命令
8910系列(724UG/720UH/720UG/722UG/820UG.600UG)发这个
echo 1782 4e00 > /sys/bus/usb-serial/drivers/option1/new_id
1603系列(722CS/724CS/722CE/724CE)发这个
echo 2ECC A000 > /sys/bus/usb-serial/drivers/option1/new_id
618系列(780E/780EX/780EG/600E/780EA/600EA/700E)发这个
echo 19d1 0001 > /sys/bus/usb-serial/drivers/option1/new_id
1802和1802S系列发这个
echo 1286 4e3d > /sys/bus/usb-serial/drivers/option1/new_id
然后再去找下端口,如果能找到,则证明PID VID修改未成功,重新从5.1.1开始做起

六、参考文献


780E linux 驱动配置手册






+10
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-4-28 20:56 , Processed in 0.094048 second(s), 45 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表