本文介绍了 Milk-V Duo S 开发板实现网络连接、分区扩展、外壳设计等相关流程。
包括 LAN 有线网口连接通信、WLAN无线通信连接、USB CNC-NCM通信连接以及串口UART连接等。
192.168.1.124
;使用 MobaXterm 软件或 PowerShell 命令行终端建立 SSH 连接,登录名和默认密码分别为 root 和 milkv ;
动态效果见底部视频。
每次连接 LAN 有线网,Duo S 以太网口 MAC 地址便会随机分配,导致每次重启后,路由器为网口分配的 IP 地址改变,给登录带来诸多不便,因此终端执行 ifconfig
查看并获取当前网络的 MAC 地址
终端执行如下指令,为网口配置固定的 MAC 地址(注意修改MAC地址)
echo "pre-up ifconfig eth0 hw ether 3E:34:CA:4C:07:B1" >> /etc/network/interfaces && sync
终端执行 reboot
指令重启使其生效。
编辑无线配置文件 /etc/wpa_supplicant.conf
,修改 ssid
和 psk
分别为目标 WiFi 的账号和密码
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
update_config=1
network={
ssid="xxx"
psk="xxx"
key_mgmt=WPA-PSK
}
终端执行指令
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
即可获取 WiFi 连接。
通过路由器终端或 ifconfig
指令查看分配的 IP 地址。
每次重启连接 WiFi 路由器会自动随机分配 ip 地址给开发板,给调试带来许多不便,因此需固定MAC地址,并设置开机自动连接无线网。
打开 /mnt/system/auto.sh
文件,并添加如下指令
interface="wlan0"
max_attempts=100
attempt=0
log_file="/var/log/auto.sh.log"
# Continuously attempt to detect if the interface exists, up to $max_attempts times
echo "start auto.sh" > "$log_file"
while [ $attempt -lt $max_attempts ]; do
# Check if the wlan0 interface exists
ip link show "$interface" > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "$(date +'%Y-%m-%d %H:%M:%S') $interface interface exists, starting wpa_supplicant..." >> "$log_file"
wpa_supplicant -B -i "$interface" -c /etc/wpa_supplicant.conf >> "$log_file"
break # Exit the loop if the interface is found
else
echo "$(date +'%Y-%m-%d %H:%M:%S') $interface interface not found, waiting..." >> "$log_file"
sleep 1 # Wait for 1 second before checking again
attempt=$((attempt + 1)) # Increment the attempt counter
fi
done
# If the maximum number of attempts is reached and the interface still not found, output an error message
if [ $attempt -eq $max_attempts ]; then
echo "$(date +'%Y-%m-%d %H:%M:%S') Interface $interface not found after $max_attempts attempts" >> "$log_file"
fi
每次重启后路由器为 WiFi 分配的 ip 地址变化,终端执行如下指令,使 WiFi 具有固定的 MAC 地址
echo "MAC_ADDR=11:22:33:44:55:66" > /mnt/system/firmware/aic8800/rwnx_settings.ini && sync
执行 reboot
命令或重新上电并生效。
系统默认启用 CDC-NCM 和 DHCP ;
驱动安装:将 Type-C 转 USB 数据线连接开发板和电脑,打开设备管理器,在 其他设备 选项下找到 CDC NCM 设备,右键更新驱动,浏览电脑查找驱动 - 从计算机可用驱动列表选择 - 网络适配器 - Microsoft - UsbNcm Host Device,点击安装;返回设备管理器界面,在网络适配器选项下可看到 UsbNcm Host Device 选项
直接在命令行终端使用指令 ssh root@192.168.42.1
即可登陆 Duo S 终端;
若需修改默认 CDC-NCM 登录地址,可进入文件 /mnt/system/usb-ncm.sh
~!/bin/sh
usb_en=453
usb_select=510
function set_gpio()
{
local gpio_num=$1
local gpio_val=$2
local gpio_path="/sys/class/gpio/gpio${gpio_num}"
if test -d ${gpio_path}; then
echo "GPIO ${gpio_num} already exported" >> /tmp/ncm.log 2>&1
else
echo ${gpio_num} > /sys/class/gpio/export
fi
echo out > ${gpio_path}/direction
sleep 0.1
echo ${gpio_val} > ${gpio_path}/value
}
set_gpio ${usb_en} 0
sleep 0.5
set_gpio ${usb_select} 0
sleep 0.5
/etc/uhubon.sh device >> /tmp/ncm.log 2>&1
/etc/run_usb.sh probe ncm >> /tmp/ncm.log 2>&1
/etc/run_usb.sh start ncm >> /tmp/ncm.log 2>&1
sleep 0.5
ifconfig usb0 192.168.42.1
count=`ps | grep dnsmasq | grep -v grep | wc -l`
if [ ${count} -lt 1 ] ;then
echo "/etc/init.d/S80dnsmasq start" >> /tmp/ncm.log 2>&1
/etc/init.d/S80dnsmasq start >> /tmp/ncm.log 2>&1
fi
以及文件 /etc/dnsmasq.conf
interface=usb0
dhcp-range=192.168.42.2,192.168.42.242,1h
dhcp-option=3
dhcp-option=6
详见:设置工作环境 | Milk-V .
Duo S 主板上预留 UART 调试串口,可以查看系统的启动日志,登陆到控制台,执行终端命令等。
使用 USB-TTL 串口线连接板载排针引脚,连接方案为
Milk-V DouS | USB - TTL |
---|---|
GND (pin 6) | GND |
TX (pin 8) | RXD |
RX (pin 10) | TXD |
Duo S 默认串口参数为
baudrate: 115200
data bit: 8
stop bit: 1
parity : none
flow control: none
动态演示见顶部视频。
详见:串口通信 Duo S | Milk-V .
这里介绍 SD 卡启动方式的根分区拓展流程,便于后续存储和运行较大体积的程序。
运行命令 df -h
查看当前磁盘分区和使用情况。
[root@milkv-duo]/etc# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 739M 236M 449M 35% /
devtmpfs 158M 0 158M 0% /dev
tmpfs 158M 0 158M 0% /dev/shm
tmpfs 158M 412K 158M 1% /tmp
tmpfs 158M 40K 158M 1% /run
/dev/mmcblk0p1 128M 3.8M 124M 3% /boot
运行指令 fdisk -l
查看磁盘分区详细信息
[root@milkv-duo]/etc# fdisk -l
Disk /dev/mmcblk0: 29.72 GiB, 31914983424 bytes, 62333952 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x438efa6e
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 * 1 262144 262144 128M c W95 FAT32 (LBA)
/dev/mmcblk0p2 262145 266240 4096 2M 0 Empty
/dev/mmcblk0p3 266241 1839104 1572864 768M 83 Linux
目标扩展分区为 /dev/mmcblk0p3 ,该分区的起始扇区为 266241 .
运行命令 fdisk /dev/mmcblk0
启动 fdisk ;
Do you want to remove the signature? [Y]es/[N]o
,输入 N 并回车;执行指令 resize2fs /dev/mmcblk0p3
实现扩展文件系统,以使用新的分区大小。
查看扩展后的分区大小
通过创建脚本文件,实现上述流程的快速执行。
创建扩展根分区脚本 touch resize.sh
,并添加如下代码
#!/bin/bash
# 确保脚本以root身份运行
if [ "$EUID" -ne 0 ]; then
echo "请以root用户运行此脚本"
exit
fi
# 设置设备名称
DEVICE="/dev/mmcblk0"
# 使用fdisk进行分区操作
{
echo d # 删除分区
echo 3 # 删除分区3
echo n # 创建新分区
echo p # 主分区
echo 3 # 分区号3
echo 266241 # 起始扇区
echo # 结束扇区,使用默认值(最大空间)
echo N # 不移除签名
echo w # 保存更改
} | fdisk "$DEVICE"
# 检查文件系统并扩展
resize2fs "${DEVICE}p3"
# 显示扩展后的磁盘使用情况
df -h
修改文件权限并运行即可
chmod +x resize.sh
./resize.sh
详见:扩展根分区 | Milk-V .
3D 外壳为上下层设计,四脚采用 M2 螺丝固定
顶层设计包括大、中、小 3 种尺寸
其中 Large 可以使用嘉立创 3D 打印免费券。
这里使用 M2 螺丝,长度为 25mm,头部直径 3.8mm,螺母为 M2 六角型。
彩色外壳效果如下
详见:MilkV DuoS Case Version A by carbonfix - Thingiverse .
本文介绍了 Milk-V Duo S 开发板实现网络连接、分区扩展、外壳设计等相关流程,为后续开发做好准备,也为该产品的相关开发设计和产品应用提供了参考。
更多回帖