开发板系统:linux 用户名:orangepi sudo密码:orangepi
连接 SSH无线连接
和开发板连接同一WI-FI
给板子插电,等待红灯闪烁
在电脑上用ssh进行连接
1 ssh orangepi@192.168.3.163
ssh密码:orangepi
adb有线连接
用USB线连接板子和电脑
红灯闪烁后等待大约1分钟
执行adb devices查看是否连接成功
执行adb shell进行板端开发
已在板端配置开机自动运行adb启动脚本的systemctl服务:
1 sudo nano /etc/systemd/system/adb-conf.service
写入:
1 2 3 4 5 6 7 8 9 10 11 12 13 [Unit] Description =ADB config startup scriptAfter =sys-devices-platform-soc\x403000000-10 .usbc0.deviceWants =sys-devices-platform-soc\x403000000-10 .usbc0.device[Service] Type =forkingExecStart =/etc/adb_conf.sh startExecStop =/etc/adb_conf.sh stopTimeoutStartSec =15 [Install] WantedBy =multi-user.target
1 2 3 4 5 6 7 8 9 10 sudo systemctl daemon-reloadsudo systemctl enable adb-conf.servicesudo systemctl start adb-conf.servicesystemctl status adb-conf.service journalctl -u adb-conf.service
文件传输 scp协议 PC端执行:
下载文件:
1 2 3 4 5 scp -P 22 orangepi@192.168.3.163:/home/orangepi/log.txt ./ scp -r orangepi@192.168.3.163:/home/orangepi/my_code ./
上传文件:
1 2 3 4 scp ./local_file.txt orangepi@192.168.3.163:/home/orangepi/ scp -r pure-uav orangepi@192.168.3.163:/home/orangepi
rsync 增量传输,支持重复执行断点续传。
PC端执行:
1 2 3 4 5 6 7 8 rsync -avz orangepi@192.168.3.163:/home/orangepi/my_code ./my_code rsync -avz ./my_code orangepi@192.168.3.163:/home/orangepi/ rsync -avz --bwlimit=1000 orangepi@192.168.3.163:/home/orangepi/logs ./logs rsync -avz -e "ssh -p 2222" orangepi@192.168.3.163:/home/test ./
-a:归档模式,保留权限、目录结构、软链接
-v:verbose,打印详情
-z:传输时压缩
sftp协议 用文件管理器图形化查看和传输文件。
在文件管理器地址栏输入:sftp://orangepi@192.168.3.163连接。
日志记录 启用 journald 持久化日志 1 sudo nano /etc/systemd/journald.conf
添加Storage=persistent
查看:
1 2 3 4 5 6 7 8 journalctl -f journalctl -b -1 journalctl -k journalctl -b -1 > ~/logs/crash_lastboot.log
抓取dmesg内核日志 读取内核日志需要root权限,用systemd服务读取并记录。
1 sudo nano /etc/systemd/system/dmesg-logger.service
写入:
1 2 3 4 5 6 7 8 9 10 11 12 13 [Unit] Description =Collect dmesg kernel log to fileAfter =local-fs.target[Service] Type =simpleUser =rootExecStart =/bin/bash -c 'mkdir -p /home/orangepi/logs; dmesg -w | while read line; do echo "[$(date +%%Y-%%m-%%d %%H:%%M:%%S)] $line"; done >> /home/orangepi/logs/dmesg.log' Restart =alwaysRestartSec =2 [Install] WantedBy =multi-user.target
启动服务:
1 2 3 4 5 6 7 sudo systemctl daemon-reloadsudo systemctl enable dmesg-logger.servicesudo systemctl start dmesg-logger.servicesystemctl status dmesg-logger tail -f /home/orangepi/board_log/dmesg.log
[!WARNING] 这个方式记录的日志没有自动删除功能,需要定期手动清理。
把日志从内存移动到SD 1 2 3 sudo systemctl disable --now orangepi-ramlogsudo sed -i 's/^ENABLED=.*/ENABLED=false/' /etc/default/orangepi-ramlog 2>/dev/nullsudo reboot
禁用休眠 不禁用休眠的话会因GDM登录界面或桌面空闲20分钟后被自动挂起,而全志的BSP的挂起唤醒是坏的,就会导致死机。
1 2 3 4 5 6 7 8 9 journalctl -b -1 | grep -iE "suspend|sleep|logind|gsd-power" last -x | head -20 journalctl -b -1 -o short-monotonic | grep -iE "suspend|sleep|logind|NetworkManager|gsd-power" journalctl -b -1 -u systemd-logind -u NetworkManager -o short-monotonic | tail -40 journalctl --list-boots
禁用休眠:
1 2 sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.targetsudo nano /etc/systemd/sleep.conf
写入:
1 2 3 4 5 [Sleep] AllowSuspend =no AllowHibernation =no AllowSuspendThenHibernate =no AllowHybridSleep =no
1 sudo nano /etc/systemd/sleep.conf.d/nosuspend.conf
1 2 3 4 [Sleep] AllowSuspend =no AllowHibernation =no AllowSuspendThenHibernate =no AllowHybridSleep =no
1 sudo nano /etc/systemd/logind.conf.d/noidle.conf
1 2 3 4 [Login] HandleSuspendKey =ignoreHandleHibernateKey =ignoreIdleAction =ignore
1 sudo systemctl restart systemd-logind
关掉桌面端的自动挂起:
1 2 sudo -u gdm dbus-launch gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing' sudo -u gdm dbus-launch gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type 'nothing'
完整脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 for u in gdm orangepi; do for t in ac battery; do sudo -u $u dbus-launch gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-${t} -type 'nothing' done done sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.targetprintf '[Sleep]\nAllowSuspend=no\nAllowHibernation=no\nAllowSuspendThenHibernate=no\nAllowHybridSleep=no\n' | sudo tee /etc/systemd/sleep.conf.d/nosuspend.confprintf '[Login]\nHandleSuspendKey=ignore\nHandleHibernateKey=ignore\nHandleLidSwitch=ignore\nIdleAction=ignore\n' | sudo tee /etc/systemd/logind.conf.d/noidle.confsudo systemctl disable --now orangepi-ramlogsudo sed -i 's/^ENABLED=.*/ENABLED=false/' /etc/default/orangepi-ramlog 2>/dev/null
1 2 3 chmod +x sleep-disable.sh./sleep-disable.sh reboot
网络转发 原理:sshuttle 在板子上用 iptables 把流量拦下来,通过 SSH 隧道送到电脑,由电脑的 SSH 进程代为发出。电脑上只要求能 SSH 登录。
电脑上执行:
若输出inactive,就执行:
1 2 sudo apt install openssh-serversudo systemctl enable --now ssh
1 2 3 4 5 6 ip -br addr show hostname -I sudo ss -tlnp | grep sshd
如果端口不是22,在PC的IP后加冒号和端口,如:192.168.1.100:2222。
板子上执行:
1 2 3 4 ip route show scope link ip -br addr show wlan0
1 2 3 4 sudo apt install sshuttlesudo sshuttle -r <PC_user>@<PC_IP> 0.0.0.0/0 --exclude <板子IP>sudo sshuttle -r jianyuelinux@192.168.3.181 0.0.0.0/0 --exclude 192.168.3.0/24
--exclude 很重要:把你的局域网段排除掉,否则你 SSH 登录板子的这条连接本身也会被塞进隧道,容易造成递归死锁或 SSH 断连。
前台运行,Ctrl-C 结束,规则会自动清理。加 -D 可后台运行,日志默认写 syslog。
新开一个开发板窗口验证:
应返回电脑的公网出口IP,在电脑上执行这条命令会输出相同的结果。
停止:
正常退出会清规则,如果之前被 kill -9 强杀过导致板子上不了网,用 sudo iptables -t nat -S 检查残留的 REDIRECT 规则,手动 -D 删掉。
局限:只转发 TCP。所以 ping(ICMP)不走隧道,仍然是板子直连路由器的结果,不能用 ping 验证;DNS 默认也走隧道(sshuttle 会劫持 DNS 查询),apt、pip、curl、浏览器都正常。
内核锁定 防止内核更新后NPU驱动崩溃。
1 2 3 sudo apt-mark hold linux-image-legacy-sun60iw2 linux-dtb-legacy-sun60iw2 linux-u-boot-orangepizero3w-legacy orangepi-bsp-cli-orangepizero3w orangepi-bsp-desktop-orangepizero3w orangepi-firmwaresudo apt-mark showhold
解锁:sudo apt-mark unhold linux-image-legacy-sun60iw2 linux-dtb-legacy-sun60iw2 linux-u-boot-orangepizero3w-legacy orangepi-bsp-cli-orangepizero3w orangepi-bsp-desktop-orangepizero3w orangepi-firmware
其他 systemd 查看systemctl服务:
1 2 3 4 5 6 7 8 9 10 systemctl list-units --type =service systemctl list-units --type =service --state=running systemctl list-unit-files --type =service systemctl status <服务名>.service systemctl status <服务名>