Internet bonding possible in jetson nano ?

I need to create a internet bonding using two 4g dongle with interface wwan0 and wwan1. I followed many tutorial but nothing helped. So can anyone know how to do it in jetson nano. Because im new to this board. i installed ubuntu os with jetpack using official jetson nano page.

I don’t have experience on 4G dongle. Could you share your current status and what have you tried?

After google search i found that have to recompile the kernel with bonding driver.I followed this one for recompile kernel for bonding driver. so,i followed the link:https://devtalk.nvidia.com/default/topic/1047880/jetson-tx1/mount-network-folder-samba-cifs/post/5322451/#5322451. But , i stuck in “make -j4 O=$TEGRA_KERNEL_OUT Image” command with the below error.

root@jetson5-desktop:/usr/local/src/sources/kernel/kernel-4.9# make -j4 O=$TEGRA_KERNEL_OUT Image
make[1]: Entering directory '/usr/local/src/build'
  GEN     ./Makefile
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
scripts/kconfig/conf  --silentoldconfig Kconfig
  CHK     include/config/kernel.release
  GEN     ./Makefile
  WRAP    arch/arm64/include/generated/asm/bugs.h
  WRAP    arch/arm64/include/generated/asm/clkdev.h
  WRAP    arch/arm64/include/generated/asm/cputime.h
  WRAP    arch/arm64/include/generated/asm/delay.h
  WRAP    arch/arm64/include/generated/asm/dma.h
  CHK     include/generated/uapi/linux/version.h
  WRAP    arch/arm64/include/generated/asm/div64.h
  WRAP    arch/arm64/include/generated/asm/dma-contiguous.h
  UPD     include/generated/uapi/linux/version.h
  WRAP    arch/arm64/include/generated/asm/early_ioremap.h
  WRAP    arch/arm64/include/generated/asm/emergency-restart.h
  WRAP    arch/arm64/include/generated/asm/errno.h
  WRAP    arch/arm64/include/generated/asm/hw_irq.h
  WRAP    arch/arm64/include/generated/asm/ioctl.h
  WRAP    arch/arm64/include/generated/asm/ioctls.h
  WRAP    arch/arm64/include/generated/asm/ipcbuf.h
  WRAP    arch/arm64/include/generated/asm/irq_regs.h
  WRAP    arch/arm64/include/generated/asm/kmap_types.h
  WRAP    arch/arm64/include/generated/asm/kvm_para.h
  WRAP    arch/arm64/include/generated/asm/kdebug.h
  WRAP    arch/arm64/include/generated/asm/local64.h
  WRAP    arch/arm64/include/generated/asm/local.h
  WRAP    arch/arm64/include/generated/asm/mm-arch-hooks.h
  WRAP    arch/arm64/include/generated/asm/mman.h
  WRAP    arch/arm64/include/generated/asm/msgbuf.h
  WRAP    arch/arm64/include/generated/asm/msi.h
  WRAP    arch/arm64/include/generated/asm/mcs_spinlock.h
  HOSTCC  scripts/basic/bin2c
  WRAP    arch/arm64/include/generated/asm/mutex.h
  WRAP    arch/arm64/include/generated/asm/preempt.h
  WRAP    arch/arm64/include/generated/asm/resource.h
  WRAP    arch/arm64/include/generated/asm/rwsem.h
  WRAP    arch/arm64/include/generated/asm/segment.h
  WRAP    arch/arm64/include/generated/asm/sembuf.h
  WRAP    arch/arm64/include/generated/asm/serial.h
  WRAP    arch/arm64/include/generated/asm/shmbuf.h
  WRAP    arch/arm64/include/generated/asm/simd.h
  WRAP    arch/arm64/include/generated/asm/poll.h
  WRAP    arch/arm64/include/generated/asm/sizes.h
  WRAP    arch/arm64/include/generated/asm/socket.h
  WRAP    arch/arm64/include/generated/asm/swab.h
  WRAP    arch/arm64/include/generated/asm/switch_to.h
  WRAP    arch/arm64/include/generated/asm/termbits.h
  WRAP    arch/arm64/include/generated/asm/termios.h
  WRAP    arch/arm64/include/generated/asm/sockios.h
  WRAP    arch/arm64/include/generated/asm/trace_clock.h
  WRAP    arch/arm64/include/generated/asm/unaligned.h
  WRAP    arch/arm64/include/generated/asm/types.h
  WRAP    arch/arm64/include/generated/asm/vga.h
  WRAP    arch/arm64/include/generated/asm/xor.h
  WRAP    arch/arm64/include/generated/asm/user.h
  WRAP    arch/arm64/include/generated/uapi/asm/kvm_para.h
  HOSTCC  scripts/genksyms/genksyms.o
  HOSTCC  scripts/dtc/dtc.o
  CC      scripts/mod/empty.o
  HOSTCC  scripts/mod/mk_elfconfig
  CC      scripts/mod/devicetable-offsets.s
  MKELF   scripts/mod/elfconfig.h
  CHK     scripts/mod/devicetable-offsets.h
  UPD     scripts/mod/devicetable-offsets.h
  HOSTCC  scripts/dtc/flattree.o
  HOSTCC  scripts/mod/sumversion.o
  UPD     include/config/kernel.release
  SHIPPED scripts/genksyms/parse.tab.c
  HOSTCC  scripts/dtc/fstree.o
  SHIPPED scripts/genksyms/lex.lex.c
  HOSTCC  scripts/kallsyms
  SHIPPED scripts/genksyms/keywords.hash.c
  SHIPPED scripts/genksyms/parse.tab.h
  HOSTCC  scripts/genksyms/parse.tab.o
  HOSTCC  scripts/mod/modpost.o
  HOSTCC  scripts/dtc/data.o
  HOSTCC  scripts/genksyms/lex.lex.o
  HOSTCC  scripts/mod/file2alias.o
  HOSTCC  scripts/dtc/livetree.o
  HOSTCC  scripts/dtc/treesource.o
  HOSTCC  scripts/dtc/srcpos.o
  HOSTLD  scripts/mod/modpost
  HOSTCC  scripts/dtc/checks.o
  HOSTLD  scripts/genksyms/genksyms
  HOSTCC  scripts/pnmtologo
  HOSTCC  scripts/conmakehash
  HOSTCC  scripts/dtc/util.o
  Using /usr/local/src/sources/kernel/kernel-4.9 as source for kernel
  /usr/local/src/sources/kernel/kernel-4.9 is not clean, please run 'make mrproper'
  in the '/usr/local/src/sources/kernel/kernel-4.9' directory.
