3gdongle

3gdongle

来源 https://www.jianshu.com/p/f058229a42d8

 

本人使用基于MT7628的开发板运行openwrt lede17.01系统,单独使用有线wan、无线路由wwan和4G功能时都很正常。但是当同时使用以上3种网络接口时,发现接口之间并不能动态切换,当拔掉网线时,即使wifi和4g都正常连接,但是路由器不能ping通外网。当wifi连接断了,也会影响剩余网络接口的通信。

经过一番调试,发现当网线热插拔时,系统并没有触发链路断开事件通知netifd进程来关闭网络,导致其接口的配置残留在路由表中,从而影响其他接口搜索默认网关。

根本原因是MT7628系列设备具有内置交换机功能,由于交换机和CPU端口之间始终连接,因此本地以太网接口永远不会看到链路断开事件,这意味着netifd将不会关闭并取消配置关联的网络,导致热插拔无效。

解决方法

既然是硬件原因导致无法使用热插拔事件,那只好通过轮询方式来检测网络。定期对外网进行ping测试,如果测试正常,则无需切换网络;如果测试失败,则自动切换到另一个网络接口,以此循环。通过以下脚本,能实现网络接口的动态切换。

1.网络测试及切换脚本

通过以下脚本,可以实现周期ping测试和网络接口切换功能。

脚本名称:/etc/pingtest

#!/bin/sh
 
state=0
IP="www.baidu.com"

ping_status() {
    for var in 1 2 3; do
        if ping -c 1 $IP > /dev/null; then
            #echo "$IP Ping is successful."
            return 0
        else
            #echo "$IP Ping is failure"
            if [ $var -eq 3 ]; then
                return 1
            fi
    fi
    done
}

while true
do 
    ping_status
    
    if [ $? -ne 0 ]; then
        case $state in
            0)  #echo "wan to wwan"
                if uci get network.wwan > /dev/null; then
                    uci set network.wwan.metric=0
                fi
                
                if uci get network.wan > /dev/null; then
                    uci set network.wan.metric=20
                fi

                if uci get network.4G > /dev/null; then
                    uci set network.4G.metric=10
                fi
            ;;
            1)  #echo "wwan to 4G"
                if uci get network.wwan > /dev/null; then
                    uci set network.wwan.metric=20
                fi
                
                if uci get network.wan > /dev/null; then
                    uci set network.wan.metric=10
                fi

                if uci get network.4G > /dev/null; then
                    uci set network.4G.metric=0
                fi
            ;;
            2)  #echo "4G to wan"
                if uci get network.wwan > /dev/null; then
                    uci set network.wwan.metric=10
                fi
                
                if uci get network.wan > /dev/null; then
                    uci set network.wan.metric=0
                fi

                if uci get network.4G > /dev/null; then
                    uci set network.4G.metric=20
                fi
            ;;
        esac

        uci commit network;
        /etc/init.d/network reload;
        let state++
        if [ ${state} -ge 3 ]; then
            state=0
        fi
    fi
    
    sleep 10

done
  • 进行对外网进行一轮ping测试,最多测试3次,当有一次测试通过则代表成功,不作网络处理;如果3次测试失败,则表示网络已断。

  • 如果网络已断,通过UCI命令修改network文件中各接口的默认网关优先级参数metric(值越小优先级越高),使用uci commit network命令保存修改,并重新加载配置文件:/etc/init.d/network reload。

  • 完成一轮检测后,10秒后再次检测,以此循环。如果当前使用的网络接口断了,脚本就会自动切换到适合的下一个网络接口。

2.开机自启脚本

在/etc/init.d/目录下编写开机启动的shell脚本,该脚本运行时,在后台启动/etc/pingtest脚本。

脚本名称:/etc/init.d/interface_check

#!/bin/sh /etc/rc.common
START=98
STOP=99

USE_PROCD=1

start_service()
{
    procd_open_instance
    procd_set_param respawn
    . /etc/pingtest &
    procd_close_instance
}

stop_service() 
{
    return;
}
  • START=98,STOP=99分别是启动和关闭和优先级

  • USE_PROCD=1表示使用进程,配合procd_open_instance和
    procd_close_instance命令启动新进程,让/etc/pingtest脚本在进程中运行。

