Subject: [PATCH] Allow RTNet to be builtin kernel Makefile is changed because when builtin, the modules get loaded in the link order. In the previous version protocols would get loaded before stackmgr which obviously fails.
Signed-off-by: François LEGAL <[email protected]> --- This has been tested on Zynq 7000 Hardware (microzed board) with MACB/GEM RTNet driver, with linux 4.4.189 vanilla. Kernel boots up correctly, and the following messages get printed on the console during the boot : [ 13.875451] sdhci-pltfm: SDHCI platform and OF driver helper [ 13.881627] sdhci-arasan e0100000.sdhci: No vmmc regulator found [ 13.887581] sdhci-arasan e0100000.sdhci: No vqmmc regulator found [ 13.927585] mmc0: SDHCI controller on e0100000.sdhci [e0100000.sdhci] using ADMA [ 13.945085] fpga_manager fpga0: Xilinx Zynq FPGA Manager registered [ 13.951896] [ 13.951896] *** RTnet for Xenomai v3.0.9 *** [ 13.951896] [ 13.959156] RTnet: initialising real-time networking [ 13.964928] RTmac/TDMA: init time division multiple access control mechanism [ 13.972074] RTmac: init realtime media access control [ 13.977064] RTcfg: init real-time configuration distribution protocol [ 13.983752] initializing loopback... [ 13.987295] RTnet: registered rtlo [ 13.993238] RTnet: registered rteth0 [ 13.996832] libphy: MACB_mii_bus: probed [ 14.001140] rt_macb: rteth0: Cadence GEM at 0xe000b000 irq 26 (00:0a:35:00:01:22) [ 14.008630] rt_macb: rteth0: attached PHY driver [Marvell 88E1510] (mii_bus:phy_addr=e000b000.ethernet-ffffffff:00, irq=-1) [ 14.019845] RTcap: real-time capturing interface [ 14.026562] RTproxy attached to rteth0 [ 14.031129] rtnetproxy installed as "rtproxy" [ 14.035693] NET: Registered protocol family 26 [ 14.040309] NET: Registered protocol family 17 [ 14.044686] can: controller area network core (rev 20120528 abi 9) [ 14.050957] NET: Registered protocol family 29 [ 14.055329] can: raw protocol (rev 20120528) [ 14.059683] can: broadcast manager protocol (rev 20120528 t) kernel/drivers/net/Kconfig | 1 - kernel/drivers/net/addons/Kconfig | 4 ++-- kernel/drivers/net/stack/Makefile | 16 ++++++++-------- utils/net/rtnet.in | 144 +++++++++++++++++++++++++++++++++++------------------ 4 files changed, 105 insertions(+), 60 deletions(-) diff --git a/kernel/drivers/net/Kconfig b/kernel/drivers/net/Kconfig index ac3bced..49d2402 100644 --- a/kernel/drivers/net/Kconfig +++ b/kernel/drivers/net/Kconfig @@ -1,7 +1,6 @@ menu "RTnet" config XENO_DRIVERS_NET - depends on m select NET tristate "RTnet, TCP/IP socket interface" diff --git a/kernel/drivers/net/addons/Kconfig b/kernel/drivers/net/addons/Kconfig index baa6cbc..616ed40 100644 --- a/kernel/drivers/net/addons/Kconfig +++ b/kernel/drivers/net/addons/Kconfig @@ -2,7 +2,7 @@ menu "Add-Ons" depends on XENO_DRIVERS_NET config XENO_DRIVERS_NET_ADDON_RTCAP - depends on XENO_DRIVERS_NET && m + depends on XENO_DRIVERS_NET select ETHERNET tristate "Real-Time Capturing Support" default n @@ -18,7 +18,7 @@ config XENO_DRIVERS_NET_ADDON_RTCAP For further information see Documentation/README.rtcap. config XENO_DRIVERS_NET_ADDON_PROXY - depends on XENO_DRIVERS_NET_RTIPV4 && m + depends on XENO_DRIVERS_NET_RTIPV4 select ETHERNET tristate "IP protocol proxy for Linux" default n diff --git a/kernel/drivers/net/stack/Makefile b/kernel/drivers/net/stack/Makefile index d055dc2..f8db6fa 100644 --- a/kernel/drivers/net/stack/Makefile +++ b/kernel/drivers/net/stack/Makefile @@ -1,13 +1,5 @@ ccflags-y += -Idrivers/xenomai/net/stack/include -Ikernel/ -obj-$(CONFIG_XENO_DRIVERS_NET_RTIPV4) += ipv4/ - -obj-$(CONFIG_XENO_DRIVERS_NET_RTPACKET) += packet/ - -obj-$(CONFIG_XENO_DRIVERS_NET_RTMAC) += rtmac/ - -obj-$(CONFIG_XENO_DRIVERS_NET_RTCFG) += rtcfg/ - obj-$(CONFIG_XENO_DRIVERS_NET) += rtnet.o rtnet-y := \ @@ -23,4 +15,12 @@ rtnet-y := \ stack_mgr.o \ eth.o +obj-$(CONFIG_XENO_DRIVERS_NET_RTIPV4) += ipv4/ + +obj-$(CONFIG_XENO_DRIVERS_NET_RTPACKET) += packet/ + +obj-$(CONFIG_XENO_DRIVERS_NET_RTMAC) += rtmac/ + +obj-$(CONFIG_XENO_DRIVERS_NET_RTCFG) += rtcfg/ + rtnet-$(CONFIG_XENO_DRIVERS_NET_RTWLAN) += rtwlan.o diff --git a/utils/net/rtnet.in b/utils/net/rtnet.in index f81a7bb..fa12a03 100644 --- a/utils/net/rtnet.in +++ b/utils/net/rtnet.in @@ -31,44 +31,68 @@ EOF } init_rtnet() { - modprobe rtnet >/dev/null || exit 1 - modprobe rtipv4 >/dev/null || exit 1 - modprobe $RT_DRIVER $RT_DRIVER_OPTIONS >/dev/null || exit 1 - - for dev in $REBIND_RT_NICS; do - if [ -d /sys/bus/pci/devices/$dev/driver ]; then - echo $dev > /sys/bus/pci/devices/$dev/driver/unbind - fi - echo $dev > /sys/bus/pci/drivers/$RT_DRIVER/bind - done + if [ ! -d /proc/rtnet ]; then + modprobe rtnet >/dev/null || exit 1 + fi + if [ ! -d /proc/rtnet/ipv4 ]; then + modprobe rtipv4 >/dev/null || exit 1 + fi for PROTOCOL in $RT_PROTOCOLS; do - modprobe rt$PROTOCOL >/dev/null || exit 1 + if [ ! -d /sys/modules/rt$PROTOCOL ]; then + if [ "$PROTOCOL" = "packet" ]; then + modprobe rt$PROTOCOL >/dev/null + else + modprobe rt$PROTOCOL >/dev/null || exit 1 + fi + fi done + $(cat /proc/rtnet/devices | grep -q rteth0) + if [ $? -eq 1 ]; then + modprobe $RT_DRIVER $RT_DRIVER_OPTIONS >/dev/null || exit 1 + + for dev in $REBIND_RT_NICS; do + if [ -d /sys/bus/pci/devices/$dev/driver ]; then + echo $dev > /sys/bus/pci/devices/$dev/driver/unbind + fi + echo $dev > /sys/bus/pci/drivers/$RT_DRIVER/bind + done + fi + if [ $RT_LOOPBACK = "yes" ]; then - modprobe rt_loopback >/dev/null || exit 1 + $(cat /proc/rtnet/devices | grep -q rtlo) + if [ $? -eq 1 ]; then + + modprobe rt_loopback >/dev/null || exit 1 + fi fi - if [ $RTCAP = "yes" ]; then - modprobe rtcap >/dev/null || exit 1 + if [ $RTCAP = "yes" -a ! -d /sys/modules/rtcap ]; then + modprobe rtcap >/dev/null || exit 1 fi if [ $RT_LOOPBACK = "yes" ]; then - $RTIFCONFIG rtlo up 127.0.0.1 + $RTIFCONFIG rtlo up 127.0.0.1 fi if [ $RTCAP = "yes" ]; then - ifconfig rteth0 up - ifconfig rteth0-mac up - if [ $RT_LOOPBACK = "yes" ]; then - ifconfig rtlo up - fi + ifconfig rteth0 up + ifconfig rteth0-mac up + if [ $RT_LOOPBACK = "yes" ]; then + ifconfig rtlo up + fi fi - modprobe rtcfg >/dev/null - modprobe rtmac >/dev/null - modprobe tdma >/dev/null + if [ ! -d /proc/rtnet/rtcfg ]; then + modprobe rtcfg >/dev/null + fi + if [ ! -d /proc/rtnet/rtmac ]; then + modprobe rtmac >/dev/null + fi + if [ ! -f /proc/tdma ]; then + modprobe tdma >/dev/null + fi } submit_cfg() { @@ -336,34 +360,56 @@ case "$1" in ;; capture) - modprobe rtnet >/dev/null || exit 1 - modprobe $RT_DRIVER $RT_DRIVER_OPTIONS >/dev/null || exit 1 - modprobe rtcap >/dev/null || exit 1 - $RTIFCONFIG rteth0 up promisc - ifconfig rteth0 up - ifconfig rteth0-mac up - ;; + if [ ! -d /proc/rtnet ]; then + modprobe rtnet >/dev/null || exit 1 + fi + $(cat /proc/rtnet/devices | grep -q rteth0) + if [ $? -eq 1 ]; then + modprobe $RT_DRIVER $RT_DRIVER_OPTIONS >/dev/null || exit 1 + fi + if [ ! -d /sys/modules/rtcap ]; then + modprobe rtcap >/dev/null || exit 1 + fi + $RTIFCONFIG rteth0 up promisc + ifconfig rteth0 up + ifconfig rteth0-mac up + ;; loopback) - modprobe rtnet >/dev/null || exit 1 - modprobe rtipv4 >/dev/null || exit 1 - - for PROTOCOL in $RT_PROTOCOLS; do - modprobe rt$PROTOCOL >/dev/null || exit 1 - done - - modprobe rt_loopback >/dev/null || exit 1 - - if [ $RTCAP = "yes" ]; then - modprobe rtcap >/dev/null || exit 1 - fi - - $RTIFCONFIG rtlo up 127.0.0.1 - - if [ $RTCAP = "yes" ]; then - ifconfig rtlo up - fi - ;; + if [ ! -d /proc/rtnet ]; then + modprobe rtnet >/dev/null || exit 1 + fi + if [ ! -d /proc/rtnet/ipv4 ]; then + modprobe rtipv4 >/dev/null || exit 1 + fi + for PROTOCOL in $RT_PROTOCOLS; do + if [ ! -d /sys/modules/rt$PROTOCOL ]; then + if [ "$PROTOCOL" = "packet" ]; then + modprobe rt$PROTOCOL >/dev/null + else + modprobe rt$PROTOCOL >/dev/null || exit 1 + fi + fi + done + + if [ $RT_LOOPBACK = "yes" ]; then + $(cat /proc/rtnet/devices | grep -q rtlo) + if [ $? -eq 1 ]; then + + modprobe rt_loopback >/dev/null || exit 1 + fi + fi + + if [ $RTCAP = "yes" -a ! -d /sys/modules/rtcap ]; then + modprobe rtcap >/dev/null || exit 1 + fi + + $RTIFCONFIG rtlo up 127.0.0.1 + + if [ $RTCAP = "yes" ]; then + ifconfig rtlo up + fi + ;; *) usage -- 2.1.4
