summaryrefslogtreecommitdiff
path: root/recipes-core
diff options
context:
space:
mode:
authorMax Krummenacher <max.krummenacher@toradex.com>2014-07-18 22:22:08 +0200
committerMax Krummenacher <max.krummenacher@toradex.com>2014-08-04 11:12:26 +0200
commita6d0b2afbc22622e5c7efb8a30f2781a84d6c4b1 (patch)
treeb42918cb58772f9666b0fed5b92177330b4bf31b /recipes-core
parent3acb69193fda6457345b5b434b8bcea3d4a7241c (diff)
usb-rndis: add config for g_ether.ko solution
i.MX6 and Vybrid modules use the g_ether driver for RNDIS functionality. This commit uses a systemd service to load the kernel module, configures the new usb0 NIC and starts a dhcp server to serve an IP address to a USB host. The Tegras use the android gadget driver. The configuration remains unchanged.
Diffstat (limited to 'recipes-core')
-rw-r--r--recipes-core/usb-rndis/files/start-rndis.sh8
-rw-r--r--recipes-core/usb-rndis/files/tegra/start-rndis.sh15
-rw-r--r--recipes-core/usb-rndis/files/tegra/udhcpd-usb-rndis.conf115
-rw-r--r--recipes-core/usb-rndis/files/tegra/usb-rndis.rules (renamed from recipes-core/usb-rndis/files/usb-rndis.rules)0
-rw-r--r--recipes-core/usb-rndis/files/udhcpd-usb-rndis.conf2
-rw-r--r--recipes-core/usb-rndis/files/usb-rndis.service9
-rw-r--r--recipes-core/usb-rndis/usb-rndis-systemd.bb25
7 files changed, 161 insertions, 13 deletions
diff --git a/recipes-core/usb-rndis/files/start-rndis.sh b/recipes-core/usb-rndis/files/start-rndis.sh
index a3b4e00..18eecfb 100644
--- a/recipes-core/usb-rndis/files/start-rndis.sh
+++ b/recipes-core/usb-rndis/files/start-rndis.sh
@@ -2,13 +2,13 @@
# configures the usb gadget to provide rnidis,
case "$1" in
start)
- echo 0 > /sys/class/android_usb/android0/enable
- echo rndis > /sys/class/android_usb/android0/functions
- echo 1 > /sys/class/android_usb/android0/enable
+ /sbin/modprobe g_ether dev_addr=00:14:2d:ff:ff:ff host_addr=00:14:2d:ff:ff:fe \
+ sleep 1 && /sbin/ifconfig usb0 192.168.11.2 \
+ && /usr/sbin/udhcpd -S /etc/udhcpd-usb-rndis.conf
;;
stop)
- echo 0 > /sys/class/android_usb/android0/enable
+ /sbin/modprobe -r g_ether
;;
esac
diff --git a/recipes-core/usb-rndis/files/tegra/start-rndis.sh b/recipes-core/usb-rndis/files/tegra/start-rndis.sh
new file mode 100644
index 0000000..a3b4e00
--- /dev/null
+++ b/recipes-core/usb-rndis/files/tegra/start-rndis.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+# configures the usb gadget to provide rnidis,
+case "$1" in
+ start)
+ echo 0 > /sys/class/android_usb/android0/enable
+ echo rndis > /sys/class/android_usb/android0/functions
+ echo 1 > /sys/class/android_usb/android0/enable
+ ;;
+
+ stop)
+ echo 0 > /sys/class/android_usb/android0/enable
+ ;;
+esac
+
+exit 0
diff --git a/recipes-core/usb-rndis/files/tegra/udhcpd-usb-rndis.conf b/recipes-core/usb-rndis/files/tegra/udhcpd-usb-rndis.conf
new file mode 100644
index 0000000..117b940
--- /dev/null
+++ b/recipes-core/usb-rndis/files/tegra/udhcpd-usb-rndis.conf
@@ -0,0 +1,115 @@
+# Sample udhcpd configuration file (/etc/udhcpd.conf)
+# Values shown are defaults
+
+# The start and end of the IP lease block
+start 192.168.11.1
+end 192.168.11.1
+
+# The interface that udhcpd will use
+interface rndis0
+
+# The maximum number of leases (includes addresses reserved
+# by OFFER's, DECLINE's, and ARP conflicts). Will be corrected
+# if it's bigger than IP lease block, but it ok to make it
+# smaller than lease block.
+max_leases 1
+
+# The amount of time that an IP will be reserved (leased to nobody)
+# if a DHCP decline message is received (seconds)
+#decline_time 3600
+
+# The amount of time that an IP will be reserved
+# if an ARP conflict occurs (seconds)
+#conflict_time 3600
+
+# How long an offered address is reserved (seconds)
+#offer_time 60
+
+# If client asks for lease below this value, it will be rounded up
+# to this value (seconds)
+#min_lease 60
+
+# The location of the pid file
+#pidfile /var/run/udhcpd.pid
+
+# The location of the leases file
+#lease_file /var/lib/misc/udhcpd.leases
+
+# The time period at which udhcpd will write out leases file.
+# If this is 0, udhcpd will never automatically write leases file.
+# Specified in seconds.
+#auto_time 7200
+
+# Every time udhcpd writes a leases file, the below script will be called
+#notify_file # default: no script
+#notify_file dumpleases # useful for debugging
+
+# The following are bootp specific options
+# next server to use in bootstrap
+#siaddr 192.168.0.22 # default: 0.0.0.0 (none)
+# tftp server name
+#sname zorak # default: none
+# tftp file to download (e.g. kernel image)
+#boot_file /var/nfs_root # default: none
+
+# Static leases map
+#static_lease 00:60:08:11:CE:4E 192.168.0.54
+#static_lease 00:60:08:11:CE:3E 192.168.0.44
+
+# The remainder of options are DHCP options and can be specified with the
+# keyword 'opt' or 'option'. If an option can take multiple items, such
+# as the dns option, they can be listed on the same line, or multiple
+# lines.
+# Examples:
+#opt dns 192.168.10.2 192.168.10.10
+option subnet 255.255.255.0
+#opt router 192.168.10.2
+#opt wins 192.168.10.10
+#option dns 129.219.13.81 # appended to above DNS servers for a total of 3
+option domain usb_local
+option lease 864000 # default: 10 days
+#option msstaticroutes 10.0.0.0/8 10.127.0.1 # single static route
+#option staticroutes 10.0.0.0/8 10.127.0.1, 10.11.12.0/24 10.11.12.1
+# Arbitrary option in hex form:
+#option 0x08 01020304 # option 8: "cookie server IP addr: 1.2.3.4"
+
+# Currently supported options (for more info, see options.c):
+#opt lease NUM
+#opt subnet IP
+#opt broadcast IP
+#opt router IP_LIST
+#opt ipttl NUM
+#opt mtu NUM
+#opt hostname STRING # client's hostname
+#opt domain STRING # client's domain suffix
+#opt search STRING_LIST # search domains
+#opt nisdomain STRING
+#opt timezone NUM # (localtime - UTC_time) in seconds. signed
+#opt tftp STRING # tftp server name
+#opt bootfile STRING # tftp file to download (e.g. kernel image)
+#opt bootsize NUM # size of that file
+#opt rootpath STRING # (NFS) path to mount as root fs
+#opt wpad STRING
+#opt serverid IP # default: server's IP
+#opt message STRING # error message (udhcpd sends it on success too)
+#opt vlanid NUM # 802.1P VLAN ID
+#opt vlanpriority NUM # 802.1Q VLAN priority
+# Options specifying server(s)
+#opt dns IP_LIST
+#opt wins IP_LIST
+#opt nissrv IP_LIST
+#opt ntpsrv IP_LIST
+#opt lprsrv IP_LIST
+#opt swapsrv IP
+# Options specifying routes
+#opt routes IP_PAIR_LIST
+#opt staticroutes STATIC_ROUTES # RFC 3442 classless static route option
+#opt msstaticroutes STATIC_ROUTES # same, using MS option number
+# Obsolete options, no longer supported
+#opt logsrv IP_LIST # 704/UDP log server (not syslog!)
+#opt namesrv IP_LIST # IEN 116 name server, obsolete (August 1979!!!)
+#opt cookiesrv IP_LIST # RFC 865 "quote of the day" server, rarely (never?) used
+#opt timesrv IP_LIST # RFC 868 time server, rarely (never?) used
+# TODO: in development
+#opt userclass STRING # RFC 3004. set of LASCII strings. "I am a printer" etc
+#opt sipserv STRING LIST # RFC 3361. flag byte, then: 0: domain names, 1: IP addrs \ No newline at end of file
diff --git a/recipes-core/usb-rndis/files/usb-rndis.rules b/recipes-core/usb-rndis/files/tegra/usb-rndis.rules
index 938e46d..938e46d 100644
--- a/recipes-core/usb-rndis/files/usb-rndis.rules
+++ b/recipes-core/usb-rndis/files/tegra/usb-rndis.rules
diff --git a/recipes-core/usb-rndis/files/udhcpd-usb-rndis.conf b/recipes-core/usb-rndis/files/udhcpd-usb-rndis.conf
index 117b940..acb14b2 100644
--- a/recipes-core/usb-rndis/files/udhcpd-usb-rndis.conf
+++ b/recipes-core/usb-rndis/files/udhcpd-usb-rndis.conf
@@ -6,7 +6,7 @@ start 192.168.11.1
end 192.168.11.1
# The interface that udhcpd will use
-interface rndis0
+interface usb0
# The maximum number of leases (includes addresses reserved
# by OFFER's, DECLINE's, and ARP conflicts). Will be corrected
diff --git a/recipes-core/usb-rndis/files/usb-rndis.service b/recipes-core/usb-rndis/files/usb-rndis.service
index 6592ad7..d586abc 100644
--- a/recipes-core/usb-rndis/files/usb-rndis.service
+++ b/recipes-core/usb-rndis/files/usb-rndis.service
@@ -1,8 +1,9 @@
-#also consult /etc/udev/ruldes.d/usb-rndis.rules
+#for the tegras (Android Gadget) also consult /etc/udev/ruldes.d/usb-rndis.rules
[Unit]
-Description=Set the USB gadget to RNDIS
-Documentation=http://permalink.gmane.org/gmane.linux.usb.general/56244
+Description=Load/Configure the kernel driver providing the RNDIS gadget
+Documentation=http://www.linux-usb.org/gadget/ http://permalink.gmane.org/gmane.linux.usb.general/56244
DefaultDependencies=no
+After=basic.target
[Service]
Type=oneshot
@@ -11,4 +12,4 @@ ExecStart=/usr/bin/start-rndis.sh start
ExecStop=/usr/bin/start-rndis.sh stop
[Install]
-WantedBy=basic.target
+WantedBy=multi-user.target
diff --git a/recipes-core/usb-rndis/usb-rndis-systemd.bb b/recipes-core/usb-rndis/usb-rndis-systemd.bb
index 5e9c741..63cc675 100644
--- a/recipes-core/usb-rndis/usb-rndis-systemd.bb
+++ b/recipes-core/usb-rndis/usb-rndis-systemd.bb
@@ -8,28 +8,45 @@ LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=4d92cd373abda3937c2bc47fbc49d
PR = "r1"
+# Tegra Kernels:
# The kernel provides with CONFIG_USB_G_ANDROID a composite gadget driver among other with RNDIS functionality.
+# Others:
+# The kernel provides with CONFIG_USB_ETH_RNDIS a USB gadget driver which provides RNDIS functionality.
+
# This package contains systemd files to configure RNDIS at startup, configures a fix IP localy and provides a dhcp server on the new interface.
# Local IP is 192.168.11.2, remote IP is 192.168.11.1
inherit allarch systemd
-SRC_URI = " \
+SRC_URI_COMMON = " \
file://start-rndis.sh \
file://usb-rndis.service \
+ file://udhcpd-usb-rndis.conf \
+"
+
+SRC_URI = " \
+ ${SRC_URI_COMMON} \
+"
+
+SRC_URI_tegra = " \
+ ${SRC_URI_COMMON} \
file://usb-rndis.rules \
- file://udhcpd-usb-rndis.conf "
+"
do_install() {
- install -d ${D}/${sysconfdir}/udev/rules.d ${D}/${bindir}
+ install -d ${D}/${sysconfdir} ${D}/${bindir}
install -m 0755 ${WORKDIR}/start-rndis.sh ${D}/${bindir}/
- install -m 0644 ${WORKDIR}/usb-rndis.rules ${D}/${sysconfdir}/udev/rules.d/
install -m 0644 ${WORKDIR}/udhcpd-usb-rndis.conf ${D}/${sysconfdir}/
install -d ${D}${systemd_unitdir}/system/
install -m 0644 ${WORKDIR}/usb-rndis.service ${D}${systemd_unitdir}/system
}
+do_install_append_tegra() {
+ install -d ${D}/${sysconfdir}/udev/rules.d
+ install -m 0644 ${WORKDIR}/usb-rndis.rules ${D}/${sysconfdir}/udev/rules.d
+}
+
NATIVE_SYSTEMD_SUPPORT = "1"
SYSTEMD_PACKAGES = "${PN}"
SYSTEMD_SERVICE_${PN} = "usb-rndis.service"