3.开启启动脚本软链接

在/etc/rc.d目录下新建开机启动脚本/etc/init.d/interface_check的软链接,下次开机脚本就会自动运行。

ln -s /etc/init.d/interface_check  /etc/rc.d/S98interface_check
  • S98是脚本启动的优先级

 

 ===============

来源  https://www.jianshu.com/p/0951be9aa200

1.修改linux内核

1)移植USB Serial驱动

​ 移植后模块连接到USB串行驱动时,驱动程序将在目录/dev中创建设备文件USB0/ttyUSB1/ttyUSB2…

  • 增加PID&VID

    • 修改openwrt/build_dir/target-mipsel_24kc_glibc-2.24/linux-ramips_mt7688/linux-4.4.167/drivers/usb/serial/option.c文件

      static const struct usb_device_id option_ids[] = {
      #if 1 //Added by Quectel
      { USB_DEVICE(0x05C6, 0x9090) }, /* Quectel UC15 */
      { USB_DEVICE(0x05C6, 0x9003) }, /* Quectel UC20 */
      { USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC25 EM05*/
      { USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21 */
      { USB_DEVICE(0x05C6, 0x9215) }, /* Quectel EC20 */
      { USB_DEVICE(0x2C7C, 0x0191) }, /* Quectel EG91 */
      { USB_DEVICE(0x2C7C, 0x0195) }, /* Quectel EG95 */
      { USB_DEVICE(0x2C7C, 0x0306) }, /* Quectel EG06/EP06/EM06 */
      { USB_DEVICE(0x2C7C, 0x0296) }, /* Quectel BG96 */
      { USB_DEVICE(0x2C7C, 0x0435) }, /* Quectel AG35 */
      #endif
      
  • 添加零包处理

    • 修改openwrt/build_dir/target-mipsel_24kc_glibc-2.24/linux-ramips_mt7688/linux-4.4.167/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);
                    
      #if 1 //Added by Quectel for zero packet
          if (dir == USB_DIR_OUT) {
              struct usb_device_descriptor *desc = &serial->dev->descriptor;
              if (desc->idVendor == cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9090))
                  urb->transfer_flags |= URB_ZERO_PACKET;
              if (desc->idVendor == cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9003))
                  urb->transfer_flags |= URB_ZERO_PACKET;
              if (desc->idVendor == cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9215))
                  urb->transfer_flags |= URB_ZERO_PACKET;
              if (desc->idVendor == cpu_to_le16(0x2C7C))
                  urb->transfer_flags |= URB_ZERO_PACKET;
              if (desc->idVendor == cpu_to_le16(0x1286) && desc->idProduct == cpu_to_le16(0x4e3d))
              {
                  urb->transfer_flags |= URB_ZERO_PACKET;
              }
          }
      #endif
      
          return urb;
      }
      
  • 增加休眠后唤醒接口

    • 当MCU进入暂停/休眠模式时,一些USB主机控制器/USB集线器将失去电源或重新设置,并且在MCU退出暂停/休眠模式后,它们不能恢复USB设备。请添加以下语句以启用重新设置恢复过程。

    • 修改openwrt/build_dir/target-mipsel_24kc_glibc-2.24/linux-ramips_mt7688/linux-4.4.167/drivers/usb/serial/option.c文件。

      static struct usb_serial_driver option_1port_device = {
      ……
      #ifdef CONFIG_PM
          .suspend = usb_wwan_suspend,
          .resume = usb_wwan_resume,
      #if 1 //Added by Quectel
          .reset_resume = usb_wwan_resume,
      #endif
      #endif
      };
      

2.修改openwrt配置

  • 执行命令make menuconfig进入配置
1)内核模块
Kernel modules >>
    USB Support >>
        <*> Kmod -usb-core
        -*-Kmod -usb-net
        -*- kmod-usb-net-cdc-ether//【可选】
        <*> kmod-usb-net-cdc-mbim
        -*- kmod-usb-net-cdc-ncm
        <*> kmod-usb-net-cdc-subset//【可选】
        <*>kmod-usb-net-qmi-wwan
        <*>Kmod-usb-ohci     //这个选项一定要勾选,否则可能无法在系统中查看设备
        <*>Kmod-usb-serial
        <*>Kmod-usb-serial-option
        <*>Kmod-usb-serial-wwan
        <*>kmod-usb-uhci
        <*>Kmod-usb2
