树莓派4b编译内核+mtu9000
前言
最大传输单元(Maximum Transmission Unit,MTU)用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小。树莓派中默认为1500,但是树莓派中上限为16436,因此在一定程度上,限制了传输效率。
网上通常将mtu值从1500修改为9000,在外部修改,没有修改内核。本文将记录在内核修改MTU过程。
一.环境配置
需要安装:
sudo apt update
sudo apt install git bc bison flex libssl-dev make
sudo apt install raspberrypi-kernel raspberrypi-kernel-headers
sudo apt-get install libncurses5-dev libssl-dev
sudo apt-get install build-essential openssl
sudo apt-get install zlibc minizip
缺少啥安装啥,这是我总结过来的,兴许会多了也有可能少。
重点安装:交叉编译工具
1.下载:https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
2.安装交叉编译工具依赖
apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev
3.解压
tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar
mv ./gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu ~/gcc-linaro
4.配置环境
vim ~/.bashrc
###在最后一行添加
export PATH=$PATH:~/gcc-linaro/bin
source ~/.bashrc
二.下载树莓派内核
1.下载链接:https://github.com/raspberrypi
选择linux,下载对应的内核版本。我的是linux-rpi-5.9.y。下载后进行解压。
三,修改文件实现MTU9000
主要修改三处
1.linux-rpi-5.9.y/include/linux/if_vlan.h
#define VLAN_ETH_DATA_LEN 1500 /* Max. octets in payload */
#define VLAN_ETH_FRAME_LEN 1518 /* Max. octets in frame sans FCS */
修改为
#define VLAN_ETH_DATA_LEN 9000 /* Max. octets in payload */
#define VLAN_ETH_FRAME_LEN 9018 /* Max. octets in frame sans FCS */
2.linux-rpi-5.9.y/include/uapi/linux/if_ether.h
#define ETH_DATA_LEN 1500 /* Max. octets in payload */
#define ETH_FRAME_LEN 1514 /* Max. octets in frame sans FCS */
修改为
#define ETH_DATA_LEN 9000 /* Max. octets in payload */
#define ETH_FRAME_LEN 9014 /* Max. octets in frame sans FCS */
3.linux-rpi-5.9.y/drivers/net/ethernet/broadcom/genet/bcmgenet.c
#define RX_BUF_LENGTH 2048
修改为
#define RX_BUF_LENGTH 10240
四,编译
1.构建编译配置
cd linux //linux修改为自己的内核包名字,即进入内核目录
KERNEL=kernel7l
make bcm2711_defconfig
2.内核编译
make -j4 zImage modules dtbs
3.内核安装
sudo make modules_install
sudo cp arch/arm/boot/dts/*.dtb /boot/
sudo cp arch/arm/boot/dts/overlays/*.dtb /boot/overlays/
sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/
####替换内核名称,不保留原始内核
sudo cp arch/arm/boot/zImage /boot/$KERNEL.img
####保留原始内核
sudo cp arch/arm/boot/zImage /boot/kernel-my.img
4.修改配置文件
sudo nano /boot/config.txt
在文件最后一行加上
kernel=kernel-my.img
重启
sudo reboot
五,查看结果
内核版本查看
终端输入
uname -r
之前我的内核版本是5.10,现在修改到了自己编译的5.9。
MTU查看
终端输入
ifconfig
效果如下图,MTU值从默认的1500,提升到9000.
问题1:scripts/Kconfig.include:35: compiler ‘aarch64-linux-gnu-gcc’ not found
scripts/kconfig/Makefile:90: recipe for target ‘bcm2711_defconfig’ failed
解决方法:安装交叉编译依赖。