• Support Home
  • Getting Started
    • Connecting Your Camera
    • 3rd Party Software Getting Started Guides
  • Tech Ref Manuals
    • Arena SDK Documentation
    • HTP003S – Helios2+ ToF 3D
    • HLT003S – Helios2 ToF 3D
    • HLS003S – Helios ToF 3D
    • HLF003S – Helios Flex ToF 3D
    • ATX245S – Atlas10 24.5 MP
    • ATX204S – Atlas10 20.4 MP
    • ATX162S – Atlas10 16.2 MP
    • ATX124S – Atlas10 12.3 MP
    • ATX081S – Atlas10 8.1 MP
    • ATX051S – Atlas10 5.0 MP
    • ATL314S – Atlas 31.4 MP
    • ATL196S – Atlas 19.6 MP
    • ATL168S – Atlas 16.8 MP
    • ATL120S – Atlas 12.3 MP
    • ATL089S – Atlas 8.9 MP
    • ATL071S – Atlas 7.1 MP
    • ATL050S – Atlas 5.0 MP
    • ATL028S – Atlas 2.8 MP
    • ATP200S – Atlas IP67 20 MP
    • ATP120S – Atlas IP67 12.3 MP
    • ATP089S -Atlas IP67 8.9 MP
    • ATP071S – Atlas IP67 7.1 MP
    • ATP028S – Atlas IP67 2.8 MP
    • TRI200S – Triton 20.0 MP
    • TRI120S – Triton 12.3 MP
    • TRI122S – Triton 12.2 MP
    • TRI089S – Triton 8.9 MP
    • TRI071S – Triton 7.1 MP
    • TRI064S – Triton 6.3 MP
    • TRI054S – Triton 5.4 MP
    • TRI050S-P/Q – Triton 5.0 MP Polarized
    • TRI050S – Triton 5.0 MP
    • TRI032S – Triton 3.2 MP
    • TRI028S – Triton 2.8 MP
    • TRI023S – Triton 2.3 MP
    • TRI016S – Triton 1.6 MP
    • TRI005S – Triton 0.5 MP
    • TRI004S – Triton 0.4 MP
    • TRI02KA – Triton 2K Line Scan
    • PHX200S – Phoenix 20.0 MP
    • PHX120S – Phoenix 12.3 MP
    • PHX122S – Phoenix 12.2 MP
    • PHX089S – Phoenix 8.9 MP
    • PHX064S – Phoenix 6.3 MP
    • PHX050S-P/Q – Phoenix 5.0 MP Polarized
    • PHX050S – Phoenix 5.0 MP
    • PHX032S – Phoenix 3.2 MP
    • PHX023S – Phoenix 2.3 MP
    • PHX016S – Phoenix 1.6 MP
    • PHX004S – Phoenix 0.4 MP
  • Application Notes
    • Bandwidth Sharing in Multi-Camera Systems
    • Combine Helios 3D Point Cloud with RGB Color
    • I2C Support on LUCID Cameras
    • Using GPIO on LUCID Cameras
    • Using PTP & Scheduled Action Commands
    • Helios2 And Triton Synchronization
    • Product Change Notifications (PCN)
  • Knowledge Base
  • Contact Support
  • Log In
  • Support Home
  • Getting Started
    • Connecting Your Camera
    • 3rd Party Software Getting Started Guides
  • Tech Ref Manuals
    • Arena SDK Documentation
    • HTP003S – Helios2+ ToF 3D
    • HLT003S – Helios2 ToF 3D
    • HLS003S – Helios ToF 3D
    • HLF003S – Helios Flex ToF 3D
    • ATX245S – Atlas10 24.5 MP
    • ATX204S – Atlas10 20.4 MP
    • ATX162S – Atlas10 16.2 MP
    • ATX124S – Atlas10 12.3 MP
    • ATX081S – Atlas10 8.1 MP
    • ATX051S – Atlas10 5.0 MP
    • ATL314S – Atlas 31.4 MP
    • ATL196S – Atlas 19.6 MP
    • ATL168S – Atlas 16.8 MP
    • ATL120S – Atlas 12.3 MP
    • ATL089S – Atlas 8.9 MP
    • ATL071S – Atlas 7.1 MP
    • ATL050S – Atlas 5.0 MP
    • ATL028S – Atlas 2.8 MP
    • ATP200S – Atlas IP67 20 MP
    • ATP120S – Atlas IP67 12.3 MP
    • ATP089S -Atlas IP67 8.9 MP
    • ATP071S – Atlas IP67 7.1 MP
    • ATP028S – Atlas IP67 2.8 MP
    • TRI200S – Triton 20.0 MP
    • TRI120S – Triton 12.3 MP
    • TRI122S – Triton 12.2 MP
    • TRI089S – Triton 8.9 MP
    • TRI071S – Triton 7.1 MP
    • TRI064S – Triton 6.3 MP
    • TRI054S – Triton 5.4 MP
    • TRI050S-P/Q – Triton 5.0 MP Polarized
    • TRI050S – Triton 5.0 MP
    • TRI032S – Triton 3.2 MP
    • TRI028S – Triton 2.8 MP
    • TRI023S – Triton 2.3 MP
    • TRI016S – Triton 1.6 MP
    • TRI005S – Triton 0.5 MP
    • TRI004S – Triton 0.4 MP
    • TRI02KA – Triton 2K Line Scan
    • PHX200S – Phoenix 20.0 MP
    • PHX120S – Phoenix 12.3 MP
    • PHX122S – Phoenix 12.2 MP
    • PHX089S – Phoenix 8.9 MP
    • PHX064S – Phoenix 6.3 MP
    • PHX050S-P/Q – Phoenix 5.0 MP Polarized
    • PHX050S – Phoenix 5.0 MP
    • PHX032S – Phoenix 3.2 MP
    • PHX023S – Phoenix 2.3 MP
    • PHX016S – Phoenix 1.6 MP
    • PHX004S – Phoenix 0.4 MP
  • Application Notes
    • Bandwidth Sharing in Multi-Camera Systems
    • Combine Helios 3D Point Cloud with RGB Color
    • I2C Support on LUCID Cameras
    • Using GPIO on LUCID Cameras
    • Using PTP & Scheduled Action Commands
    • Helios2 And Triton Synchronization
    • Product Change Notifications (PCN)
  • Knowledge Base
  • Contact Support
  • Log In