2)网络配置
NetWork   >>
    <*>wwan
    <*>chat
    <*>ppp
    <*>uqmi
    <*>umbim
3)Utilities配置
Utilities
  <*>comgt
  <*>usb-modeswitch //自动模式更改,将设备置于USB调制解调器模式
  <*>usbutils//【可选,可查看usb设备】
4)Luci配置
Luci
1. Collections
        <*> luci
3. Applications
        <*> luci-app-multiwan (optional to support multiple 3g dongles)//新版本为mwan3 【可选】
        <*> luci-app-qos (optional to provide QOS support)//【可选】
6. Protocols
        <*> luci-proto-3g
        -*- luci-proto-ppp

3.网关配置

1)接入4G模块后,使用ls /dev命令,可以看到usb转串口设备
  • lsusb 命令查看usb设备

    root@LEDE:~# lsusb
    Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 001 Device 012: ID 2c7c:0125  #PID-2c7c:VID-0125
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    
2)使用USB 3g / UMTS-modem进行WAN连接
  • 参考https://openwrt.org/docs/guide-user/network/wan/wwan/3gdongle

  • 修改\etc\config\network配置

    config interface '4G'
            option ifname 'ppp0'
            option _orig_ifname 'eth0.2'
            option _orig_bridge 'false'
            option proto '3g'
            option device '/dev/ttyUSB2'
            option service 'umts'
            option ipv6 'auto'
            option keepalive '10 5'
            option metric '0'
    
  • 重启网络

    /etc/init.d/network restart
    
    • 等待4G连接成功
    root@LEDE:~# ifconfig 
    3g-4G     Link encap:Point-to-Point Protocol  
              inet addr:10.124.22.77  P-t-P:10.64.64.64  Mask:255.255.255.255
              UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
              RX packets:25 errors:0 dropped:0 overruns:0 frame:0
              TX packets:58 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:3 
              RX bytes:1762 (1.7 KiB)  TX bytes:3818 (3.7 KiB)
    
    br-lan    Link encap:Ethernet  HWaddr C6:E5:72:41:19:1D  
              inet addr:192.168.2.1  Bcast:192.168.2.255  Mask:255.255.255.0
              inet6 addr: fe80::c4e5:72ff:fe41:191d/64 Scope:Link
              inet6 addr: fd3f:6922:178d::1/60 Scope:Global
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:19 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:0 (0.0 B)  TX bytes:2610 (2.5 KiB)
    
    eth0      Link encap:Ethernet  HWaddr 40:D6:3C:1E:70:14  
              inet6 addr: fe80::42d6:3cff:fe1e:7014/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:5519 errors:0 dropped:4 overruns:0 frame:0
              TX packets:1579 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:476283 (465.1 KiB)  TX bytes:152174 (148.6 KiB)
              Interrupt:5 
    
    eth0.1    Link encap:Ethernet  HWaddr C6:E5:72:41:19:1D  
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:19 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:0 (0.0 B)  TX bytes:2610 (2.5 KiB)
    
    eth0.2    Link encap:Ethernet  HWaddr C6:E5:72:41:19:1E  
              inet addr:192.168.3.94  Bcast:192.168.3.255  Mask:255.255.255.0
              inet6 addr: fe80::c4e5:72ff:fe41:191e/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:1170 errors:0 dropped:0 overruns:0 frame:0
              TX packets:280 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:70616 (68.9 KiB)  TX bytes:22980 (22.4 KiB)
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:2204 errors:0 dropped:0 overruns:0 frame:0
              TX packets:2204 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1 
              RX bytes:189751 (185.3 KiB)  TX bytes:189751 (185.3 KiB)
    
    wlan0     Link encap:Ethernet  HWaddr 40:D6:3C:1E:70:14  
              inet6 addr: fe80::42d6:3cff:fe1e:7014/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:0 (0.0 B)  TX bytes:1856 (1.8 KiB)

 

=============

