【问题标题】:Hot to initialize LTE module using libqmi and systemd-network (networkd-dispatcher)使用 libqmi 和 systemd-network (networkd-dispatcher) 初始化 LTE 模块
【发布时间】:2022-09-23 15:53:48
【问题描述】:

我想使用 libqmi 和 networkd-dispatcher 初始化 lte 模块。到目前为止,我得到的是一个位于 /etc/networkd-dispatcher/degraded.d/01-wwan.sh 的 shell 脚本

     #!/bin/bash
    
    interface=\"${IFACE}\"
    
    if [[ \"$interface\" == *\"wwan\"* ]]; then
      device=\"/dev/cdc-wdm${interface: -1}\"
      is_wwan=\"y\"
    fi
    
    if [[ \"$is_wwan\" == \"y\" ]]; then
      ip link set dev \"${interface}\" down
      echo \"Y\" > \"/sys/class/net/${interface}/qmi/raw_ip\"
      qmi-network \"${device}\" start || true
      qmicli -p -d \"${device}\" --wds-set-autoconnect-settings=enabled || true
      ip link set dev \"${interface}\" up
    fi

我现在的问题是,有时在重新启动后会一遍又一遍地调用此脚本,并且需要一些时间才能稳定。我想如果我在连接后添加一个 sleep 10s 可以解决问题,但它没有。任何建议如何解决这个问题?

    标签: yocto lte libqmi


    【解决方案1】:

    对不起,有点晚了,但刚刚遇到了这个问题。

    如果只是为了完整起见,我发现一种非常可预测和可靠的方法是链接一个 systemd 服务文件,该文件使用udev 规则启动脚本:

    在 /etc/udev/rules.d 中创建一个文件,例如 10-lte-modem.rules,它应该如下所示:

    SUBSYSTEM=="net",ACTION=="add",ENV{PRODUCT}=="PID-of-modem", TAG+="systemd",ENV{SYSTEMD_WANTS}
    

    请注意,您可以使用不同的触发器,例如,如果您的调制解调器位于 USB 集线器上的固定端口,那么您可以使用 KERNELS="1-1.1“。关键是在调制解调器的枚举上触发 systemd 服务(它允许您重新启动调制解调器并且您的脚本将自动重新运行)。您还可能需要添加一个 NAME= 字段来为您的界面提供一个确定性名称。

    在将启动脚本的 systemd 服务文件中,您有以下内容:

    [Unit]
    ConditionPathExists=|!/sys/class/net/wwan1
    ConditionPathExists=|!/sys/class/net/wwan2
    
    [Service]
    Type=simple
    Restart=always
    RemainAfterExit=no
    ExecStart=/bin/sh /etc/networkd-dispatcher/degraded.d/01-wwan.sh
    

    该|! systemd 中的语法允许您 OR 不同的条件。

    根据您的系统的确切设置,例如它是 PCIe 调制解调器还是 USB,您可能必须使用 udev 和 systemd 设置来获得您想要的东西,但我发现它会导致非常稳定的行为。

    【讨论】:

      猜你喜欢
      • 2017-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-28
      • 2011-07-02
      • 2018-02-13
      • 1970-01-01
      • 2014-11-23
      相关资源
      最近更新 更多