main/postmarketos-initramfs: support reading USB network UDC name from deviceinfo (MR 4750)
Before this change the script assumed that the device has only one UDC. However it is possible for a device to have multiple UDCs, in which case the deviceinfo is the appropriate place to specify which one should be used. This change adds an optional deviceinfo variable `deviceinfo_usb_network_udc` to specify the UDC that should be used. Also, before this change the script assumed the USB network interface name is "usb0". But other gadget drivers like `g_cdc` can claim USB interfaces before the initramfs script gets around to creating one for USB networking, so the interface might be "usb1" or something else. The configfs gadget itself can provide the actual interface name, so this change makes the script use that.
This commit is contained in:
parent
cf69326222
commit
2a0fab1a77
2 changed files with 26 additions and 15 deletions
|
@ -1,7 +1,7 @@
|
|||
# Maintainer: Oliver Smith <ollieparanoid@postmarketos.org>
|
||||
# Co-Maintainer: Clayton Craft <clayton@craftyguy.net>
|
||||
pkgname=postmarketos-initramfs
|
||||
pkgver=2.4.0
|
||||
pkgver=2.5.0
|
||||
pkgrel=0
|
||||
pkgdesc="Base files for the postmarketOS initramfs / initramfs-extra"
|
||||
url="https://postmarketos.org"
|
||||
|
@ -88,7 +88,7 @@ sha512sums="
|
|||
ab41b45b0613f25a61114ed8c8b92bc53c60838f6e2e0ba18c76e5369b2984e6023a0661887692673aca3f647f268c468a468f6b1ac424cfee609017a89481dd 00-initramfs-base.files
|
||||
8a4adad3785af474b36a09a05f6a3b2c4b4f43aac331a53b903abfa51ea12be1e3d1d807b7a6e66a1346815f3b0044daf8cd62e21e2dc75d2db13ee265a72985 00-initramfs-extra-base.files
|
||||
4bfcb41b2d5ccd577a6203a9479e5bdf056064d20f02f9120f1a074c7c280c0231cf380ed6be7c80733ed4ae101385c14f123a8a41780bbb7d0851387cd9c613 init.sh
|
||||
58ee2b36b858c9c70fabbcb9a12a754afc97e6dfe09ddb7a2ec02c6fb593cc40677ae7049ba5ffda7797cba20e4d35f0d320c5fb4d3072cdbdf172cce6665bb0 init_functions.sh
|
||||
87602909fa9f233385528e41e5395cce076a4d22df858b56b333457815c6978f1b9ca918f0c9ec56f4424ed6c2624d0c6054eaf6e687d60175952cc35c010098 init_functions.sh
|
||||
ba3275a9af788c7c782322a22a0f144d5e50e3498ea6886486a29331f23ae89cd32d500a3635cfa7cab369afba92edc18aeca64ccbf0cd589061cce23d15b46c unudhcpd.conf
|
||||
675e7d5bee39b2df7d322117f8dcaccc274d61beaf4d50ead19bbf2109446d64b1c0aa0c5b4f9846eb6c1c403418f28f6364eff4537ba41120fbfcbc484b7da7 mdev.conf
|
||||
"
|
||||
|
|
|
@ -570,17 +570,19 @@ setup_usb_network_android() {
|
|||
|
||||
setup_usb_configfs_udc() {
|
||||
# Check if there's an USB Device Controller
|
||||
local _udc_dev
|
||||
local _udc_dev="${deviceinfo_usb_network_udc:-}"
|
||||
if [ -z "$_udc_dev" ]; then
|
||||
_udc_dev=$(ls /sys/class/udc)
|
||||
if [ -z "$_udc_dev" ]; then
|
||||
echo " No USB Device Controller available"
|
||||
return
|
||||
fi
|
||||
fi
|
||||
|
||||
# Remove any existing UDC to avoid "write error: Resource busy" when setting UDC again
|
||||
echo "" > /config/usb_gadget/g1/UDC || echo " Couldn't write to clear UDC"
|
||||
# Link the gadget instance to an USB Device Controller. This activates the gadget.
|
||||
# See also: https://github.com/postmarketOS/pmbootstrap/issues/338
|
||||
# See also: https://gitlab.com/postmarketOS/pmbootstrap/issues/338
|
||||
echo "$_udc_dev" > /config/usb_gadget/g1/UDC || echo " Couldn't write new UDC"
|
||||
}
|
||||
|
||||
|
@ -672,17 +674,26 @@ start_unudhcpd() {
|
|||
local host_ip="${unudhcpd_host_ip:-172.16.42.1}"
|
||||
local client_ip="${unudhcpd_client_ip:-172.16.42.2}"
|
||||
echo "Starting unudhcpd with server ip $host_ip, client ip: $client_ip"
|
||||
|
||||
# Get usb interface
|
||||
INTERFACE=""
|
||||
ifconfig rndis0 "$host_ip" 2>/dev/null && INTERFACE=rndis0
|
||||
if [ -z $INTERFACE ]; then
|
||||
ifconfig usb0 "$host_ip" 2>/dev/null && INTERFACE=usb0
|
||||
fi
|
||||
if [ -z $INTERFACE ]; then
|
||||
ifconfig eth0 "$host_ip" 2>/dev/null && INTERFACE=eth0
|
||||
usb_network_function="${deviceinfo_usb_network_function:-ncm.usb0}"
|
||||
usb_network_function_fallback="rndis.usb0"
|
||||
INTERFACE="$(
|
||||
cat "/config/usb_gadget/g1/functions/$usb_network_function/ifname" 2>/dev/null ||
|
||||
cat "/config/usb_gadget/g1/functions/$usb_network_function_fallback/ifname" 2>/dev/null ||
|
||||
echo ''
|
||||
)"
|
||||
if [ -n "$INTERFACE" ]; then
|
||||
ifconfig "$INTERFACE" "$host_ip"
|
||||
elif ifconfig rndis0 "$host_ip" 2>/dev/null; then
|
||||
INTERFACE=rndis0
|
||||
elif ifconfig usb0 "$host_ip" 2>/dev/null; then
|
||||
INTERFACE=usb0
|
||||
elif ifconfig eth0 "$host_ip" 2>/dev/null; then
|
||||
INTERFACE=eth0
|
||||
fi
|
||||
|
||||
if [ -z $INTERFACE ]; then
|
||||
if [ -z "$INTERFACE" ]; then
|
||||
echo " Could not find an interface to run a dhcp server on"
|
||||
echo " Interfaces:"
|
||||
ip link
|
||||
|
|
Loading…
Reference in a new issue