MT7621平台下的Openwrt 22.03编译及移远RM500 4G/5G模组驱动编译移植

来源  https://zhuanlan.zhihu.com/p/573844319

编译不同版本的Openwrt一定要使用新的Ubuntu20.04搭建编译环境,如果利用之前编译过其它版本Openwrt的系统环境,新编译的版本会出现异常多的错误且不一定能排除。编译过程需要了解以下几点:

  1. kernel_menuconfig的配置,这个模块可以理解为内核本身,需要开启内核支持的操作在这完成,例如开启mpls支持、vrf支持等;
  2. menuconfig的配置,这个模块可以理解为应用模块,系统要安装的软件可以在这里选择源码进行编译安装,根据个人需求选择源码进行编译即可;
  3. dl目录。系统在编译过程中,会在Openwrt源码的根目录下生成dl目录,用来存放编译过程中下载的程序源码。在第一次编译需要先下载要编译的程序源码,由于某些源码需要连接国外服务器下载,有可能会出现下载缓慢甚至下载失败的情况,可以百度搜索当前版本dl库源码包,下载后手动上传到dl目录下,再继续编译。
  4. 错误排查。Openwrt第一次编译过程中,可能会出现各种各样的报错,这就需要耐心分析,配合百度搜索加一点自己的悟性进行排错,错误排除后再继续进行编译。
  5. 文件目录问题。同一个源码在x86平台和其他平台下编译,同一个文件的路径是不一样的,最简单的方法就是使用“sudo find / -name 文件名”命令进行查找这个文件,会显示出当前平台该文件的路径。

一、编译环境搭建

  1. 环境系统
    Ubuntu20.04
    CPU 16;内存32;硬盘200G
  2. 环境插件

在Ubuntu20.04安装以下插件:

sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pip libpython3-dev qemu-utils rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev

个别插件因为软件源的问题不能直接使用apt-get命令进行安装,可以更换软件源或网上找到插件链接使用wget命令拉取到本地进行手动安装。

二、Openwrt源码拉取
1.首先创建一个存放源码的目录,例如 sudo mkdir /data/Openwrt22.03/;
2.然后执行命令:cd /data/Openwrt22.03/;
3.执行: sudo git clone https://git.Openwrt.org/Openwrt/Openwrt.git命令,
等待拉取源码完成,会在Openwrt22.03/目录下生成一个“source”的目录,所有的源码都在这个目录下;
4. 执行“sudo chmod 777 -R source/”命令给source目录设定权限,然后切换到source目录下,执行 “sudo git checkout”命令选择依据哪个版本进行编译,比如选择 “sudo git checkout v22.03.0”,表示使用Openwrt22.03版本的源码进行编译;


5.执行“sudo ./scripts/feeds update -a”命令下载源码更新包,然后执行“sudo ./scripts/feeds install -a” 命令安装这些更新包;
6.执行“sudo make defconfig”命令检查编译环境,只要不报错误环境就没问题,也可以省略这一步。

三、配置menuconfig
1.所有的编译工作不要在“root”用户下进行,一定要在新建的用户下进行;
2.运行“sudo make menuconfig”进行配置,主要配置任务有,选择cpu型号、开发板型号、kmod模块、usb支持、需要的软件包等;
3.配置完成后执行“sudo make FORCE_UNSAFE_CONFIGURE=1 -j1 V=99”命令进行编译,其中“FORCE_UNSAFE_CONFIGURE=1”是按照要求添加的权限参数;“-j1”是指定使用1个内核进行编译,编译过程中会体现具体的编译错误,也可以设置为编译环境系统的最大内核数;
4.“sudo make FORCE_UNSAFE_CONFIGURE=1 -j1 V=s”命令是继续编译,该命令应用在编译因报错终止排错后,再继续编译的情况。

四、配置kernel_menuconfig
“kernel_menuconfig”是配置内核参数,需要在完成一次正常的“menuconfig”编译之后,才可以执行“sudo kernel_menuconfig”的配置。

五、移远RM500 4G/5G网卡驱动编译
1.选择驱动版本
从厂家获取驱动包,选择与源码内核版本相近的官方驱动,例如Openwrt22.03内核版本是5.10.138,驱动版本选择5.10.11,如图:


