Linux kernel 与 设备树

Linux kernel 与 设备树

  • [1 介绍](#1 介绍)
    • [1.1 概述](#1.1 概述)
    • [1.2 发展历程](#1.2 发展历程)
    • [1.3 各版本发布时间及特色](#1.3 各版本发布时间及特色)
    • [1.4 Linux 单内核](#1.4 Linux 单内核)
    • [1.5 Linux 内核网址](#1.5 Linux 内核网址)
    • [1.6 NXP 官方镜像与 野火 鲁班猫镜像的区别](#1.6 NXP 官方镜像与 野火 鲁班猫镜像的区别)
  • [2 Linux 内核组成](#2 Linux 内核组成)
    • [2.1 进程管理](#2.1 进程管理)
    • [2.2 内存管理](#2.2 内存管理)
    • [2.3 文件系统](#2.3 文件系统)
    • [2.4 设备管理](#2.4 设备管理)
    • [2.5 网络功能](#2.5 网络功能)
  • [3 Linux 内核编译](#3 Linux 内核编译)
    • [3.1 编译 Kernel 需求](#3.1 编译 Kernel 需求)
    • [3.2 Kernel 配置查询工具](#3.2 Kernel 配置查询工具)
      • [linux 系统](#linux 系统)
      • [Euler 系统](#Euler 系统)
    • [3.3 安装依赖](#3.3 安装依赖)
    • [3.4 下载内核源码](#3.4 下载内核源码)
    • [3.5 kernel 工程结构分析](#3.5 kernel 工程结构分析)
    • [3.6 内核配置选项](#3.6 内核配置选项)
    • [3.7 内核编译](#3.7 内核编译)
      • [3.7.1 编译内核 zImage](#3.7.1 编译内核 zImage)
      • [3.7.2 zImage](#3.7.2 zImage)
      • [3.7.3 编译内核 deb 安装包 (推荐)](#3.7.3 编译内核 deb 安装包 (推荐))
    • [3.8 镜像组成](#3.8 镜像组成)
  • [4 内核烧录](#4 内核烧录)
    • [4.1 USB 烧写 Linux 内核](#4.1 USB 烧写 Linux 内核)
    • [4.2 DEB 包烧写 Linux 内核(SD 卡/EMMC/NAND 通用)](#4.2 DEB 包烧写 Linux 内核(SD 卡/EMMC/NAND 通用))
    • [4.3 直接替换 Linux 内核(SD 卡/EMMC/NAND 通用)](#4.3 直接替换 Linux 内核(SD 卡/EMMC/NAND 通用))
    • [4.4 TFTP 烧写 Linux 内核(SD/EMMC/NAND 通用,一般用于测试)](#4.4 TFTP 烧写 Linux 内核(SD/EMMC/NAND 通用,一般用于测试))
  • [5 添加驱动模块](#5 添加驱动模块)
    • [5.1 添加驱动模块到 Linux 内核](#5.1 添加驱动模块到 Linux 内核)
      • [5.1.1 介绍](#5.1.1 介绍)
      • [5.1.2 操作步骤](#5.1.2 操作步骤)
      • [5.1.3 操作流程【示例】](#5.1.3 操作流程【示例】)
    • [5.2 编写驱动模块 到内核代码外](#5.2 编写驱动模块 到内核代码外)
      • [5.2.1 优点](#5.2.1 优点)
      • [5.2.2 操作流程](#5.2.2 操作流程)
  • [6 修改 Linux 内核启动 logo](#6 修改 Linux 内核启动 logo)
  • [7 设备树](#7 设备树)
    • [7.1 设备树介绍](#7.1 设备树介绍)
    • [7.2 常见 DT 文件](#7.2 常见 DT 文件)
    • [7.3 设备树节点编写](#7.3 设备树节点编写)
  • [8 设备树的编译及烧录](#8 设备树的编译及烧录)
    • [8.1 下载安装编译镜像系统+安装编译工具和依赖](#8.1 下载安装编译镜像系统+安装编译工具和依赖)
    • [8.2 获取kernel](#8.2 获取kernel)
    • [8.3 编译设备树](#8.3 编译设备树)
    • [8.4 烧录设备树](#8.4 烧录设备树)
  • 参考

1 介绍

1.1 概述

Linux内核是一个免费且开源的 UNIX 类 内核,在全球许多计算机系统中使用。该内核由Linus Torvalds于 1991 年创建,不久后被采纳为GNU 操作系统(OS)的内核,而 GNU 操作系统旨在免费替代Unix。

大部分内核代码都是用C 语言编写的,因为GNU 编译器集合(GCC) 对其进行了支持,并且具有超出标准 C 语言的扩展。代码还包含用于特定于体系结构的逻辑的汇编代码,例如优化内存使用和任务执行。

1.2 发展历程

  • 1984年,Andrew S. Tanenbaum开发了MINIX操作系统,用于教学目的。【MINIX的启发】
  • 1991年,Linus Torvalds在MINIX的基础上编写了Linux内核的初始版本0.01,标志着Linux时代的开始。【Linux内核的诞生】
  • 【开源社区的形成】之后Linux内核的开源模式吸引了全球开发者共同贡献,形成了庞大的开源社区。
  • 1993年,大约有100余名程序员参与了Linux内核代码编写/修改工作,其中核心组由5人组成,此时Linux 0.99的代码大约有十万行,用户大约有10万左右。
  • 1994年,Linux推出了功能完善、稳定的内核Version 1.0,代码量17万行,当时是按照完全自由免费的协议发布,随后正式采用GPL协议。【Linux内核的成熟】
  • 1994年,Slackware成为Linux的第一个商业发行版。【Linux内核的成熟】
  • 1995年1月,Bob Young创办了RedHat(小红帽),以GNU/Linux为核心,集成了400多个源代码开放的程序模块,搞出了一种冠以品牌的Linux,即RedHat Linux,称为Linux"发行版",在市场上出售。这在经营模式上是一种创举。
  • 1996年,Linux版本1.2.13被确认符合POSIX标准。【符合POSIX标准】
  • 1996年6月,Linux 2.0内核发布,此内核有大约40万行代码,并可以支持多个处理器。此时的Linux 已经进入了实用阶段,全球大约有350万人使用。
  • 2001年1月,Linux 2.4发布,它进一步地提升了SMP系统的扩展性,同时它也集成了很多用于支持桌面系统的特性:USB,PC卡(PCMCIA)的支持,内置的即插即用,等等功能。
  • 2003年12月,Linux 2.6版内核发布,相对于2.4版内核2.6在对系统的支持都有很大的变化。
  • 2007年11月,Google 宣布组建开放手机联盟 (Open Handset Alliance) 和发布 Android,它被称为"第一个真正开放的综合移动设备平台"。
  • 2011年, Google I/O 大会发布了 Chrombook。这是一款运行着所谓云操作系统 ChromeOS 的笔记本。Chome OS 是基于 Linux 内核的。
  • 2011年,Linus Torvalds 发布了 Linux3.0 版本。
  • 【Linux的多样化】随着时间的推移,Linux发展出多种发行版,满足不同用户需求。
  • 【企业支持】Linux因其稳定性和安全性在企业环境中得到广泛应用,许多企业开始提供Linux支持和服务。
  • 【云计算和移动设备】Linux成为云计算平台的首选操作系统,同时Android作为Linux内核的变种,在移动设备领域占据重要地位。
  • 2023年6月发布的Linux 6.4内核,带来了对苹果M2芯片的支持等改进。【Linux内核不断更新】
  • 2024年2月,Linux中国社区宣布无限期停止更新、运营。【Linux中国社区】
  • 2024年5月,Linux 6.9内核的首个正式版发布,标志着Linux的持续发展。【Linux 6.9内核发布】

1.3 各版本发布时间及特色

版本号 发布时间 特色功能
0.01 1991 Linux内核最初版本,标志着Linux项目的开始
1.0 1994 提供了基本的系统功能和稳定性
2.0 1996 引入了模块化设计和多个新驱动
2.2 1999 增加了对USB和AGP显卡的支持
2.4 2001 引入了内存管理的改进和新的文件系统支持
2.6 2003 引入了大量改进,包括性能和稳定性
3.0 2011 首次引入 cgroups v2,改进了对 ARM 架构的支持
3.6 2012 Trinity的热插拔内存、新的Btrfs功能、新的TCP算法(CUBIC)、在ext4和Btrfs文件系统上的在线磁盘扩展
3.10.x 2013 改进的内存管理、Btrfs文件系统的稳定性改善、新的设备驱动
3.18.x 2014 继续改进的内存管理、文件系统改进、新的网络功能
4.0 2015 引入了内核的命名空间和安全性改进
4.19.x 2018 引入新的 cgroup2 子系统,提供了更细粒度的资源控制;支持 Wi-Fi 6 和蓝牙 5 标准
5.0 2019 增加了对更多硬件的支持和性能优化
6.0 2022 对苹果M2芯片的初步支持,性能和安全性的改进
6.9 2024 Rust语言支持,硬件支持增强,性能优化

1.4 Linux 单内核

内核分单内核和微内核,单内核是指整个系统由一个内核组成,微内核是指内核只提供最基本的功能,其他功能都交给用户空间的应用程序。

Linus Torvalds 认为单内核是更好的选择,因为单内核可以减少内存占用,并且可以减少上下文切换。

Linux 是单内核,但吸取微内核精华:模块化涉及,抢占式内核,支持内核线程,可动态装载内核模块。

Kernel 即是 Linux 内核,Linux 内核采用宏内核架构,即 Linux 大部分功能都会在内核中实现,如进程管理、内存管理、设备管理、文件管理以及网络管理等功能,Linux 在发展的过程中,引入了内核模块(Loadable Kernel Module,LKM)机制,内核模块全称为动态可加载内核模块,就是在内核运行时可以动态加载一组目标代码来实现某些特定的功能,在这过程中不需要重新编译内核就可以实现动态扩展。

1.5 Linux 内核网址

https://www.kernel.org/

网址中内核文件,大部分是没适配相应芯片的,适配芯片是芯片原厂干的事,一般开发者不去为一款芯片做适配,也没这个能力去适配,作为嵌入式开发人员主要职责是进行内核的配置与使用。

1.6 NXP 官方镜像与 野火 鲁班猫镜像的区别

野火将 kernel,dtb,dtbo 打包进了 rootfs 内,这样更为通用且更换其中如何一部分只需将文件替换即可。

2 Linux 内核组成

Linux 内核主要由 5 部分组成,分别为:进程管理子系统,内存管理子系统,文件子系统,网络子系统,设备子系统,如图所示。

2.1 进程管理

负责进程的创建和销毁,进程的调度。

2.2 内存管理

负责内存的分配和回收,记录哪些内存被哪些进程使用,管理虚拟内存,将内存的物理地址和逻辑地址做一个映射,主要由 MMU 进行转换,页表的方式。

2.3 文件系统

这里的文件系统不仅仅只是硬盘的抽象管理,它也可以是某些 io 口的抽象;文件系统屏蔽了底层的细节,为上层提供统一的接口;linux 中一切皆文件。

2.4 设备管理

设备管理功能主要由驱动程序提供,主要任务是控制设备完成输入或输出操作;linux把设备看作是特殊的文件,系统通过处理文件的接口(虚拟文件系统 VFS)来管理和控制各种设备。

2.5 网络功能

网络功能值的是除了驱动程序提供的基本硬件操作外,还有系统提供的机制和功能,比如 TCP 协议,地址解析等。

3 Linux 内核编译

3.1 编译 Kernel 需求

一般厂商提供的内核已经支持大部分功能,但是实际用户会有定制功能需求,这就涉及内核再次编译。

3.2 Kernel 配置查询工具

linux 系统

sudo wget https://github.com/moby/moby/blob/master/contrib/check-config.sh

# 网不行,从这里下载
sudo wget https://gitee.com/okhoogh/moby/blob/master/contrib/check-config.sh

sudo chmod 755 ./check-config.sh

./check-config.sh

# 上述脚本直接下载运行报错 【放弃】
root@r222:/opt/sen# ./check-config.sh
./check-config.sh: line 1: syntax error near unexpected token `newline'
./check-config.sh: line 1: `<!DOCTYPE html>'

# 从 git 上拷贝脚本内容到本地运行,打印如下
info: reading kernel config from /proc/config.gz ...

Generally Necessary:
- cgroup hierarchy: properly mounted [/sys/fs/cgroup]
- CONFIG_NAMESPACES: missing
- CONFIG_NET_NS: missing
- CONFIG_PID_NS: missing
- CONFIG_IPC_NS: missing
- CONFIG_UTS_NS: missing
- CONFIG_CGROUPS: enabled
- CONFIG_CGROUP_CPUACCT: enabled
- CONFIG_CGROUP_DEVICE: missing
- CONFIG_CGROUP_FREEZER: missing
- CONFIG_CGROUP_SCHED: enabled
- CONFIG_CPUSETS: enabled
- CONFIG_MEMCG: enabled
- CONFIG_KEYS: enabled
- CONFIG_VETH: missing
- CONFIG_BRIDGE: missing
- CONFIG_BRIDGE_NETFILTER: missing
- CONFIG_IP_NF_FILTER: enabled
- CONFIG_IP_NF_MANGLE: enabled
- CONFIG_IP_NF_TARGET_MASQUERADE: enabled
- CONFIG_NETFILTER_XT_MATCH_ADDRTYPE: missing
- CONFIG_NETFILTER_XT_MATCH_CONNTRACK: enabled
- CONFIG_NETFILTER_XT_MATCH_IPVS: missing
- CONFIG_NETFILTER_XT_MARK: enabled
- CONFIG_IP_NF_NAT: enabled
- CONFIG_NF_NAT: enabled
- CONFIG_POSIX_MQUEUE: missing
- CONFIG_DEVPTS_MULTIPLE_INSTANCES: missing
- CONFIG_NF_NAT_IPV4: enabled
- CONFIG_NF_NAT_NEEDED: enabled

Optional Features:
- CONFIG_USER_NS: missing
- CONFIG_SECCOMP: missing
- CONFIG_SECCOMP_FILTER: missing
- CONFIG_CGROUP_PIDS: missing
- CONFIG_MEMCG_SWAP: missing
- CONFIG_MEMCG_SWAP_ENABLED: missing
- CONFIG_MEMCG_KMEM: missing
- CONFIG_IOSCHED_CFQ: enabled
- CONFIG_CFQ_GROUP_IOSCHED: missing
- CONFIG_BLK_CGROUP: missing
- CONFIG_BLK_DEV_THROTTLING: missing
- CONFIG_CGROUP_PERF: enabled
- CONFIG_CGROUP_HUGETLB: missing
- CONFIG_NET_CLS_CGROUP: missing
- CONFIG_CGROUP_NET_PRIO: missing
- CONFIG_CFS_BANDWIDTH: enabled
- CONFIG_FAIR_GROUP_SCHED: enabled
- CONFIG_IP_NF_TARGET_REDIRECT: missing
- CONFIG_IP_VS: missing
- CONFIG_IP_VS_NFCT: missing
- CONFIG_IP_VS_PROTO_TCP: missing
- CONFIG_IP_VS_PROTO_UDP: missing
- CONFIG_IP_VS_RR: missing
- CONFIG_SECURITY_SELINUX: missing
- CONFIG_SECURITY_APPARMOR: missing
- CONFIG_EXT3_FS: enabled
- CONFIG_EXT3_FS_XATTR: enabled
- CONFIG_EXT3_FS_POSIX_ACL: enabled
- CONFIG_EXT3_FS_SECURITY: enabled
- CONFIG_EXT4_FS: enabled
- CONFIG_EXT4_FS_POSIX_ACL: enabled
- CONFIG_EXT4_FS_SECURITY: enabled
- Network Drivers:
  - "overlay":
    - CONFIG_VXLAN: missing
    - CONFIG_BRIDGE_VLAN_FILTERING: missing
      Optional (for encrypted networks):
      - CONFIG_CRYPTO: enabled
      - CONFIG_CRYPTO_AEAD: enabled
      - CONFIG_CRYPTO_GCM: enabled
      - CONFIG_CRYPTO_SEQIV: enabled
      - CONFIG_CRYPTO_GHASH: enabled
      - CONFIG_XFRM: enabled
      - CONFIG_XFRM_USER: missing
      - CONFIG_XFRM_ALGO: enabled
      - CONFIG_INET_ESP: enabled
      - CONFIG_NETFILTER_XT_MATCH_BPF: missing
      - CONFIG_INET_XFRM_MODE_TRANSPORT: missing
  - "ipvlan":
    - CONFIG_IPVLAN: missing
  - "macvlan":
    - CONFIG_MACVLAN: enabled
    - CONFIG_DUMMY: missing
  - "ftp,tftp client in container":
    - CONFIG_NF_NAT_FTP: enabled
    - CONFIG_NF_CONNTRACK_FTP: enabled
    - CONFIG_NF_NAT_TFTP: enabled
    - CONFIG_NF_CONNTRACK_TFTP: enabled
- Storage Drivers:
  - "btrfs":
    - CONFIG_BTRFS_FS: missing
    - CONFIG_BTRFS_FS_POSIX_ACL: missing
  - "overlay":
    - CONFIG_OVERLAY_FS: enabled (as module)
  - "zfs":
    - /dev/zfs: missing
    - zfs command: missing
    - zpool command: missing

Limits:
- /proc/sys/kernel/keys/root_maxkeys: 1000000

# 命令
sysctl -a

# 输出
dev.scsi.logging_level = 0
fs.aio-max-nr = 65536
fs.aio-nr = 0
sysctl: unable to open directory "/proc/sys/fs/binfmt_misc/"
fs.dentry-state = 9324  5324    45      0       0       0
fs.dir-notify-enable = 1
fs.epoll.max_user_watches = 361189
fs.file-max = 69498
fs.file-nr = 416        0       69498
fs.inode-nr = 8264      0
fs.inode-state = 8264   0       0       0       0       0       0
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 128
fs.inotify.max_user_watches = 8192
fs.lease-break-time = 45
fs.leases-enable = 1
fs.nfs.idmap_cache_timeout = 6
fs.nfs.nfs_callback_tcpport = 0
fs.nfs.nfs_congestion_kb = 32320
fs.nfs.nfs_mountpoint_timeout = 500
fs.nfs.nlm_grace_period = 0
fs.nfs.nlm_tcpport = 0
fs.nfs.nlm_timeout = 10
fs.nfs.nlm_udpport = 0
fs.nfs.nsm_local_state = 0
fs.nfs.nsm_use_hostnames = 0
fs.nr_open = 1048576
fs.overflowgid = 65534
fs.overflowuid = 65534
fs.pipe-max-size = 1048576
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
fs.quota.allocated_dquots = 0
fs.quota.cache_hits = 0
fs.quota.drops = 0
fs.quota.free_dquots = 0
fs.quota.lookups = 0
fs.quota.reads = 0
fs.quota.syncs = 0
fs.quota.writes = 0
fs.suid_dumpable = 0
kernel.auto_msgmni = 0
kernel.cad_pid = 1
kernel.cap_last_cap = 37
kernel.core_pattern = |/lib/systemd/systemd-coredump %P %u %g %s %t 9223372036854775808 %e
kernel.core_pipe_limit = 0
kernel.core_uses_pid = 0
kernel.ctrl-alt-del = 0
kernel.dmesg_restrict = 0
kernel.domainname = (none)
kernel.hostname = r222
kernel.hotplug =
kernel.keys.gc_delay = 300
kernel.keys.maxbytes = 20000
kernel.keys.maxkeys = 200
kernel.keys.root_maxbytes = 25000000
kernel.keys.root_maxkeys = 1000000
kernel.kptr_restrict = 1
kernel.max_lock_depth = 1024
kernel.modprobe = /sbin/modprobe
kernel.modules_disabled = 0
kernel.msgmax = 8192
kernel.msgmnb = 16384
kernel.msgmni = 32000
kernel.ngroups_max = 65536
kernel.osrelease = 4.1.15-rt18-g70c780488-dirty
kernel.ostype = Linux
kernel.overflowgid = 65534
kernel.overflowuid = 65534
kernel.panic = 0
kernel.panic_on_oops = 0
kernel.panic_on_warn = 0
kernel.perf_cpu_time_max_percent = 25
kernel.perf_event_max_sample_rate = 100000
kernel.perf_event_mlock_kb = 516
kernel.perf_event_paranoid = 1
kernel.pid_max = 32768
kernel.poweroff_cmd = /sbin/poweroff
kernel.print-fatal-signals = 0
kernel.printk = 0       4       1       7
kernel.printk_delay = 0
kernel.printk_ratelimit = 5
kernel.printk_ratelimit_burst = 10
kernel.pty.max = 4096
kernel.pty.nr = 1
kernel.pty.reserve = 1024
kernel.random.boot_id = a511d9fc-5043-4d3f-bedf-4e5b37b0a176
kernel.random.entropy_avail = 10
kernel.random.poolsize = 4096
kernel.random.read_wakeup_threshold = 64
kernel.random.urandom_min_reseed_secs = 60
kernel.random.uuid = 0984d498-13f8-4b2a-98c1-54d3368598ce
kernel.random.write_wakeup_threshold = 896
kernel.randomize_va_space = 2
kernel.real-root-dev = 0
kernel.sched_cfs_bandwidth_slice_us = 5000
kernel.sched_child_runs_first = 0
kernel.sched_rr_timeslice_ms = 10
kernel.sched_rt_period_us = 1000000
kernel.sched_rt_runtime_us = 950000
kernel.sem = 32000      1024000000      500     32000
kernel.shm_rmid_forced = 0
kernel.shmall = 4278190079
kernel.shmmax = 4278190079
kernel.shmmni = 4096
kernel.sysctl_writes_strict = 0
kernel.sysrq = 176
kernel.tainted = 128
kernel.threads-max = 10863
kernel.usermodehelper.bset = 4294967295 63
kernel.usermodehelper.inheritable = 4294967295  63
kernel.version = #4 SMP PREEMPT RT Wed Sep 8 17:17:55 CST 2021
net.core.busy_poll = 0
net.core.busy_read = 0
net.core.dev_weight = 64
net.core.flow_limit_cpu_bitmap = 0
net.core.flow_limit_table_len = 4096
net.core.message_burst = 10
net.core.message_cost = 5
net.core.netdev_budget = 300
net.core.netdev_max_backlog = 1000
net.core.netdev_rss_key = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
net.core.netdev_tstamp_prequeue = 1
net.core.optmem_max = 10240
net.core.rmem_default = 163840
net.core.rmem_max = 163840
net.core.rps_sock_flow_entries = 0
net.core.somaxconn = 128
net.core.tstamp_allow_data = 1
net.core.warnings = 0
net.core.wmem_default = 163840
net.core.wmem_max = 163840
net.core.xfrm_acq_expires = 30
net.core.xfrm_aevent_etime = 10
net.core.xfrm_aevent_rseqth = 2
net.core.xfrm_larval_drop = 1
net.ipv4.conf.all.accept_local = 0
net.ipv4.conf.all.accept_redirects = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.arp_accept = 0
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.all.arp_filter = 0
net.ipv4.conf.all.arp_ignore = 2
net.ipv4.conf.all.arp_notify = 0
net.ipv4.conf.all.bootp_relay = 0
net.ipv4.conf.all.disable_policy = 0
net.ipv4.conf.all.disable_xfrm = 0
net.ipv4.conf.all.force_igmp_version = 0
net.ipv4.conf.all.forwarding = 0
net.ipv4.conf.all.igmpv2_unsolicited_report_interval = 10000
net.ipv4.conf.all.igmpv3_unsolicited_report_interval = 1000
net.ipv4.conf.all.log_martians = 0
net.ipv4.conf.all.mc_forwarding = 0
net.ipv4.conf.all.medium_id = 0
net.ipv4.conf.all.promote_secondaries = 0
net.ipv4.conf.all.proxy_arp = 0
net.ipv4.conf.all.proxy_arp_pvlan = 0
net.ipv4.conf.all.route_localnet = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.all.secure_redirects = 1
net.ipv4.conf.all.send_redirects = 1
net.ipv4.conf.all.shared_media = 1
net.ipv4.conf.all.src_valid_mark = 0
net.ipv4.conf.all.tag = 0
net.ipv4.conf.can0.accept_local = 0
net.ipv4.conf.can0.accept_redirects = 1
net.ipv4.conf.can0.accept_source_route = 1
net.ipv4.conf.can0.arp_accept = 0
net.ipv4.conf.can0.arp_announce = 0
net.ipv4.conf.can0.arp_filter = 0
net.ipv4.conf.can0.arp_ignore = 0
net.ipv4.conf.can0.arp_notify = 0
net.ipv4.conf.can0.bootp_relay = 0
net.ipv4.conf.can0.disable_policy = 0
net.ipv4.conf.can0.disable_xfrm = 0
net.ipv4.conf.can0.force_igmp_version = 0
net.ipv4.conf.can0.forwarding = 0
net.ipv4.conf.can0.igmpv2_unsolicited_report_interval = 10000
net.ipv4.conf.can0.igmpv3_unsolicited_report_interval = 1000
net.ipv4.conf.can0.log_martians = 0
net.ipv4.conf.can0.mc_forwarding = 0
net.ipv4.conf.can0.medium_id = 0
net.ipv4.conf.can0.promote_secondaries = 0
net.ipv4.conf.can0.proxy_arp = 0
net.ipv4.conf.can0.proxy_arp_pvlan = 0
net.ipv4.conf.can0.route_localnet = 0
net.ipv4.conf.can0.rp_filter = 1
net.ipv4.conf.can0.secure_redirects = 1
net.ipv4.conf.can0.send_redirects = 1
net.ipv4.conf.can0.shared_media = 1
net.ipv4.conf.can0.src_valid_mark = 0
net.ipv4.conf.can0.tag = 0
net.ipv4.conf.can1.accept_local = 0
net.ipv4.conf.can1.accept_redirects = 1
net.ipv4.conf.can1.accept_source_route = 1
net.ipv4.conf.can1.arp_accept = 0
net.ipv4.conf.can1.arp_announce = 0
net.ipv4.conf.can1.arp_filter = 0
net.ipv4.conf.can1.arp_ignore = 0
net.ipv4.conf.can1.arp_notify = 0
net.ipv4.conf.can1.bootp_relay = 0
net.ipv4.conf.can1.disable_policy = 0
net.ipv4.conf.can1.disable_xfrm = 0
net.ipv4.conf.can1.force_igmp_version = 0
net.ipv4.conf.can1.forwarding = 0
net.ipv4.conf.can1.igmpv2_unsolicited_report_interval = 10000
net.ipv4.conf.can1.igmpv3_unsolicited_report_interval = 1000
net.ipv4.conf.can1.log_martians = 0
net.ipv4.conf.can1.mc_forwarding = 0
net.ipv4.conf.can1.medium_id = 0
net.ipv4.conf.can1.promote_secondaries = 0
net.ipv4.conf.can1.proxy_arp = 0
net.ipv4.conf.can1.proxy_arp_pvlan = 0
net.ipv4.conf.can1.route_localnet = 0
net.ipv4.conf.can1.rp_filter = 1
net.ipv4.conf.can1.secure_redirects = 1
net.ipv4.conf.can1.send_redirects = 1
net.ipv4.conf.can1.shared_media = 1
net.ipv4.conf.can1.src_valid_mark = 0
net.ipv4.conf.can1.tag = 0
net.ipv4.conf.default.accept_local = 0
net.ipv4.conf.default.accept_redirects = 1
net.ipv4.conf.default.accept_source_route = 1
net.ipv4.conf.default.arp_accept = 0
net.ipv4.conf.default.arp_announce = 0
net.ipv4.conf.default.arp_filter = 0
net.ipv4.conf.default.arp_ignore = 0
net.ipv4.conf.default.arp_notify = 0
net.ipv4.conf.default.bootp_relay = 0
net.ipv4.conf.default.disable_policy = 0
net.ipv4.conf.default.disable_xfrm = 0
net.ipv4.conf.default.force_igmp_version = 0
net.ipv4.conf.default.forwarding = 0
net.ipv4.conf.default.igmpv2_unsolicited_report_interval = 10000
net.ipv4.conf.default.igmpv3_unsolicited_report_interval = 1000
net.ipv4.conf.default.log_martians = 0
net.ipv4.conf.default.mc_forwarding = 0
net.ipv4.conf.default.medium_id = 0
net.ipv4.conf.default.promote_secondaries = 0
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.default.proxy_arp_pvlan = 0
net.ipv4.conf.default.route_localnet = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.secure_redirects = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.default.shared_media = 1
net.ipv4.conf.default.src_valid_mark = 0
net.ipv4.conf.default.tag = 0
net.ipv4.conf.dsp0.accept_local = 0
net.ipv4.conf.dsp0.accept_redirects = 1
net.ipv4.conf.dsp0.accept_source_route = 1
net.ipv4.conf.dsp0.arp_accept = 0
net.ipv4.conf.dsp0.arp_announce = 0
net.ipv4.conf.dsp0.arp_filter = 0
net.ipv4.conf.dsp0.arp_ignore = 0
net.ipv4.conf.dsp0.arp_notify = 0
net.ipv4.conf.dsp0.bootp_relay = 0
net.ipv4.conf.dsp0.disable_policy = 0
net.ipv4.conf.dsp0.disable_xfrm = 0
net.ipv4.conf.dsp0.force_igmp_version = 0
net.ipv4.conf.dsp0.forwarding = 0
net.ipv4.conf.dsp0.igmpv2_unsolicited_report_interval = 10000
net.ipv4.conf.dsp0.igmpv3_unsolicited_report_interval = 1000
net.ipv4.conf.dsp0.log_martians = 0
net.ipv4.conf.dsp0.mc_forwarding = 0
net.ipv4.conf.dsp0.medium_id = 0
net.ipv4.conf.dsp0.promote_secondaries = 0
net.ipv4.conf.dsp0.proxy_arp = 0
net.ipv4.conf.dsp0.proxy_arp_pvlan = 0
net.ipv4.conf.dsp0.route_localnet = 0
net.ipv4.conf.dsp0.rp_filter = 1
net.ipv4.conf.dsp0.secure_redirects = 1
net.ipv4.conf.dsp0.send_redirects = 1
net.ipv4.conf.dsp0.shared_media = 1
net.ipv4.conf.dsp0.src_valid_mark = 0
net.ipv4.conf.dsp0.tag = 0
net.ipv4.conf.eth0.accept_local = 0
net.ipv4.conf.eth0.accept_redirects = 1
net.ipv4.conf.eth0.accept_source_route = 1
net.ipv4.conf.eth0.arp_accept = 0
net.ipv4.conf.eth0.arp_announce = 0
net.ipv4.conf.eth0.arp_filter = 0
net.ipv4.conf.eth0.arp_ignore = 0
net.ipv4.conf.eth0.arp_notify = 0
net.ipv4.conf.eth0.bootp_relay = 0
net.ipv4.conf.eth0.disable_policy = 0
net.ipv4.conf.eth0.disable_xfrm = 0
net.ipv4.conf.eth0.force_igmp_version = 0
net.ipv4.conf.eth0.forwarding = 0
net.ipv4.conf.eth0.igmpv2_unsolicited_report_interval = 10000
net.ipv4.conf.eth0.igmpv3_unsolicited_report_interval = 1000
net.ipv4.conf.eth0.log_martians = 0
net.ipv4.conf.eth0.mc_forwarding = 0
net.ipv4.conf.eth0.medium_id = 0
net.ipv4.conf.eth0.promote_secondaries = 0
net.ipv4.conf.eth0.proxy_arp = 0
net.ipv4.conf.eth0.proxy_arp_pvlan = 0
net.ipv4.conf.eth0.route_localnet = 0
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.eth0.secure_redirects = 1
net.ipv4.conf.eth0.send_redirects = 1
net.ipv4.conf.eth0.shared_media = 1
net.ipv4.conf.eth0.src_valid_mark = 0
net.ipv4.conf.eth0.tag = 0
net.ipv4.conf.lo.accept_local = 0
net.ipv4.conf.lo.accept_redirects = 1
net.ipv4.conf.lo.accept_source_route = 1
net.ipv4.conf.lo.arp_accept = 0
net.ipv4.conf.lo.arp_announce = 0
net.ipv4.conf.lo.arp_filter = 0
net.ipv4.conf.lo.arp_ignore = 0
net.ipv4.conf.lo.arp_notify = 0
net.ipv4.conf.lo.bootp_relay = 0
net.ipv4.conf.lo.disable_policy = 1
net.ipv4.conf.lo.disable_xfrm = 1
net.ipv4.conf.lo.force_igmp_version = 0
net.ipv4.conf.lo.forwarding = 0
net.ipv4.conf.lo.igmpv2_unsolicited_report_interval = 10000
net.ipv4.conf.lo.igmpv3_unsolicited_report_interval = 1000
net.ipv4.conf.lo.log_martians = 0
net.ipv4.conf.lo.mc_forwarding = 0
net.ipv4.conf.lo.medium_id = 0
net.ipv4.conf.lo.promote_secondaries = 0
net.ipv4.conf.lo.proxy_arp = 0
net.ipv4.conf.lo.proxy_arp_pvlan = 0
net.ipv4.conf.lo.route_localnet = 0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.lo.secure_redirects = 1
net.ipv4.conf.lo.send_redirects = 1
net.ipv4.conf.lo.shared_media = 1
net.ipv4.conf.lo.src_valid_mark = 0
net.ipv4.conf.lo.tag = 0
net.ipv4.conf.sit0.accept_local = 0
net.ipv4.conf.sit0.accept_redirects = 1
net.ipv4.conf.sit0.accept_source_route = 1
net.ipv4.conf.sit0.arp_accept = 0
net.ipv4.conf.sit0.arp_announce = 0
net.ipv4.conf.sit0.arp_filter = 0
net.ipv4.conf.sit0.arp_ignore = 0
net.ipv4.conf.sit0.arp_notify = 0
net.ipv4.conf.sit0.bootp_relay = 0
net.ipv4.conf.sit0.disable_policy = 0
net.ipv4.conf.sit0.disable_xfrm = 0
net.ipv4.conf.sit0.force_igmp_version = 0
net.ipv4.conf.sit0.forwarding = 0
net.ipv4.conf.sit0.igmpv2_unsolicited_report_interval = 10000
net.ipv4.conf.sit0.igmpv3_unsolicited_report_interval = 1000
net.ipv4.conf.sit0.log_martians = 0
net.ipv4.conf.sit0.mc_forwarding = 0
net.ipv4.conf.sit0.medium_id = 0
net.ipv4.conf.sit0.promote_secondaries = 0
net.ipv4.conf.sit0.proxy_arp = 0
net.ipv4.conf.sit0.proxy_arp_pvlan = 0
net.ipv4.conf.sit0.route_localnet = 0
net.ipv4.conf.sit0.rp_filter = 1
net.ipv4.conf.sit0.secure_redirects = 1
net.ipv4.conf.sit0.send_redirects = 1
net.ipv4.conf.sit0.shared_media = 1
net.ipv4.conf.sit0.src_valid_mark = 0
net.ipv4.conf.sit0.tag = 0
net.ipv4.fwmark_reflect = 0
net.ipv4.icmp_echo_ignore_all = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_echo_sysrq = 0
net.ipv4.icmp_errors_use_inbound_ifaddr = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.icmp_msgs_burst = 50
net.ipv4.icmp_msgs_per_sec = 1000
net.ipv4.icmp_ratelimit = 1000
net.ipv4.icmp_ratemask = 6168
net.ipv4.igmp_max_memberships = 20
net.ipv4.igmp_max_msf = 10
net.ipv4.inet_peer_maxttl = 600
net.ipv4.inet_peer_minttl = 120
net.ipv4.inet_peer_threshold = 65664
net.ipv4.ip_default_ttl = 64
net.ipv4.ip_dynaddr = 0
net.ipv4.ip_early_demux = 1
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_use_pmtu = 0
net.ipv4.ip_local_port_range = 32768    61000
net.ipv4.ip_local_reserved_ports =
net.ipv4.ip_no_pmtu_disc = 0
net.ipv4.ip_nonlocal_bind = 0
net.ipv4.ipfrag_high_thresh = 4194304
net.ipv4.ipfrag_low_thresh = 3145728
net.ipv4.ipfrag_max_dist = 64
net.ipv4.ipfrag_secret_interval = 0
net.ipv4.ipfrag_time = 30
net.ipv4.neigh.can0.anycast_delay = 100
net.ipv4.neigh.can0.app_solicit = 0
net.ipv4.neigh.can0.base_reachable_time_ms = 30000
net.ipv4.neigh.can0.delay_first_probe_time = 5
net.ipv4.neigh.can0.gc_stale_time = 60
net.ipv4.neigh.can0.locktime = 100
net.ipv4.neigh.can0.mcast_resolicit = 0
net.ipv4.neigh.can0.mcast_solicit = 3
net.ipv4.neigh.can0.proxy_delay = 80
net.ipv4.neigh.can0.proxy_qlen = 64
net.ipv4.neigh.can0.retrans_time_ms = 1000
net.ipv4.neigh.can0.ucast_solicit = 3
net.ipv4.neigh.can0.unres_qlen = 34
net.ipv4.neigh.can0.unres_qlen_bytes = 65536
net.ipv4.neigh.can1.anycast_delay = 100
net.ipv4.neigh.can1.app_solicit = 0
net.ipv4.neigh.can1.base_reachable_time_ms = 30000
net.ipv4.neigh.can1.delay_first_probe_time = 5
net.ipv4.neigh.can1.gc_stale_time = 60
net.ipv4.neigh.can1.locktime = 100
net.ipv4.neigh.can1.mcast_resolicit = 0
net.ipv4.neigh.can1.mcast_solicit = 3
net.ipv4.neigh.can1.proxy_delay = 80
net.ipv4.neigh.can1.proxy_qlen = 64
net.ipv4.neigh.can1.retrans_time_ms = 1000
net.ipv4.neigh.can1.ucast_solicit = 3
net.ipv4.neigh.can1.unres_qlen = 34
net.ipv4.neigh.can1.unres_qlen_bytes = 65536
net.ipv4.neigh.default.anycast_delay = 100
net.ipv4.neigh.default.app_solicit = 0
net.ipv4.neigh.default.base_reachable_time_ms = 30000
net.ipv4.neigh.default.delay_first_probe_time = 5
net.ipv4.neigh.default.gc_interval = 30
net.ipv4.neigh.default.gc_stale_time = 60
net.ipv4.neigh.default.gc_thresh1 = 128
net.ipv4.neigh.default.gc_thresh2 = 512
net.ipv4.neigh.default.gc_thresh3 = 1024
net.ipv4.neigh.default.locktime = 100
net.ipv4.neigh.default.mcast_resolicit = 0
net.ipv4.neigh.default.mcast_solicit = 3
net.ipv4.neigh.default.proxy_delay = 80
net.ipv4.neigh.default.proxy_qlen = 64
net.ipv4.neigh.default.retrans_time_ms = 1000
net.ipv4.neigh.default.ucast_solicit = 3
net.ipv4.neigh.default.unres_qlen = 34
net.ipv4.neigh.default.unres_qlen_bytes = 65536
net.ipv4.neigh.dsp0.anycast_delay = 100
net.ipv4.neigh.dsp0.app_solicit = 0
net.ipv4.neigh.dsp0.base_reachable_time_ms = 30000
net.ipv4.neigh.dsp0.delay_first_probe_time = 5
net.ipv4.neigh.dsp0.gc_stale_time = 60
net.ipv4.neigh.dsp0.locktime = 100
net.ipv4.neigh.dsp0.mcast_resolicit = 0
net.ipv4.neigh.dsp0.mcast_solicit = 3
net.ipv4.neigh.dsp0.proxy_delay = 80
net.ipv4.neigh.dsp0.proxy_qlen = 64
net.ipv4.neigh.dsp0.retrans_time_ms = 1000
net.ipv4.neigh.dsp0.ucast_solicit = 3
net.ipv4.neigh.dsp0.unres_qlen = 34
net.ipv4.neigh.dsp0.unres_qlen_bytes = 65536
net.ipv4.neigh.eth0.anycast_delay = 100
net.ipv4.neigh.eth0.app_solicit = 0
net.ipv4.neigh.eth0.base_reachable_time_ms = 30000
net.ipv4.neigh.eth0.delay_first_probe_time = 5
net.ipv4.neigh.eth0.gc_stale_time = 60
net.ipv4.neigh.eth0.locktime = 100
net.ipv4.neigh.eth0.mcast_resolicit = 0
net.ipv4.neigh.eth0.mcast_solicit = 3
net.ipv4.neigh.eth0.proxy_delay = 80
net.ipv4.neigh.eth0.proxy_qlen = 64
net.ipv4.neigh.eth0.retrans_time_ms = 1000
net.ipv4.neigh.eth0.ucast_solicit = 3
net.ipv4.neigh.eth0.unres_qlen = 34
net.ipv4.neigh.eth0.unres_qlen_bytes = 65536
net.ipv4.neigh.lo.anycast_delay = 100
net.ipv4.neigh.lo.app_solicit = 0
net.ipv4.neigh.lo.base_reachable_time_ms = 30000
net.ipv4.neigh.lo.delay_first_probe_time = 5
net.ipv4.neigh.lo.gc_stale_time = 60
net.ipv4.neigh.lo.locktime = 100
net.ipv4.neigh.lo.mcast_resolicit = 0
net.ipv4.neigh.lo.mcast_solicit = 3
net.ipv4.neigh.lo.proxy_delay = 80
net.ipv4.neigh.lo.proxy_qlen = 64
net.ipv4.neigh.lo.retrans_time_ms = 1000
net.ipv4.neigh.lo.ucast_solicit = 3
net.ipv4.neigh.lo.unres_qlen = 34
net.ipv4.neigh.lo.unres_qlen_bytes = 65536
net.ipv4.neigh.sit0.anycast_delay = 100
net.ipv4.neigh.sit0.app_solicit = 0
net.ipv4.neigh.sit0.base_reachable_time_ms = 30000
net.ipv4.neigh.sit0.delay_first_probe_time = 5
net.ipv4.neigh.sit0.gc_stale_time = 60
net.ipv4.neigh.sit0.locktime = 100
net.ipv4.neigh.sit0.mcast_resolicit = 0
net.ipv4.neigh.sit0.mcast_solicit = 3
net.ipv4.neigh.sit0.proxy_delay = 80
net.ipv4.neigh.sit0.proxy_qlen = 64
net.ipv4.neigh.sit0.retrans_time_ms = 1000
net.ipv4.neigh.sit0.ucast_solicit = 3
net.ipv4.neigh.sit0.unres_qlen = 34
net.ipv4.neigh.sit0.unres_qlen_bytes = 65536
net.ipv4.netfilter.ip_conntrack_buckets = 16384
net.ipv4.netfilter.ip_conntrack_checksum = 1
net.ipv4.netfilter.ip_conntrack_count = 3
net.ipv4.netfilter.ip_conntrack_generic_timeout = 600
net.ipv4.netfilter.ip_conntrack_icmp_timeout = 30
net.ipv4.netfilter.ip_conntrack_log_invalid = 0
net.ipv4.netfilter.ip_conntrack_max = 63932
net.ipv4.netfilter.ip_conntrack_sctp_timeout_closed = 10
net.ipv4.netfilter.ip_conntrack_sctp_timeout_cookie_echoed = 3
net.ipv4.netfilter.ip_conntrack_sctp_timeout_cookie_wait = 3
net.ipv4.netfilter.ip_conntrack_sctp_timeout_established = 432000
net.ipv4.netfilter.ip_conntrack_sctp_timeout_shutdown_ack_sent = 3
net.ipv4.netfilter.ip_conntrack_sctp_timeout_shutdown_recd = 0
net.ipv4.netfilter.ip_conntrack_sctp_timeout_shutdown_sent = 0
net.ipv4.netfilter.ip_conntrack_tcp_be_liberal = 0
net.ipv4.netfilter.ip_conntrack_tcp_loose = 1
net.ipv4.netfilter.ip_conntrack_tcp_max_retrans = 3
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close = 10
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 432000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_last_ack = 30
net.ipv4.netfilter.ip_conntrack_tcp_timeout_max_retrans = 300
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent2 = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.ip_conntrack_udp_timeout = 30
net.ipv4.netfilter.ip_conntrack_udp_timeout_stream = 180
net.ipv4.ping_group_range = 1   0
net.ipv4.route.error_burst = 500
net.ipv4.route.error_cost = 100
net.ipv4.route.gc_elasticity = 8
net.ipv4.route.gc_interval = 60
net.ipv4.route.gc_min_interval = 0
net.ipv4.route.gc_min_interval_ms = 500
net.ipv4.route.gc_thresh = -1
net.ipv4.route.gc_timeout = 300
net.ipv4.route.max_size = 2147483647
net.ipv4.route.min_adv_mss = 256
net.ipv4.route.min_pmtu = 552
net.ipv4.route.mtu_expires = 600
net.ipv4.route.redirect_load = 2
net.ipv4.route.redirect_number = 9
net.ipv4.route.redirect_silence = 2048
net.ipv4.tcp_abort_on_overflow = 0
net.ipv4.tcp_adv_win_scale = 1
net.ipv4.tcp_allowed_congestion_control = cubic reno
net.ipv4.tcp_app_win = 31
net.ipv4.tcp_autocorking = 1
net.ipv4.tcp_available_congestion_control = cubic reno
net.ipv4.tcp_base_mss = 1024
net.ipv4.tcp_challenge_ack_limit = 100
net.ipv4.tcp_congestion_control = cubic
net.ipv4.tcp_dsack = 1
net.ipv4.tcp_early_retrans = 3
net.ipv4.tcp_ecn = 2
net.ipv4.tcp_fack = 1
net.ipv4.tcp_fastopen = 1
net.ipv4.tcp_fastopen_key = 00000000-00000000-00000000-00000000
net.ipv4.tcp_fin_timeout = 60
net.ipv4.tcp_frto = 2
net.ipv4.tcp_fwmark_accept = 0
net.ipv4.tcp_invalid_ratelimit = 500
net.ipv4.tcp_keepalive_intvl = 75
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_time = 7200
net.ipv4.tcp_limit_output_bytes = 131072
net.ipv4.tcp_low_latency = 0
net.ipv4.tcp_max_orphans = 4096
net.ipv4.tcp_max_reordering = 300
net.ipv4.tcp_max_syn_backlog = 128
net.ipv4.tcp_max_tw_buckets = 4096
net.ipv4.tcp_mem = 23973        31967   47946
net.ipv4.tcp_min_tso_segs = 2
net.ipv4.tcp_moderate_rcvbuf = 1
net.ipv4.tcp_mtu_probing = 0
net.ipv4.tcp_no_metrics_save = 0
net.ipv4.tcp_notsent_lowat = -1
net.ipv4.tcp_orphan_retries = 0
net.ipv4.tcp_probe_interval = 600
net.ipv4.tcp_probe_threshold = 8
net.ipv4.tcp_reordering = 3
net.ipv4.tcp_retrans_collapse = 1
net.ipv4.tcp_retries1 = 3
net.ipv4.tcp_retries2 = 15
net.ipv4.tcp_rfc1337 = 0
net.ipv4.tcp_rmem = 4096        87380   6291456
net.ipv4.tcp_sack = 1
net.ipv4.tcp_slow_start_after_idle = 1
net.ipv4.tcp_stdurg = 0
net.ipv4.tcp_syn_retries = 6
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_thin_dupack = 0
net.ipv4.tcp_thin_linear_timeouts = 0
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_tso_win_divisor = 3
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_wmem = 4096        16384   4194304
net.ipv4.tcp_workaround_signed_windows = 0
net.ipv4.udp_mem = 23973        31967   47946
net.ipv4.udp_rmem_min = 4096
net.ipv4.udp_wmem_min = 4096
net.ipv4.xfrm4_gc_thresh = 32768
net.ipv6.anycast_src_echo_reply = 0
net.ipv6.auto_flowlabels = 0
net.ipv6.bindv6only = 0
net.ipv6.conf.all.accept_dad = 1
net.ipv6.conf.all.accept_ra = 1
net.ipv6.conf.all.accept_ra_defrtr = 1
net.ipv6.conf.all.accept_ra_from_local = 0
net.ipv6.conf.all.accept_ra_mtu = 1
net.ipv6.conf.all.accept_ra_pinfo = 1
net.ipv6.conf.all.accept_redirects = 1
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.all.autoconf = 1
net.ipv6.conf.all.dad_transmits = 1
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.all.force_mld_version = 0
net.ipv6.conf.all.force_tllao = 0
net.ipv6.conf.all.forwarding = 0
net.ipv6.conf.all.hop_limit = 64
net.ipv6.conf.all.max_addresses = 16
net.ipv6.conf.all.max_desync_factor = 600
net.ipv6.conf.all.mldv1_unsolicited_report_interval = 10000
net.ipv6.conf.all.mldv2_unsolicited_report_interval = 1000
net.ipv6.conf.all.mtu = 1280
net.ipv6.conf.all.ndisc_notify = 0
net.ipv6.conf.all.proxy_ndp = 0
net.ipv6.conf.all.regen_max_retry = 3
net.ipv6.conf.all.router_solicitation_delay = 1
net.ipv6.conf.all.router_solicitation_interval = 4
net.ipv6.conf.all.router_solicitations = 3
sysctl: reading key "net.ipv6.conf.all.stable_secret"
net.ipv6.conf.all.suppress_frag_ndisc = 1
net.ipv6.conf.all.temp_prefered_lft = 86400
net.ipv6.conf.all.temp_valid_lft = 604800
net.ipv6.conf.all.use_tempaddr = 2
net.ipv6.conf.default.accept_dad = 1
net.ipv6.conf.default.accept_ra = 1
net.ipv6.conf.default.accept_ra_defrtr = 1
net.ipv6.conf.default.accept_ra_from_local = 0
net.ipv6.conf.default.accept_ra_mtu = 1
net.ipv6.conf.default.accept_ra_pinfo = 1
net.ipv6.conf.default.accept_redirects = 1
net.ipv6.conf.default.accept_source_route = 0
net.ipv6.conf.default.autoconf = 1
net.ipv6.conf.default.dad_transmits = 1
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.default.force_mld_version = 0
net.ipv6.conf.default.force_tllao = 0
net.ipv6.conf.default.forwarding = 0
net.ipv6.conf.default.hop_limit = 64
net.ipv6.conf.default.max_addresses = 16
net.ipv6.conf.default.max_desync_factor = 600
net.ipv6.conf.default.mldv1_unsolicited_report_interval = 10000
net.ipv6.conf.default.mldv2_unsolicited_report_interval = 1000
net.ipv6.conf.default.mtu = 1280
net.ipv6.conf.default.ndisc_notify = 0
net.ipv6.conf.default.proxy_ndp = 0
net.ipv6.conf.default.regen_max_retry = 3
net.ipv6.conf.default.router_solicitation_delay = 1
net.ipv6.conf.default.router_solicitation_interval = 4
net.ipv6.conf.default.router_solicitations = 3
sysctl: reading key "net.ipv6.conf.default.stable_secret"
net.ipv6.conf.default.suppress_frag_ndisc = 1
net.ipv6.conf.default.temp_prefered_lft = 86400
net.ipv6.conf.default.temp_valid_lft = 604800
net.ipv6.conf.default.use_tempaddr = 2
net.ipv6.conf.dsp0.accept_dad = 1
net.ipv6.conf.dsp0.accept_ra = 1
net.ipv6.conf.dsp0.accept_ra_defrtr = 1
net.ipv6.conf.dsp0.accept_ra_from_local = 0
net.ipv6.conf.dsp0.accept_ra_mtu = 1
net.ipv6.conf.dsp0.accept_ra_pinfo = 1
net.ipv6.conf.dsp0.accept_redirects = 1
net.ipv6.conf.dsp0.accept_source_route = 0
net.ipv6.conf.dsp0.autoconf = 1
net.ipv6.conf.dsp0.dad_transmits = 1
net.ipv6.conf.dsp0.disable_ipv6 = 0
net.ipv6.conf.dsp0.force_mld_version = 0
net.ipv6.conf.dsp0.force_tllao = 0
net.ipv6.conf.dsp0.forwarding = 0
net.ipv6.conf.dsp0.hop_limit = 64
net.ipv6.conf.dsp0.max_addresses = 16
net.ipv6.conf.dsp0.max_desync_factor = 600
net.ipv6.conf.dsp0.mldv1_unsolicited_report_interval = 10000
net.ipv6.conf.dsp0.mldv2_unsolicited_report_interval = 1000
net.ipv6.conf.dsp0.mtu = 1500
net.ipv6.conf.dsp0.ndisc_notify = 0
net.ipv6.conf.dsp0.proxy_ndp = 0
net.ipv6.conf.dsp0.regen_max_retry = 3
net.ipv6.conf.dsp0.router_solicitation_delay = 1
net.ipv6.conf.dsp0.router_solicitation_interval = 4
net.ipv6.conf.dsp0.router_solicitations = 3
sysctl: reading key "net.ipv6.conf.dsp0.stable_secret"
net.ipv6.conf.dsp0.suppress_frag_ndisc = 1
net.ipv6.conf.dsp0.temp_prefered_lft = 86400
net.ipv6.conf.dsp0.temp_valid_lft = 604800
net.ipv6.conf.dsp0.use_tempaddr = 2
net.ipv6.conf.eth0.accept_dad = 1
net.ipv6.conf.eth0.accept_ra = 1
net.ipv6.conf.eth0.accept_ra_defrtr = 1
net.ipv6.conf.eth0.accept_ra_from_local = 0
net.ipv6.conf.eth0.accept_ra_mtu = 1
net.ipv6.conf.eth0.accept_ra_pinfo = 1
net.ipv6.conf.eth0.accept_redirects = 1
net.ipv6.conf.eth0.accept_source_route = 0
net.ipv6.conf.eth0.autoconf = 1
net.ipv6.conf.eth0.dad_transmits = 1
net.ipv6.conf.eth0.disable_ipv6 = 0
net.ipv6.conf.eth0.force_mld_version = 0
net.ipv6.conf.eth0.force_tllao = 0
net.ipv6.conf.eth0.forwarding = 0
net.ipv6.conf.eth0.hop_limit = 64
net.ipv6.conf.eth0.max_addresses = 16
net.ipv6.conf.eth0.max_desync_factor = 600
net.ipv6.conf.eth0.mldv1_unsolicited_report_interval = 10000
net.ipv6.conf.eth0.mldv2_unsolicited_report_interval = 1000
net.ipv6.conf.eth0.mtu = 1500
net.ipv6.conf.eth0.ndisc_notify = 0
net.ipv6.conf.eth0.proxy_ndp = 0
net.ipv6.conf.eth0.regen_max_retry = 3
net.ipv6.conf.eth0.router_solicitation_delay = 1
net.ipv6.conf.eth0.router_solicitation_interval = 4
net.ipv6.conf.eth0.router_solicitations = 3
sysctl: reading key "net.ipv6.conf.eth0.stable_secret"
net.ipv6.conf.eth0.suppress_frag_ndisc = 1
net.ipv6.conf.eth0.temp_prefered_lft = 86400
net.ipv6.conf.eth0.temp_valid_lft = 604800
net.ipv6.conf.eth0.use_tempaddr = 0
net.ipv6.conf.lo.accept_dad = -1
net.ipv6.conf.lo.accept_ra = 1
net.ipv6.conf.lo.accept_ra_defrtr = 1
net.ipv6.conf.lo.accept_ra_from_local = 0
net.ipv6.conf.lo.accept_ra_mtu = 1
net.ipv6.conf.lo.accept_ra_pinfo = 1
net.ipv6.conf.lo.accept_redirects = 1
net.ipv6.conf.lo.accept_source_route = 0
net.ipv6.conf.lo.autoconf = 1
net.ipv6.conf.lo.dad_transmits = 1
net.ipv6.conf.lo.disable_ipv6 = 0
net.ipv6.conf.lo.force_mld_version = 0
net.ipv6.conf.lo.force_tllao = 0
net.ipv6.conf.lo.forwarding = 0
net.ipv6.conf.lo.hop_limit = 64
net.ipv6.conf.lo.max_addresses = 16
net.ipv6.conf.lo.max_desync_factor = 600
net.ipv6.conf.lo.mldv1_unsolicited_report_interval = 10000
net.ipv6.conf.lo.mldv2_unsolicited_report_interval = 1000
net.ipv6.conf.lo.mtu = 65536
net.ipv6.conf.lo.ndisc_notify = 0
net.ipv6.conf.lo.proxy_ndp = 0
net.ipv6.conf.lo.regen_max_retry = 3
net.ipv6.conf.lo.router_solicitation_delay = 1
net.ipv6.conf.lo.router_solicitation_interval = 4
net.ipv6.conf.lo.router_solicitations = 3
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
net.ipv6.conf.lo.suppress_frag_ndisc = 1
net.ipv6.conf.lo.temp_prefered_lft = 86400
net.ipv6.conf.lo.temp_valid_lft = 604800
net.ipv6.conf.lo.use_tempaddr = -1
net.ipv6.conf.sit0.accept_dad = -1
net.ipv6.conf.sit0.accept_ra = 1
net.ipv6.conf.sit0.accept_ra_defrtr = 1
net.ipv6.conf.sit0.accept_ra_from_local = 0
net.ipv6.conf.sit0.accept_ra_mtu = 1
net.ipv6.conf.sit0.accept_ra_pinfo = 1
net.ipv6.conf.sit0.accept_redirects = 1
net.ipv6.conf.sit0.accept_source_route = 0
net.ipv6.conf.sit0.autoconf = 1
net.ipv6.conf.sit0.dad_transmits = 1
net.ipv6.conf.sit0.disable_ipv6 = 0
net.ipv6.conf.sit0.force_mld_version = 0
net.ipv6.conf.sit0.force_tllao = 0
net.ipv6.conf.sit0.forwarding = 0
net.ipv6.conf.sit0.hop_limit = 64
net.ipv6.conf.sit0.max_addresses = 16
net.ipv6.conf.sit0.max_desync_factor = 600
net.ipv6.conf.sit0.mldv1_unsolicited_report_interval = 10000
net.ipv6.conf.sit0.mldv2_unsolicited_report_interval = 1000
net.ipv6.conf.sit0.mtu = 1480
net.ipv6.conf.sit0.ndisc_notify = 0
net.ipv6.conf.sit0.proxy_ndp = 0
net.ipv6.conf.sit0.regen_max_retry = 3
net.ipv6.conf.sit0.router_solicitation_delay = 1
net.ipv6.conf.sit0.router_solicitation_interval = 4
net.ipv6.conf.sit0.router_solicitations = 3
sysctl: reading key "net.ipv6.conf.sit0.stable_secret"
net.ipv6.conf.sit0.suppress_frag_ndisc = 1
net.ipv6.conf.sit0.temp_prefered_lft = 86400
net.ipv6.conf.sit0.temp_valid_lft = 604800
net.ipv6.conf.sit0.use_tempaddr = -1
net.ipv6.flowlabel_consistency = 1
net.ipv6.fwmark_reflect = 0
net.ipv6.icmp.ratelimit = 1000
net.ipv6.idgen_delay = 1
net.ipv6.idgen_retries = 3
net.ipv6.ip6frag_high_thresh = 4194304
net.ipv6.ip6frag_low_thresh = 3145728
net.ipv6.ip6frag_secret_interval = 0
net.ipv6.ip6frag_time = 60
net.ipv6.mld_max_msf = 64
net.ipv6.mld_qrv = 2
net.ipv6.neigh.default.anycast_delay = 100
net.ipv6.neigh.default.app_solicit = 0
net.ipv6.neigh.default.base_reachable_time_ms = 30000
net.ipv6.neigh.default.delay_first_probe_time = 5
net.ipv6.neigh.default.gc_interval = 30
net.ipv6.neigh.default.gc_stale_time = 60
net.ipv6.neigh.default.gc_thresh1 = 128
net.ipv6.neigh.default.gc_thresh2 = 512
net.ipv6.neigh.default.gc_thresh3 = 1024
net.ipv6.neigh.default.locktime = 0
net.ipv6.neigh.default.mcast_resolicit = 0
net.ipv6.neigh.default.mcast_solicit = 3
net.ipv6.neigh.default.proxy_delay = 80
net.ipv6.neigh.default.proxy_qlen = 64
net.ipv6.neigh.default.retrans_time_ms = 1000
net.ipv6.neigh.default.ucast_solicit = 3
net.ipv6.neigh.default.unres_qlen = 34
net.ipv6.neigh.default.unres_qlen_bytes = 65536
net.ipv6.neigh.dsp0.anycast_delay = 100
net.ipv6.neigh.dsp0.app_solicit = 0
net.ipv6.neigh.dsp0.base_reachable_time_ms = 30000
net.ipv6.neigh.dsp0.delay_first_probe_time = 5
net.ipv6.neigh.dsp0.gc_stale_time = 60
net.ipv6.neigh.dsp0.locktime = 0
net.ipv6.neigh.dsp0.mcast_resolicit = 0
net.ipv6.neigh.dsp0.mcast_solicit = 3
net.ipv6.neigh.dsp0.proxy_delay = 80
net.ipv6.neigh.dsp0.proxy_qlen = 64
net.ipv6.neigh.dsp0.retrans_time_ms = 1000
net.ipv6.neigh.dsp0.ucast_solicit = 3
net.ipv6.neigh.dsp0.unres_qlen = 34
net.ipv6.neigh.dsp0.unres_qlen_bytes = 65536
net.ipv6.neigh.eth0.anycast_delay = 100
net.ipv6.neigh.eth0.app_solicit = 0
net.ipv6.neigh.eth0.base_reachable_time_ms = 30000
net.ipv6.neigh.eth0.delay_first_probe_time = 5
net.ipv6.neigh.eth0.gc_stale_time = 60
net.ipv6.neigh.eth0.locktime = 0
net.ipv6.neigh.eth0.mcast_resolicit = 0
net.ipv6.neigh.eth0.mcast_solicit = 3
net.ipv6.neigh.eth0.proxy_delay = 80
net.ipv6.neigh.eth0.proxy_qlen = 64
net.ipv6.neigh.eth0.retrans_time_ms = 1000
net.ipv6.neigh.eth0.ucast_solicit = 3
net.ipv6.neigh.eth0.unres_qlen = 34
net.ipv6.neigh.eth0.unres_qlen_bytes = 65536
net.ipv6.neigh.lo.anycast_delay = 100
net.ipv6.neigh.lo.app_solicit = 0
net.ipv6.neigh.lo.base_reachable_time_ms = 30000
net.ipv6.neigh.lo.delay_first_probe_time = 5
net.ipv6.neigh.lo.gc_stale_time = 60
net.ipv6.neigh.lo.locktime = 0
net.ipv6.neigh.lo.mcast_resolicit = 0
net.ipv6.neigh.lo.mcast_solicit = 3
net.ipv6.neigh.lo.proxy_delay = 80
net.ipv6.neigh.lo.proxy_qlen = 64
net.ipv6.neigh.lo.retrans_time_ms = 1000
net.ipv6.neigh.lo.ucast_solicit = 3
net.ipv6.neigh.lo.unres_qlen = 34
net.ipv6.neigh.lo.unres_qlen_bytes = 65536
net.ipv6.neigh.sit0.anycast_delay = 100
net.ipv6.neigh.sit0.app_solicit = 0
net.ipv6.neigh.sit0.base_reachable_time_ms = 30000
net.ipv6.neigh.sit0.delay_first_probe_time = 5
net.ipv6.neigh.sit0.gc_stale_time = 60
net.ipv6.neigh.sit0.locktime = 0
net.ipv6.neigh.sit0.mcast_resolicit = 0
net.ipv6.neigh.sit0.mcast_solicit = 3
net.ipv6.neigh.sit0.proxy_delay = 80
net.ipv6.neigh.sit0.proxy_qlen = 64
net.ipv6.neigh.sit0.retrans_time_ms = 1000
net.ipv6.neigh.sit0.ucast_solicit = 3
net.ipv6.neigh.sit0.unres_qlen = 34
net.ipv6.neigh.sit0.unres_qlen_bytes = 65536
net.ipv6.route.gc_elasticity = 9
net.ipv6.route.gc_interval = 30
net.ipv6.route.gc_min_interval = 0
net.ipv6.route.gc_min_interval_ms = 500
net.ipv6.route.gc_thresh = 1024
net.ipv6.route.gc_timeout = 60
net.ipv6.route.max_size = 4096
net.ipv6.route.min_adv_mss = 1220
net.ipv6.route.mtu_expires = 600
net.ipv6.xfrm6_gc_thresh = 32768
net.llc.llc2.timeout.ack = 1
net.llc.llc2.timeout.busy = 3
net.llc.llc2.timeout.p = 2
net.llc.llc2.timeout.rej = 3
net.netfilter.nf_conntrack_acct = 0
net.netfilter.nf_conntrack_buckets = 16384
net.netfilter.nf_conntrack_checksum = 1
net.netfilter.nf_conntrack_count = 3
net.netfilter.nf_conntrack_dccp_loose = 1
net.netfilter.nf_conntrack_dccp_timeout_closereq = 64
net.netfilter.nf_conntrack_dccp_timeout_closing = 64
net.netfilter.nf_conntrack_dccp_timeout_open = 43200
net.netfilter.nf_conntrack_dccp_timeout_partopen = 480
net.netfilter.nf_conntrack_dccp_timeout_request = 240
net.netfilter.nf_conntrack_dccp_timeout_respond = 480
net.netfilter.nf_conntrack_dccp_timeout_timewait = 240
net.netfilter.nf_conntrack_events = 1
net.netfilter.nf_conntrack_expect_max = 248
net.netfilter.nf_conntrack_generic_timeout = 600
net.netfilter.nf_conntrack_helper = 1
net.netfilter.nf_conntrack_icmp_timeout = 30
net.netfilter.nf_conntrack_log_invalid = 0
net.netfilter.nf_conntrack_max = 63932
net.netfilter.nf_conntrack_sctp_timeout_closed = 10
net.netfilter.nf_conntrack_sctp_timeout_cookie_echoed = 3
net.netfilter.nf_conntrack_sctp_timeout_cookie_wait = 3
net.netfilter.nf_conntrack_sctp_timeout_established = 432000
net.netfilter.nf_conntrack_sctp_timeout_shutdown_ack_sent = 3
net.netfilter.nf_conntrack_sctp_timeout_shutdown_recd = 0
net.netfilter.nf_conntrack_sctp_timeout_shutdown_sent = 0
net.netfilter.nf_conntrack_tcp_be_liberal = 0
net.netfilter.nf_conntrack_tcp_loose = 1
net.netfilter.nf_conntrack_tcp_max_retrans = 3
net.netfilter.nf_conntrack_tcp_timeout_close = 10
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_established = 432000
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 30
net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 300
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 60
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 120
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 300
net.netfilter.nf_conntrack_udp_timeout = 30
net.netfilter.nf_conntrack_udp_timeout_stream = 180
net.netfilter.nf_conntrack_udplite_timeout = 30
net.netfilter.nf_conntrack_udplite_timeout_stream = 180
net.netfilter.nf_log.0 = NONE
net.netfilter.nf_log.1 = NONE
net.netfilter.nf_log.10 = NONE
net.netfilter.nf_log.11 = NONE
net.netfilter.nf_log.12 = NONE
net.netfilter.nf_log.2 = NONE
net.netfilter.nf_log.3 = NONE
net.netfilter.nf_log.4 = NONE
net.netfilter.nf_log.5 = NONE
net.netfilter.nf_log.6 = NONE
net.netfilter.nf_log.7 = NONE
net.netfilter.nf_log.8 = NONE
net.netfilter.nf_log.9 = NONE
net.nf_conntrack_max = 63932
net.unix.max_dgram_qlen = 512
vm.admin_reserve_kbytes = 8192
vm.block_dump = 0
vm.compact_unevictable_allowed = 1
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 10
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 3000
vm.dirty_ratio = 20
vm.dirty_writeback_centisecs = 500
vm.dirtytime_expire_seconds = 43200
vm.drop_caches = 0
vm.extfrag_threshold = 500
vm.highmem_is_dirtyable = 0
vm.laptop_mode = 0
vm.legacy_va_layout = 0
vm.lowmem_reserve_ratio = 32    32
vm.max_map_count = 65530
vm.min_free_kbytes = 4045
vm.mmap_min_addr = 32768
vm.nr_pdflush_threads = 0
vm.oom_dump_tasks = 1
vm.oom_kill_allocating_task = 0
vm.overcommit_kbytes = 0
vm.overcommit_memory = 0
vm.overcommit_ratio = 50
vm.page-cluster = 3
vm.panic_on_oom = 0
vm.percpu_pagelist_fraction = 0
vm.stat_interval = 1
vm.swappiness = 60
vm.user_reserve_kbytes = 31886
vm.vfs_cache_pressure = 100

Euler 系统

sudo wget https://github.com/moby/moby/blob/master/contrib/check-config.sh

# 网不行,从这里下载
sudo wget https://gitee.com/okhoogh/moby/blob/master/contrib/check-config.sh

sudo chmod 755 ./check-config.sh

./check-config.sh

# 上述脚本直接下载运行报错 【放弃】
root@r222:/opt/sen# ./check-config.sh
./check-config.sh: line 1: syntax error near unexpected token `newline'
./check-config.sh: line 1: `<!DOCTYPE html>'

# 从 git 上拷贝脚本内容到本地运行,打印如下
info: reading kernel config from /proc/config.gz ...

Generally Necessary:
- cgroup hierarchy: properly mounted [/sys/fs/cgroup]
- CONFIG_NAMESPACES: enabled
- CONFIG_NET_NS: enabled
- CONFIG_PID_NS: enabled
- CONFIG_IPC_NS: enabled
- CONFIG_UTS_NS: enabled
- CONFIG_CGROUPS: enabled
- CONFIG_CGROUP_CPUACCT: enabled
- CONFIG_CGROUP_DEVICE: enabled
- CONFIG_CGROUP_FREEZER: enabled
- CONFIG_CGROUP_SCHED: enabled
- CONFIG_CPUSETS: enabled
- CONFIG_MEMCG: enabled
- CONFIG_KEYS: enabled
- CONFIG_VETH: enabled (as module)
- CONFIG_BRIDGE: enabled (as module)
- CONFIG_BRIDGE_NETFILTER: enabled (as module)
- CONFIG_IP_NF_FILTER: enabled (as module)
- CONFIG_IP_NF_MANGLE: enabled (as module)
- CONFIG_IP_NF_TARGET_MASQUERADE: enabled (as module)
- CONFIG_NETFILTER_XT_MATCH_ADDRTYPE: enabled (as module)
- CONFIG_NETFILTER_XT_MATCH_CONNTRACK: enabled (as module)
- CONFIG_NETFILTER_XT_MATCH_IPVS: enabled (as module)
- CONFIG_NETFILTER_XT_MARK: enabled (as module)
- CONFIG_IP_NF_NAT: enabled (as module)
- CONFIG_NF_NAT: enabled (as module)
- CONFIG_POSIX_MQUEUE: enabled
- CONFIG_CGROUP_BPF: enabled

Optional Features:
- CONFIG_USER_NS: enabled
- CONFIG_SECCOMP: enabled
- CONFIG_SECCOMP_FILTER: enabled
- CONFIG_CGROUP_PIDS: enabled
- CONFIG_MEMCG_SWAP: enabled
    (cgroup swap accounting is currently enabled)
- CONFIG_BLK_CGROUP: enabled
- CONFIG_BLK_DEV_THROTTLING: enabled
- CONFIG_CGROUP_PERF: enabled
- CONFIG_CGROUP_HUGETLB: enabled
- CONFIG_NET_CLS_CGROUP: enabled
- CONFIG_CGROUP_NET_PRIO: enabled
- CONFIG_CFS_BANDWIDTH: enabled
- CONFIG_FAIR_GROUP_SCHED: enabled
- CONFIG_IP_NF_TARGET_REDIRECT: enabled (as module)
- CONFIG_IP_VS: enabled (as module)
- CONFIG_IP_VS_NFCT: enabled
- CONFIG_IP_VS_PROTO_TCP: enabled
- CONFIG_IP_VS_PROTO_UDP: enabled
- CONFIG_IP_VS_RR: enabled (as module)
- CONFIG_SECURITY_SELINUX: enabled
- CONFIG_SECURITY_APPARMOR: missing
- CONFIG_EXT3_FS: missing
- CONFIG_EXT3_FS_XATTR: missing
- CONFIG_EXT3_FS_POSIX_ACL: missing
- CONFIG_EXT3_FS_SECURITY: missing
    (enable these ext3 configs if you are using ext3 as backing filesystem)
- CONFIG_EXT4_FS: enabled
- CONFIG_EXT4_FS_POSIX_ACL: enabled
- CONFIG_EXT4_FS_SECURITY: enabled
- Network Drivers:
  - "overlay":
    - CONFIG_VXLAN: enabled (as module)
    - CONFIG_BRIDGE_VLAN_FILTERING: enabled
      Optional (for encrypted networks):
      - CONFIG_CRYPTO: enabled
      - CONFIG_CRYPTO_AEAD: enabled
      - CONFIG_CRYPTO_GCM: enabled
      - CONFIG_CRYPTO_SEQIV: enabled
      - CONFIG_CRYPTO_GHASH: enabled
      - CONFIG_XFRM: enabled
      - CONFIG_XFRM_USER: enabled
      - CONFIG_XFRM_ALGO: enabled
      - CONFIG_INET_ESP: enabled (as module)
      - CONFIG_NETFILTER_XT_MATCH_BPF: enabled (as module)
  - "ipvlan":
    - CONFIG_IPVLAN: enabled (as module)
  - "macvlan":
    - CONFIG_MACVLAN: enabled (as module)
    - CONFIG_DUMMY: enabled (as module)
  - "ftp,tftp client in container":
    - CONFIG_NF_NAT_FTP: enabled (as module)
    - CONFIG_NF_CONNTRACK_FTP: enabled (as module)
    - CONFIG_NF_NAT_TFTP: enabled (as module)
    - CONFIG_NF_CONNTRACK_TFTP: enabled (as module)
- Storage Drivers:
  - "btrfs":
    - CONFIG_BTRFS_FS: missing
    - CONFIG_BTRFS_FS_POSIX_ACL: missing
  - "overlay":
    - CONFIG_OVERLAY_FS: enabled (as module)
  - "zfs":
    - /dev/zfs: missing
    - zfs command: missing
    - zpool command: missing

Limits:
- /proc/sys/kernel/keys/root_maxkeys: 1000000

# 命令
sysctl -a

# 输出
abi.sve_default_vector_length = 32
abi.tagged_addr_disabled = 0
debug.exception-trace = 0
dev.raid.speed_limit_max = 200000
dev.raid.speed_limit_min = 1000
dev.scsi.logging_level = 0
dev.tty.ldisc_autoload = 1
fs.aio-max-nr = 65536
fs.aio-nr = 0
fs.binfmt_misc.status = enabled
fs.dentry-state = 32716 13320   45      0       4168    0
fs.dir-notify-enable = 1
fs.epoll.max_user_watches = 1518510
fs.file-max = 9223372036854775807
fs.file-nr = 9408       0       9223372036854775807
fs.inode-nr = 29398     1453
fs.inode-state = 29398  1453    0       0       0       0       0
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 128
fs.inotify.max_user_watches = 8192
fs.lease-break-time = 45
fs.leases-enable = 1
fs.mount-max = 100000
fs.mqueue.msg_default = 10
fs.mqueue.msg_max = 10
fs.mqueue.msgsize_default = 8192
fs.mqueue.msgsize_max = 8192
fs.mqueue.queues_max = 256
fs.nr_open = 1073741816
fs.overflowgid = 65534
fs.overflowuid = 65534
fs.pipe-max-size = 1048576
fs.pipe-user-pages-hard = 0
fs.pipe-user-pages-soft = 16384
fs.protected_fifos = 1
fs.protected_hardlinks = 1
fs.protected_regular = 1
fs.protected_symlinks = 1
fs.quota.allocated_dquots = 0
fs.quota.cache_hits = 0
fs.quota.drops = 0
fs.quota.free_dquots = 0
fs.quota.lookups = 0
fs.quota.reads = 0
fs.quota.syncs = 2
fs.quota.warnings = 1
fs.quota.writes = 0
fs.suid_dumpable = 2
kernel.acct = 4 2       30
kernel.auto_msgmni = 0
kernel.bpf_stats_enabled = 0
kernel.cad_pid = 1
kernel.cap_last_cap = 40
kernel.core_pattern = |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h
kernel.core_pipe_limit = 16
kernel.core_uses_pid = 1
kernel.corelockup_thresh = 5
kernel.ctrl-alt-del = 0
kernel.dmesg_restrict = 0
kernel.domainname = (none)
kernel.ftrace_dump_on_oops = 0
kernel.ftrace_enabled = 1
kernel.hardlockup_all_cpu_backtrace = 0
kernel.hardlockup_panic = 1
kernel.hostname = orangepiaipro
kernel.hung_task_all_cpu_backtrace = 0
kernel.hung_task_check_count = 4194304
kernel.hung_task_check_interval_secs = 0
kernel.hung_task_panic = 0
kernel.hung_task_timeout_secs = 120
kernel.hung_task_warnings = 10
kernel.kexec_load_disabled = 0
kernel.keys.gc_delay = 300
kernel.keys.maxbytes = 20000
kernel.keys.maxkeys = 200
kernel.keys.persistent_keyring_expiry = 259200
kernel.keys.root_maxbytes = 25000000
kernel.keys.root_maxkeys = 1000000
kernel.kptr_restrict = 0
kernel.machine_check_safe = 1
kernel.max_lock_depth = 1024
kernel.modprobe = /sbin/modprobe
kernel.modules_disabled = 0
kernel.msg_next_id = -1
kernel.msgmax = 8192
kernel.msgmnb = 16384
kernel.msgmni = 32000
kernel.ngroups_max = 65536
kernel.nmi_watchdog = 1
kernel.ns_last_pid = 3112
kernel.numa_balancing = 0
kernel.numa_balancing_scan_delay_ms = 1000
kernel.numa_balancing_scan_period_max_ms = 60000
kernel.numa_balancing_scan_period_min_ms = 1000
kernel.numa_balancing_scan_size_mb = 256
kernel.oops_all_cpu_backtrace = 0
kernel.osrelease = 5.10.0+
kernel.ostype = Linux
kernel.overflowgid = 65534
kernel.overflowuid = 65534
kernel.panic = 0
kernel.panic_on_oops = 1
kernel.panic_on_rcu_stall = 0
kernel.panic_on_warn = 0
kernel.panic_print = 0
kernel.perf_cpu_time_max_percent = 25
kernel.perf_event_max_contexts_per_stack = 8
kernel.perf_event_max_sample_rate = 100000
kernel.perf_event_max_stack = 127
kernel.perf_event_mlock_kb = 516
kernel.perf_event_paranoid = 2
kernel.pid_max = 4194304
kernel.poweroff_cmd = /sbin/poweroff
kernel.print-fatal-signals = 0
kernel.printk = 0       4       0       7
kernel.printk_delay = 0
kernel.printk_devkmsg = on
kernel.printk_ratelimit = 5
kernel.printk_ratelimit_burst = 10
kernel.pty.max = 4096
kernel.pty.nr = 2
kernel.pty.reserve = 1024
kernel.random.boot_id = 044875d8-5881-4242-96b6-4cc2e179062d
kernel.random.entropy_avail = 256
kernel.random.poolsize = 256
kernel.random.urandom_min_reseed_secs = 60
kernel.random.uuid = 65057b8b-8e7e-42bb-b5c8-72788afaf125
kernel.random.write_wakeup_threshold = 256
kernel.randomize_va_space = 2
kernel.real-root-dev = 0
kernel.sched_autogroup_enabled = 1
kernel.sched_cfs_bandwidth_slice_us = 5000
kernel.sched_child_runs_first = 0
kernel.sched_deadline_period_max_us = 4194304
kernel.sched_deadline_period_min_us = 100
kernel.sched_domain.cpu0.domain0.busy_factor = 16
kernel.sched_domain.cpu0.domain0.cache_nice_tries = 1
kernel.sched_domain.cpu0.domain0.flags = SD_BALANCE_NEWIDLE SD_BALANCE_EXEC SD_BALANCE_FORK SD_WAKE_AFFINE SD_SHARE_PKG_RESOURCES SD_PREFER_SIBLING
kernel.sched_domain.cpu0.domain0.imbalance_pct = 117
kernel.sched_domain.cpu0.domain0.max_interval = 8
kernel.sched_domain.cpu0.domain0.max_newidle_lb_cost = 11416
kernel.sched_domain.cpu0.domain0.min_interval = 4
kernel.sched_domain.cpu0.domain0.name = MC
kernel.sched_domain.cpu1.domain0.busy_factor = 16
kernel.sched_domain.cpu1.domain0.cache_nice_tries = 1
kernel.sched_domain.cpu1.domain0.flags = SD_BALANCE_NEWIDLE SD_BALANCE_EXEC SD_BALANCE_FORK SD_WAKE_AFFINE SD_SHARE_PKG_RESOURCES SD_PREFER_SIBLING
kernel.sched_domain.cpu1.domain0.imbalance_pct = 117
kernel.sched_domain.cpu1.domain0.max_interval = 8
kernel.sched_domain.cpu1.domain0.max_newidle_lb_cost = 13417
kernel.sched_domain.cpu1.domain0.min_interval = 4
kernel.sched_domain.cpu1.domain0.name = MC
kernel.sched_domain.cpu2.domain0.busy_factor = 16
kernel.sched_domain.cpu2.domain0.cache_nice_tries = 1
kernel.sched_domain.cpu2.domain0.flags = SD_BALANCE_NEWIDLE SD_BALANCE_EXEC SD_BALANCE_FORK SD_WAKE_AFFINE SD_SHARE_PKG_RESOURCES SD_PREFER_SIBLING
kernel.sched_domain.cpu2.domain0.imbalance_pct = 117
kernel.sched_domain.cpu2.domain0.max_interval = 8
kernel.sched_domain.cpu2.domain0.max_newidle_lb_cost = 11802
kernel.sched_domain.cpu2.domain0.min_interval = 4
kernel.sched_domain.cpu2.domain0.name = MC
kernel.sched_domain.cpu3.domain0.busy_factor = 16
kernel.sched_domain.cpu3.domain0.cache_nice_tries = 1
kernel.sched_domain.cpu3.domain0.flags = SD_BALANCE_NEWIDLE SD_BALANCE_EXEC SD_BALANCE_FORK SD_WAKE_AFFINE SD_SHARE_PKG_RESOURCES SD_PREFER_SIBLING
kernel.sched_domain.cpu3.domain0.imbalance_pct = 117
kernel.sched_domain.cpu3.domain0.max_interval = 8
kernel.sched_domain.cpu3.domain0.max_newidle_lb_cost = 7021
kernel.sched_domain.cpu3.domain0.min_interval = 4
kernel.sched_domain.cpu3.domain0.name = MC
kernel.sched_latency_ns = 18000000
kernel.sched_migration_cost_ns = 500000
kernel.sched_min_granularity_ns = 2250000
kernel.sched_nr_migrate = 32
kernel.sched_rr_timeslice_ms = 100
kernel.sched_rt_period_us = 1000000
kernel.sched_rt_runtime_us = 950000
kernel.sched_schedstats = 0
kernel.sched_tunable_scaling = 1
kernel.sched_wakeup_granularity_ns = 3000000
kernel.seccomp.actions_avail = kill_process kill_thread trap errno user_notif trace log allow
kernel.seccomp.actions_logged = kill_process kill_thread trap errno user_notif trace log
kernel.sem = 32000      1024000000      500     32000
kernel.sem_next_id = -1
kernel.shm_next_id = -1
kernel.shm_rmid_forced = 0
kernel.shmall = 18446744073692774399
kernel.shmmax = 18446744073692774399
kernel.shmmni = 4096
kernel.soft_watchdog = 1
kernel.softlockup_all_cpu_backtrace = 0
kernel.softlockup_panic = 1
kernel.stack_tracer_enabled = 0
kernel.sysctl_writes_strict = 1
kernel.sysrq = 16
kernel.tainted = 12289
kernel.threads-max = 51783
kernel.timer_migration = 1
kernel.traceoff_on_warning = 0
kernel.tracepoint_printk = 0
kernel.unprivileged_bpf_disabled = 0
kernel.usermodehelper.bset = 4294967295 511
kernel.usermodehelper.inheritable = 4294967295  511
kernel.version = #1 SMP Tue Jan 30 11:14:55 CST 2024
kernel.watchdog = 1
kernel.watchdog_cpumask = 0-3
kernel.watchdog_thresh = 10
kernel.yama.ptrace_scope = 0
net.bridge.bridge-nf-call-arptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-filter-pppoe-tagged = 0
net.bridge.bridge-nf-filter-vlan-tagged = 0
net.bridge.bridge-nf-pass-vlan-input-dev = 0
net.core.bpf_jit_enable = 1
net.core.bpf_jit_harden = 0
net.core.bpf_jit_kallsyms = 1
net.core.bpf_jit_limit = 67108864
net.core.busy_poll = 0
net.core.busy_read = 0
net.core.default_qdisc = fq_codel
net.core.dev_weight = 64
net.core.dev_weight_rx_bias = 1
net.core.dev_weight_tx_bias = 1
net.core.devconf_inherit_init_net = 0
net.core.fb_tunnels_only_for_init_net = 0
net.core.flow_limit_cpu_bitmap = 0
net.core.flow_limit_table_len = 4096
net.core.gro_normal_batch = 8
net.core.high_order_alloc_disable = 0
net.core.max_skb_frags = 17
net.core.message_burst = 10
net.core.message_cost = 5
net.core.netdev_budget = 300
net.core.netdev_budget_usecs = 8000
net.core.netdev_max_backlog = 1000
net.core.netdev_rss_key = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
net.core.netdev_tstamp_prequeue = 1
net.core.optmem_max = 81920
net.core.rmem_default = 212992
net.core.rmem_max = 16777216
net.core.rps_sock_flow_entries = 0
net.core.somaxconn = 4096
net.core.tstamp_allow_data = 1
net.core.warnings = 0
net.core.wmem_default = 212992
net.core.wmem_max = 2097152
net.core.xfrm_acq_expires = 30
net.core.xfrm_aevent_etime = 10
net.core.xfrm_aevent_rseqth = 2
net.core.xfrm_larval_drop = 1
net.ipv4.cipso_cache_bucket_size = 10
net.ipv4.cipso_cache_enable = 1
net.ipv4.cipso_rbm_optfmt = 0
net.ipv4.cipso_rbm_strictvalid = 1
net.ipv4.conf.all.accept_local = 0
net.ipv4.conf.all.accept_redirects = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.arp_accept = 0
net.ipv4.conf.all.arp_announce = 0
net.ipv4.conf.all.arp_filter = 0
net.ipv4.conf.all.arp_ignore = 0
net.ipv4.conf.all.arp_notify = 0
net.ipv4.conf.all.bc_forwarding = 0
net.ipv4.conf.all.bootp_relay = 0
net.ipv4.conf.all.disable_policy = 0
net.ipv4.conf.all.disable_xfrm = 0
net.ipv4.conf.all.drop_gratuitous_arp = 0
net.ipv4.conf.all.drop_unicast_in_l2_multicast = 0
net.ipv4.conf.all.force_igmp_version = 0
net.ipv4.conf.all.forwarding = 0
net.ipv4.conf.all.igmpv2_unsolicited_report_interval = 10000
net.ipv4.conf.all.igmpv3_unsolicited_report_interval = 1000
net.ipv4.conf.all.ignore_routes_with_linkdown = 0
net.ipv4.conf.all.log_martians = 0
net.ipv4.conf.all.mc_forwarding = 0
net.ipv4.conf.all.medium_id = 0
net.ipv4.conf.all.promote_secondaries = 0
net.ipv4.conf.all.proxy_arp = 0
net.ipv4.conf.all.proxy_arp_pvlan = 0
net.ipv4.conf.all.route_localnet = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.all.secure_redirects = 1
net.ipv4.conf.all.send_redirects = 1
net.ipv4.conf.all.shared_media = 1
net.ipv4.conf.all.src_valid_mark = 0
net.ipv4.conf.all.tag = 0
net.ipv4.conf.bond0.accept_local = 0
net.ipv4.conf.bond0.accept_redirects = 1
net.ipv4.conf.bond0.accept_source_route = 0
net.ipv4.conf.bond0.arp_accept = 0
net.ipv4.conf.bond0.arp_announce = 0
net.ipv4.conf.bond0.arp_filter = 0
net.ipv4.conf.bond0.arp_ignore = 0
net.ipv4.conf.bond0.arp_notify = 0
net.ipv4.conf.bond0.bc_forwarding = 0
net.ipv4.conf.bond0.bootp_relay = 0
net.ipv4.conf.bond0.disable_policy = 0
net.ipv4.conf.bond0.disable_xfrm = 0
net.ipv4.conf.bond0.drop_gratuitous_arp = 0
net.ipv4.conf.bond0.drop_unicast_in_l2_multicast = 0
net.ipv4.conf.bond0.force_igmp_version = 0
net.ipv4.conf.bond0.forwarding = 0
net.ipv4.conf.bond0.igmpv2_unsolicited_report_interval = 10000
net.ipv4.conf.bond0.igmpv3_unsolicited_report_interval = 1000
net.ipv4.conf.bond0.ignore_routes_with_linkdown = 0
net.ipv4.conf.bond0.log_martians = 0
net.ipv4.conf.bond0.mc_forwarding = 0
net.ipv4.conf.bond0.medium_id = 0
net.ipv4.conf.bond0.promote_secondaries = 1
net.ipv4.conf.bond0.proxy_arp = 0
net.ipv4.conf.bond0.proxy_arp_pvlan = 0
net.ipv4.conf.bond0.route_localnet = 0
net.ipv4.conf.bond0.rp_filter = 2
net.ipv4.conf.bond0.secure_redirects = 1
net.ipv4.conf.bond0.send_redirects = 1
net.ipv4.conf.bond0.shared_media = 1
net.ipv4.conf.bond0.src_valid_mark = 0
net.ipv4.conf.bond0.tag = 0
net.ipv4.conf.default.accept_local = 0
net.ipv4.conf.default.accept_redirects = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.arp_accept = 0
net.ipv4.conf.default.arp_announce = 0
net.ipv4.conf.default.arp_filter = 0
net.ipv4.conf.default.arp_ignore = 0
net.ipv4.conf.default.arp_notify = 0
net.ipv4.conf.default.bc_forwarding = 0
net.ipv4.conf.default.bootp_relay = 0
net.ipv4.conf.default.disable_policy = 0
net.ipv4.conf.default.disable_xfrm = 0
net.ipv4.conf.default.drop_gratuitous_arp = 0
net.ipv4.conf.default.drop_unicast_in_l2_multicast = 0
net.ipv4.conf.default.force_igmp_version = 0
net.ipv4.conf.default.forwarding = 0
net.ipv4.conf.default.igmpv2_unsolicited_report_interval = 10000
net.ipv4.conf.default.igmpv3_unsolicited_report_interval = 1000
net.ipv4.conf.default.ignore_routes_with_linkdown = 0
net.ipv4.conf.default.log_martians = 0
net.ipv4.conf.default.mc_forwarding = 0
net.ipv4.conf.default.medium_id = 0
net.ipv4.conf.default.promote_secondaries = 1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.default.proxy_arp_pvlan = 0
net.ipv4.conf.default.route_localnet = 0
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.default.secure_redirects = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.default.shared_media = 1
net.ipv4.conf.default.src_valid_mark = 0
net.ipv4.conf.default.tag = 0
net.ipv4.conf.eth0.accept_local = 0
net.ipv4.conf.eth0.accept_redirects = 1
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.eth0.arp_accept = 0
net.ipv4.conf.eth0.arp_announce = 0
net.ipv4.conf.eth0.arp_filter = 0
net.ipv4.conf.eth0.arp_ignore = 0
net.ipv4.conf.eth0.arp_notify = 0
net.ipv4.conf.eth0.bc_forwarding = 0
net.ipv4.conf.eth0.bootp_relay = 0
net.ipv4.conf.eth0.disable_policy = 0
net.ipv4.conf.eth0.disable_xfrm = 0
net.ipv4.conf.eth0.drop_gratuitous_arp = 0
net.ipv4.conf.eth0.drop_unicast_in_l2_multicast = 0
net.ipv4.conf.eth0.force_igmp_version = 0
net.ipv4.conf.eth0.forwarding = 0
net.ipv4.conf.eth0.igmpv2_unsolicited_report_interval = 10000
net.ipv4.conf.eth0.igmpv3_unsolicited_report_interval = 1000
net.ipv4.conf.eth0.ignore_routes_with_linkdown = 0
net.ipv4.conf.eth0.log_martians = 0
net.ipv4.conf.eth0.mc_forwarding = 0
net.ipv4.conf.eth0.medium_id = 0
net.ipv4.conf.eth0.promote_secondaries = 1
net.ipv4.conf.eth0.proxy_arp = 0
net.ipv4.conf.eth0.proxy_arp_pvlan = 0
net.ipv4.conf.eth0.route_localnet = 0
net.ipv4.conf.eth0.rp_filter = 2
net.ipv4.conf.eth0.secure_redirects = 1
net.ipv4.conf.eth0.send_redirects = 1
net.ipv4.conf.eth0.shared_media = 1
net.ipv4.conf.eth0.src_valid_mark = 0
net.ipv4.conf.eth0.tag = 0
net.ipv4.conf.lo.accept_local = 0
net.ipv4.conf.lo.accept_redirects = 1
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.lo.arp_accept = 0
net.ipv4.conf.lo.arp_announce = 0
net.ipv4.conf.lo.arp_filter = 0
net.ipv4.conf.lo.arp_ignore = 0
net.ipv4.conf.lo.arp_notify = 0
net.ipv4.conf.lo.bc_forwarding = 0
net.ipv4.conf.lo.bootp_relay = 0
net.ipv4.conf.lo.disable_policy = 1
net.ipv4.conf.lo.disable_xfrm = 1
net.ipv4.conf.lo.drop_gratuitous_arp = 0
net.ipv4.conf.lo.drop_unicast_in_l2_multicast = 0
net.ipv4.conf.lo.force_igmp_version = 0
net.ipv4.conf.lo.forwarding = 0
net.ipv4.conf.lo.igmpv2_unsolicited_report_interval = 10000
net.ipv4.conf.lo.igmpv3_unsolicited_report_interval = 1000
net.ipv4.conf.lo.ignore_routes_with_linkdown = 0
net.ipv4.conf.lo.log_martians = 0
net.ipv4.conf.lo.mc_forwarding = 0
net.ipv4.conf.lo.medium_id = 0
net.ipv4.conf.lo.promote_secondaries = 1
net.ipv4.conf.lo.proxy_arp = 0
net.ipv4.conf.lo.proxy_arp_pvlan = 0
net.ipv4.conf.lo.route_localnet = 0
net.ipv4.conf.lo.rp_filter = 2
net.ipv4.conf.lo.secure_redirects = 1
net.ipv4.conf.lo.send_redirects = 1
net.ipv4.conf.lo.shared_media = 1
net.ipv4.conf.lo.src_valid_mark = 0
net.ipv4.conf.lo.tag = 0
net.ipv4.conf.wlan0.accept_local = 0
net.ipv4.conf.wlan0.accept_redirects = 1
net.ipv4.conf.wlan0.accept_source_route = 0
net.ipv4.conf.wlan0.arp_accept = 0
net.ipv4.conf.wlan0.arp_announce = 0
net.ipv4.conf.wlan0.arp_filter = 0
net.ipv4.conf.wlan0.arp_ignore = 0
net.ipv4.conf.wlan0.arp_notify = 0
net.ipv4.conf.wlan0.bc_forwarding = 0
net.ipv4.conf.wlan0.bootp_relay = 0
net.ipv4.conf.wlan0.disable_policy = 0
net.ipv4.conf.wlan0.disable_xfrm = 0
net.ipv4.conf.wlan0.drop_gratuitous_arp = 0
net.ipv4.conf.wlan0.drop_unicast_in_l2_multicast = 0
net.ipv4.conf.wlan0.force_igmp_version = 0
net.ipv4.conf.wlan0.forwarding = 0
net.ipv4.conf.wlan0.igmpv2_unsolicited_report_interval = 10000
net.ipv4.conf.wlan0.igmpv3_unsolicited_report_interval = 1000
net.ipv4.conf.wlan0.ignore_routes_with_linkdown = 0
net.ipv4.conf.wlan0.log_martians = 0
net.ipv4.conf.wlan0.mc_forwarding = 0
net.ipv4.conf.wlan0.medium_id = 0
net.ipv4.conf.wlan0.promote_secondaries = 1
net.ipv4.conf.wlan0.proxy_arp = 0
net.ipv4.conf.wlan0.proxy_arp_pvlan = 0
net.ipv4.conf.wlan0.route_localnet = 0
net.ipv4.conf.wlan0.rp_filter = 2
net.ipv4.conf.wlan0.secure_redirects = 1
net.ipv4.conf.wlan0.send_redirects = 1
net.ipv4.conf.wlan0.shared_media = 1
net.ipv4.conf.wlan0.src_valid_mark = 0
net.ipv4.conf.wlan0.tag = 0
net.ipv4.fib_multipath_hash_policy = 0
net.ipv4.fib_multipath_use_neigh = 0
net.ipv4.fib_sync_mem = 524288
net.ipv4.fwmark_reflect = 0
net.ipv4.icmp_echo_ignore_all = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_errors_use_inbound_ifaddr = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.icmp_msgs_burst = 50
net.ipv4.icmp_msgs_per_sec = 1000
net.ipv4.icmp_ratelimit = 1000
net.ipv4.icmp_ratemask = 6168
net.ipv4.igmp_link_local_mcast_reports = 1
net.ipv4.igmp_max_memberships = 20
net.ipv4.igmp_max_msf = 10
net.ipv4.igmp_qrv = 2
net.ipv4.inet_peer_maxttl = 600
net.ipv4.inet_peer_minttl = 120
net.ipv4.inet_peer_threshold = 65664
net.ipv4.ip_autobind_reuse = 0
net.ipv4.ip_default_ttl = 64
net.ipv4.ip_dynaddr = 0
net.ipv4.ip_early_demux = 1
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0
net.ipv4.ip_local_port_range = 32768    60999
net.ipv4.ip_local_reserved_ports =
net.ipv4.ip_no_pmtu_disc = 0
net.ipv4.ip_nonlocal_bind = 0
net.ipv4.ip_unprivileged_port_start = 1024
net.ipv4.ipfrag_high_thresh = 4194304
net.ipv4.ipfrag_low_thresh = 3145728
net.ipv4.ipfrag_max_dist = 64
net.ipv4.ipfrag_secret_interval = 0
net.ipv4.ipfrag_time = 30
net.ipv4.neigh.bond0.anycast_delay = 100
net.ipv4.neigh.bond0.app_solicit = 0
net.ipv4.neigh.bond0.base_reachable_time_ms = 30000
net.ipv4.neigh.bond0.delay_first_probe_time = 5
net.ipv4.neigh.bond0.gc_stale_time = 60
net.ipv4.neigh.bond0.locktime = 100
net.ipv4.neigh.bond0.mcast_resolicit = 0
net.ipv4.neigh.bond0.mcast_solicit = 3
net.ipv4.neigh.bond0.proxy_delay = 80
net.ipv4.neigh.bond0.proxy_qlen = 64
net.ipv4.neigh.bond0.retrans_time_ms = 1000
net.ipv4.neigh.bond0.ucast_solicit = 3
net.ipv4.neigh.bond0.unres_qlen = 101
net.ipv4.neigh.bond0.unres_qlen_bytes = 212992
net.ipv4.neigh.default.anycast_delay = 100
net.ipv4.neigh.default.app_solicit = 0
net.ipv4.neigh.default.base_reachable_time_ms = 30000
net.ipv4.neigh.default.delay_first_probe_time = 5
net.ipv4.neigh.default.gc_interval = 30
net.ipv4.neigh.default.gc_stale_time = 60
net.ipv4.neigh.default.gc_thresh1 = 128
net.ipv4.neigh.default.gc_thresh2 = 512
net.ipv4.neigh.default.gc_thresh3 = 1024
net.ipv4.neigh.default.locktime = 100
net.ipv4.neigh.default.mcast_resolicit = 0
net.ipv4.neigh.default.mcast_solicit = 3
net.ipv4.neigh.default.proxy_delay = 80
net.ipv4.neigh.default.proxy_qlen = 64
net.ipv4.neigh.default.retrans_time_ms = 1000
net.ipv4.neigh.default.ucast_solicit = 3
net.ipv4.neigh.default.unres_qlen = 101
net.ipv4.neigh.default.unres_qlen_bytes = 212992
net.ipv4.neigh.eth0.anycast_delay = 100
net.ipv4.neigh.eth0.app_solicit = 0
net.ipv4.neigh.eth0.base_reachable_time_ms = 30000
net.ipv4.neigh.eth0.delay_first_probe_time = 5
net.ipv4.neigh.eth0.gc_stale_time = 60
net.ipv4.neigh.eth0.locktime = 100
net.ipv4.neigh.eth0.mcast_resolicit = 0
net.ipv4.neigh.eth0.mcast_solicit = 3
net.ipv4.neigh.eth0.proxy_delay = 80
net.ipv4.neigh.eth0.proxy_qlen = 64
net.ipv4.neigh.eth0.retrans_time_ms = 1000
net.ipv4.neigh.eth0.ucast_solicit = 3
net.ipv4.neigh.eth0.unres_qlen = 101
net.ipv4.neigh.eth0.unres_qlen_bytes = 212992
net.ipv4.neigh.lo.anycast_delay = 100
net.ipv4.neigh.lo.app_solicit = 0
net.ipv4.neigh.lo.base_reachable_time_ms = 30000
net.ipv4.neigh.lo.delay_first_probe_time = 5
net.ipv4.neigh.lo.gc_stale_time = 60
net.ipv4.neigh.lo.locktime = 100
net.ipv4.neigh.lo.mcast_resolicit = 0
net.ipv4.neigh.lo.mcast_solicit = 3
net.ipv4.neigh.lo.proxy_delay = 80
net.ipv4.neigh.lo.proxy_qlen = 64
net.ipv4.neigh.lo.retrans_time_ms = 1000
net.ipv4.neigh.lo.ucast_solicit = 3
net.ipv4.neigh.lo.unres_qlen = 101
net.ipv4.neigh.lo.unres_qlen_bytes = 212992
net.ipv4.neigh.wlan0.anycast_delay = 100
net.ipv4.neigh.wlan0.app_solicit = 0
net.ipv4.neigh.wlan0.base_reachable_time_ms = 30000
net.ipv4.neigh.wlan0.delay_first_probe_time = 5
net.ipv4.neigh.wlan0.gc_stale_time = 60
net.ipv4.neigh.wlan0.locktime = 100
net.ipv4.neigh.wlan0.mcast_resolicit = 0
net.ipv4.neigh.wlan0.mcast_solicit = 3
net.ipv4.neigh.wlan0.proxy_delay = 80
net.ipv4.neigh.wlan0.proxy_qlen = 64
net.ipv4.neigh.wlan0.retrans_time_ms = 1000
net.ipv4.neigh.wlan0.ucast_solicit = 3
net.ipv4.neigh.wlan0.unres_qlen = 101
net.ipv4.neigh.wlan0.unres_qlen_bytes = 212992
net.ipv4.nexthop_compat_mode = 1
net.ipv4.ping_group_range = 1   0
net.ipv4.raw_l3mdev_accept = 1
net.ipv4.route.error_burst = 1250
net.ipv4.route.error_cost = 250
net.ipv4.route.gc_elasticity = 8
net.ipv4.route.gc_interval = 60
net.ipv4.route.gc_min_interval = 0
net.ipv4.route.gc_min_interval_ms = 500
net.ipv4.route.gc_thresh = -1
net.ipv4.route.gc_timeout = 300
net.ipv4.route.max_size = 2147483647
net.ipv4.route.min_adv_mss = 256
net.ipv4.route.min_pmtu = 552
net.ipv4.route.mtu_expires = 600
net.ipv4.route.redirect_load = 5
net.ipv4.route.redirect_number = 9
net.ipv4.route.redirect_silence = 5120
net.ipv4.tcp_abort_on_overflow = 0
net.ipv4.tcp_adv_win_scale = 1
net.ipv4.tcp_allowed_congestion_control = reno cubic
net.ipv4.tcp_app_win = 31
net.ipv4.tcp_autocorking = 1
net.ipv4.tcp_available_congestion_control = reno cubic
net.ipv4.tcp_available_ulp =
net.ipv4.tcp_base_mss = 1024
net.ipv4.tcp_challenge_ack_limit = 1000
net.ipv4.tcp_comp_sack_delay_ns = 1000000
net.ipv4.tcp_comp_sack_nr = 44
net.ipv4.tcp_comp_sack_slack_ns = 100000
net.ipv4.tcp_congestion_control = cubic
net.ipv4.tcp_dsack = 1
net.ipv4.tcp_early_demux = 1
net.ipv4.tcp_early_retrans = 3
net.ipv4.tcp_ecn = 2
net.ipv4.tcp_ecn_fallback = 1
net.ipv4.tcp_fack = 0
net.ipv4.tcp_fastopen = 1
net.ipv4.tcp_fastopen_blackhole_timeout_sec = 0
net.ipv4.tcp_fastopen_key = 00000000-00000000-00000000-00000000
net.ipv4.tcp_fin_timeout = 60
net.ipv4.tcp_frto = 2
net.ipv4.tcp_fwmark_accept = 0
net.ipv4.tcp_invalid_ratelimit = 500
net.ipv4.tcp_keepalive_intvl = 75
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_time = 7200
net.ipv4.tcp_l3mdev_accept = 0
net.ipv4.tcp_limit_output_bytes = 1048576
net.ipv4.tcp_low_latency = 0
net.ipv4.tcp_max_orphans = 32768
net.ipv4.tcp_max_reordering = 300
net.ipv4.tcp_max_syn_backlog = 512
net.ipv4.tcp_max_tw_buckets = 32768
net.ipv4.tcp_mem = 80010        106681  160020
net.ipv4.tcp_min_rtt_wlen = 300
net.ipv4.tcp_min_snd_mss = 48
net.ipv4.tcp_min_tso_segs = 2
net.ipv4.tcp_moderate_rcvbuf = 1
net.ipv4.tcp_mtu_probe_floor = 48
net.ipv4.tcp_mtu_probing = 0
net.ipv4.tcp_no_metrics_save = 0
net.ipv4.tcp_no_ssthresh_metrics_save = 1
net.ipv4.tcp_notsent_lowat = 4294967295
net.ipv4.tcp_orphan_retries = 0
net.ipv4.tcp_pacing_ca_ratio = 120
net.ipv4.tcp_pacing_ss_ratio = 200
net.ipv4.tcp_probe_interval = 600
net.ipv4.tcp_probe_threshold = 8
net.ipv4.tcp_recovery = 1
net.ipv4.tcp_reflect_tos = 0
net.ipv4.tcp_reordering = 3
net.ipv4.tcp_retrans_collapse = 1
net.ipv4.tcp_retries1 = 3
net.ipv4.tcp_retries2 = 15
net.ipv4.tcp_rfc1337 = 0
net.ipv4.tcp_rmem = 4096        131072  6291456
net.ipv4.tcp_rx_skb_cache = 0
net.ipv4.tcp_sack = 1
net.ipv4.tcp_slow_start_after_idle = 1
net.ipv4.tcp_stdurg = 0
net.ipv4.tcp_syn_retries = 6
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_thin_linear_timeouts = 0
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_tso_win_divisor = 3
net.ipv4.tcp_tw_reuse = 2
net.ipv4.tcp_tx_skb_cache = 0
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_wmem = 4096        16384   4194304
net.ipv4.tcp_workaround_signed_windows = 0
net.ipv4.udp_early_demux = 1
net.ipv4.udp_l3mdev_accept = 0
net.ipv4.udp_mem = 160020       213362  320040
net.ipv4.udp_rmem_min = 4096
net.ipv4.udp_wmem_min = 4096
net.ipv4.xfrm4_gc_thresh = 32768
net.ipv6.anycast_src_echo_reply = 0
net.ipv6.auto_flowlabels = 1
net.ipv6.bindv6only = 0
net.ipv6.calipso_cache_bucket_size = 10
net.ipv6.calipso_cache_enable = 1
net.ipv6.conf.all.accept_dad = 0
net.ipv6.conf.all.accept_ra = 1
net.ipv6.conf.all.accept_ra_defrtr = 1
net.ipv6.conf.all.accept_ra_from_local = 0
net.ipv6.conf.all.accept_ra_min_hop_limit = 1
net.ipv6.conf.all.accept_ra_mtu = 1
net.ipv6.conf.all.accept_ra_pinfo = 1
net.ipv6.conf.all.accept_ra_rt_info_max_plen = 0
net.ipv6.conf.all.accept_ra_rt_info_min_plen = 0
net.ipv6.conf.all.accept_ra_rtr_pref = 1
net.ipv6.conf.all.accept_redirects = 1
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.all.addr_gen_mode = 0
net.ipv6.conf.all.autoconf = 1
net.ipv6.conf.all.dad_transmits = 1
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.all.disable_policy = 0
net.ipv6.conf.all.drop_unicast_in_l2_multicast = 0
net.ipv6.conf.all.drop_unsolicited_na = 0
net.ipv6.conf.all.enhanced_dad = 1
net.ipv6.conf.all.force_mld_version = 0
net.ipv6.conf.all.force_tllao = 0
net.ipv6.conf.all.forwarding = 0
net.ipv6.conf.all.hop_limit = 64
net.ipv6.conf.all.ignore_routes_with_linkdown = 0
net.ipv6.conf.all.keep_addr_on_down = 0
net.ipv6.conf.all.max_addresses = 16
net.ipv6.conf.all.max_desync_factor = 600
net.ipv6.conf.all.mc_forwarding = 0
net.ipv6.conf.all.mldv1_unsolicited_report_interval = 10000
net.ipv6.conf.all.mldv2_unsolicited_report_interval = 1000
net.ipv6.conf.all.mtu = 1280
net.ipv6.conf.all.ndisc_notify = 0
net.ipv6.conf.all.ndisc_tclass = 0
net.ipv6.conf.all.optimistic_dad = 0
net.ipv6.conf.all.proxy_ndp = 0
net.ipv6.conf.all.regen_max_retry = 3
net.ipv6.conf.all.router_probe_interval = 60
net.ipv6.conf.all.router_solicitation_delay = 1
net.ipv6.conf.all.router_solicitation_interval = 4
net.ipv6.conf.all.router_solicitation_max_interval = 3600
net.ipv6.conf.all.router_solicitations = -1
net.ipv6.conf.all.rpl_seg_enabled = 0
net.ipv6.conf.all.seg6_enabled = 0
net.ipv6.conf.all.suppress_frag_ndisc = 1
net.ipv6.conf.all.temp_prefered_lft = 86400
net.ipv6.conf.all.temp_valid_lft = 604800
net.ipv6.conf.all.use_oif_addrs_only = 0
net.ipv6.conf.all.use_optimistic = 0
net.ipv6.conf.all.use_tempaddr = 0
net.ipv6.conf.bond0.accept_dad = 1
net.ipv6.conf.bond0.accept_ra = 1
net.ipv6.conf.bond0.accept_ra_defrtr = 1
net.ipv6.conf.bond0.accept_ra_from_local = 0
net.ipv6.conf.bond0.accept_ra_min_hop_limit = 1
net.ipv6.conf.bond0.accept_ra_mtu = 1
net.ipv6.conf.bond0.accept_ra_pinfo = 1
net.ipv6.conf.bond0.accept_ra_rt_info_max_plen = 0
net.ipv6.conf.bond0.accept_ra_rt_info_min_plen = 0
net.ipv6.conf.bond0.accept_ra_rtr_pref = 1
net.ipv6.conf.bond0.accept_redirects = 1
net.ipv6.conf.bond0.accept_source_route = 0
net.ipv6.conf.bond0.addr_gen_mode = 0
net.ipv6.conf.bond0.autoconf = 1
net.ipv6.conf.bond0.dad_transmits = 1
net.ipv6.conf.bond0.disable_ipv6 = 0
net.ipv6.conf.bond0.disable_policy = 0
net.ipv6.conf.bond0.drop_unicast_in_l2_multicast = 0
net.ipv6.conf.bond0.drop_unsolicited_na = 0
net.ipv6.conf.bond0.enhanced_dad = 1
net.ipv6.conf.bond0.force_mld_version = 0
net.ipv6.conf.bond0.force_tllao = 0
net.ipv6.conf.bond0.forwarding = 0
net.ipv6.conf.bond0.hop_limit = 64
net.ipv6.conf.bond0.ignore_routes_with_linkdown = 0
net.ipv6.conf.bond0.keep_addr_on_down = 0
net.ipv6.conf.bond0.max_addresses = 16
net.ipv6.conf.bond0.max_desync_factor = 600
net.ipv6.conf.bond0.mc_forwarding = 0
net.ipv6.conf.bond0.mldv1_unsolicited_report_interval = 10000
net.ipv6.conf.bond0.mldv2_unsolicited_report_interval = 1000
net.ipv6.conf.bond0.mtu = 1500
net.ipv6.conf.bond0.ndisc_notify = 0
net.ipv6.conf.bond0.ndisc_tclass = 0
net.ipv6.conf.bond0.optimistic_dad = 0
net.ipv6.conf.bond0.proxy_ndp = 0
net.ipv6.conf.bond0.regen_max_retry = 3
net.ipv6.conf.bond0.router_probe_interval = 60
net.ipv6.conf.bond0.router_solicitation_delay = 1
net.ipv6.conf.bond0.router_solicitation_interval = 4
net.ipv6.conf.bond0.router_solicitation_max_interval = 3600
net.ipv6.conf.bond0.router_solicitations = -1
net.ipv6.conf.bond0.rpl_seg_enabled = 0
net.ipv6.conf.bond0.seg6_enabled = 0
net.ipv6.conf.bond0.suppress_frag_ndisc = 1
net.ipv6.conf.bond0.temp_prefered_lft = 86400
net.ipv6.conf.bond0.temp_valid_lft = 604800
net.ipv6.conf.bond0.use_oif_addrs_only = 0
net.ipv6.conf.bond0.use_optimistic = 0
net.ipv6.conf.bond0.use_tempaddr = 0
net.ipv6.conf.default.accept_dad = 1
net.ipv6.conf.default.accept_ra = 1
net.ipv6.conf.default.accept_ra_defrtr = 1
net.ipv6.conf.default.accept_ra_from_local = 0
net.ipv6.conf.default.accept_ra_min_hop_limit = 1
net.ipv6.conf.default.accept_ra_mtu = 1
net.ipv6.conf.default.accept_ra_pinfo = 1
net.ipv6.conf.default.accept_ra_rt_info_max_plen = 0
net.ipv6.conf.default.accept_ra_rt_info_min_plen = 0
net.ipv6.conf.default.accept_ra_rtr_pref = 1
net.ipv6.conf.default.accept_redirects = 1
net.ipv6.conf.default.accept_source_route = 0
net.ipv6.conf.default.addr_gen_mode = 0
net.ipv6.conf.default.autoconf = 1
net.ipv6.conf.default.dad_transmits = 1
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.default.disable_policy = 0
net.ipv6.conf.default.drop_unicast_in_l2_multicast = 0
net.ipv6.conf.default.drop_unsolicited_na = 0
net.ipv6.conf.default.enhanced_dad = 1
net.ipv6.conf.default.force_mld_version = 0
net.ipv6.conf.default.force_tllao = 0
net.ipv6.conf.default.forwarding = 0
net.ipv6.conf.default.hop_limit = 64
net.ipv6.conf.default.ignore_routes_with_linkdown = 0
net.ipv6.conf.default.keep_addr_on_down = 0
net.ipv6.conf.default.max_addresses = 16
net.ipv6.conf.default.max_desync_factor = 600
net.ipv6.conf.default.mc_forwarding = 0
net.ipv6.conf.default.mldv1_unsolicited_report_interval = 10000
net.ipv6.conf.default.mldv2_unsolicited_report_interval = 1000
net.ipv6.conf.default.mtu = 1280
net.ipv6.conf.default.ndisc_notify = 0
net.ipv6.conf.default.ndisc_tclass = 0
net.ipv6.conf.default.optimistic_dad = 0
net.ipv6.conf.default.proxy_ndp = 0
net.ipv6.conf.default.regen_max_retry = 3
net.ipv6.conf.default.router_probe_interval = 60
net.ipv6.conf.default.router_solicitation_delay = 1
net.ipv6.conf.default.router_solicitation_interval = 4
net.ipv6.conf.default.router_solicitation_max_interval = 3600
net.ipv6.conf.default.router_solicitations = -1
net.ipv6.conf.default.rpl_seg_enabled = 0
net.ipv6.conf.default.seg6_enabled = 0
net.ipv6.conf.default.suppress_frag_ndisc = 1
net.ipv6.conf.default.temp_prefered_lft = 86400
net.ipv6.conf.default.temp_valid_lft = 604800
net.ipv6.conf.default.use_oif_addrs_only = 0
net.ipv6.conf.default.use_optimistic = 0
net.ipv6.conf.default.use_tempaddr = 0
net.ipv6.conf.eth0.accept_dad = 1
net.ipv6.conf.eth0.accept_ra = 0
net.ipv6.conf.eth0.accept_ra_defrtr = 1
net.ipv6.conf.eth0.accept_ra_from_local = 0
net.ipv6.conf.eth0.accept_ra_min_hop_limit = 1
net.ipv6.conf.eth0.accept_ra_mtu = 1
net.ipv6.conf.eth0.accept_ra_pinfo = 1
net.ipv6.conf.eth0.accept_ra_rt_info_max_plen = 0
net.ipv6.conf.eth0.accept_ra_rt_info_min_plen = 0
net.ipv6.conf.eth0.accept_ra_rtr_pref = 1
net.ipv6.conf.eth0.accept_redirects = 1
net.ipv6.conf.eth0.accept_source_route = 0
net.ipv6.conf.eth0.addr_gen_mode = 1
net.ipv6.conf.eth0.autoconf = 1
net.ipv6.conf.eth0.dad_transmits = 1
net.ipv6.conf.eth0.disable_ipv6 = 0
net.ipv6.conf.eth0.disable_policy = 0
net.ipv6.conf.eth0.drop_unicast_in_l2_multicast = 0
net.ipv6.conf.eth0.drop_unsolicited_na = 0
net.ipv6.conf.eth0.enhanced_dad = 1
net.ipv6.conf.eth0.force_mld_version = 0
net.ipv6.conf.eth0.force_tllao = 0
net.ipv6.conf.eth0.forwarding = 0
net.ipv6.conf.eth0.hop_limit = 64
net.ipv6.conf.eth0.ignore_routes_with_linkdown = 0
net.ipv6.conf.eth0.keep_addr_on_down = 0
net.ipv6.conf.eth0.max_addresses = 16
net.ipv6.conf.eth0.max_desync_factor = 600
net.ipv6.conf.eth0.mc_forwarding = 0
net.ipv6.conf.eth0.mldv1_unsolicited_report_interval = 10000
net.ipv6.conf.eth0.mldv2_unsolicited_report_interval = 1000
net.ipv6.conf.eth0.mtu = 1500
net.ipv6.conf.eth0.ndisc_notify = 0
net.ipv6.conf.eth0.ndisc_tclass = 0
net.ipv6.conf.eth0.optimistic_dad = 0
net.ipv6.conf.eth0.proxy_ndp = 0
net.ipv6.conf.eth0.regen_max_retry = 3
net.ipv6.conf.eth0.router_probe_interval = 60
net.ipv6.conf.eth0.router_solicitation_delay = 1
net.ipv6.conf.eth0.router_solicitation_interval = 4
net.ipv6.conf.eth0.router_solicitation_max_interval = 3600
net.ipv6.conf.eth0.router_solicitations = -1
net.ipv6.conf.eth0.rpl_seg_enabled = 0
net.ipv6.conf.eth0.seg6_enabled = 0
net.ipv6.conf.eth0.suppress_frag_ndisc = 1
net.ipv6.conf.eth0.temp_prefered_lft = 86400
net.ipv6.conf.eth0.temp_valid_lft = 604800
net.ipv6.conf.eth0.use_oif_addrs_only = 0
net.ipv6.conf.eth0.use_optimistic = 0
net.ipv6.conf.eth0.use_tempaddr = 0
net.ipv6.conf.lo.accept_dad = -1
net.ipv6.conf.lo.accept_ra = 1
net.ipv6.conf.lo.accept_ra_defrtr = 1
net.ipv6.conf.lo.accept_ra_from_local = 0
net.ipv6.conf.lo.accept_ra_min_hop_limit = 1
net.ipv6.conf.lo.accept_ra_mtu = 1
net.ipv6.conf.lo.accept_ra_pinfo = 1
net.ipv6.conf.lo.accept_ra_rt_info_max_plen = 0
net.ipv6.conf.lo.accept_ra_rt_info_min_plen = 0
net.ipv6.conf.lo.accept_ra_rtr_pref = 1
net.ipv6.conf.lo.accept_redirects = 1
net.ipv6.conf.lo.accept_source_route = 0
net.ipv6.conf.lo.addr_gen_mode = 0
net.ipv6.conf.lo.autoconf = 1
net.ipv6.conf.lo.dad_transmits = 1
net.ipv6.conf.lo.disable_ipv6 = 0
net.ipv6.conf.lo.disable_policy = 0
net.ipv6.conf.lo.drop_unicast_in_l2_multicast = 0
net.ipv6.conf.lo.drop_unsolicited_na = 0
net.ipv6.conf.lo.enhanced_dad = 1
net.ipv6.conf.lo.force_mld_version = 0
net.ipv6.conf.lo.force_tllao = 0
net.ipv6.conf.lo.forwarding = 0
net.ipv6.conf.lo.hop_limit = 64
net.ipv6.conf.lo.ignore_routes_with_linkdown = 0
net.ipv6.conf.lo.keep_addr_on_down = 0
net.ipv6.conf.lo.max_addresses = 16
net.ipv6.conf.lo.max_desync_factor = 600
net.ipv6.conf.lo.mc_forwarding = 0
net.ipv6.conf.lo.mldv1_unsolicited_report_interval = 10000
net.ipv6.conf.lo.mldv2_unsolicited_report_interval = 1000
net.ipv6.conf.lo.mtu = 65536
net.ipv6.conf.lo.ndisc_notify = 0
net.ipv6.conf.lo.ndisc_tclass = 0
net.ipv6.conf.lo.optimistic_dad = 0
net.ipv6.conf.lo.proxy_ndp = 0
net.ipv6.conf.lo.regen_max_retry = 3
net.ipv6.conf.lo.router_probe_interval = 60
net.ipv6.conf.lo.router_solicitation_delay = 1
net.ipv6.conf.lo.router_solicitation_interval = 4
net.ipv6.conf.lo.router_solicitation_max_interval = 3600
net.ipv6.conf.lo.router_solicitations = -1
net.ipv6.conf.lo.rpl_seg_enabled = 0
net.ipv6.conf.lo.seg6_enabled = 0
net.ipv6.conf.lo.suppress_frag_ndisc = 1
net.ipv6.conf.lo.temp_prefered_lft = 86400
net.ipv6.conf.lo.temp_valid_lft = 604800
net.ipv6.conf.lo.use_oif_addrs_only = 0
net.ipv6.conf.lo.use_optimistic = 0
net.ipv6.conf.lo.use_tempaddr = -1
net.ipv6.conf.wlan0.accept_dad = 1
net.ipv6.conf.wlan0.accept_ra = 0
net.ipv6.conf.wlan0.accept_ra_defrtr = 1
net.ipv6.conf.wlan0.accept_ra_from_local = 0
net.ipv6.conf.wlan0.accept_ra_min_hop_limit = 1
net.ipv6.conf.wlan0.accept_ra_mtu = 1
net.ipv6.conf.wlan0.accept_ra_pinfo = 1
net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen = 0
net.ipv6.conf.wlan0.accept_ra_rt_info_min_plen = 0
net.ipv6.conf.wlan0.accept_ra_rtr_pref = 1
net.ipv6.conf.wlan0.accept_redirects = 1
net.ipv6.conf.wlan0.accept_source_route = 0
net.ipv6.conf.wlan0.addr_gen_mode = 1
net.ipv6.conf.wlan0.autoconf = 1
net.ipv6.conf.wlan0.dad_transmits = 1
net.ipv6.conf.wlan0.disable_ipv6 = 0
net.ipv6.conf.wlan0.disable_policy = 0
net.ipv6.conf.wlan0.drop_unicast_in_l2_multicast = 0
net.ipv6.conf.wlan0.drop_unsolicited_na = 0
net.ipv6.conf.wlan0.enhanced_dad = 1
net.ipv6.conf.wlan0.force_mld_version = 0
net.ipv6.conf.wlan0.force_tllao = 0
net.ipv6.conf.wlan0.forwarding = 0
net.ipv6.conf.wlan0.hop_limit = 255
net.ipv6.conf.wlan0.ignore_routes_with_linkdown = 0
net.ipv6.conf.wlan0.keep_addr_on_down = 0
net.ipv6.conf.wlan0.max_addresses = 16
net.ipv6.conf.wlan0.max_desync_factor = 600
net.ipv6.conf.wlan0.mc_forwarding = 0
net.ipv6.conf.wlan0.mldv1_unsolicited_report_interval = 10000
net.ipv6.conf.wlan0.mldv2_unsolicited_report_interval = 1000
net.ipv6.conf.wlan0.mtu = 1500
net.ipv6.conf.wlan0.ndisc_notify = 0
net.ipv6.conf.wlan0.ndisc_tclass = 0
net.ipv6.conf.wlan0.optimistic_dad = 0
net.ipv6.conf.wlan0.proxy_ndp = 0
net.ipv6.conf.wlan0.regen_max_retry = 3
net.ipv6.conf.wlan0.router_probe_interval = 60
net.ipv6.conf.wlan0.router_solicitation_delay = 1
net.ipv6.conf.wlan0.router_solicitation_interval = 4
net.ipv6.conf.wlan0.router_solicitation_max_interval = 3600
net.ipv6.conf.wlan0.router_solicitations = -1
net.ipv6.conf.wlan0.rpl_seg_enabled = 0
net.ipv6.conf.wlan0.seg6_enabled = 0
net.ipv6.conf.wlan0.suppress_frag_ndisc = 1
net.ipv6.conf.wlan0.temp_prefered_lft = 86400
net.ipv6.conf.wlan0.temp_valid_lft = 604800
net.ipv6.conf.wlan0.use_oif_addrs_only = 0
net.ipv6.conf.wlan0.use_optimistic = 0
net.ipv6.conf.wlan0.use_tempaddr = 0
net.ipv6.fib_multipath_hash_policy = 0
net.ipv6.flowlabel_consistency = 1
net.ipv6.flowlabel_reflect = 0
net.ipv6.flowlabel_state_ranges = 0
net.ipv6.fwmark_reflect = 0
net.ipv6.icmp.echo_ignore_all = 0
net.ipv6.icmp.echo_ignore_anycast = 0
net.ipv6.icmp.echo_ignore_multicast = 0
net.ipv6.icmp.ratelimit = 1000
net.ipv6.icmp.ratemask = 0-1,3-127
net.ipv6.idgen_delay = 1
net.ipv6.idgen_retries = 3
net.ipv6.ip6frag_high_thresh = 4194304
net.ipv6.ip6frag_low_thresh = 3145728
net.ipv6.ip6frag_secret_interval = 0
net.ipv6.ip6frag_time = 60
net.ipv6.ip_nonlocal_bind = 0
net.ipv6.max_dst_opts_length = 2147483647
net.ipv6.max_dst_opts_number = 8
net.ipv6.max_hbh_length = 2147483647
net.ipv6.max_hbh_opts_number = 8
net.ipv6.mld_max_msf = 64
net.ipv6.mld_qrv = 2
net.ipv6.neigh.bond0.anycast_delay = 100
net.ipv6.neigh.bond0.app_solicit = 0
net.ipv6.neigh.bond0.base_reachable_time_ms = 30000
net.ipv6.neigh.bond0.delay_first_probe_time = 5
net.ipv6.neigh.bond0.gc_stale_time = 60
net.ipv6.neigh.bond0.locktime = 0
net.ipv6.neigh.bond0.mcast_resolicit = 0
net.ipv6.neigh.bond0.mcast_solicit = 3
net.ipv6.neigh.bond0.proxy_delay = 80
net.ipv6.neigh.bond0.proxy_qlen = 64
net.ipv6.neigh.bond0.retrans_time_ms = 1000
net.ipv6.neigh.bond0.ucast_solicit = 3
net.ipv6.neigh.bond0.unres_qlen = 101
net.ipv6.neigh.bond0.unres_qlen_bytes = 212992
net.ipv6.neigh.default.anycast_delay = 100
net.ipv6.neigh.default.app_solicit = 0
net.ipv6.neigh.default.base_reachable_time_ms = 30000
net.ipv6.neigh.default.delay_first_probe_time = 5
net.ipv6.neigh.default.gc_interval = 30
net.ipv6.neigh.default.gc_stale_time = 60
net.ipv6.neigh.default.gc_thresh1 = 128
net.ipv6.neigh.default.gc_thresh2 = 512
net.ipv6.neigh.default.gc_thresh3 = 1024
net.ipv6.neigh.default.locktime = 0
net.ipv6.neigh.default.mcast_resolicit = 0
net.ipv6.neigh.default.mcast_solicit = 3
net.ipv6.neigh.default.proxy_delay = 80
net.ipv6.neigh.default.proxy_qlen = 64
net.ipv6.neigh.default.retrans_time_ms = 1000
net.ipv6.neigh.default.ucast_solicit = 3
net.ipv6.neigh.default.unres_qlen = 101
net.ipv6.neigh.default.unres_qlen_bytes = 212992
net.ipv6.neigh.eth0.anycast_delay = 100
net.ipv6.neigh.eth0.app_solicit = 0
net.ipv6.neigh.eth0.base_reachable_time_ms = 30000
net.ipv6.neigh.eth0.delay_first_probe_time = 5
net.ipv6.neigh.eth0.gc_stale_time = 60
net.ipv6.neigh.eth0.locktime = 0
net.ipv6.neigh.eth0.mcast_resolicit = 0
net.ipv6.neigh.eth0.mcast_solicit = 3
net.ipv6.neigh.eth0.proxy_delay = 80
net.ipv6.neigh.eth0.proxy_qlen = 64
net.ipv6.neigh.eth0.retrans_time_ms = 1000
net.ipv6.neigh.eth0.ucast_solicit = 3
net.ipv6.neigh.eth0.unres_qlen = 101
net.ipv6.neigh.eth0.unres_qlen_bytes = 212992
net.ipv6.neigh.lo.anycast_delay = 100
net.ipv6.neigh.lo.app_solicit = 0
net.ipv6.neigh.lo.base_reachable_time_ms = 30000
net.ipv6.neigh.lo.delay_first_probe_time = 5
net.ipv6.neigh.lo.gc_stale_time = 60
net.ipv6.neigh.lo.locktime = 0
net.ipv6.neigh.lo.mcast_resolicit = 0
net.ipv6.neigh.lo.mcast_solicit = 3
net.ipv6.neigh.lo.proxy_delay = 80
net.ipv6.neigh.lo.proxy_qlen = 64
net.ipv6.neigh.lo.retrans_time_ms = 1000
net.ipv6.neigh.lo.ucast_solicit = 3
net.ipv6.neigh.lo.unres_qlen = 101
net.ipv6.neigh.lo.unres_qlen_bytes = 212992
net.ipv6.neigh.wlan0.anycast_delay = 100
net.ipv6.neigh.wlan0.app_solicit = 0
net.ipv6.neigh.wlan0.base_reachable_time_ms = 30000
net.ipv6.neigh.wlan0.delay_first_probe_time = 5
net.ipv6.neigh.wlan0.gc_stale_time = 60
net.ipv6.neigh.wlan0.locktime = 0
net.ipv6.neigh.wlan0.mcast_resolicit = 0
net.ipv6.neigh.wlan0.mcast_solicit = 3
net.ipv6.neigh.wlan0.proxy_delay = 80
net.ipv6.neigh.wlan0.proxy_qlen = 64
net.ipv6.neigh.wlan0.retrans_time_ms = 1000
net.ipv6.neigh.wlan0.ucast_solicit = 3
net.ipv6.neigh.wlan0.unres_qlen = 101
net.ipv6.neigh.wlan0.unres_qlen_bytes = 212992
net.ipv6.route.gc_elasticity = 9
net.ipv6.route.gc_interval = 30
net.ipv6.route.gc_min_interval = 0
net.ipv6.route.gc_min_interval_ms = 500
net.ipv6.route.gc_thresh = 1024
net.ipv6.route.gc_timeout = 60
net.ipv6.route.max_size = 4096
net.ipv6.route.min_adv_mss = 1220
net.ipv6.route.mtu_expires = 600
net.ipv6.route.skip_notify_on_dev_down = 0
net.ipv6.seg6_flowlabel = 0
net.ipv6.xfrm6_gc_thresh = 32768
net.netfilter.nf_conntrack_acct = 0
net.netfilter.nf_conntrack_buckets = 65536
net.netfilter.nf_conntrack_checksum = 1
net.netfilter.nf_conntrack_count = 0
net.netfilter.nf_conntrack_dccp_loose = 1
net.netfilter.nf_conntrack_dccp_timeout_closereq = 64
net.netfilter.nf_conntrack_dccp_timeout_closing = 64
net.netfilter.nf_conntrack_dccp_timeout_open = 43200
net.netfilter.nf_conntrack_dccp_timeout_partopen = 480
net.netfilter.nf_conntrack_dccp_timeout_request = 240
net.netfilter.nf_conntrack_dccp_timeout_respond = 480
net.netfilter.nf_conntrack_dccp_timeout_timewait = 240
net.netfilter.nf_conntrack_events = 1
net.netfilter.nf_conntrack_expect_max = 1024
net.netfilter.nf_conntrack_frag6_high_thresh = 4194304
net.netfilter.nf_conntrack_frag6_low_thresh = 3145728
net.netfilter.nf_conntrack_frag6_timeout = 60
net.netfilter.nf_conntrack_generic_timeout = 600
net.netfilter.nf_conntrack_gre_timeout = 30
net.netfilter.nf_conntrack_gre_timeout_stream = 180
net.netfilter.nf_conntrack_helper = 0
net.netfilter.nf_conntrack_icmp_timeout = 30
net.netfilter.nf_conntrack_icmpv6_timeout = 30
net.netfilter.nf_conntrack_log_invalid = 0
net.netfilter.nf_conntrack_max = 262144
net.netfilter.nf_conntrack_sctp_timeout_closed = 10
net.netfilter.nf_conntrack_sctp_timeout_cookie_echoed = 3
net.netfilter.nf_conntrack_sctp_timeout_cookie_wait = 3
net.netfilter.nf_conntrack_sctp_timeout_established = 210
net.netfilter.nf_conntrack_sctp_timeout_heartbeat_sent = 30
net.netfilter.nf_conntrack_sctp_timeout_shutdown_ack_sent = 3
net.netfilter.nf_conntrack_sctp_timeout_shutdown_recd = 0
net.netfilter.nf_conntrack_sctp_timeout_shutdown_sent = 0
net.netfilter.nf_conntrack_tcp_be_liberal = 0
net.netfilter.nf_conntrack_tcp_loose = 1
net.netfilter.nf_conntrack_tcp_max_retrans = 3
net.netfilter.nf_conntrack_tcp_timeout_close = 10
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_established = 432000
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 30
net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 300
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 60
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 120
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 300
net.netfilter.nf_conntrack_timestamp = 0
net.netfilter.nf_conntrack_udp_timeout = 30
net.netfilter.nf_conntrack_udp_timeout_stream = 120
net.netfilter.nf_log.0 = NONE
net.netfilter.nf_log.1 = NONE
net.netfilter.nf_log.10 = NONE
net.netfilter.nf_log.11 = NONE
net.netfilter.nf_log.12 = NONE
net.netfilter.nf_log.2 = NONE
net.netfilter.nf_log.3 = NONE
net.netfilter.nf_log.4 = NONE
net.netfilter.nf_log.5 = NONE
net.netfilter.nf_log.6 = NONE
net.netfilter.nf_log.7 = NONE
net.netfilter.nf_log.8 = NONE
net.netfilter.nf_log.9 = NONE
net.netfilter.nf_log_all_netns = 0
net.nf_conntrack_max = 262144
net.unix.max_dgram_qlen = 512000
sunrpc.max_resvport = 1023
sunrpc.min_resvport = 665
sunrpc.nfs_debug = 0x0000
sunrpc.nfsd_debug = 0x0000
sunrpc.nlm_debug = 0x0000
sunrpc.rpc_debug = 0x0000
sunrpc.tcp_fin_timeout = 15
sunrpc.tcp_max_slot_table_entries = 65536
sunrpc.tcp_slot_table_entries = 2
sunrpc.transports = tcp 1048576
sunrpc.transports = udp 32768
sunrpc.udp_slot_table_entries = 16
user.max_cgroup_namespaces = 25891
user.max_inotify_instances = 128
user.max_inotify_watches = 8192
user.max_ipc_namespaces = 25891
user.max_mnt_namespaces = 25891
user.max_net_namespaces = 25891
user.max_pid_namespaces = 25891
user.max_time_namespaces = 25891
user.max_user_namespaces = 25891
user.max_uts_namespaces = 25891
vm.admin_reserve_kbytes = 8192
vm.compact_unevictable_allowed = 1
vm.compaction_proactiveness = 20
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 1
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 3000
vm.dirty_ratio = 2
vm.dirty_writeback_centisecs = 500
vm.dirtytime_expire_seconds = 43200
vm.enable_oom_killer = 1
vm.extfrag_threshold = 500
vm.hugepage_mig_noalloc = 0
vm.hugepage_pmem_allocall = 0
vm.hugetlb_optimize_vmemmap = 0
vm.hugetlb_shm_group = 0
vm.laptop_mode = 0
vm.legacy_va_layout = 0
vm.lowmem_reserve_ratio = 256   256     32      0
vm.max_map_count = 65530
vm.memcg_qos_enable = 0
vm.memory_failure_early_kill = 0
vm.memory_failure_recovery = 1
vm.min_free_kbytes = 45056
vm.min_slab_ratio = 5
vm.min_unmapped_ratio = 1
vm.mmap_min_addr = 4096
vm.mmap_rnd_bits = 18
vm.mmap_rnd_compat_bits = 11
vm.nr_hugepages = 0
vm.nr_hugepages_mempolicy = 0
vm.nr_overcommit_hugepages = 0
vm.numa_stat = 1
vm.numa_zonelist_order = Node
vm.oom_dump_tasks = 1
vm.oom_kill_allocating_task = 0
vm.overcommit_kbytes = 0
vm.overcommit_memory = 1
vm.overcommit_ratio = 50
vm.page-cluster = 3
vm.page_lock_unfairness = 5
vm.panic_on_oom = 0
vm.percpu_max_batchsize = 64
vm.percpu_pagelist_fraction = 0
vm.stat_interval = 1
vm.swappiness = 60
vm.unprivileged_userfaultfd = 1
vm.user_reserve_kbytes = 131072
vm.vfs_cache_pressure = 100
vm.watermark_boost_factor = 15000
vm.watermark_scale_factor = 10
vm.zone_reclaim_mode = 0

3.3 安装依赖

sudo apt install make gcc-arm-linux-gnueabihf gcc bison flex libssl-dev dpkg-dev lzop vim

3.4 下载内核源码

shell 复制代码
# clone
git clone https://github.com/Embedfire/ebf_linux_kernel.git

仓库太大报错如下:
bot@u18:~/worthsen$ git clone https://github.com/Embedfire/ebf_linux_kernel.git
Cloning into 'ebf_linux_kernel'...
remote: Enumerating objects: 8927105, done.
remote: Counting objects: 100% (5838/5838), done.
remote: Compressing objects: 100% (3612/3612), done.
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed


# 切换 ebf_4.19.35_imx6ul 分支下载
git clone -b ebf_4.19.35_imx6ul  https://github.com/Embedfire/ebf_linux_kernel.git

依然太大报错

# 增加缓存,设置为500M,再下载
500M = 524288000
100M = 1048576000
bot@u18:~/worthsen/u-boot$ git config --global http.postBuffer 524288000
bot@u18:~/worthsen/u-boot$ git config --global --get http.postBuffer
524288000
bot@u18:~/worthsen/u-boot$ git clone -b ebf_4.19.35_imx6ul  https://github.com/Embedfire/ebf_linux_kernel.git

# 依然报错,只拉取最近一次提交的内容
bot@u18:~/worthsen/u-boot$ git clone -b ebf_4.19.35_imx6ul  https://github.com/Embedfire/ebf_linux_kernel.git --depth 1

# 依然报错,直接下载 zip 文件
也下载失败

# 借助华为云 CloudShell 下载
root@hcss-ecs-3292:/opt/worthsen/ebf_linux_kernel# uname -a
Linux hcss-ecs-3292 4.15.0-213-generic #224-Ubuntu SMP Mon Jun 19 13:30:12 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
root@hcss-ecs-3292:/opt/worthsen/ebf_linux_kernel# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.6 LTS
Release:        18.04
Codename:       bionic
root@hcss-ecs-3292:/opt/worthsen# git clone -b ebf_4.19.35_imx6ul  https://github.com/Embedfire/ebf_linux_kernel.git --depth 1
Cloning into 'ebf_linux_kernel'...
remote: Enumerating objects: 67828, done.
remote: Counting objects: 100% (67828/67828), done.
remote: Compressing objects: 100% (65503/65503), done.
remote: Total 67828 (delta 5557), reused 12990 (delta 1385), pack-reused 0
Receiving objects: 100% (67828/67828), 185.13 MiB | 1.25 MiB/s, done.
Resolving deltas: 100% (5557/5557), done.
Checking out files: 100% (63904/63904), done.
root@hcss-ecs-3292:/opt/worthsen# ls
ebf_linux_kernel
root@hcss-ecs-3292:/opt/worthsen# du -h --max-depth=1
1.2G    ./ebf_linux_kernel
1.2G    .
root@hcss-ecs-3292:/opt/worthsen#

3.5 kernel 工程结构分析

文件/目录 描述
arch 包含特定于体系结构的源代码
certs 包含用于认证的代码和数据
CREDITS 列出了对Linux内核做出贡献的人和组织
Documentation 包含内核文档和开发指南
firmware 包含固件文件,用于硬件初始化
include 包含内核的头文件
ipc 包含进程间通信的代码
Kconfig 内核配置脚本
lib 包含内核库代码
MAINTAINERS 列出了内核各个部分的维护者
Makefile 内核的Makefile,用于编译内核
net 包含网络协议栈的代码
samples 包含示例代码
security 包含安全相关的代码和配置
tools 包含一些辅助工具的代码
virt 包含虚拟化相关的代码
block 包含块设备驱动代码
COPYING 包含版权声明
crypto 包含加密相关的代码
drivers 包含各种设备驱动代码
fs 包含文件系统代码
init 包含内核初始化代码
Kbuild 用于构建内核的脚本
kernel 包含内核核心代码
LICENSES 包含许可证文件
make_deb.sh 用于创建Debian软件包的脚本
mm 包含内存管理代码
README 项目说明文件
scripts 包含用于构建和维护内核的脚本
sound 包含声音系统代码
usr 包含用户空间代码

3.6 内核配置选项

介绍

在Linux系统中,kconfig主要用于配置内核编译时的各种选项,包括硬件支持、功能开关、驱动程序等等。

Kconfig:定义了配置项

.config:对配置项进行赋值

Makefile:建立配置项的生成法则

图形界面调用 kconfig 快速配置,保存退出即可生成.config文件。

此外,kconfig还支持各种高级功能,比如配置选项的依赖关系、条件编译、配置文件的include等。这些功能都可以帮助用户更加灵活地进行内核配置,确保生成一个符合实际需求的内核镜像。

Linux 内核的配置系统由三个部分组成

  • Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Linux 内核的编译规则;
  • 配置文件:给用户提供配置选择的功能,如 Kconfig 文件定义了配置项,使用 make_deb.sh 脚本编译时,使用 arch/arm/configs/npi_v7_defconfig 文件对配置项进行赋值;
  • 配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界
    面(linux 提供基于字符界面、基于 Ncurses 图形界面以及基于 Xwindows 图形界面的用户配置界面,各自对应于 make config、make menuconfig 和 make xconfig)。
按键操作
标签 说明
↑↓ PgUp PgDn 浏览、选择内核功能
← → 选择Select、Exit等操作
Enter 进入子菜单
Y 选中这项功能
N 排除这项功能
M 以模块的形式选择
Esc 双击Esc返回上一级菜单
? 查看这项功能的帮助信息
/ 搜索
图例说明
标签 说明
[*] 已选中的项目
[ ] 未选中的项目
<M> 已选中的项目(以模块形式)
< > 未选中的项目(以模块形式)
操作选项
标签 说明
<Select> 进入当前高亮配置项的子菜单
<Exit> 退出当前菜单,返回上一层
<Help> 提供当前高亮配置项的帮助信息
<Save> 保存当前的配置更改,但不退出配置工具
<Load> 加载指定的配置文件
主要选项
选项 说明
General setup(常规设置) 运行时的基本配置
Kernel Features(内核特性) 核心功能的配置,如模块化、块设备支持等
CPU Power Management(CPU 功耗管理) 配置 CPU 的功耗管理选项
Enable loadable module support(启用可加载模块支持) 是否支持内核模块
IO Schedulers(I/O 调度器) 配置磁盘 I/O 调度器
Networking support(网络支持) 配置网络支持,包括协议、设备等
Device Drivers(设备驱动) 配置各种设备驱动,如输入设备、USB 设备等
File systems(文件系统) 配置文件系统支持,选择支持的文件系统类型
Security options(安全选项) 配置内核安全相关选项
Cryptographic API(加密 API) 配置加密 API 支持
页面选项说明
make menuconfig KCONFIG_CONFIG=arch/arm/configs/npi_v7_defconfig ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  • 主页面

  • / 进入搜索页面,输入关键字

    输入错误时,可使用Ctrl+退格键删除输入

  • 回车显示搜索结果

  • 按键 2 直接跳到该配置

3.7 内核编译

编译 Kernel 有两种方法,一种是编译较为通用的 zImage,常用于构建成镜像固件。另一种则是编译成 deb 安装包,将其下载到板子上安装即可更新 Kernel。

3.7.1 编译内核 zImage

# 清除之前编译环境
make mrproper

# 编译内核
make ARCH=arm npi_v7_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8

bot@u18:~/worthsen/ebf_linux_kernel$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8
scripts/kconfig/conf  --syncconfig Kconfig
  SYSHDR  arch/arm/include/generated/uapi/asm/unistd-common.h
...
  LD [M]  crypto/crypto_engine.ko
  LD [M]  crypto/echainiv.ko
  LD [M]  crypto/tcrypt.ko
  LD [M]  crypto/xor.ko
  LD [M]  drivers/dma/dmatest.ko
  LD [M]  drivers/crypto/virtio/virtio_crypto.ko
  LD [M]  drivers/ebf_module/dht11/dht11.ko
  LD [M]  drivers/ebf_module/ds18b20/ds18b20.ko
  LD [M]  drivers/ebf_module/infrared/infra.ko
  LD [M]  drivers/hid/usbhid/usbhid.ko
  LD [M]  drivers/i2c/algos/i2c-algo-pca.ko
  LD [M]  drivers/i2c/algos/i2c-algo-pcf.ko
  LD [M]  drivers/iio/imu/inv_mpu6050/inv-mpu6050.ko
  LD [M]  drivers/iio/imu/inv_mpu6050/inv-mpu6050-i2c.ko
  LD [M]  drivers/input/mouse/psmouse.ko
  LD [M]  drivers/input/serio/serport.ko
  LD [M]  drivers/media/platform/mxc/capture/adv7180_tvin.ko
  LD [M]  drivers/input/touchscreen/goodix.ko
  LD [M]  drivers/media/platform/mxc/capture/ipu_fg_overlay_sdc.ko
  LD [M]  drivers/media/platform/mxc/capture/ipu_prp_enc.ko
  LD [M]  drivers/media/platform/mxc/capture/ipu_csi_enc.ko
  LD [M]  drivers/media/platform/mxc/capture/ipu_bg_overlay_sdc.ko
  LD [M]  drivers/media/platform/mxc/capture/ipu_still.ko
  LD [M]  drivers/media/platform/mxc/capture/mxc_mipi_csi.ko
  LD [M]  drivers/media/platform/mxc/capture/mx6s_capture.ko
  LD [M]  drivers/media/platform/mxc/capture/mxc_v4l2_capture.ko
  LD [M]  drivers/media/platform/mxc/capture/ov5640_camera_v2.ko
  LD [M]  drivers/media/platform/mxc/capture/mxc_vadc.ko
  LD [M]  drivers/media/platform/mxc/capture/v4l2-int-device.ko
  LD [M]  drivers/media/usb/gspca/gspca_main.ko
  LD [M]  drivers/net/dummy.ko
  LD [M]  drivers/media/radio/radio-si476x.ko
  LD [M]  drivers/media/usb/uvc/uvcvideo.ko
  LD [M]  drivers/net/ipvlan/ipvlan.ko
  LD [M]  drivers/net/veth.ko
  LD [M]  drivers/net/usb/cdc_eem.ko
  LD [M]  drivers/net/macvlan.ko
  AS      arch/arm/boot/compressed/ashldi3.o
  LD [M]  drivers/net/vxlan.ko
  LD [M]  drivers/net/wireless/ath/ath6kl/ath6kl_core.ko
  LD [M]  drivers/rpmsg/imx_rpmsg_pingpong.ko
  LD [M]  drivers/net/wireless/ath/ath6kl/ath6kl_sdio.ko
  LD [M]  drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil.ko
  LD [M]  drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
  LD [M]  drivers/staging/rtl8188eu/r8188eu.ko
  LD [M]  drivers/rpmsg/imx_rpmsg_tty.ko
  LD [M]  drivers/usb/class/cdc-acm.ko
  LD [M]  drivers/usb/gadget/legacy/g_ether.ko
  LD [M]  drivers/usb/gadget/legacy/g_mass_storage.ko
  LD [M]  drivers/usb/gadget/legacy/g_multi.ko
  LD [M]  drivers/video/fbdev/mxc/mxc_dcic.ko
  LD [M]  drivers/usb/misc/usbtest.ko
  LD [M]  fs/binfmt_misc.ko
  LD [M]  fs/btrfs/btrfs.ko
  LD [M]  fs/nls/nls_iso8859-15.ko
  LD [M]  fs/fat/msdos.ko
  LD [M]  fs/isofs/isofs.ko
  LD [M]  lib/crc-itu-t.ko
  LD [M]  fs/overlayfs/overlay.ko
  LD [M]  fs/udf/udf.ko
  LD [M]  lib/crc7.ko
  LD [M]  lib/raid6/raid6_pq.ko
  LD [M]  net/802/stp.ko
  LD [M]  net/bridge/br_netfilter.ko
  LD [M]  lib/xxhash.ko
  LD [M]  lib/zstd/zstd_compress.ko
  LD [M]  lib/zstd/zstd_decompress.ko
  LD [M]  net/ipv4/esp4.ko
  LD [M]  net/bridge/bridge.ko
  LD [M]  net/ipv4/xfrm4_mode_transport.ko
  LD [M]  net/ipv4/udp_tunnel.ko
  LD [M]  net/netfilter/ipvs/ip_vs_rr.ko
  LD [M]  net/ipv6/ip6_udp_tunnel.ko
  LD [M]  net/netfilter/ipvs/ip_vs.ko
  LD [M]  net/netfilter/xt_addrtype.ko
  LD [M]  net/netfilter/xt_ipvs.ko
  LD [M]  net/netfilter/xt_physdev.ko
  LD [M]  sound/core/seq/snd-seq.ko
  LD [M]  sound/core/seq/snd-seq-midi-event.ko
  LD [M]  sound/core/seq/snd-seq-midi.ko
  LD [M]  sound/core/snd-hwdep.ko
  LD [M]  sound/core/snd-pcm.ko
  LD [M]  sound/core/snd-timer.ko
  LD [M]  sound/core/snd-pcm-dmaengine.ko
  LD [M]  sound/core/snd-rawmidi.ko
  LD [M]  sound/core/snd-seq-device.ko
  LD [M]  sound/drivers/snd-aloop.ko
  LD [M]  sound/drivers/snd-dummy.ko
  LD [M]  sound/soc/codecs/snd-soc-tlv320aic23.ko
  LD [M]  sound/soc/codecs/snd-soc-wm8960.ko
  LD [M]  sound/soc/codecs/snd-soc-si476x.ko
  LD [M]  sound/soc/codecs/snd-soc-tlv320aic23-i2c.ko
  LD [M]  sound/soc/fsl/imx-pcm-dma-v2.ko
  LD [M]  sound/soc/codecs/snd-soc-wm8962.ko
  LD [M]  sound/soc/fsl/imx-pcm-dma.ko
  LD [M]  sound/soc/fsl/snd-soc-fsl-acm.ko
  LD [M]  sound/soc/fsl/imx-pcm-fiq.ko
  LD [M]  sound/soc/fsl/snd-soc-fsl-asrc.ko
  LD [M]  sound/soc/fsl/snd-soc-fsl-audmix.ko
  LD [M]  sound/soc/fsl/snd-soc-fsl-esai.ko
  LD [M]  sound/soc/fsl/snd-soc-fsl-micfil.ko
  LD [M]  sound/soc/fsl/snd-soc-fsl-rpmsg-i2s.ko
  LD [M]  sound/soc/fsl/snd-soc-fsl-ssi.ko
  LD [M]  sound/soc/fsl/snd-soc-fsl-sai.ko
  LD [M]  sound/soc/fsl/snd-soc-fsl-utils.ko
  LD [M]  sound/soc/fsl/snd-soc-imx-wm8960.ko
  LD [M]  sound/soc/fsl/snd-soc-imx-audmux.ko
  LD [M]  sound/soc/generic/snd-soc-simple-card-utils.ko
  LD [M]  sound/soc/generic/snd-soc-simple-card.ko
  LD [M]  sound/soc/generic/snd-soc-simple-scu-card.ko
  LD [M]  sound/soc/snd-soc-core.ko
  LD [M]  sound/usb/snd-usb-audio.ko
  LD [M]  sound/usb/snd-usbmidi-lib.ko
  AS      arch/arm/boot/compressed/bswapsdi2.o
  AS      arch/arm/boot/compressed/piggy.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready

编译得到的 zImage 内核在 arch/arm/boot 目录下,设备树在 arch/arm/boot/dts 目录下设备树分为 emmc 版本 imx6ull-mmc-npi.dtb 以及 nand 版本 imx6ull-nand-npi.dtb。

3.7.2 zImage

通过 arm-linux-gnueabihf-ld 命令将 vmlinux.lds head.o piggy.o misc.o decompress.o string.o hyp-stub.o lib1funcs.o ashldi3.o bswapsdi2.o 链接成 vmlinux,再通过 arm-linux-gnueabihf-objcopy 命令将 vmlinux 以 bin 格式输出到 zImage,期间删去了 comment 等信息

3.7.3 编译内核 deb 安装包 (推荐)

想要编译内核的 deb 安装包,以 sudo 权限运行野火提供的 make_deb.sh 脚本即可,我们也推荐使用这样的编译方式编译内核,构建出来的 deb 安装包可直接使用 sudo dpkg -i xxx.deb 命令安装在鲁班猫系统上,然后重启使用 cat /proc/version 查看内核是否更新。

ebf_linux_kernel/make_deb.sh 内容如下:

deb_distro=bionic
DISTRO=stable
build_opts="-j 16"
build_opts="${build_opts} O=build_image/build"
build_opts="${build_opts} ARCH=arm"
build_opts="${build_opts} KBUILD_DEBARCH=${DEBARCH}"
build_opts="${build_opts} LOCALVERSION=-imx6"
build_opts="${build_opts} KDEB_CHANGELOG_DIST=${deb_distro}"
build_opts="${build_opts} KDEB_PKGVERSION=1.$(date +%g%m)${DISTRO}"
build_opts="${build_opts} CROSS_COMPILE=arm-linux-gnueabihf-"
build_opts="${build_opts} KDEB_SOURCENAME=linux-upstream"
make ${build_opts} npi_v7_defconfig
make ${build_opts}
make ${build_opts} bindeb-pkg

说明如下:

* deb_distro=bionic: 
设置了变量 deb_distro,用于指定生成的 Debian 包的目标发行版,这里设置为 bionic。
* DISTRO=stable: 
设置了变量 DISTRO,用于指定 Linux 内核的目标发行版,这里设置为 stable。
* build_opts="-j 16": 
设置了编译选项,-j 16 表示并行编译时使用 16 个线程。
* build_opts="${build_opts} O=build_image/build": 
添加了编译选项,指定编译输出目录为 build_image/build。
* build_opts="${build_opts} ARCH=arm": 
添加了编译选项,指定目标架构为 ARM。
* build_opts="${build_opts} KBUILD_DEBARCH=${DEBARCH}": 
添加了编译选项,指定 deb 包的架构为 ${DEBARCH}。
* build_opts="${build_opts} LOCALVERSION=-imx6": 
添加了编译选项,设置了内核的本地版本标识为-imx6。
* build_opts="${build_opts} KDEB_CHANGELOG_DIST=${deb_distro}": 
添加了编译选项,指定生成的 deb 包 changelog 的目标发行版为 ${deb_distro}。
* build_opts="${build_opts} KDEB_PKGVERSION=1.$(date +%g%m)${DISTRO}": 
添加了编译选项,指定生成的 deb 包的版本号为当前年份后两位加上当前月份,后跟 ${DISTRO}(在这种情况下是 stable)。
* build_opts="${build_opts} CROSS_COMPILE=arm-linux-gnueabihf-": 
添加了编译选项,指定交叉编译工具链为 arm-linux-gnueabihf-。
* build_opts="${build_opts} KDEB_SOURCENAME=linux-upstream": 
添加了编译选项,指定生成的 deb 包的源名称为 linux-upstream。
* make ${build_opts} npi_v7_defconfig: 
使用 make 命令加载了名为 npi_v7_defconfig 的预配置文件。
* make ${build_opts}: 
使用 make 命令编译 Linux 内核。
* make ${build_opts} bindeb-pkg: 
使用 make 命令生成内核 deb 包。

# 可能需要修改的参数是:
* build_opts="-j 16":
默认使用 16 线程,需要根据实际电脑性能修改。
* build_opts="\${build_opts} KDEB_PKGVERSION=1.$(date +%g%m)${DISTRO}":
设置了内核 deb 包的版本号,默认是数字 + 当前年份后两位加上当前月份后跟 stable,如果是大版本更新可修改前面的数字,如果是当月频繁更新,可以将 $(date +%g%m) 修改为 $(date+%g%m%d),添加具体日期,如果是测试版,可修改 stable 为 beta 等。

执行以下命令编译内核 deb 包:

# 仓库还原再编译
git status .
git clean -f

./make_deb.sh

...

构成生成的 deb 包在内核源码/build_image 目录下。

3.8 镜像组成

4 内核烧录

4.1 USB 烧写 Linux 内核

[野火]《嵌入式Linux镜像构建与部署------基于LubanCat-i.MX6ULL开发板》

4.2 DEB 包烧写 Linux 内核(SD 卡/EMMC/NAND 通用)

将编译出来的 build_image/linux-image-4.19.35-imx6_1.xxxstable_armhf.deb 内核安装包拷贝到开发板上面,使用 dpkg 命令即可替换板子上的内核,如下所示。

#查看当前的内核
root@npi:~# dpkg -l | grep imx
ii  kobs-ng-for-imx6ull           0.1.1                               armhf        NandFlash Tools
rc  linux-image-4.19.35-imx6      2.2LubanCat                         armhf        Linux kernel, version 4.19.35-imx6

#卸载当前内核
sudo dpkg -r linux-image-4.19.35-imx6

#若使用dpkg安装内核deb包提示错误,删除/boot/kernel目录下所有文件
sudo rm /boot/kernel/*

#安装新内核
sudo dpkg -i linux-image-4.19.35-carp-imx6_1stable_armhf.deb

4.3 直接替换 Linux 内核(SD 卡/EMMC/NAND 通用)

将编译出来的 ebf_linux_kernel/arch/arm/boot/zImage 的拷到板子上,重命名为 vmlinuz-4.19.35-imx6 并替换/boot/kernel/vmlinuz-4.19.35-imx6 然后再建立个软件连接,原因是直接编译内核的版本号少了后缀,不能匹配当前/lib/modules/的驱动模块,加了软连接将旧版本的驱动模块软连接到新版本,即可匹配。

然后再建立个软件连接

ln -s /lib/modules/4.19.35-imx6 /lib/modules/4.19.35+
reboot

4.4 TFTP 烧写 Linux 内核(SD/EMMC/NAND 通用,一般用于测试)

5 添加驱动模块

5.1 添加驱动模块到 Linux 内核

5.1.1 介绍

大部分有修改内核需求的用户基本上都是对于驱动的修改或者是对于设备树的修改,其中设备

树目录在 arch/arm/boot/dts 目录下,设备树插件目录在 arch/arm/boot/dts/overlays 目录下,驱动目录在 ebf_linux_kernel/drivers 下,每个不同的驱动占用一个子目录,如 char、block、net、mtd、i2c等。

5.1.2 操作步骤

(1)新建文件夹,编写驱动文件

(2)编写 Makefile

(3)修改 Kconfig

(4)重新配置内核,如执行make menuconfig

(5)重新编译内核,执行make zImage 或 make modules

5.1.3 操作流程【示例】

下面介绍如何往内核中添加一个简单的驱动模块,在 drivers 目录下存在一个 ebf_module 目录,用于存放一些野火自己编写的驱动模块,我们将在这个目录下添加新的驱动模块,在 ebf_module 目录下新建 hello_module 目录,并在 hello_module 目录下新建 hello_module.c 以及 Makefile 文件,目录结构如下所示

.
├── dht11
│ ├── dht11.c
│ ├── dht11.h
│ ├── Makefile
│ └── test_app.c
├── ds18b20
│ ├── ds18b20.c
│ ├── ds18b20.h
│ ├── ds18b20.sh
│ ├── Makefile
│ └── test_app.c
├── hello_module
│ ├── hello_module.c
│ └── Makefile
├── infrared
│ ├── infra.c
│ ├── infra.h
│ ├── Makefile
│ └── test_app.c
├── Kconfig
└── Makefile

hello_module.c 文件

c 复制代码
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>

static int _init hello_init (void)
{
    printk(KERN_EMERG "[ KERN_EMERG ] Hello Module Init\n");
    printk("[ default ]Hello Module Init\n");
    return 0;
}

static void _exit hello_exit (void)
{
    printk("[ default ] Hello Module Exit\n");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL2");
MODULE_AUTHOR("embedfire");
MODULE_DESCRIPTION("hello World module");
MODULE_ALIAS("test_module");
  • hello_module/Makefile 文件
    hello_module/Makefile 文件内容如下

    obj-$(CONFIG_HELLO_MODULE) := hello_module.o

  • Makefile 文件
    除了 hello_module/Makefile 文件之外还需要修改上一层 Makefile 的文件的内容,添加内容如下

shell 复制代码
#core
obj-y += dht11/
obj-y += ds18b20/
obj-y += infrared/
obj-y += hello_module/
  • Kconfig 文件
    添加 kconfig 文件内容如下
shell 复制代码
menu "Embedfire Modules"
  
menuconfig EBF_MODULE
    bool "Embedfire Modules"

if EBF_MODULE

config EBF_DHT11
    tristate "dht11"

config DS18B20
    tristate "ds18b20"

config INFRARED
    tristate "infrared"

config HELLO_MODULE
    tristate "hello_module"

endif # EBF_MODULE

endmenu
  • 重新配置内核
    执行如下命令,找到 hello_module 的配置选项,hello_module 配置路径为 Device Drivers > Embedfire Modules > Embedfire Modules 选择编译进内核的方式编译。

    make menuconfig KCONFIG_CONFIG=arch/arm/configs/npi_v7_defconfig ARCH=arm_CROSS_COMPILE=arm-linux-gnueabihf

选择保存后,重新执行 sudo ./make_deb.sh 编译新的内核 deb 安装包,并通过以上介绍过方式将 deb 安装包重新安装到开发板上。在开发板子上可看到 /lib/modules/4.19.35-carp-imx6/kernel/drivers/ebf_module/hello_module/hello_module.ko 文件。

5.2 编写驱动模块 到内核代码外

使用 insmod、modprobe 命令,将驱动模块动态的加载到内核中。

5.2.1 优点

(1)这样可以缩小内核体积;

(2)使用方便。

5.2.2 操作流程

Linux下编写和加载 .ko 文件(驱动模块文件)

https://blog.csdn.net/qq_38880380/article/details/79227760

开发板开机时,若有连接屏幕,会在屏幕上显示内核默认的 logo(小企鹅),若想要修改启动 logo,可以按照以下步骤操作。

(1)准备一张图片

(2)转换为 ppm 格式的图片

(3)替换原本的 logo 文件

(4)修改启动脚本和开机背景图

7 设备树

7.1 设备树介绍

设备树的作用就是描述一个硬件平台的硬件资源。这个"设备树"可以被 bootloader(uboot) 传递到内核,内核可以从设备树中获取硬件信息。

设备树描述硬件资源时有两个特点。

  • 第一,以"树状"结构描述硬件资源。

    例如本地总线为树的"主干"在设备树里面称为"根节点",挂载到本地总线的 IIC 总线、SPI 总线、UART 总线为树的"枝干"在设备树里称为"根节点的子节点",IIC 总线下的 IIC 设备不止一个,这些"枝干"又可以再分。

  • 第二,设备树可复用

    可以像头文件(.h 文件)那样,一个设备树文件引用另外一个设备树文件,这样可以实现"代码"的重用。例如多个硬件平台都使用 i.MX6ULL 作为主控芯片,那么我们可以将 i.MX6ULL 芯片的硬件资源写到一个单独的设备树文件里面一般使用".dtsi"后缀,其他设备树文件直接使用"# includexxx"引用即可。

7.2 常见 DT 文件

  • DTS 是指.dts 格式的文件,是一种 ASII 文本格式的设备树描述,也是我们要编写的设备树源码,一般一个.dts 文件对应一个硬件平台,位于 Linux 源码的"/arch/arm/boot/dts"目录下。

  • DTSI 是指由 NXP 官方提供,是一个 imx6ull 平台"共用"的设备树文件。

  • DTC 是指编译设备树源码的工具,一般情况下我们需要手动安装这个编译工具。

  • DTB 是设备树源码编译生成的文件,类似于我们 C 语言中".C"文件编译生成".bin"文件。

  • DTBO 是设备树叠加层编译生成的文件,可以对 DTB 进行叠加补充。

7.3 设备树节点编写

Linux设备树

https://doc.embedfire.com/linux/imx6/driver/zh/latest/linux_driver/driver_tree.html

8 设备树的编译及烧录

8.1 下载安装编译镜像系统+安装编译工具和依赖

sudo apt install make gcc-arm-linux-gnueabihf gcc bison flex libssl-dev dpkg-dev lzop vim

8.2 获取kernel

直接下载 kernel 代码

8.3 编译设备树

在编写完设备树后,假设取名为(mmc:imx6ull-mmc-npi.dts nand:imx6ull-nand-npi.dts)在./ebf_linux_kernel/arch/arm/boot/dts/Makefile 文件中添加

imx6ull-mmc-npi.dtb \
imx6ull-nand-npi.dtb \

再执行如下命令全部编译

make dtbs ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf

或者使用如下命令进行单独编译

make imx6ull-mmc-npi.dtb ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf

8.4 烧录设备树

设备树烧录方法比较少,这里讲一个比较常用且通用的。

把编译出的设备树 imx6ull-mmc-npi.dtb/imx6ull-nand-npi.dtb

下载到板子中的/usr/lib/linux-image-4.19.35-imx6 即可

参考

1、wiki--Linux_kernel

2、[野火]《嵌入式Linux镜像构建与部署------基于LubanCat-i.MX6ULL开发板》

3、linux--kernel

4、1.2 > Linux的内核迭代 与 主要发行版的特点

5、linux发展历史

6、Linux内存查看通用方法(二): kernel空间

7、详解Linux内核编译配置(menuconfig)、文件系统制作

8、luckfox--内核配置

9、添加驱动模块到内核的两种方法

10、【内核驱动】内核中添加驱动模块

相关推荐
疯狂飙车的蜗牛1 小时前
从零玩转CanMV-K230(4)-小核Linux驱动开发参考
linux·运维·驱动开发
远游客07133 小时前
centos stream 8下载安装遇到的坑
linux·服务器·centos
马甲是掉不了一点的<.<3 小时前
本地电脑使用命令行上传文件至远程服务器
linux·scp·cmd·远程文件上传
jingyu飞鸟3 小时前
centos-stream9系统安装docker
linux·docker·centos
超爱吃士力架4 小时前
邀请逻辑
java·linux·后端
cominglately6 小时前
centos单机部署seata
linux·运维·centos
魏 无羡6 小时前
linux CentOS系统上卸载docker
linux·kubernetes·centos
CircleMouse6 小时前
Centos7, 使用yum工具,出现 Could not resolve host: mirrorlist.centos.org
linux·运维·服务器·centos
木子Linux7 小时前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算
mit6.8247 小时前
Ubuntu 系统下性能剖析工具: perf
linux·运维·ubuntu