home/Knowledge Base/Arena Software/Enabling Jumbo Frames on Raspberry Pi

Enabling Jumbo Frames on Raspberry Pi

6873 views 13 October 23, 2020 Updated on June 15, 2021

Introduction

This article demonstrates how to enable Jumbo Frames (ie. set MTU / packet size to 9000) on the Raspberry 4. Enabling Jumbo Frames is necessary to unlock the full performance of LUCID cameras, however doing so on a Raspberry Pi involves recompiling the kernel. This article assumes the Raspberry Pi is running a 64-bit OS, which is needed for the ARM 64-bit version of Arena SDK.

The image for the 64-bit Raspberry Pi OS can be downloaded from: https://downloads.raspberrypi.org/raspios_arm64/images/, and installed with the Raspberry Pi Imager: https://www.raspberrypi.org/software/.

Preparation

Install the needed dependencies using the Terminal command:

sudo apt-get install gedit texinfo build-essential libgmp-dev libmpfr-dev libmpc-dev libisl-dev libssl-dev libncurses5-dev bc git-core bison flex

Build and install binutils using the commands:

wget https://ftp.gnu.org/gnu/binutils/binutils-2.34.tar.bz2
tar xf binutils-2.34.tar.bz2
mkdir binutils-obj
cd binutils-obj
../binutils-2.34/configure --prefix=/opt/aarch64 --target=aarch64-linux-gnu --disable-nls
make -j4
sudo make install
cd

To be able to use binutils directly, set the PATH using this command:

export PATH=$PATH:/opt/aarch64/bin/

Build and install gcc using the commands:

wget https://ftp.gnu.org/gnu/gcc/gcc-8.4.0/gcc-8.4.0.tar.gz
tar xf gcc-8.4.0.tar.gz
mkdir gcc-out
cd gcc-out
../gcc-8.4.0/configure --prefix=/opt/aarch64 --target=aarch64-linux-gnu --with-newlib --without-headers \
   --disable-nls --disable-shared --disable-threads --disable-libssp --disable-decimal-float \
   --disable-libquadmath --disable-libvtv --disable-libgomp --disable-libatomic \
   --enable-languages=c
make all-gcc -j4
sudo make install-gcc
cd

Use this command to test if gcc installed correctly:

/opt/aarch64/bin/aarch64-linux-gnu-gcc -v

The output of that command should be similar to:


Download Kernel Source

There are two options to download the Linux kernel source for Raspberry Pi.

Option 1

The first option is to pull a branch from: https://github.com/raspberrypi/linux.

As of writing, version 5.5 is the latest that will work with LUCID cameras. Later versions will not allow LUCID cameras to negotiate a higher packet size – we are still looking into this.

Clone and update the sources to the Raspberry Pi using the command:

git clone --depth=1 -b rpi-5.5.y https://github.com/raspberrypi/linux.git

This will create a directory titled linux containing the source files. The benefit of this option is that the source can be updated by running this command from the linux directory:

git pull

Option 2

The second option is to download a release folder from: https://github.com/raspberrypi/linux/releases.

Download the .tar.gz folder and save it to the /home/pi directory. As of writing, version 1.20210108-1 is the latest that will work with LUCID cameras. Later versions will not allow LUCID cameras to negotiate a higher packet size – we are still looking into this.

Extract the folder with the command:

tar xf raspberrypi-kernel_1.20210108-1.tar.gz

Altering the Kernel Source Files

In File Manager, navigate to the directory /home/pi/linux/include/linux and open the file if_vlan.h. If Option 2 was used above, the directory will be /home/pi/linux-raspberrypi-kernel_1.20210108-1/include/linux.

In if_vlan.h, change the lines:

#define VLAN_ETH_DATA_LEN 1500 /* Max. octets in payload */
#define VLAN_ETH_FRAME_LEN 1518 /* Max. octets in frame sans FCS */

to:

#define VLAN_ETH_DATA_LEN 9000 /* Max. octets in payload */
#define VLAN_ETH_FRAME_LEN 9018 /* Max. octets in frame sans FCS */

In File Manager, navigate to the directory /home/pi/linux/include/uapi/linux and open the file if_ether.h. If Option 2 was used earlier, the directory will be /home/pi/linux-raspberrypi-kernel_1.20210108-1/include/uapi/linux/.

In if_ether.h, change the lines:

#define ETH_DATA_LEN 1500 /* Max. octets in payload */
#define ETH_FRAME_LEN 1514 /* Max. octets in frame sans FCS */

to:

#define ETH_DATA_LEN 9000 /* Max. octets in payload */
#define ETH_FRAME_LEN 9014 /* Max. octets in frame sans FCS */

In File Manager, navigate to the directory /home/pi/linux/drivers/net/ethernet/broadcom/genet and open the file bcmgenet.c. If Option 2 was used earlier, the directory will be /home/pi/linux-raspberrypi-kernel_1.20210108-1/drivers/net/ethernet/broadcom/genet/.

In bcmgenet.c, change the line:

#define RX_BUF_LENGTH 2048

to:

#define RX_BUF_LENGTH 10240

Configure & Build Kernel for 64-bit Raspberry Pi

In Terminal, run the commands:

mkdir kernel-out
cd linux
make O=../kernel-out/ ARCH=arm64 CROSS_COMPILE=/opt/aarch64/bin/aarch64-linux-gnu- bcm2711_defconfig
make -j4 O=../kernel-out/ ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-

If Option 2 was used earlier, change to the linux-raspberrypi-kernel_1.20210108-1 directory, not linux.

Booting 64-bit Kernel

In Terminal, run the following commands:

sudo make O=../kernel-out/ ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules_install dtbs_install
sudo cp ../kernel-out/arch/arm64/boot/Image /boot/kernel8.img

In File Manager, go to the path /boot/dtbs and note the version number. In this case it is 5.5.19-v8+.

Go back to /boot, and open the file config.txt

In config.txt, add the following lines to the end:

#Boot 64-bit kernel
device_tree=dtbs/5.5.19-v8+/broadcom/bcm2711-rpi-4-b.dtb
overlay_prefix=dtbs/5.5.19-v8+/overlays/
kernel=kernel8.img

To go back to default kernel, simply comment out these lines.

If config.txt can’t be saved due to lack of permissions, open it with administrative rights from Terminal:

cd /boot
sudo mousepad config.txt

Reboot the Raspberry Pi.

To confirm the Raspberry Pi is running the 64-bit kernel, the Terminal command “uname -a” should give an output similar to:

Enable Jumbo Frames

In Terminal, set the MTU to 9000 using the command:

sudo ifconfig eth0 mtu 9000

Confirm that eth0 lists its MTU as 9000 using the command:

ifconfig eth0

Jumbo Frames are now enabled on this Raspberry Pi.

Was this helpful?

13 Yes  2 No
Related Articles
  • Solving driver-related RDMA streaming issues with Ubuntu 22.04
  • Using Multiple Helios Cameras Simultaneously
  • Troubleshooting Network Timeouts (Linux)
  • How to create an Ubuntu docker image and container with Arena SDK
  • Troubleshooting timeouts caused by incomplete images (Windows)
  • Tonemapping images from LUCID’s TRI054S-CC IMX490

Didn't find your answer? Contact Us

  New 4th Gen Pregius Features

Resolving the ‘NodeMapFactory must be preprocessed before calling ToXml’ message when connecting to a camera  

© 2024 LUCID Vision Labs Inc.
Looking to purchase our cameras?
Visit the LUCID Webstore at thinklucid.com
LUCID Support & Help
Welcome to LUCID

We use cookies to facilitate online purchases and analyze our traffic. By clicking "Accept", you consent to our use of cookies.

Functional Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
Manage options Manage services Manage {vendor_count} vendors Read more about these purposes
View preferences
{title} {title} {title}
LUCID Support & Help
Welcome to LUCID

We use cookies to facilitate online purchases and analyze our traffic. By clicking "Accept", you consent to our use of cookies.

Functional Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
Manage options Manage services Manage {vendor_count} vendors Read more about these purposes
View preferences
{title} {title} {title}