
xboard
文章平均质量分 82
xboard项目,就是为了给“旧的”、“吃灰”的板卡,穿上新的衣服,从而可以使用已有的板卡,学习新的系统(uboot、kernel、rootfs)知识,从而对比学习各CPU的启动流程,学会搭建启动镜像的移植
口袋物联
作者: 口袋物联
主要从事Linux系统系统开发,喜欢阅读内核源代码,在不断的学习和工作中深入理解内存管理,进程调度,文件系统,设备驱动等内核子系统
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
[xboard]xboard项目简介
而在当下的网络上,查找6410开发板,见得最多的开发板,是OK6410和tiny6410,大家上传的也都是基于老版本做的一些开发、移植。所以借xboard项目,将本人的real6410重新移植,使其焕然心机!上面对比了不同厂家的s3c6410,硬件资源上的差异,其实对比SMDK6410,不难发现,它们大同小异,基本上都是在三星提供的参考板上移植过来的。给“旧的”、“吃灰”的板卡,穿上新的衣服,从而可以使用已有的板卡,学习新的系统(uboot、kernel、rootfs)知识。原创 2024-05-03 18:28:43 · 1433 阅读 · 0 评论 -
[xboard] 33 buildroot处理补丁的3种方法及应用示例
本文介绍了补丁的制作方法及其在Buildroot中的应用。主要内容包括:1)三种补丁制作方式(diff命令、git工具、quilt工具);2)Buildroot中三种补丁管理方案(全局补丁、包内补丁、结构化包补丁);3)通过示例演示如何在Buildroot中创建测试包、准备补丁并应用。文章重点讲解了补丁生成与应用的具体命令,以及Buildroot项目中对补丁的组织管理方式,为嵌入式开发中的代码修改与协作提供了实用指导。原创 2025-10-11 15:58:53 · 2 阅读 · 0 评论 -
[xboard] 31 buildroot应用(包)获取代码的4种方法大总结
本文介绍了Buildroot中获取代码的两种主要方法:本地代码获取和通过GitHub获取。本地代码获取通过在.mk文件中定义源代码位置和使用方法,示例展示了如何编译本地应用并安装到目标系统。主流方法则通过GitHub自动下载指定版本的代码包,示例以linux-serial-test为例说明配置和下载过程。两种方法均展示了Buildroot包管理的基本流程,包括同步、配置、编译和安装步骤。原创 2025-10-11 15:56:42 · 116 阅读 · 0 评论 -
[xboard] 32 buildroot应用编译(make cmake automake)
Buildroot作为自动化构建系统,通过包定义文件统一不同构建系统的编译流程。本文展示了Makefile和CMake两种构建系统的集成实现:1) Makefile项目通过定义.mk文件配置编译参数,使用TARGET_CC等变量完成交叉编译;2) CMake项目通过CMakeLists.txt管理构建过程,Buildroot自动处理配置阶段。两种方式最终都生成目标平台可执行文件并安装到指定目录,验证了Buildroot对不同构建系统的兼容性。文章提供了完整的配置文件和编译日志,展示了从源码到二进制产物的完整原创 2025-10-10 10:20:42 · 228 阅读 · 0 评论 -
[xboard] 30 buildroot应用的编译方法大总结
Buildroot常用命令摘要 Buildroot提供了丰富的配置和编译命令,包括图形化配置(menuconfig等)、交叉编译器编译(make sdk)、包管理命令(<pkg>-build等)、内核和uboot定制命令(linux-menuconfig等)。支持多种操作:保存配置(savedefconfig)、查看依赖关系(show-depends)、生成依赖图(graph-depends)、详细编译(V=1)等。还提供清理命令(distclean)、SDK生成(make sdk)和帮助查看(原创 2025-10-10 10:16:33 · 6 阅读 · 0 评论 -
[xboard] 29 buildroot最小根文件系统移植
本文对比了四种常用根文件系统工具(Buildroot、Debian/Ubuntu、Yocto Project和OpenWrt)的适用场景,重点介绍了Buildroot的特点和使用方法。文章详细讲解Buildroot的下载方式(官网、Git和LTS版本)和代码结构,并以ARM Cortex-A8为例,演示了从配置目标架构、工具链到系统设置的全过程。最后简要说明了编译步骤,输出包含ext格式的根文件系统镜像。Buildroot因其简单高效的特点,特别适合资源受限、快速启动的小型嵌入式项目。原创 2025-10-10 10:14:35 · 120 阅读 · 0 评论 -
[xboard] 28 busybox最小根文件系统
本文介绍了Linux根文件系统类型及BusyBox构建最小系统的过程。主要内容包括:1)常用根文件系统特点(ext4、squashfs、jffs2/ubifs、NFS);2)BusyBox的三种下载方法和代码结构解析;3)交叉编译BusyBox的具体步骤;4)构建最小根文件系统的目录结构创建和设备文件配置方法。文章为嵌入式系统开发提供了实用的根文件系统构建指南,重点讲解了BusyBox的配置编译流程和最小系统环境的搭建要点。原创 2025-10-09 20:29:25 · 149 阅读 · 0 评论 -
[xboard] 27kernel内核中的kconfig工作原理及完整示例
本文介绍了Linux内核配置系统的Kconfig语法和使用方法。主要内容包括:1) 配置界面的组织结构,说明主界面显示项与各目录下Kconfig文件的对应关系;2) 配置选项的基本语法,包括bool/tristate/string等数据类型定义、depends on/select依赖关系、menu/choice等组织结构;3) 通过示例展示了完整的Kconfig配置,包含版本信息、调试级别、网络驱动、系统配置选项组等典型配置场景。重点讲解了正向/反向依赖、互斥选项、条件编译等关键特性,为内核配置提供了实用参原创 2025-10-09 20:21:17 · 15 阅读 · 0 评论 -
[xboard] 26 kernel启动流程之initrd、initramfs、ramdisk核心异同
摘要: initrd、initramfs和ramdisk均为内存中的临时文件系统,用于Linux内核启动初期加载驱动和初始化脚本。三者的核心差异在于实现机制:ramdisk是内存模拟的块设备,需格式化文件系统;initrd基于ramdisk机制,需单独加载镜像并由bootloader传递参数;initramfs直接通过cpio.gz包嵌入内核,解压到内存文件系统,效率更高且成为2.6内核后的主流方案。在i.MX6平台上,实现步骤包括:1) ramdisk需制作ext2格式镜像并通过U-Boot加载;2) i原创 2025-10-08 16:47:28 · 12 阅读 · 0 评论 -
[xboard] 25 kernel启动参数分析(console=ttyS0,115200n8 root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait)
本文介绍了Linux内核命令行参数的常见用法及定义方式。主要内容包括: 常见cmdline参数示例,如console、root、rootfstype等串口和根文件系统配置参数; 内核定义的标准cmdline参数,详细说明了root、init、debug等核心参数的用途和选项; 命令行参数的定义机制,对比分析了__setup()、early_param()、core_param()和module_param()四种宏的特点: __setup():最早的参数解析机制,已过时 early_param():用于极早原创 2025-10-08 16:43:42 · 135 阅读 · 0 评论 -
[xboard] 24 kernel启动流程之c语言篇
本文介绍了ARMv7 CPU内核启动流程,主要分为三个阶段:初始化解压镜像、汇编阶段初始化和C语言阶段初始化。重点分析了start_kernel函数的执行过程,包括极早期初始化、架构相关设置、内存管理初始化、内核参数解析和核心子系统初始化。关键步骤包括:smp_setup_processor_id确定CPU ID、setup_arch进行架构设置、mm_init初始化内存管理、sched_init实现任务调度等。整个启动过程完成了从硬件初始化到多任务调度的完整转换,为系统运行奠定了基础。原创 2025-10-03 15:26:53 · 20 阅读 · 0 评论 -
[xboard] 23 kernel启动流程之汇编篇
文章摘要: ARMv7内核启动流程分为三个阶段:初始化解压镜像、汇编初始化阶段和C语言阶段。核心入口函数stext位于arch/arm/kernel/head.S,主要完成处理器模式设置(强制SVC模式)、处理器ID验证、内存管理单元(MMU)初始化准备等工作。关键步骤包括通过__lookup_processor_type验证处理器支持,__create_page_tables创建初始页表,最终通过__enable_mmu和__turn_mmu_on启用MMU。其中MMU使能通过设置CP15控制寄存器完成,原创 2025-10-03 15:24:32 · 68 阅读 · 0 评论 -
[xboard] 22 kernel启动流程之zImage自解压
本文分析了ARMv7架构下Linux内核压缩镜像zImage的生成流程。内核启动包含三个阶段:初始化解压镜像、汇编阶段初始化和C语言阶段初始化。生成过程遵循vmlinux→Image→compressed/vmlinux→zImage的转换链,通过objcopy剥离符号和注释段,并使用LZO算法压缩内核数据。关键步骤包括:将原始内核vmlinux转换为二进制Image(19MB),压缩为piggy_data(8.8MB),最终生成含自解压代码的zImage(8.9MB)。整个流程通过Makefile和链接脚原创 2025-10-01 15:16:15 · 18 阅读 · 0 评论 -
[xboard] 21 kernel镜像种类(vmlinux Image zImage bzImage uImage)
Linux内核镜像类型及应用场景分析 Linux内核编译会生成多种格式的镜像文件RW: 基础格式: vmlinux(原始ELF格式,含调试信息) Image(未压缩二进制镜像) 压缩格式: : zImage(通用压缩型,<8MB) bzImage(x86专用,突破大小限制) 专用格式: uImage(U-Boot专用) 对 xipImage(就地执行镜像) FIT Image(集成设备树和安全启动) 辅助系统: DMA - initramfs/initrd(临时根文件系统) 不同架构推荐使用不同镜像格原创 2025-10-01 15:13:18 · 18 阅读 · 0 评论 -
[xboard] 20 kernel Makefile逐行分析2
内核构建关键变量解析 KBUILD_IMAGE:默认构建目标为vmlinux,可通过环境变量或命令行覆盖(如make KBUILD_IMAGE=bzImage),架构目录定义优先级最高。 路径控制变量: INSTALL_PATH:内核违反默认安装至/boot INSTALL_DTBS_PATH:设备树安装路径(如/boot/dtbs/5.15.0) MODLIB:模块安装路径模板(<INSTALL_MOD_PATH>/lib/modules/<版本>) 核心构建逻辑(非外部模块时生效原创 2025-09-30 22:20:52 · 30 阅读 · 0 评论 -
[xboard] 19 kernel Makefile逐行分析1
本文分析了Linux内核构建系统Makefile的关键设计。首先介绍了版本号规范(5.15.180)和开发分支命名规则(Trick or Treat)。其次阐述了目标过滤机制,通过MAKECMDGOALS检测用户输入,防止直接调用内部目标(__前缀)。然后详细说明了环境控制,包括禁用make内置规则(MAKEFLAGS)、统一区域设置(LC_COLLATE)等。最后解释了输出控制逻辑,通过V参数(0/1/2)和-s选项调节构建过程的详细度。这些设计共同确保了内核构建的可靠性、跨平台一致性和可调试性。原创 2025-09-30 22:14:20 · 21 阅读 · 0 评论 -
[xboard]18 kernel的历史与下载编译
Linux内核发展历程与代码结构概览 Linux内核由Linus Torvalds于1991年发起,最初作为开源替代UNIX系统。经过30多年发展,从仅支持i386架构的0.01版演进至支持多处理器、64位计算等现代特性的6.x系列,代码量从万行级增至2700万行。其发展历程可分为几个关键阶段:1991-1996年基础建设期、1996-2003年服务器优化期、2003-2015年架构革新期以及2015年至今的成熟稳定期。目前维护7个长期支持版本(LTS),覆盖从嵌入式设备到云服务器的各种场景。 内核代码采用原创 2025-09-29 21:37:50 · 60 阅读 · 0 评论 -
[xboard]17 uboot中的binman
本文介绍了U-Boot构建系统中的binman工具,用于自动化镜像组装。主要内容包括:1)binman工具的功能概述,支持多种镜像格式和灵活布局控制;2)具体生成步骤,包括启用binman配置、创建镜像描述文件(.its)和编译生成镜像;3)关键原理说明,如镜像描述文件结构和地址映射;4)镜像验证方法和常见问题解决方案。通过binman工具可高效生成符合全志sunxi平台要求的u-boot-sunxi-with-spl.bin镜像,简化复杂镜像管理流程。文中还提供了示例.its文件配置,规范了SPL和U-B原创 2025-09-28 21:15:25 · 19 阅读 · 0 评论 -
[xboard]16 uboot启动控制内核的3种方法(boot.scr uEnv.txt extlinux.conf)
每种启动配置文件都有其特定的用途和创建方法。选择哪种取决于你的具体需求和系统环境。例如,如果你需要在U-Boot中快速加载一个操作系统而不需要复杂的脚本处理,boot.scr可能是一个好选择。如果你需要更灵活的环境变量设置,uEnv.txt可能更适合。而如果你使用的是基于EXT Linux的系统,那么extlinux.conf将是必需的配置文件。确保根据你的系统需求选择合适的配置文件,并正确设置和部署它们。原创 2025-09-28 20:22:03 · 34 阅读 · 0 评论 -
[xboard]15 uboot加载内核启动分析
bootm命令启动流程分析:该命令支持三种启动方式(标准启动、子命令、FIT启动),核心函数do_bootm_states通过状态机模式依次执行查找OS镜像、加载组件、准备环境等操作,最终调用boot_selected_os跳转至内核。关键步骤包括boot_prep_linux准备启动参数(支持设备树或传统tag方式),boot_jump_linux通过函数指针kernel_entry实现架构相关的内核跳转(ARM64采用四参数调用约定,ARM32使用三参数约定),并支持调试用的模拟跳转功能。原创 2025-09-28 20:11:26 · 16 阅读 · 0 评论 -
[xboard]14 uboot重定位解析
U-Boot重定向(Relocation)机制解析 摘要:U-Boot重定向的核心目的是解决代码运行地址与加载地址不一致的问题,将自身从内存低地址区域搬运到高地址顶端,避免与内核内存冲突。重定向内容包括代码段、数据段、动态重定位表等完整镜像。实现原理基于ARM位置无关代码(PIC)技术,通过相对跳转和PC基址计算确保代码在任意地址可执行。具体过程分为:准备阶段设置新栈和全局变量,计算重定位偏移;执行阶段完成镜像拷贝和地址修正;最后重定向异常向量表。该机制确保了U-Boot在内存中的灵活布局,为内核预留连续内原创 2025-09-28 19:49:06 · 18 阅读 · 0 评论 -
[xboard]13 uboot的BL2源码分析
U-Boot全局数据结构gd_t包含了系统启动和运行时的关键信息,如时钟频率、环境变量地址、内存布局、设备树指针等。它通过DECLARE_GLOBAL_DATA_PTR宏声明为ARM架构的r9寄存器变量。board_init_f函数执行的初始化序列包括:设置monitor长度、初始化设备树、内存分配、日志系统、启动阶段跟踪等,为后续启动流程做准备。这些操作通过检查相关配置宏条件编译,确保不同硬件平台的兼容性。原创 2025-09-27 10:52:44 · 28 阅读 · 0 评论 -
[xboard]12 uboot的BL1源码分析
摘要:本文分析了嵌入式系统BL1阶段的核心函数board_init_f和board_init_r在不同平台上的实现。以imx6x(udoo板)和am335x(bbg板)为例,详细对比了它们的初始化流程:udoo板在board_init_f中直接调用board_init_r,而bbg板则返回crt0.S再调用。board_init_r主要负责初始化关键子系统、选择引导设备、加载下一阶段镜像,并通过HANDOFF机制传递硬件信息避免重复初始化。文章通过具体代码展示了不同平台在BL1阶段的实现差异和共性。原创 2025-09-27 10:49:07 · 278 阅读 · 0 评论 -
[xboard]11 uboot通用启动流程
本文分析了ARM架构下U-Boot程序的启动流程。首先通过链接脚本确定程序入口为_start符号,位于vectors段中。_start通过b指令跳转到reset函数。reset函数主要完成以下工作:1) 保存启动参数;2) 检查是否支持虚拟化扩展(LPAE);3) 设置CPU为SVC32模式并关闭中断。其中涉及关键协处理器指令操作,如读取ID_PFR1寄存器判断虚拟化支持,以及通过CPSR寄存器设置CPU模式和中断状态。整个过程遵循ARM架构参考手册(DDI0406C)的规范,为后续U-Boot运行奠定基础原创 2025-09-27 10:44:09 · 21 阅读 · 0 评论 -
[xboard]10uboot链接脚本
本文分析了U-Boot链接脚本的选取机制和关键内容。链接脚本从5个地方按优先级获取:环境变量/命令行>CONFIG_SYS_LDSCRIPT>板级目录>CPU架构目录>架构通用目录(通常为arch/arm/cpu/u-boot.lds)。脚本使用OUTPUT_FORMAT、OUTPUT_ARCH和ENTRY定义输出格式和入口点,通过SECTIONS控制内存布局,包含异常向量表、EFI运行时服务段、安全监控代码等关键部分,并支持ARM TrustZone/PSCI功能。脚本还处理代码重原创 2025-09-24 13:11:07 · 28 阅读 · 0 评论 -
[xboard]09 uboot启动流程和最小系统
摘要:ARMv7/v8启动流程分为四个阶段:BootROM初始化基础硬件并加载BL1;BL1(如SPL)初始化外部DDR并加载BL2(完整U-Boot);BL2初始化外设、加载内核并移交控制权;最后Linux内核启动。BL1与BL2关键差异在于:BL1体积小、功能单一(仅初始化DDR和加载BL2),运行于SRAM;BL2功能全面,支持命令行和多种设备,运行于DRAM。最小系统移植只需实现时钟、DDR、串口和启动介质四个核心功能即可完成基础引导。原创 2025-09-24 12:24:21 · 23 阅读 · 0 评论 -
[xboard]08-Makefile逐行分析2
分别对BOARD_SIZE_CHECK、SPL_SIZE_CHECK 、TPL_SIZE_CHECK 进行大小检查,依靠的是size_check,它定义在Makefile中,它的作用是计算参数1(文件)的大小,将结果与参数2(允许值)比较,如果超出,则退出。关于CONFIG_USE_PRIVATE_LIBGCC,默认是打开的。指定使用的libgcc库。此命令在arm64上使用。原创 2025-09-20 22:02:44 · 53 阅读 · 0 评论 -
[xboard]07-Makefile逐行分析1
本文分析了U-Boot Makefile的关键配置逻辑:1)定义版本信息(VERSION/PATCHLEVEL等);2)通过MAKEFLAGS优化构建过程,禁用隐式规则并指定包含目录;3)使用uname -m检测主机架构并映射到内部常量;4)设置LC_ALL等环境变量避免字符集问题;5)通过KBUILD_VERBOSE和quiet/Q控制构建输出信息;6)支持O=参数指定独立输出目录,实现源码与构建分离。这些配置共同构成了U-Boot灵活高效的构建系统基础。原创 2025-09-20 20:58:07 · 40 阅读 · 0 评论 -
[xboard]06-Makefile解读之自动变量
这类变量是对基础变量的扩展,D 表示提取目录部分,F 表示提取文件名部分(类似 dir 和 notdir 函数的作用)。原创 2025-09-20 17:07:25 · 49 阅读 · 0 评论 -
[xboard]05-Makefile解读之call函数种类
本文介绍了Makefile中的关键函数和kbuild.include中定义的实用函数。call函数用于调用自定义函数,支持参数传递和变量引用。重点解析了kbuild.include中的核心函数:filechk通过比较临时文件决定是否更新目标文件;as-option检测汇编器选项兼容性;cmd控制命令执行和输出;if_changed是Kbuild的核心重编译触发函数,仅在依赖或命令变化时执行构建。这些函数通过条件判断、临时文件处理和命令转义等机制,实现了高效的增量构建和错误处理功能。原创 2025-09-20 17:05:11 · 39 阅读 · 0 评论 -
[xboard]04-Makefile解读之shell函数解读
本文介绍了Makefile中常用的函数和字符串处理方法。主要内容包括:1) 函数调用格式为$(<function> <arguments>);2) 三种打印函数(info/warning/error)的区别与使用场景;3) 条件判断函数(if/or/and/intcmp)的语法和示例;4) 遍历函数foreach的用法;5) 丰富的字符串处理函数集,包括subst替换、patsubst模式替换、strip去空格、findstring查找子串、filter过滤、sort排序等操作。文章原创 2025-09-20 10:48:25 · 24 阅读 · 0 评论 -
[xboard]03-Makefile解读之make规则
摘要:本文介绍了Makefile中各种规则变体及其应用场景。从标准规则格式(target-prerequisites-recipe)入手,详细讲解了强制执行的FORCE伪目标、空命令规则、双冒号规则、静态模式规则和多模块子目录管理等高级用法。通过具体示例展示了每种规则的特点和实际应用,帮助读者理解复杂项目(如uboot/Kernel)中的Makefile实现机制。这些技巧对处理大型项目的自动化编译流程至关重要。原创 2025-09-20 08:58:42 · 23 阅读 · 0 评论 -
[xboard]02 uboot下载、移植、编译概述
U-Boot发展历程与移植指南 摘要:U-Boot起源于1999年的PPCBoot项目,2002年与ARMBoot合并后支持多架构,逐步成为嵌入式系统核心引导工具。关键版本包括2010年引入设备树、2014年驱动模型、2017年FIT镜像格式等。下载方式可通过Git或官网获取指定版本。代码结构分为架构层(CPU/设备树)、机器层(板卡驱动)和通用功能层(命令/协议栈)。移植时建议基于相似板级包修改,重点调整设备树(内存/Flash/网络配置)和板级初始化代码(DDR/GPIO),并复用已有驱动框架。最新版本原创 2025-09-18 21:29:23 · 51 阅读 · 0 评论 -
[xboard]01-ARM汇编基础学习
MRS 和 MSR 是用于 访问程序状态寄存器(PSR) 的指令,用于在 CPSR(当前程序状态寄存器)和 SPSR(保存的程序状态寄存器)之间传输数据。STM(Store Multiple)指令用于 将多个寄存器的值连续存储到内存,支持不同的 地址增长模式 和 特权模式访问。LDM(Load Multiple)指令用于 从内存连续加载多个寄存器的值,支持 不同的地址增长模式 和 特权模式访问。不同的CPU,采用不用的架构,当前主流的架构有ARM、RISC-V、X86,PowerPC等,原创 2025-09-10 14:45:24 · 38 阅读 · 0 评论 -
蓝牙常用调试工具(bluetoothctl/hiconfig/l2ping/l2test/hcidump/btmon)
【代码】蓝牙常用调试工具(bluetoothctl/hiconfig/l2ping/l2test/hcidump/btmon)原创 2024-12-20 15:02:15 · 315 阅读 · 0 评论 -
rtl8761驱动移植(CM390)
kernel5.15以后,代码进行了重构,单独列出rtl8761b(支持uart接口)和rtl8761bu。kernel5.14以前,相对5.10,从match(id_table)的2个参数增加到4个。在btusb.c中,增加device信息到blacklist_table。kernel5.10以前,有rtl8761a和rtl8761b。在btrtl.c中,增加match信息到ic_id_table。RTL8761蓝牙芯片,主要有2个系列即A系列和B系列。rtl8761B系列,可以找到通用的文档,原创 2024-12-06 18:04:11 · 634 阅读 · 0 评论 -
qt三大调试方法总结(printf\qDebug\qCDebug)
源码定义在根文件系统定义在源码定义在根文件系统定义在。原创 2024-12-04 14:53:49 · 548 阅读 · 0 评论 -
qt图像合成模式分析
文章目录定义含义示例分析CompositionMode_ClearCompositionMode_SourceCompositionMode_DestinationCompositionMode_SourceOverCompositionMode_DestinationOverCompositionMode_SourceInCompositionMode_DestinationInCompositionMode_SourceOutCompositionMode_DestinationOutCompositi原创 2024-12-04 11:40:00 · 245 阅读 · 0 评论 -
uboot下板级头文件(configs/include)怎样引用的呢?
最新在移植zturn-lite开发板,发现include/configs下的zynq-common.h文件被引用,按照以前的经验,应该是一个开发板的名字,那么,对于include/configs目录下的头文件,系统到底是什么选择的呢?对比zynq_altk_defconfig与xilinx_zynq_virt_defconfig,发现正点原子下,多了对CONFIG_SYS_CONFIG_NAM的定义,且配置下正好有此文件,是巧合还是有意?百度的AI答案,似乎回答了,又似乎没有回答。1 一切答案都在源码中。原创 2024-11-19 16:07:15 · 160 阅读 · 0 评论 -
Linux system-timesyncd同步机制梳理
chronyd是一个用于网络时间同步的守护进程,设计用来替代传统的 ntpd(Network Time Protocol Daemon),通过提供更快的收敛速度、更低的资源消耗和更简单的配置,成为了 ntpd 的一个有力的替代品,尤其适合那些对性能和资源敏感的场景。代码实现,主要基于dbus封装接口,如果对此了解,看容易理清楚逻辑,在src/timesync目录下,主要有4个文件。配置文件位于:/lib/systemd/system/systemd-timesyncd.service。原创 2024-11-19 08:44:42 · 413 阅读 · 0 评论