十二月7号

news2024/11/14 16:46:15

一、uboot概念

1.1 uboot和bootloader关系

1.bootloader:是一系列引导加载程序的统称 boot:引导 loader:加载 2.uboot是引导加载程序中的一种

1.2 uboot特点

1.uboot是由德国DNEX小组进行维护的 2.uboot是一个开源分布式系统 3.uboot支持多种硬件架构平台(ARM/X86/POWERPC) 4.uboot短小精悍 5.uboot是一个裸机程序 6.uboot是一个短命鬼,只是引导linux内核进行启动,内核启动成功之后,uboot的生命周期就结束了 7.uboot在启动成功之后,会给内核传递两个参数(bootcmd和bootargs)?

1.3 uboot环境变量

以下所有学习的命令,需要在串口工具进行输入 1.help ------>查看uboot中所有的环境变量相关信息内容 2.help uboot命令 ------>查看uboot命令中的环境信息 3.help loadb命令 help loadb ------>串口工具输入命令 loadb - load binary file over serial line (kermit mode) ------>打印帮助信息 Usage: loadb [ off ] [ baud ] ------>uboot命令格式 - load binary file over serial line with offset 'off' and baudrate 'baud' 4.help go命令 FSMP1A> help go go - start application at address 'addr' Usage: go addr [arg ...] ------>uboot命令格式 - start application at address 'addr' passing 'arg' as arguments 5.help gpio命令 FSMP1A> help gpio gpio - query and control gpio pins Usage: gpio <input|set|clear|toggle> <pin> - input/set/clear/toggle the specified pin gpio status [-a] [<bank> | <pin>] - show [all/claimed] GPIOs input:设置输入的值 set:设置相应的值 clear:设置清除相应的值 toggle:设置gpio翻转状态 例子: FSMP1A> gpio toggle gpioe10 gpio: pin gpioe10 (gpio 74) value is 1 FSMP1A> gpio toggle gpioe10 gpio: pin gpioe10 (gpio 74) value is 0 FSMP1A> gpio toggle gpiof10 gpio: pin gpiof10 (gpio 90) value is 1 FSMP1A> gpio toggle gpiof10 gpio: pin gpiof10 (gpio 90) value is 0 FSMP1A> gpio toggle gpioe8 gpio: pin gpioe8 (gpio 72) value is 1 FSMP1A> gpio toggle gpioe8 gpio: pin gpioe8 (gpio 72) value is 0 6.pri:打印环境变量信息 ------>串口工具输入:pri FSMP1A> help pri printenv - print environment variables ------>打印变量信息 Usage: printenv [-a] ------> 查看所有环境变量信息 - print [all] values of all environment variables printenv name ... ------>pri uboot变量 - print value of environment variable 'name' 7.pri/printenv ------> 打印环境变量信息 arch=arm ------> 指定架构 baudrate=115200 ------> 波特率 board=stm32mp1 ------>板子名称 bootargs=root=/dev/nfs nfsroot=192.168.1.210:/home/linux/nfs/rootfs,tcp,v4 console=ttySTM0,115200 init=/linuxrc ip=192.168.1.250 bootargs参数功能:自启动参数,设置ubuntu挂载根文件系统到开发板上的路径和ip地址 bootcmd=tftp 0xc2000000 uImage;tftp 0xc4000000 stm32mp157a-fsmp1a.dtb;bootm 0xc2000000 - 0xc4000000 bootcmd参数功能:自启动命令,倒计时时间进入0之前不按下enter键盘,进入自启动模式,并且执行自启动命令 bootdelay=3 ------>倒计时时间 ethaddr=12:56:78:ff:ff:4e ------>物理地址ip gatewayip=192.168.1.1 ------>设置开发板网关 ipaddr=192.168.1.250 ------>设置开发板ip地址 netmask=255.255.255.0 ------>设置开发板子网掩码 serverip=192.168.1.210 ------>设置服务器(ubuntu)的ip地址 8.run -------> 运行run后面的命令 格式:run uboot命令 run bootcmd 1)交互模式: 当uboot启动成功之后,在倒计时时间进入0之前,按下键盘enter键,进入交互模式,和uboot命令进行交互 2)自启动模式: 当uboot启动成功之后,在倒计时时间进入0之前,不按下键盘enter键,进入自启动模式,执行自启动命令(bootcmd)不可以使用uboot命令 3)设置bootcmd格式 setenv bootcmd uboot命令1\;uboot命令2\;............... saveenv 4)在arm课程中,需要输入两条命令:loadb 0xc0008000 go 0xc0008000 FSMP1A> setenv bootcmd loadb 0xc0008000\;go 0xc0008000 FSMP1A> saveenv Saving Environment to MMC... Writing to MMC(0)... OK 5)在串口工具中,查看bootcmd环境变量信息 FSMP1A> pri bootcmd bootcmd=loadb 0xc0008000;go 0xc0008000 6)在串口工具中,执行run bootcmd命令,观察现象 FSMP1A> run bootcmd ## Ready for binary (kermit) download to 0xC0008000 at 115200 bps... 7)在倒计时时间进入0之前,不按下键盘enter键,进入自启动模式,观察现象 Hit any key to stop autoboot: 0 ## Ready for binary (kermit) download to 0xC0008000 at 115200 bps... 9.ping命令 ------->测试开发板和ubuntu组网是否成功 ping - send ICMP ECHO_REQUEST to network host Usage: ping pingAddress 格式:ping 服务器(ubuntu)ip地址 10.tftp命令 ------->使用tftp命令将文件下载到开发板内存中,一定保证开发板和ubuntu组网成功 FSMP1A> help tftp tftpboot - boot image via network using TFTP protocol Usage: tftpboot [loadAddress] [[hostIPaddr:]bootfilename] 格式:tftp 地址 文件名