/usr/local/src/sources/kernel/kernel-4.9/Makefile:1129: recipe for target 'prepare3' failed
make[1]: *** [prepare3] Error 1
make[1]: *** Waiting for unfinished jobs....
  SHIPPED scripts/dtc/dtc-lexer.lex.c
  SHIPPED scripts/dtc/dtc-parser.tab.h
  SHIPPED scripts/dtc/dtc-parser.tab.c
  HOSTCC  scripts/dtc/dtc-lexer.lex.o
  HOSTCC  scripts/dtc/dtc-parser.tab.o
  HOSTCC  scripts/recordmcount
  HOSTCC  scripts/sortextable
  HOSTLD  scripts/dtc/dtc
make[1]: *** wait: No child processes.  Stop.
Makefile:171: recipe for target 'sub-make' failed
make: *** [sub-make] Error 2

The way to build kernel is in the L4T document. Please refer to L4T document for the steps.

I followed this https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fkernel_custom.html%23wwpID0ESHA l4t documentation.

root@jetson5-desktop:~# cd /usr/src/linux-headers-4.9.140-tegra-ubuntu18.04_aarch64/kernel-4.9/drivers/net/bonding/

root@jetson5-desktop:/usr/src/linux-headers-4.9.140-tegra-ubuntu18.04_aarch64/kernel-4.9/drivers/net/bonding# ls

Makefile

root@jetson5-desktop:/usr/src/linux-headers-4.9.140-tegra-ubuntu18.04_aarch64/kernel-4.9/drivers/net/bonding# TEGRA_KERNEL_OUT=/lib/modules/4.9.140-tegra/build

