【树莓派4B Ubuntu 23.04 server】Type-C一线连接iPad并组网

基于Ubuntu 23.04

开启树莓派USB Type-C接口的数据传输功能,将USB0作为网卡设备,同时使用uDHcP为连接设备分配动态IP。后续直接使用ssh或者VNC连接即可。本文只记录网络配置过程。

操作

打开Type-C接口网卡模式

echo dtoverlay=dwc2 >> /boot/firmware/config.txt;
echo modules-load=dwc2 >> /boot/firmware/cmdline.txt;
echo libcomposite >> /etc/modules;

原始文档这里需要添加dnsmasq相关配置,由于我只使用uDHcP,不需要相关设置

为USB0添加静态IP

由于Ubuntu 23.04使用netplan,不需要新增interface,新建配置文件vim /etc/netplan/01-usbnet-init.yaml输入以下内容

network:
    version: 2
    ethernets:
        usb0:
            addresses: [192.168.7.1/24]
            dhcp4: false
            dhcp6: false
            optional: true

修改文件权限(否则netpaln会发出警告)chmod 600 /etc/netplan/01-usbnet-init.yaml
使用netplan apply接受配置。

如果出现以下错误回显则需要安装openvswitch-switch

Cannot call Open vSwitch: ovsdb-server.service is not running.

使用以下命令安装
apt-get install openvswitch-switch

设置uDHcP

apt install -y udhcpd
安装完成后编辑udhcpd的配置vim /etc/udhcpd.conf,修改以下配置

start 192.168.7.2
end   192.168.7.10

interface usb0

max_leases 9

opt dns 8.8.8.8
option  subnet  255.255.255.0
opt router  192.168.7.1

后面这几项没用,注释掉即可

#opt wins 9.168.7.1
#option dns 10.219.13.81   # appened to above DNS servers for a total of 3
#option domain  local
#option lease   864000      # 10 days of seconds

编辑/etc/default/udhcpd,将DHCPD_ENABLED改为yes开启DHCP

# Comment the following line to enable
 DHCPD_ENABLED="yes"

# Options to pass to busybox' udhcpd.
#
# -S    Log to syslog
# -f    run in foreground

DHCPD_OPTS="-S"

使用rc.local启动时拉起网口以及启动uDHcP

创建一个开机执行的脚本

  1. apt-get install net-tools
    安装net-tools,接下来的脚本需要使用ifconfig来拉起usb0网口

  2. vim /root/usb.sh

#!/bin/bash
cd /sys/kernel/config/usb_gadget/
mkdir -p pi4
cd pi4
echo 0x1d6b > idVendor # Linux Foundation
echo 0x0104 > idProduct # Multifunction Composite Gadget
echo 0x0100 > bcdDevice # v1.0.0
echo 0x0200 > bcdUSB # USB2
echo 0xEF > bDeviceClass
echo 0x02 > bDeviceSubClass
echo 0x01 > bDeviceProtocol
mkdir -p strings/0x409
echo "fedcba9876543211" > strings/0x409/serialnumber
echo "Ben Hardill" > strings/0x409/manufacturer
echo "PI4 USB Device" > strings/0x409/product
mkdir -p configs/c.1/strings/0x409
echo "Config 1: ECM network" > configs/c.1/strings/0x409/configuration
echo 250 > configs/c.1/MaxPower
# Add functions here
# see gadget configurations below
# End functions
mkdir -p functions/ecm.usb0
HOST="00:dc:c8:f7:75:14" # "HostPC"
SELF="00:dd:dc:eb:6d:a1" # "BadUSB"
echo $HOST > functions/ecm.usb0/host_addr
echo $SELF > functions/ecm.usb0/dev_addr
ln -s functions/ecm.usb0 configs/c.1/
udevadm settle -t 5 || :
ls /sys/class/udc > UDC
ifconfig usb0 up
for i in $(seq 1 100)
do
    if [ -n "$(networkctl status usb0 | grep routable | grep configured)" ]
    then
        service udhcpd restart
        break
    else
        sleep 0.1
    fi
done
  1. 设置权限chmod +x /root/usb.sh

开启rc.local

ubuntu 5.04默认关闭了rc.local,但是依然可以通过修改systemd配置文件生效。

  1. vim /lib/systemd/system/rc-local.service,追加如下配置
[Install]
WantedBy=multi-user.target
Alias=rc-local.service
  1. 创建rc.local文件,vim /etc/rc.local
#!/bin/bash

/root/usb.sh

exit 0
  1. 增加权限,chmod +x /etc/rc.local
  2. 增加软链接,sudo ln -s /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service
  3. 重启即可生效
    请添加图片描述

问题诊断

1. iPad上不显示以太网

使用ifconfig -a查看usb0网口是否存在。如果不存在,检查打开Type-C接口网卡模式时修改的三个文件是否配置正确(echo的内容是否正确添加到文件末尾)。如果usb0存在,考虑使用ifconfig usb0 up手动拉起usb0,并查看回显错误。

2.iPad上以太网IP不是192.168.7.X

大概率是udhcpd没有正确开启,使用service udhcp status查看服务状态。如果显示active(exited),大概率是没有修改/etc/default/udhcpd。

参考

  1. RaspberryPi-One-Wire

原项目通过dnsmasq实现,为方便Ubuntu 23.04使用,本文尝试使用udhcpd实现。

  1. Ubuntu 20.04 手动实现 rc.local
  2. udhcpd搭建DHCP server
  3. DNSMasq 域名解析配置
  4. Ubuntu 22.04 开启dnsmasq
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值