1.4 设置uboot环境变量

1.设置uboot环境变量:setenv ------>修改环境变量 2.保存uboot环境变量:saveenv ------>保存环境变量 3.修改环境变量格式: setenv 要修改的环境变量 修改的值 saveenv 4.设置开发板倒计时时间为20s FSMP1A> setenv bootdelay 20 FSMP1A> saveenv Saving Environment to MMC... Writing to redundant MMC(0)... OK FSMP1A> pri bootdelay bootdelay=20

 

一、gnu二进制工具集

1.1 gcc命令

将.s文件生成.o文件 arm-linux-gnueabihf-gcc -c asm-led.S -o asm-led.o

1.2 ld链接器

ld:链接命令,将.o文件链接生成.elf文件,需要指定链接的入口地址 arm-linux-gnueabihf-ld -Ttext=0xc0008000 asm-led.o -o asm-led.elf

1.3 objdump生成反汇编

objdump:生成反汇编命令,将.elf文件生成反汇编文件 arm-linux-gnueabihf-objdump -D asm-led.elf > asm-led.dis

1.4 objcopy生成二进制文件

objcopy:生成二进制文件,将.elf文件生成纯粹二进制文件 .elf文件:包含符号表信息,调试信息 .bin文件:不包含符号表信息,调试信息 arm-linux-gnueabihf-objcopy -O binary asm-led.elf asm-led.bin

1.5 nm查看符号表信息

命令:arm-linux-gnueabihf-nm asm-led.elf c00181e8 T __bss_end__ c00181e8 T _bss_end__ c00181e8 T __bss_start c00181e8 T __bss_start__ c00081a8 t delay_1s c00181e8 T _edata c00181e8 T __end__ c00181e8 T _end c0008000 t led1_init c000816c t led1_off c0008130 t led1_on c0008054 t led2_init c0008180 t led2_off c0008144 t led2_on c00080a8 t led3_init c0008194 t led3_off c0008158 t led3_on c00080fc t loop c00081ac t mm c0008000 T _start

1.6 size查看各个段大小

arm-linux-gnueabihf-size asm-led.elf

1.7 readelf查看文件头部信息

arm-linux-gnueabihf-readelf -h asm-led.elf

1.8 strip压缩文件体积

strip压缩文件体积,不可以对中间文件进行压缩(.i,.s,.o文件) arm-linux-gnueabihf-strip asm-led.elf

1.9 addr2line调试段错误信息

addr2line:用来调试内核中段错误信息 格式:arm-linux-gnueabihf-addr2line 地址 -e 指定elf文件 -f -e:指定elf可执行文件 -f:回显函数名,行号 linux@ubuntu:~/DC22081/01-asm-led$ arm-linux-gnueabihf-addr2line c000816c -e asm-led.elf -f led1_off /home/linux/DC22081/01-asm-led/asm-led.S:146 以上学习的所有命令,支持X86架构和ARM架构,如果想生成X86架构,直接使用命令即可,不需要加交叉编译工具链前缀 如果想生成ARM架构,需要加交叉编译工具链前缀就可以

