Marco Nie https://blog.niekun.net/ you are the company you keep... 解决在 intel 12代以后的 CPU 上 vmwre 虚拟机性能低下问题 https://blog.niekun.net/archives/intel-12-CPU-vmwre.html 2024-04-18T13:01:52+08:00 最近更换了新的电脑,是 i7 12700H 的 CPU,按理说比以前的电脑性能好一些,但是导入之前的 vmware 虚拟机后发现运行起来优点卡顿,但是观察主机资源占用很低,cpu 占用也很低,研究了下才发现是由于新款 cpu 采用了大小核设计导致这个问题。我的这一款是 6 大核 8 小核 20 线程设计。默认情况下启动虚拟机资源分配是交给 windows 主机自己协调的,很可能会分配给小核运行虚拟机导致运行卡顿,资源管理器可以看到 cpu 负载都在后面的小核上:解决方法就是以管理员权限运行 vmware,这样 VMware 会自己调度资源使用,优先级大概是大核>小核>超线程。实际效果很明显,基本都运行在了大核上: openwrt 系统升级 https://blog.niekun.net/archives/openwrt-1.html 2024-04-02T10:26:03+08:00 小版本升级小版本升级,例如 19.05-> 19.07。这种小版本的升级最方便的就是通过 Attended Sysupgrade 功能,可以保留已安装的包和系统设置。最大限度地无缝过渡。官方介绍:https://openwrt.org/docs/guide-user/installation/attended.sysupgrade需要先安装 Attended Sysupgrade luci 界面包:opkg install luci-app-attendedsysupgrade 建议使用此功能前依然做一次数据备份。然后重新登录 luci,在 system - Attended Sysupgrade 找到入口,点击 search for firmware upgrade 即可在线搜索可更新的系统。大版本升级最方便的就是通过 luci 界面升级系统,目前支持直接升级的大版本顺序是:19.07 > 21.02 > 22.03 > 23.05。大版本升级改动openwrt 21:https://openwrt.org/releases/21.02/notes-21.02.0WPA3 support included by defaultTLS and HTTPS support included by defaultLuCI is now available over HTTPSInitial DSA support replaces the swconfig systemNew network configuration syntax and board.json changeKernel with container supportopenwrt 22:https://openwrt.org/releases/22.03/notes-22.03.0Firewall4 based on nftables,superseding the iptables-based firewall3Dark mode in LuCIopenwrt 23:https://openwrt.org/releases/23.05/notes-23.05.0Switch from wolfssl to mbedtls as default,TLS 1.3 SupportRust Package Support数据备份每个版本升级实际上就是重新刷入了一次固件,所以之前的配置文件什么的基本上都会被覆盖,所以系统内修改过的配置最好做一次备份。打开 luci 界面,选择 system - backup/flash firmware,在 configuration 菜单栏中将需要保存的文件或目录定义出来,然后在 action 菜单栏中选择 backup - generate archive 即可保存备份到本地。已安装包列表可以通过 awk 脚本识别出自己手动安装的包列表,方便更新系统后安装回去,下载脚本:https://github.com/richb-hanover/OpenWrtScripts/blob/main/opkgscript.sh执行以下命令会保存已安装的包列表到 /etc/config/opkg.installed:opkgscript.sh -v write 执行以下命令会识别并安装 /etc/config/opkg.installed 列表中的包:opkgscript.sh -v install 也可以执行以下 awk 脚本可以单独列出自己手动安装的包列表:#!/usr/bin/awk -f BEGIN { ARGV[ARGC++] = "/usr/lib/opkg/status" cmd="opkg info busybox | grep '^Installed-Time: '" cmd | getline FLASH_TIME close(cmd) FLASH_TIME=substr(FLASH_TIME,17) } /^Package:/{PKG= $2} /^Installed-Time:/{ INSTALLED_TIME= $2 # Find all packages installed after FLASH_TIME if ( INSTALLED_TIME > FLASH_TIME ) { cmd="opkg whatdepends " PKG " | wc -l" cmd | getline WHATDEPENDS close(cmd) # If nothing depends on the package, it is installed by user if ( WHATDEPENDS == 3 ) print PKG } } EOF保存以上内容到 listuserpackages.awk 文件中并执行即可列出用户自行安装包列表。下载升级固件x86 版本的 openwrt 的升级固件就是全新安装时候用的固件,直接在官网下载需要版本的 gz 压缩包即可。下载地址:https://downloads.openwrt.org/releases/我下载的是:generic-ext4-combined.img.gz,注意不要解压出来,保留压缩包即可。进入 luci 的 system - backup/flash firmware 选择 Flash image ,然后选择刚才下载的压缩包即可上传更新,会提示是否保留设置和配置,跨大版本的升级必须取消选择保留数据,否则可能升级失败:如果升级后卡在 grub 界面说明可能是由于选择了保留配置导致升级失败了,可以参考官方教程通过 failsafe mode 恢复默认配置:Failsafe mode, factory reset, and recovery mode,或者直接重新安装系统。网络配置稍等几分钟安装好后你可能会发现 luci 无法在局域网中访问了,这是由于新安装的固件恢复了 network 配置,需要直接到 openwrt 设备上配置网络。配置教程参考:openwrt network 配置配置好网络后在局域网设备中可以用 ssh 登录了,此时会发现提示:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the RSA key sent by the remote host is SHA256:U9XODs/7A4k065pxSMyEtQ2m98v2P0bf/ML0MfzU. Please contact your system administrator. Add correct host key in C:\\Users\\Marco Nie/.ssh/known_hosts to get rid of this message. Offending RSA key in C:\\Users\\Marco Nie/.ssh/known_hosts:6 Host key for 192.168.244.1 has changed and you have requested strict checking. Host key verification failed.这是由于更新系统后 ssh 指纹发生了变化,需要删除本地缓存的 openwrt 设备的指纹在登陆,windows 系统 ssh 指纹保存地址为当前用户目录下的 .ssh 文件夹。升级后续升级后可以通过之前的脚本列出的已安装包的列表将自己需要的包安装回去,同时将备份数据按照新系统的格式恢复回去。从 openwrt 21 开始修改了 network 配置文件格式,参考:https://blog.niekun.net/archives/2291.html从 openwrt 22 开始替换 iptables 为 nftables,需要原始工具的话可以自行安装回去:opkg install iptables参考链接Opkg package managerOpenWRT 19.07 to 21.02.0 upgrade Linux 查询及编辑用户及用户组 https://blog.niekun.net/archives/Linux.html 2024-04-01T16:20:00+08:00 查询当前所有用户compgen -u 查询当前所有用户组compgen -g 添加一个用户到某个组sudo usermod -a -G groupName userName newgrp groupName 删除一个用户从某个组sudo usermod -G groupName userName newgrp groupName 用户和组对文件的权限管理参考:chown 和 chmod 管理文件权限 openwrt 添加新用户 https://blog.niekun.net/archives/openwrt.html 2024-03-29T11:19:26+08:00 安装好 openwrt 后默认有一个 root 用户,需要添加新用户也很简单,只需要在 /etc/passwd 文件最后按照格式增加一个用户即可,然后可以修改这个新用户的密码。下面使用一条命令快速添加新用户:grep -qw new_user /etc/passwd || echo "new_user:x:0:23333:::" >> /etc/passwd 命令先检查是否在文件中存在需要添加的用户名,如果不存在则在文件最后一行添加用户。其中 new_user 是用户名,0 是 uid,23333 是 gid。如果需要修改这个新用户的密码,执行命令即可:passwd new_user 以上就是创建新用户简单方法。 Linux 获取本地网关所有 ip 段地址 https://blog.niekun.net/archives/Linux-ip.html 2024-03-28T15:35:07+08:00 执行下面命令即可获取本地网关所有的 ip 段地址:$ ip address | grep -w inet | awk '{print $2}' 127.0.0.1/8 192.168.122.2/24 172.18.0.1/16 172.17.0.1/16 172.19.0.1/16 windows 相对路径快捷方式 https://blog.niekun.net/archives/windows.html 2024-03-18T10:09:15+08:00 一般系统默认创建的都是指向某个文件绝对路径的快捷方式,如果移动原始文件位置后,快捷方式就失效了。可以自己修改快捷方式的属性来建立一个以快捷方式所在地址为准的指向一个相对路径的文件。这样适用于需要同时移动原始文件与快捷方式的情况。首先右键创建一个文件的快捷方式,然后右键选择快捷方式的属性,将目标位置地址改为:explorer.exe path/to/file.exe。注意 explorer.exe 后面的空格:后面的路径就是相对于快捷方式地址的相对路径。确认后默认快捷方式图标会变成资源管理器的图标,可以在属性里修改为其他图标。 codesys enum 枚举数据类型单元的使用 https://blog.niekun.net/archives/codesys-enum.html 2024-03-07T08:21:07+08:00 enum 类型的 dut 可以定义一组属性及其值,调用的时候可以方便的通过写其属性名称得到属性的值,也可以获取到属性本身的名称。下面举一个例子说明:{attribute 'qualified_only'} // 必须先写类型名称再写属性名称 (例如 eColor.Red) // {attribute 'strict'} //取消 'strict' 以允许转换 UDINT 数据类型 {attribute 'to_string'} // 运行字符串转换 (例如 TO_STRING(eColor.Red) = 'Red') TYPE eColor : ( Red := 16#FFFF0000, Green := 16#FF00FF00, Blue := 16#FF0000FF Yellow := 16#FFFFFF00, ) UDINT; // 声明 UDINT 作为 int 整形类型 END_TYPE // 定义一些变量 ColorVar1 : eColor; ColorVar2 : eColor; ColorName : STRING; ColorValue : UDINT; ColorVar1 := eColor.Green; // ColorVar1 = 16#FF00FF00 ColorName := TO_STRING(ColorVar1); // ColorName = 'Green'; ColorValue := TO_UDINT(ColorVar1); // ColorValue = 16#FF00FF00 ColorVar2 := 16#FF00FF00; // ColorVar2.Green ColorName := TO_STRING(ColorVar2); // ColorName = 'Green'; ColorValue := TO_UDINT(ColorVar2); // ColorValue = 16#FF00FF00 ColorVar1 := ColorVar2 OR eColor.Red; // 按位相与得到 Yellow=16#FFFFFF00 ColorName := TO_STRING(ColorVar1); // ColorName = 'Yellow'; ColorValue := TO_UDINT(ColorVar1); // ColorValue = 16#FFFFFF00以上示例列举了常用的 enum 类型可进行的数据交互方式。eColor.Green 可以获取enum类型属性的值,并可以赋值给其他对应 enum 实例TO_STRING(ColorVar1) 可以转换获取 enum 实例当前值对应属性名称字符串 codesys 常见编译及下载时报错解决方法 https://blog.niekun.net/archives/codesys.html 2024-03-06T16:35:00+08:00 No source code available for this object下载时出现此报警,原因是 task 任务中对 gou 的排序有问题,放在前面的 pou 中使用了后面 pou 才设定好的数据,需要重新排列 task 任务序列:SMC_FB_CALLED_FROM_WRONG_TASKmc_power mc_jog 等控制轴的功能块,一运行就报错 SMC_FB_CALLED_FROM_WRONG_TASK,可能是不同的 pou 放在了多个 task 任务中,循环中内部有了冲突,将所有的 pou 放在同一个 task 中就可以解决问题。 服务器部署 immich 照片备份工具 https://blog.niekun.net/archives/immich.html 2024-03-04T09:30:00+08:00 目前有很多的云备份服务可以使用,比如 icloud,google photos 等。immich 是一款实现类似功能的本地部署工具,将数据都存储在自己本地服务器上,拥有完善的手机端 app 可以方便的同步备份手机图片。GitHub 主页:https://github.com/immich-app/immich官网教程:https://immich.app/docs/overview/introduction/安装服务端使用 docker compose 安装,新建一个 immich 文件夹,下载 docker-compose.yml 和 .env 文件到文件夹:wget https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env打开 .env 文件配置环境变量,主要就是配置备份路径和数据库密码,修改 UPLOAD_LOCATION 和 DB_PASSWORD。启动容器:docker compose up -d后续更新只需要进入 immich 文件夹执行下面命令即可:docker compose pull && docker compose up -d docker-compose.yml 文件中默认将 3001 端口映射到了本地 2283 端口,3001就是服务端访问端口号。下面是所有可用的端口,根据需要可以修改 docker-compose 文件映射到本地:PORTWeb Port3000webSERVER_PORTServer Port3001serverMICROSERVICES_PORTMicroservices Port3002microservicesMACHINE_LEARNING_HOSTMachine Learning Host0.0.0.0machine learningMACHINE_LEARNING_PORTMachine Learning Port3003machine learning配置账户网页端访问:http://you.machine.ip:2283 进入配置页面,根据提示建立一个管理员账户,后续可以在管理员账户中建立其他子账户供其他人使用。登录 app下载手机端 app,ios 直接在 app store 搜索 immich 下载,安卓在 github 发布页下载 apk:https://github.com/immich-app/immich/releases在手机端输入以下网址进入:http://you.machine.ip:2283/api然后就可以配置需要备份的手机端图片文件夹了。外网访问服务器在本地,如果要外网域名远程访问图库,需要一些额外的配置,我这里是通过 cloudflare 配置子域名,nginx 配置反向代理到 frps,最后本地服务器 frpc 配置本地 2283 端口绑定到远程域名访问即可。可以参考我之前的关于 frp 的教程:https://blog.niekun.net/archives/539.html RTE runtime添加 ethercat master 的步骤 https://blog.niekun.net/archives/ethercat.html 2024-02-23T15:41:00+08:00 codesys 配置 rte runtime 添加 ethercat 组件的方法。主要步骤为:安装 RTE runtime安装适配网卡驱动添加 ethercat master 设备安装 RTE runtime首先需要配置工控机啊 BIOS 设置,将一些超线程,电源管理等选项关掉:关闭超线程:关闭BIOS 中激活的所有节能选项Intel Speed Step动态节能技术EIST智能降频C-States省电模式PowerNow动态调整CPU的工作频率和电压Hibernation休眠MWAIT停用可能导致系统管理中断的所有内容BIOS self tests BIOS自检USB Legacy Device Support 传统USB设备支持然后就可以安装 RTE,官网下载需要的 runtime 安装包,注意区分 x86 还是 x64 设备。我下载的是 **CODESYS Control RTE SL (×86Windows 实时)。官网下载地址:http://store.codesys.cn/codesys/store/index.html在工控机上解压并安装需要的 RTE runtime,基本都是直接下一步即可,期间注意选择带不带 softmotion:Control RTE 文件路径:C:\Program Files\CODESYS\CODESYS Control RTE3Control RTE 安装路径:C:\ProgramData\CODESYS\CODESYSControlRTEV3网卡驱动支持的网卡:Systems with Windows and CODESYS Control RTE (Real-time SoftPLC):Realtek® 8139 (CmpRTL81x9Mpd)Realtek RTL8139 and compatible Ethernet-Controller, as well 8100/8110Realtek 8169 (CmpRTL8169Mpd)Realtek 8169/810, RTL8111B / RTL8111DIntel® EtherExpressPro1000 (CmpEt1000Drv) --- All gigabit adapters from IntelIntel EtherExpress PRO/100 (CmpEt100Drv) --- All 100 Mbit adapters from Intel一般情况下 intel 的千兆网卡都可以安装 CmpEt1000Drv 驱动。首先进入设备管理器,选择需要更新 codesys 驱动的网卡,右键选择更新驱动:选择从本地查找驱动程序:选择从磁盘安装,从 RTE 文件路径找到对应的驱动目录并安装:右键选择 plc configuration:在 components manager 中在最后一个空行中填入安装的驱动名称,这里我填的是 CmpEt1000Drv:确定并重启 plc 即可完成网卡驱动的安装及配置。添加 ethercat master在codesys 开发项目中进行以下操作。建立一个支持 softmotion 的设备添加 ethercat master softmotion 主站 (会自动添加 ethercat_task 任务 不可删除)扫描并连接到控制器配置 ethercat master 网卡,RTE 版 runtime 需要选择适配 codesys 的网卡下载程序到控制器,如果上面没有在 components manager 中添加网卡组件的话,这里下载会报错退出登录 扫描从站并添加如果设备描述文件没有在系统内置库中 需要手动导入描述文件然后才能扫描识别给扫描到的从站添加 cia402 轴配置电子齿轮比以上就是 RTE runtime 版添加 ethercat master 主站的简单方法。参考链接:Control RTE SL and profinet connections