2.上传驱动配置文件
将官方驱动文件option.c和usb_wwan.c文件上传至“[KERNEL]/drivers/usb/serial/”目录下,[KERNEL]路径分为x86平台和其他平台,按照实际情况上传,最简单的方法是使用“find / -name 文件名称”确认这个文件在哪,然后用官方文件替换掉。
3.修改option.c文件
3.1添加模块的 VID 和 PID 信息
在文件[KERNEL]/drivers/usb/serial/option.c 中添加模块的 VID 和 PID 信息,如下所示:
static const struct usb_device_id option_ids[] = {
#if 1 //Added by Quectel
{ USB_DEVICE_AND_INTERFACE_INFO(0x2c7c, 0x0900, 0xff, 0x00, 0x00) },
#endif
3.2增加复位恢复机制
对于 Linux 内核 3.5 及以上版本,请添加如下语句至文件[KERNEL]/drivers/usb/serial/option.c,如下所示:
static struct usb_serial_driver option_1port_device = {
……
# ifdef CONFIG_PM
.suspend = usb_wwan_suspend,
.resume = usb_wwan_resume,
#if 1 //Added by Quectel
.reset_resume = usb_wwan_resume,
#endif
#endif
};
4.修改usb_wwan.c文件
4.1添加 USB 零包机制
对 于 Linux 内 核 2.6.35 及以上版本,在相应的位置删除原来的语句,请添加如下语句至文件[KERNEL]/drivers/usb/serial/usb_wwan.c ,如下所示:
static struct urb *usb_wwan_setup_urb(struct usb_serial *serial, int endpoint,
int dir, void *ctx, char *buf, int len,void (*callback) (struct urb *))
{……
usb_fill_bulk_urb(urb, serial->dev,
usb_sndbulkpipe(serial->dev, endpoint) | dir,
buf, len, callback, ctx);
#if 1 //Added by Quectel for zero packet
if (dir == USB_DIR_OUT) {
struct usb_device_descriptor *desc = &serial->dev->descriptor;
if (desc->idVendor == cpu_to_le16(0x2C7C))
urb->transfer_flags |= URB_ZERO_PACKET;
}
#endif
return urb;
}
5.配置kernel_menuconfig
为了使用 USB 转串口 option 驱动,必须使能以下 Linux 内核配置项,其它配置按需设置即可;
⚫ CONFIG_USB_SERIAL
⚫ CONFIG_USB_SERIAL_WWAN
⚫ CONFIG_USB_SERIAL_OPTION
执行“sudo make kernel_menuconfig”命令,在“> Device Drivers > Network device support > USB Network Adapters > Multi-purpose USB Networking Framework”路径下选择下图中的选项,注意不同的Openwrt版本该路径可能不一致,但是一定要开启下图中的选项:


usb项选配:

六、Make menuconfig配置
执行“make menuconfig”命令,配置usb选项,其它配置按需设置即可;

 

七、Kmod MD5修改
因在编译的时候配置选项与官方不一致,会导致MD5发生变化,编译完成后只要涉及Kmod模块安装的插件都无法进行安装,因此在编译之前需要强制官方MD5进行编译。
1.定义MD5
在源码目录下创建“.vermagic”文件,并将对应版本及平台的kmod MD5写到该文件中;
2.修改kernel-defaults.mk文件
编辑include/kernel-defaults.mk文件,在图中121行位置将原来语句改为“cp $(TOPDIR)/vermagic $(LINUX_DIR)/.vermagic”,如下图:


3.修改Makefile文件
修改package/kernel/linux/Makefile 文件,指定生成ipk包的MD5依赖,将原来27行语句替换为“STAMP_BUILT:=$(STAMP_BUILT)_$(shell cat $(LINUX_DIR)/.vermagic)”,如下图:

八、配置gpio实现喂狗
某些开发板可能带狗,需要进行喂狗操作。使用“sudo find / -name mt7621.dtsi”找到“ mt7621.dtsi”文件进行修改,将258行设置为function=”gpio”; 如下图:

九、错误排除
错误1:
Configuring ppp-mod-pppoe.
Collected errors:
check_data_file_clashes: Package libustream-openssl20201210 wants to install file /data/Openwrt22.03/Openwrt/build_dir/target-x86_64_musl/root-x86/lib/libustream-ssl.so
But that file is already provided by package * libustream-wolfssl20201210
opkg_install_cmd: Cannot install package libustream-openssl20201210.
make[2]: [package/Makefile:70: package/install] Error 255
make[2]: Leaving directory '/data/Openwrt22.03/Openwrt'
make[1]:[package/Makefile:111: /data/Openwrt22.03/Openwrt/staging_dir/target-x86_64_musl/stamp/.package_install] Error 2
make[1]: Leaving directory '/data/Openwrt22.03/Openwrt'
make: *** [/data/Openwrt22.03/Openwrt/include/toplevel.mk:230: world] Error 2
排除方法:在menuconfig配置里面去掉“libustream-wolfssl”勾选。先在“LuCI > Collections > ”路径下去掉“luci-ssl”的勾选,然后去“Libraies”路径下去掉“libustream-wolfssl”勾选,保存配置退出后继续编译。
错误2:
ERROR: module '/data/Openwrt22.03/Openwrt/build_dir/target-mipsel_24kc_musl/linux-ramips_mt7621/linux-5.10.138/arch/mips/crypto/chacha-mips.ko' is missing.
make[3] [modules/crypto.mk:501: /data/Openwrt22.03/Openwrt/bin/targets/ramips/mt7621/packages/kmod-crypto-lib-chacha20_5.10.138-1_mipsel_24kc.ipk] Error 1
make[3]: Leaving directory '/data/Openwrt22.03/Openwrt/package/kernel/linux'
time: package/kernel/linux/compile#4.29#0.81#4.61
ERROR: package/kernel/linux failed to build.
make[2]: *** [package/Makefile:116: package/kernel/linux/compile] Error 1
make[2]: Leaving directory '/data/Openwrt22.03/Openwrt'
make[1]: *** [package/Makefile:110: /data/Openwrt22.03/Openwrt/staging_dir/target-mipsel_24kc_musl/stamp/.package_compile] Error 2
make[1]: Leaving directory '/data/Openwrt22.03/Openwrt'
make: *** [/data/Openwrt22.03/Openwrt/include/toplevel.mk:230: world] Error 2
ubuntu@ubuntu-virtual-machine:/data/Openwrt22.03/Openwrt$ build_dir/target-mipsel_24kc_musl/linux-ramips_mt7621/linux-5.10.138/arch/mips/crypto/chacha-mips.ko' is missingmodules/crypto.mk:501: /data/Openwrt22.03/Openwrt/bin/targets/ramips/mt7621/packages/kmod-crypto-lib-chacha20_5.10.138-1_mipsel_24kc.ipk] Error 1mips/crypto/chacha-mips.ko' is missing.
-bash: build_dir/target-mipsel_24kc_musl/linux-ramips_mt7621/linux-5.10.138/arch/mips/crypto/chacha-mips.ko is missingmodules/crypto.mk:501: /data/Openwrt22.03/Openwrt/bin/targets/ramips/mt7621/packages/kmod-crypto-lib-chacha20_5.10.138-1_mipsel_24kc.ipk] Error 1mips/crypto/chacha-mips.ko: No such file or directory
ubuntu@ubuntu-virtual-machine:/data/Openwrt22.03/Openwrt$
ubuntu@ubuntu-virtual-machine:/data/Openwrt22.03/Openwrt$
排除方法:执行“sudo make kernel_menuconfig”,在“ Cryptographic API”目录下选择缺少的chacha*插件,保存退出继续编译。

十、测试

固件编译完成后会存放到openwrt/目录下的bin/目录下,刷入设备测试自己所需的功能。如果设备带有4G或5G模组,首先查看/dev目录下是否有ttyUSB*的设备,如果出现ttyUSB*的选项,说明4G或5G模组的驱动编译成功,然后根据官方提供的AT命令调试手册进行调试即可。

另外,如果有带狗的开发板需要进行喂狗操作。

 

============== End

 

 
posted @ 2023-04-09 09:29  lsgxeva  阅读(292)  评论(0编辑  收藏  举报