root@jetson5-desktop:/usr/src/linux-headers-4.9.140-tegra-ubuntu18.04_aarch64/kernel-4.9/drivers/net/bonding# make ARCH=arm64 -C $TEGRA_KERNEL_OUT M=$(pwd)

make: Entering directory '/usr/src/linux-headers-4.9.140-tegra-ubuntu18.04_aarch64/kernel-4.9'
  LD      /usr/src/linux-headers-4.9.140-tegra-ubuntu18.04_aarch64/kernel-4.9/drivers/net/bonding/built-in.o
  Building modules, stage 2.
  MODPOST 0 modules
make: Leaving directory '/usr/src/linux-headers-4.9.140-tegra-ubuntu18.04_aarch64/kernel-4.9'

root@jetson5-desktop:/usr/src/linux-headers-4.9.140-tegra-ubuntu18.04_aarch64/kernel-4.9/drivers/net/bonding# ls

built-in.o  Makefile  modules.order  Module.symvers

Im failed to getting .ko file in this module directory

Did you read “Preparing to Build External Kernel Modules” section?

I followed the tutorial but i had doubt in some lines . so can you guys give a exact steps for building ethernet bonding module driver in jetson

I proceeded from the above section. After i finished with the end command of “make ARCH=arm64 -C $TEGRA_KERNEL_OUT M=$(pwd)” , i didn’t got any error and i got only three files without bonding.ko file.

root@jetson5-desktop:~# cd /usr/src/linux-headers-4.9.140-tegra-ubuntu18.04_aarch64/kernel-4.9/drivers/net/bonding/

root@jetson5-desktop:/usr/src/linux-headers-4.9.140-tegra-ubuntu18.04_aarch64/kernel-4.9/drivers/net/bonding# ls

Makefile

root@jetson5-desktop:/usr/src/linux-headers-4.9.140-tegra-ubuntu18.04_aarch64/kernel-4.9/drivers/net/bonding# TEGRA_KERNEL_OUT=/lib/modules/4.9.140-tegra/build

root@jetson5-desktop:/usr/src/linux-headers-4.9.140-tegra-ubuntu18.04_aarch64/kernel-4.9/drivers/net/bonding# make ARCH=arm64 -C $TEGRA_KERNEL_OUT M=$(pwd)

make: Entering directory '/usr/src/linux-headers-4.9.140-tegra-ubuntu18.04_aarch64/kernel-4.9'
  LD      /usr/src/linux-headers-4.9.140-tegra-ubuntu18.04_aarch64/kernel-4.9/drivers/net/bonding/built-in.o
  Building modules, stage 2.
  MODPOST 0 modules
make: Leaving directory '/usr/src/linux-headers-4.9.140-tegra-ubuntu18.04_aarch64/kernel-4.9'

root@jetson5-desktop:/usr/src/linux-headers-4.9.140-tegra-ubuntu18.04_aarch64/kernel-4.9/drivers/net/bonding# ls

built-in.o  Makefile  modules.order  Module.symvers

It will be great if someone can share the bonding.ko file if you have it prebuilt. I am sure it is going to be easier for the Nvidia devs to give us the bonding.ko file for jetson nano. This has been delaying our software development on the Jetson nano for over two weeks now.

I am confused by your log here.

First, why do you build you source in the header src? There is no kernel source at all. Did you download the source from our download center?
Second, do you enable CONFIG_BONDING in tegra_defconfig?

Thanks to WayneWWW for pointed my mistake. Now bonding module builded successfully.
I followed the below code. It will be helpful for someone who stucked like me.

sudo ./source_sync.sh -k tegra-l4t-r32.1

sudo -s

cd /usr/lib/$(uname -r)/

rm build

ln -s /usr/src/sources/kernel/kernel-4.9/ build

cd /usr/src/sources/kernel/kernel-4.9/

sudo -s

cp /proc/config.gz .

gunzip config.gz

mv config .Config

# Edit and make sure you have CONFIG_LOCALVERSION="-tegra" #(i skipped this one)

make nconfig

make modules_prepare

cd drivers/net/bonding/

​make ARCH=arm64 -C /lib/modules/4.9.140-tegra/build M=$(pwd)

exit
2 Likes