From 8e1de4a8a2b0ee50edeca3d72585f1d754a2602a Mon Sep 17 00:00:00 2001 From: Stefan Agner Date: Thu, 2 Feb 2017 17:36:05 -0800 Subject: libusbgx: add RNDIS configuration and systemd service for import Update libusbgx to a version with OS Descriptor support for better interoperability with Windows operating systems. Add configuration using RNDIS with Toradex vendor id. Read serial number and product id from the device tree to configure the USB gadget device. Signed-off-by: Stefan Agner Acked-by: Max Krummenacher --- .../libusbgx/files/apalis-imx6/g1.schema | 68 ++++++++++++++++++++++ .../libusbgx/files/colibri-imx6/g1.schema | 68 ++++++++++++++++++++++ .../libusbgx/files/colibri-imx7/g1.schema | 68 ++++++++++++++++++++++ .../libusbgx/files/colibri-vf/g1.schema | 68 ++++++++++++++++++++++ recipes-support/libusbgx/files/usbg.service | 17 ++++++ recipes-support/libusbgx/libusbgx_git.bb | 24 ++++++-- 6 files changed, 309 insertions(+), 4 deletions(-) create mode 100644 recipes-support/libusbgx/files/apalis-imx6/g1.schema create mode 100644 recipes-support/libusbgx/files/colibri-imx6/g1.schema create mode 100644 recipes-support/libusbgx/files/colibri-imx7/g1.schema create mode 100644 recipes-support/libusbgx/files/colibri-vf/g1.schema create mode 100644 recipes-support/libusbgx/files/usbg.service diff --git a/recipes-support/libusbgx/files/apalis-imx6/g1.schema b/recipes-support/libusbgx/files/apalis-imx6/g1.schema new file mode 100644 index 0000000..c09d478 --- /dev/null +++ b/recipes-support/libusbgx/files/apalis-imx6/g1.schema @@ -0,0 +1,68 @@ +attrs : +{ + bcdUSB = 0x200; + bDeviceClass = 0x2; + bDeviceSubClass = 0x0; + bDeviceProtocol = 0x0; + bMaxPacketSize0 = 0x40; + idVendor = 0x1D6B; + idProduct = 0x104; + bcdDevice = 0x401; +}; +os_descs : +{ + config = "c_1"; + use = 1; + qw_sign = "MSFT100"; + b_vendor_code = 0xCD; +}; +strings = ( + { + lang = 0x409; + manufacturer = "Toradex"; + product = "Toradex Apalis iMX6"; + serialnumber = "00000000"; + } ); +functions : +{ + rndis_usb0 : + { + instance = "usb0"; + type = "rndis"; + attrs : + { + dev_addr = "00:14:2d:ff:ff:ff"; + host_addr = "00:14:2d:ff:ff:fe"; + qmult = 5; + }; + os_descs = ( + { + interface = "rndis"; + compatible_id = "RNDIS"; + sub_compatible_id = "5162001"; + } ); + }; +}; +configs : +{ + c_1 : + { + id = 1; + name = "c"; + attrs : + { + bmAttributes = 0xC0; + bMaxPower = 0x1; + }; + strings = ( + { + lang = 0x409; + configuration = "RNDIS"; + } ); + functions = ( + { + name = "rndis.usb0"; + function = "rndis_usb0"; + } ); + }; +}; diff --git a/recipes-support/libusbgx/files/colibri-imx6/g1.schema b/recipes-support/libusbgx/files/colibri-imx6/g1.schema new file mode 100644 index 0000000..eda33be --- /dev/null +++ b/recipes-support/libusbgx/files/colibri-imx6/g1.schema @@ -0,0 +1,68 @@ +attrs : +{ + bcdUSB = 0x200; + bDeviceClass = 0x2; + bDeviceSubClass = 0x0; + bDeviceProtocol = 0x0; + bMaxPacketSize0 = 0x40; + idVendor = 0x1D6B; + idProduct = 0x104; + bcdDevice = 0x401; +}; +os_descs : +{ + config = "c_1"; + use = 1; + qw_sign = "MSFT100"; + b_vendor_code = 0xCD; +}; +strings = ( + { + lang = 0x409; + manufacturer = "Toradex"; + product = "Toradex Colibri iMX6"; + serialnumber = "00000000"; + } ); +functions : +{ + rndis_usb0 : + { + instance = "usb0"; + type = "rndis"; + attrs : + { + dev_addr = "00:14:2d:ff:ff:ff"; + host_addr = "00:14:2d:ff:ff:fe"; + qmult = 5; + }; + os_descs = ( + { + interface = "rndis"; + compatible_id = "RNDIS"; + sub_compatible_id = "5162001"; + } ); + }; +}; +configs : +{ + c_1 : + { + id = 1; + name = "c"; + attrs : + { + bmAttributes = 0xC0; + bMaxPower = 0x1; + }; + strings = ( + { + lang = 0x409; + configuration = "RNDIS"; + } ); + functions = ( + { + name = "rndis.usb0"; + function = "rndis_usb0"; + } ); + }; +}; diff --git a/recipes-support/libusbgx/files/colibri-imx7/g1.schema b/recipes-support/libusbgx/files/colibri-imx7/g1.schema new file mode 100644 index 0000000..cbfa505 --- /dev/null +++ b/recipes-support/libusbgx/files/colibri-imx7/g1.schema @@ -0,0 +1,68 @@ +attrs : +{ + bcdUSB = 0x200; + bDeviceClass = 0x2; + bDeviceSubClass = 0x0; + bDeviceProtocol = 0x0; + bMaxPacketSize0 = 0x40; + idVendor = 0x1D6B; + idProduct = 0x104; + bcdDevice = 0x401; +}; +os_descs : +{ + config = "c_1"; + use = 1; + qw_sign = "MSFT100"; + b_vendor_code = 0xCD; +}; +strings = ( + { + lang = 0x409; + manufacturer = "Toradex"; + product = "Toradex Colibri iMX7"; + serialnumber = "00000000"; + } ); +functions : +{ + rndis_usb0 : + { + instance = "usb0"; + type = "rndis"; + attrs : + { + dev_addr = "00:14:2d:ff:ff:ff"; + host_addr = "00:14:2d:ff:ff:fe"; + qmult = 5; + }; + os_descs = ( + { + interface = "rndis"; + compatible_id = "RNDIS"; + sub_compatible_id = "5162001"; + } ); + }; +}; +configs : +{ + c_1 : + { + id = 1; + name = "c"; + attrs : + { + bmAttributes = 0xC0; + bMaxPower = 0x1; + }; + strings = ( + { + lang = 0x409; + configuration = "RNDIS"; + } ); + functions = ( + { + name = "rndis.usb0"; + function = "rndis_usb0"; + } ); + }; +}; diff --git a/recipes-support/libusbgx/files/colibri-vf/g1.schema b/recipes-support/libusbgx/files/colibri-vf/g1.schema new file mode 100644 index 0000000..8f3cff8 --- /dev/null +++ b/recipes-support/libusbgx/files/colibri-vf/g1.schema @@ -0,0 +1,68 @@ +attrs : +{ + bcdUSB = 0x200; + bDeviceClass = 0x2; + bDeviceSubClass = 0x0; + bDeviceProtocol = 0x0; + bMaxPacketSize0 = 0x40; + idVendor = 0x1D6B; + idProduct = 0x104; + bcdDevice = 0x401; +}; +os_descs : +{ + config = "c_1"; + use = 1; + qw_sign = "MSFT100"; + b_vendor_code = 0xCD; +}; +strings = ( + { + lang = 0x409; + manufacturer = "Toradex"; + product = "Toradex Colibri VF50/VF61"; + serialnumber = "00000000"; + } ); +functions : +{ + rndis_usb0 : + { + instance = "usb0"; + type = "rndis"; + attrs : + { + dev_addr = "00:14:2d:ff:ff:ff"; + host_addr = "00:14:2d:ff:ff:fe"; + qmult = 5; + }; + os_descs = ( + { + interface = "rndis"; + compatible_id = "RNDIS"; + sub_compatible_id = "5162001"; + } ); + }; +}; +configs : +{ + c_1 : + { + id = 1; + name = "c"; + attrs : + { + bmAttributes = 0xC0; + bMaxPower = 0x1; + }; + strings = ( + { + lang = 0x409; + configuration = "RNDIS"; + } ); + functions = ( + { + name = "rndis.usb0"; + function = "rndis_usb0"; + } ); + }; +}; diff --git a/recipes-support/libusbgx/files/usbg.service b/recipes-support/libusbgx/files/usbg.service new file mode 100644 index 0000000..a4e6f80 --- /dev/null +++ b/recipes-support/libusbgx/files/usbg.service @@ -0,0 +1,17 @@ +[Unit] +Description=Load default USB gadget schema g1.schema +ConditionPathExists=/etc/usbg/g1.schema +Before=systemd-networkd.service + +[Service] +Type=oneshot +ExecStart=/usr/bin/gadget-import g1 /etc/usbg/g1.schema +ExecStartPost=/bin/sh -c '/bin/echo $((0x4000+$(cat /proc/device-tree/toradex,product-id))) > \ + /sys/kernel/config/usb_gadget/g1/idProduct' +ExecStartPost=/bin/sh -c '/bin/cat /proc/device-tree/serial-number > \ + /sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber' +ExecStartPost=/bin/sh -c '/bin/echo `ls /sys/class/udc/` > \ + /sys/kernel/config/usb_gadget/g1/UDC' + +[Install] +WantedBy=multi-user.target diff --git a/recipes-support/libusbgx/libusbgx_git.bb b/recipes-support/libusbgx/libusbgx_git.bb index 6c85b20..3e81b39 100644 --- a/recipes-support/libusbgx/libusbgx_git.bb +++ b/recipes-support/libusbgx/libusbgx_git.bb @@ -4,14 +4,30 @@ LICENSE = "GPLv2 & LGPLv2.1" LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ file://COPYING.LGPL;md5=4fbd65380cdd255951079008b364516c" -inherit autotools pkgconfig +inherit autotools pkgconfig systemd DEPENDS = "libconfig" +EXTRA_OECONF = "--includedir=${includedir}/usbgx" + PV = "0.1.0+git${SRCPV}" -SRCREV = "9e136571aa4b82fe50028d82ebf14541a7c6245f" -SRC_URI = "git://github.com/toradex/libusbgx.git \ - " +SRCREV = "566993a7647ed5cb36098f27084fd2d5d1f0f017" +SRCBRANCH = "os_descriptors" +SRC_URI = "git://github.com/toradex/libusbgx.git;branch=${SRCBRANCH} \ + file://usbg.service \ + file://g1.schema \ +" S = "${WORKDIR}/git" +do_install_append () { + install -d ${D}${systemd_unitdir}/system/ + install -m 0644 ${WORKDIR}/usbg.service ${D}${systemd_unitdir}/system + + install -d ${D}${sysconfdir}/usbg/ + install -m 0644 ${WORKDIR}/g1.schema ${D}${sysconfdir}/usbg/g1.schema +} + +NATIVE_SYSTEMD_SUPPORT = "1" +SYSTEMD_PACKAGES = "${PN}" +SYSTEMD_SERVICE_${PN} = "usbg.service" -- cgit v1.2.3