二、gcc编译流程

2.1 预处理

预处理作用:头文件展开,去掉注释,宏替换,不检查语法错误 gcc -E *.c -o *.i

2.2 编译

编译:生成汇编文件,检查语法错误 gcc -S *.i -o *.s

2.3 汇编

汇编:生成二进制文件,检查语法错误 gcc -c *.s -o *.o

2.4 链接

链接:链接对应的库,生成.elf可执行文件 gcc *.o -o 可执行文件

三、分析Makefile文件

makefile中四种赋值方式有什么区别? ?= += := = # SHELL=C:/Windows/System32/cmd.exe # 指定交叉编译工具链前缀 CROSS_COMPILE = arm-linux-gnueabihf- #指定文件名字 NAME = interface #=============================================================================# #-g:gdb调试信息 -marm:编译生成arm架构 -Wall: 显示所有警告信息 -O0:优化等级信息 #-I:指定头文件路径 #-fno-builtin:不使用linux操作系统提供的库函数 #-nostdinc:不使用系统提供的头文件 CFLAGS += -g -marm -Wall -O0 -mabi=apcs-gnu -mfpu=neon -mfloat-abi=softfp -fno-builtin \ -nostdinc -I./common/include -I./include #ld:链接命令 LD = $(CROSS_COMPILE)ld #gcc:编译命令 CC = $(CROSS_COMPILE)gcc #nm:查看符号表信息 NM = $(CROSS_COMPILE)nm #objcopy:生成二进制文件 OBJCOPY = $(CROSS_COMPILE)objcopy #objdump:生成反汇编文件 OBJDUMP = $(CROSS_COMPILE)objdump #============================================================================# #wildcard是Makefile中内置函数 #函数功能:将某个文件夹下面的内容进行以字符串形式进行展开,并用空格隔开 #函数参数:需要展开目录文件 #函数返回值:以字符串展开后的结果 OBJSss := $(wildcard start/*.S) $(wildcard common/src/*.S) $(wildcard *.S)\ $(wildcard start/*.c) $(wildcard common/src/*.c) \ $(wildcard src/*.c) $(wildcard *.c) #patsubst是Makefile中内置函数 #函数功能:将一个字符串内容替换成另外一个字符串 #函数参数: #第一个参数:源字符串,也就是要替换的字符串 #第二个参数:目标字符串,也就是替换后的字符串 #第三个参数:要替换的字符串目录 #函数返回值:替换后的目标字符串 #将OBJSss目录下所有以.S结尾的字符串,替换成.o OBJSs := $(patsubst %.S,%.o,$(OBJSss)) #将OBJS目录下所有以.c结尾的字符串,替换成.o OBJS := $(patsubst %.c,%.o,$(OBJSs)) %.o: %.S @echo " AS $@" @$(CC) $(CFLAGS) -c -o $@ $< #将所有以.S结尾的文件根据指定参数编译生成.o结尾的文件 #$@:目标 #$<:第一个依赖 #$^:所有依赖 %.o: %.c @echo " CC $@" @$(CC) $(CFLAGS) -c -o $@ $< #将所有以.c结尾的文件根据指定参数编译生成.o结尾的文件 all:clean $(OBJS) @echo " LD Linking $(NAME).elf" #将OBJS目录下所有文件,根据链接脚本文件map.lds指定地址信息,生成elf文件 @$(LD) $(OBJS) -T map.lds -o $(NAME).elf @echo " OBJCOPY Objcopying $(NAME).bin" #将elf文件生成.bin文件 @$(OBJCOPY) -O binary $(NAME).elf $(NAME).bin @echo " MAP Generating $(NAME).map" #将elf文件符号表信息重定向到interface.map文件中 @$(NM) $(NAME).elf > $(NAME).map @echo " OBJDUMP Objdumping $(NAME).dis" #将elf文件生成反汇编文件到.dis文件中 @$(OBJDUMP) -DS $(NAME).elf > $(NAME).dis distclean clean: @rm -rf $(OBJS) *.elf *.bin *.dis *.map @echo " CLEAN complete." install: sudo cp $(NAME).bin /mnt/hgfs/share/ huyue: @echo $(OBJSss) @echo $(OBJSs) @echo $(OBJS)

一、什么是系统移植

1)系统移植就是给开发板搭建一个linux操作系统

