fishboat
本文最后更新于23 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

开机免登录

sudo mkdir -p /etc/systemd/system/serial-getty@ttyFIQ0.service.d
sudo nano /etc/systemd/system/serial-getty@ttyFIQ0.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin wqh --noreset --noclear --keep-baud 115200,57600,38400,9600 - $TERM
sudo systemctl daemon-reload
sudo systemctl restart serial-getty@ttyFIQ0.service

开机wifi

sudo nano /etc/netplan/99-wifi.yaml
network:
  version: 2
  wifis:
    wlan0:
      optional: true
      dhcp4: true
      access-points:
        "TP-LINK_12EF":
          password: "0000011111"
TP-LINK_12EF  换成你的 WiFi 名称
0000011111    换成你的 WiFi 密码
wlan0         是你的 WiFi 接口名

免密指令

sudo -n wpa_cli -i wlan0 status
sudo -n wpa_cli -i wlan0 scan
sudo -n ip addr replace 192.168.0.233/24 broadcast + dev wlan0

1. 添加 boat002 用户

sudo mosquitto_passwd -b /etc/mosquitto/passwd boat002 Boat002_123456

注意:这里不要加 -c,否则会覆盖原来的 fishboat_appboat001 用户。


2. 编辑 ACL 权限文件

sudo nano /etc/mosquitto/acl

在文件最后追加:

user boat002
topic read boat/boat002/cmd
topic write boat/boat002/ack
topic write boat/boat002/status
topic write boat/boat002/heartbeat

保存退出。


3. 重启 Mosquitto

sudo systemctl restart mosquitto
sudo systemctl status mosquitto --no-pager

4. 测试 boat002 是否能收到命令

窗口 1,模拟 boat002 船端订阅:

mosquitto_sub -h 127.0.0.1 -p 1883 \
-u boat002 -P 'Boat002_123456' \
-t 'boat/boat002/cmd' -v

窗口 2,模拟 APP 发命令:

mosquitto_pub -h 127.0.0.1 -p 1883 \
-u fishboat_app -P 'App_123456' \
-t 'boat/boat002/cmd' \
-m '{"cmd":"forward","speed":60,"seq":2001}'

订阅窗口看到:

boat/boat002/cmd {"cmd":"forward","speed":60,"seq":2001}

就说明 boat002 配好了。


5. boat002 开发板配置里要写

{
"device_id": "boat002",
"mqtt_host": "服务器公网IP",
"mqtt_port": 1883,
"mqtt_user": "boat002",
"mqtt_password": "Boat002_123456",
"cmd_topic": "boat/boat002/cmd",
"ack_topic": "boat/boat002/ack",
"status_topic": "boat/boat002/status",
"heartbeat_topic": "boat/boat002/heartbeat",
"rtsp_url": "rtsp://服务器公网IP:8554/boat002"
}

1. 交叉编译报错现象

在 x86_64 Ubuntu 虚拟机里交叉编译 Radxa Zero3W / ARM64 程序时,报错:

src/mqtt_client.c:7:10: fatal error: mosquitto.h: 没有那个文件或目录
#include <mosquitto.h>

原因是虚拟机里没有安装 Mosquitto 开发头文件和 ARM64 目标库。


2. 本质原因

Radxa Zero3W 是 ARM64/aarch64,交叉编译时不能只装 x86_64 版本的库。

需要安装目标架构的开发包:

libmosquitto-dev:arm64

而不是只装:

libmosquitto-dev

其中:

libmosquitto-dev        默认是虚拟机本机 amd64 版本
libmosquitto-dev:arm64 是给开发板 ARM64 目标程序链接用的版本

3. 遇到的新问题

执行:

sudo apt install -y libmosquitto-dev:arm64

提示:

E: 无法定位软件包 libmosquitto-dev:arm64

原因是虚拟机虽然是 Ubuntu Jammy,但当前 apt 源没有正确提供 arm64 软件包,或者还没有添加 arm64 架构源。


4. 解决思路

需要先启用 arm64 多架构:

sudo dpkg --add-architecture arm64

然后给 arm64 单独添加 ubuntu-ports 源。

注意:ARM64 包应该走 ubuntu-ports,不是普通 ubuntu 源。


5. 推荐国内 arm64 源

因为官方 ports.ubuntu.com 速度慢,可以使用国内镜像。

推荐中科大 USTC:

sudo nano /etc/apt/sources.list.d/arm64.list

写入:

deb [arch=arm64] https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
deb [arch=arm64] https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb [arch=arm64] https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
deb [arch=arm64] https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse

或者清华 TUNA:

deb [arch=arm64] https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
deb [arch=arm64] https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb [arch=arm64] https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
deb [arch=arm64] https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse

6. 关键操作命令

sudo dpkg --add-architecture arm64
sudo rm -rf /var/lib/apt/lists/*
sudo apt clean
sudo apt update
sudo apt install -y libmosquitto-dev:arm64

安装后检查:

ls /usr/include/mosquitto.h
ls /usr/lib/aarch64-linux-gnu/libmosquitto*

正常应看到:

/usr/include/mosquitto.h
/usr/lib/aarch64-linux-gnu/libmosquitto.so

7. 编译时注意

交叉编译链接时要确保链接 ARM64 库:

/usr/lib/aarch64-linux-gnu/libmosquitto.so

如果后续链接报:

cannot find -lmosquitto

Makefile 里需要加:

LDFLAGS += -L/usr/lib/aarch64-linux-gnu
LDLIBS += -lmosquitto

8. 总结一句话

这次问题不是代码里的 #include <mosquitto.h> 写错,而是 x86 虚拟机交叉编译 ARM64 程序时,缺少 ARM64 版本 Mosquitto 开发库
解决方法是:开启 arm64 多架构 + 添加 ubuntu-ports 国内源 + 安装 libmosquitto-dev:arm64

9.开发板也要

推荐直接换中科大源

先备份:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 2>/dev/null || true
sudo cp /etc/apt/sources.list.d/debian.sources /etc/apt/sources.list.d/debian.sources.bak 2>/dev/null || true

替换源:

sudo sed -i 's|http://deb.debian.org/debian|https://mirrors.ustc.edu.cn/debian|g' /etc/apt/sources.list 2>/dev/null || true
sudo sed -i 's|http://security.debian.org/debian-security|https://mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list 2>/dev/null || true
sudo sed -i 's|http://deb.debian.org/debian-security|https://mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list 2>/dev/null || true

sudo sed -i 's|http://deb.debian.org/debian|https://mirrors.ustc.edu.cn/debian|g' /etc/apt/sources.list.d/debian.sources 2>/dev/null || true
sudo sed -i 's|http://security.debian.org/debian-security|https://mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list.d/debian.sources 2>/dev/null || true
sudo sed -i 's|http://deb.debian.org/debian-security|https://mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list.d/debian.sources 2>/dev/null || true

清理并更新:

sudo rm -rf /var/lib/apt/lists/*
sudo apt clean
sudo apt update

然后安装运行库:

sudo apt install -y libmosquitto1

检查:

ls /usr/lib/aarch64-linux-gnu/libmosquitto.so*
sudo ldconfig
./fishboatd

MQTT 服务器:腾讯云公网IP
端口:1883

APP:
user = fishboat_app
password = App_123456

boat001 开发板:
user = boat001
password = Boat001_123456

APP 发命令 topic:
boat/boat001/cmd

boat001 发 ACK:
boat/boat001/ack

boat001 发状态:
boat/boat001/status

boat001 发心跳:
boat/boat001/heartbeat

吴某某 fishboat https://web.mcfrys.cn/index.php/2026/06/18/fishboat/
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