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 内核网址
网址中内核文件,大部分是没适配相应芯片的,适配芯片是芯片原厂干的事,一般开发者不去为一款芯片做适配,也没这个能力去适配,作为嵌入式开发人员主要职责是进行内核的配置与使用。
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 下载内核源码
-
Kernel 官方内核源码
-
NXP 官方的 kernel 源码
-
野火的 kernel 源码
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)。
menuconfig 的基本操作和说明
按键操作
标签 | 说明 |
---|---|
↑↓ 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
6 修改 Linux 内核启动 logo
开发板开机时,若有连接屏幕,会在屏幕上显示内核默认的 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 即可
参考
2、[野火]《嵌入式Linux镜像构建与部署------基于LubanCat-i.MX6ULL开发板》