2)从官方获取源码,进行配置和编译,生成板子需要的镜像文件

二、为什么系统移植

1)为后面学习驱动开发课程打基础

2)驱动开发工程师必备技能

三、如何学习系统移植

1)重点掌握配置和编译的流程

2)不要深追源码中内容

四、课程安排

1.环境搭建 + gnu二进制工具集 + Makefile --------->1天 2.uboot移植和TF-A移植 --------->3天 3.内核移植 --------->1.5天 4.根文件系统 --------->1.5天

五、安装tftp服务器

5.1 安装步骤

注意:一定保证ubuntu有网 tftp服务器:基于UDP协议完成简单的文件传输 作用:通过网线下载程序到开发板中 1.安装tftp服务器安装包 sudo apt-get install tftpd-hpa tftp-hpa tftpd-hpa:服务器端 tftp-hpa:客户端 2.在家目录下创建一个文件夹,文件夹的名字为tftpboot cd ~ chmod 777 tftpboot 3.配置tftp服务器 1)打开配置文件 sudo vi /etc/default/tftpd-hpa 2)更改以下内容 3 TFTP_USERNAME="tftp" #tftp服务器名字 4 TFTP_DIRECTORY="/home/linux/tftpboot/" #tftp服务器下载文件路径,需要更改为自己的路径 5 TFTP_ADDRESS="0.0.0.0:69" #ip地址和端口号 6 TFTP_OPTIONS="-c -l -s" #保持默认参数 4.重启tftp服务器 sudo service tftpd-hpa restart 5.本地测试tftp服务器 1>在家目录下创建一个文件,在~/tftpboot目录下创建一个文件 2>测试现象:将家目录下文件上传到~/tftpboot目录下 ----->上传put 将~/tftpboot目录下下载到家目录下 ----->下载get

5.2 作用

5.3 总结

1.在开发板中emmc设备或者TF卡设备中固化uboot镜像文件 2.在ubuntu中~/tftpboot目录下,准备好基于tfp服务器下载的文件 3.通过开发板的拨码开关,选择开发板的启动方式 4.开发板上电,uboot镜像文件加载到开发板内存中 5.在串口工具打印uboot信息,在倒计时时间进入0之前,按下enter键,进入交互模式 6.使用tftp命令通过网线下载程序到开发板中

六、安装nfs服务器

6.1 安装步骤

注意:一定保证ubuntu有网 nfs服务器:网络文件系统 作用:ubuntu通过网络的方式挂载文件到开发板中 1.安装nfs服务器安装包 sudo apt-get install nfs-kernel-server 2.在家目录下创建一个文件夹,文件夹的名字为nfs cd ~ mkdir nfs chmod 777 nfs 3.将rootfs-ok.tar.xz文件拷贝到~/nfs目录下 4.对文件进行解压 tar -vxf rootfs-ok.tar.xz 5.配置nfs服务器 1)打开配置文件: 2)在配置文件最后一行,添加如下内容:sudo vi /etc/exports 11 /home/linux/nfs/rootfs *(rw,sync,no_subtree_check,no_root_squash) 解释: /home/linux/nfs/rootfs:挂载路径,需要注意填写自己的路径 *(:之间不要有空格 rw:可读可写权限 sync:同步信息 no_subtree_check:不检查子目录的信息 no_root_squash:在开发板中默认权限就是管理员权限,不需要加sudo 6.重启nfs服务器 sudo service nfs-kernel-server restart 7.本地测试nfs服务器是否安装成功: 1>实验现象:将~/nfs/rootfs目录下内容挂载到/mnt目录下 2>挂载命令: sudo mount -t nfs 192.168.250.100:/home/linux/nfs/rootfs /mnt 解释: mount:挂载命令 -t nfs :指定使用nfs服务器进行挂载 192.168.250.100:挂载的ip地址,通过ifconfig进行查看 /home/linux/nfs/rootfs:挂载的路径 /mnt:挂载到的路径 3>需要查看/mnt目录挂载的内容,和~/nfs/rootfs目录下内容是否一致 4>取消挂载命令: sudo umount /mnt

6.2 作用

6.3 总结

1.在开发板中emmc设备或者TF卡设备中固化uboot镜像文件 2.在ubuntu中~/tftpboot目录下,准备好基于tfp服务器下载的文件 3.通过开发板的拨码开关,选择开发板的启动方式 4.开发板上电,uboot镜像文件加载到开发板内存中 5.在串口工具打印uboot信息,在倒计时时间进入0之前,按下enter键,进入交互模式 6.使用tftp命令通过网线下载程序到开发板中,下载内容为设备树文件和uImage镜像文件 7.下载成功之后,linux内核进行启动,启动成功之后 8.通过网线实现从ubuntu挂载根文件系统到开发板中 9.挂载成功之后,在串口工具,可以查看到~/nfs/rootfs目录下相关内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/71325.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Blazor 部署 pdf.js 不能正确显示中文资源解决办法

原文链接 [https://www.cnblogs.com/densen2014/p/16964858.html] 在Blazor项目嵌入 pdf.js 时不能正确显示中文,浏览器F12显示如下错误 错误 l10n.js /web/locale/locale.properties not found. 我找到了解决方案。它不仅消除了上面提到的错误&#xff08;即 404 - locale.p…

nextjs13 webpack5 使用wasm报错

问题描述&#xff1a; 在next 13, webpack 5, react 18的项目中使用Rust编写的wasm报错&#xff1a; ./node_modules/image-map-path/image_map_path_bg.wasm Module parse failed: Unexpected character (1:0) The module seem to be a WebAssembly module, but module is n…

freemarker

文章目录创建项目引入依赖创建配置文件创建启动类和测试类语法listMapif运算符处理空值使用??指定缺失变量默认值内建函数集合长度数据类型布尔值时间类型数值类型字符串类型sequence序列类型hash类型常见指令assign自定义变量指令json转成对象实例list通过下标取值map取值通…

「Redis数据结构」集合对象(Set)

「Redis数据结构」集合对象&#xff08;Set&#xff09; 文章目录「Redis数据结构」集合对象&#xff08;Set&#xff09;一、概述二、结构三、编码转换四、小结一、概述 Set是Redis中的单列集合&#xff0c;其特点为不保证有序性、保证元素唯一、可以求交集、并集、差集。 从…

Python入门自学进阶-Web框架——28、DjangoAdmin项目应用-只读字段与后端表单验证

有时候&#xff0c;记录的某些字段在生成后就不允许再修改了&#xff0c;这时前端只能显示&#xff0c;不能修改。这时&#xff0c;可在AdminClass中进行设置&#xff1a;readonly_fields[字段名&#xff0c;字段名&#xff0c;。。。]&#xff0c;前端格式就显示成只显示不能修…

联想电脑怎么录屏?这3个方法,轻松解决

录屏是现在最常见的办公功能之一&#xff0c;最近有朋友问联想电脑怎么录屏。联想电脑是使用Windows系统的。如果想用联想电脑录屏&#xff0c;可以使用Windows系统自带了的录屏软件进行录屏。下面小编将详细的介绍3个方法&#xff0c;解决联想电脑怎么录屏的问题&#xff0c;感…

8086寻址方式图解

目录 1&#xff1a;立即寻址 2&#xff1a;寄存器寻址 3&#xff1a;直接寻址&#xff08;存储器直接寻址&#xff09; 4&#xff1a;寄存器间接寻址&#xff08;重点&#xff09; 5&#xff1a;基址寻址&#xff08;相对寻址&#xff09; 6&#xff1a;变址寻址 &#x…

后端程序员必备的Linux基础知识+常见命令(2023年最新版教程)

文章目录[1. 从认识操作系统开始](https://link.juejin.cn?targethttps%3A%2F%2Fsnailclimb.gitee.io%2Fjavaguide%2F%23%2Fdocs%2Foperating-system%2Flinux%3Fid%3D_1-%E4%BB%8E%E8%AE%A4%E8%AF%86%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%BC%80%E5%A7%8B)[1.1. 操作系统简…

【与达梦同行】数据库coredump的配置方式与截断测试

一、简述 Core的意思是内存, Dump的意思是扔出来, 堆出来.开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped). 这时候可以查看一下有没有形如core.进程号的文件生成。在国产操作系统麒麟V10中运维的时候&#xff0c;经常遇见一个问…

一、OpenAI ChatGPT 注册使用

文章目录注册购买openai的官网问题今天早上在sheep公众号里面看到了关于openai 旗下研发的chatgpt的产品&#xff0c;去到chatgpt的网页&#xff0c;我们可以看到他的标语。ChatGPT: Optimizing Language Models for Dialogue 哈哈&#xff0c;我百度了一下&#xff0c;大概意…

文教资料杂志文教资料杂志社文教资料编辑部2022年第17期目录

语言文学研《文教资料》投稿&#xff1a;cn7kantougao163.com 从MRC认知模型看《释大》中的同源关系 苏楚然; 1-4 徐志摩《再别康桥》英译本对比分析——基于许渊冲诗译的“三美论” 牟逸飞;梁楚涵; 5-9 严歌苓小说“笑”书写的语言修辞学视角分析 孙婷婷; 10-12 …

得物云原生全链路追踪Trace2.0-采集篇

一、0xcc开篇 2020年3月&#xff0c;得物技术团队在三个月的时间内完成了整个交易体系的重构&#xff0c;交付了五彩石项目&#xff0c;业务系统也进入了微服务时代。系统服务拆分之后&#xff0c;虽然每个服务都会有不同的团队各司其职&#xff0c;但服务之间的依赖也变得复杂…

学1个月爬虫就月赚6000?别被骗了,老师傅告诉你爬虫的真实情况!

用爬虫赚外快的事情我也干了很多年&#xff0c;爬虫自然不在话下。 那么今天我来说说5个深入一点的爬虫问题&#xff0c;让你清楚爬虫的真实情况&#xff1a; 1.现在的爬虫接单真能1个月赚6000的快外&#xff1f; 2.初级爬虫只能接一些小单&#xff0c;怎样才算初级爬虫水平&…

Kafka ui 搭建以及使用

Kafka ui 序 kafka 本身没有自带相关的 ui 界面&#xff0c;但是很多时候没有页面意味着只有使用命令行进行相关操作如创建 topic、更改 topic 信息、重置 offset 等等。但实际使用中这种效果很差劲&#xff0c;我们一般还是会借助其他软件&#xff0c;实现对 kafka 的页面管…

windows服务器搭建原神私服教程(附客户端+服务端+环境配置)

今天给大家带来的是windows服务器搭建原神私服的教程&#xff0c;服务端搭建于私人windows服务器&#xff0c;客户端支持情况&#xff1a;PC、iOS支持国服 /国际服均可&#xff0c;Android仅支持国际服。本篇文章附有客户端和服务端环境配置文件&#xff0c;请大家按需下载使用…

MobileNet v1神经网络剖析

本文参考: MobileNet网络_-断言-的博客-CSDN博客_mobile-ne Conv2d中的groups参数&#xff08;分组卷积&#xff09;怎么理解&#xff1f; 【分组卷积可以减少参数量、且不容易过拟合&#xff08;类似正则化&#xff09;】_马鹏森的博客-CSDN博客_conv groups Pytorch Mobil…

阿里巴巴正式开源云原生应用脚手架

12 月 3 日&#xff0c;微服务 x 容器开源开发者 Meetup 上海站上&#xff0c;阿里云智能技术专家&#xff0c;云原生应用脚手架项目负责人良名宣布阿里巴巴云原生应用脚手架项目正式开源&#xff0c;并在现场做了相关内容介绍。本次开源的云原生应用脚手架是一款基于 Spring I…

监控Kubernetes集群证书过期时间的三种方案

前言 Kubernetes 中大量用到了证书, 比如 ca证书、以及 kubelet、apiserver、proxy、etcd等组件&#xff0c;还有 kubeconfig 文件。 如果证书过期&#xff0c;轻则无法登录 Kubernetes 集群&#xff0c;重则整个集群异常。 为了解决证书过期的问题&#xff0c;一般有以下几…

关于“堆”,看看这篇文章就够了(附堆的两种应用场景)

… &#x1f4d8;&#x1f4d6;&#x1f4c3;本文已收录至&#xff1a;数据结构 | C语言 更多知识尽在此专栏中!文章目录&#x1f4d8;前言&#x1f4d8;正文&#x1f4d6;认识堆&#x1f4d6;实现堆&#x1f4c3;结构&#x1f4c3;入堆&#x1f4c3;出堆&#x1f4c3;建堆算法…

新Crack:Neodynamic ZPLPrinter SDK for .NET Standard

适用于 .NET Standard V4.0.22.1206 的 Neodynamic ZPLPrinter Emulator SDK 添加对带有自定义字体设置的 ^BC 命令的支持。2022 年 12 月 7 日 - 16:03新版本特征 添加了对带有自定义字体设置的 ^BC 命令的支持。关于 Neodynamic ZPLPrinter Emulator SDK for .NET Standard 使…