麒麟 V10 安装 Node-RED、IEC 104 协议插件及界面汉化

麒麟 V10 安装 Node-RED、IEC 104 协议插件及界面汉化

1. 文档说明

本文用于在麒麟 V10 服务器上安装并配置以下组件:

  • Node.js 运行环境
  • Node-RED
  • Node-RED systemd 后台服务
  • Node-RED 登录认证
  • IEC 60870-5-104 客户端插件
  • IEC 104 插件中文界面

版本说明

原部署环境使用 Node.js 20.10.0。如果是恢复现有项目,建议保持原 Node.js、Node-RED 和插件版本一致,避免出现兼容性问题。

对于新部署环境,Node-RED 官方目前推荐使用 Node.js 24.x;Node-RED 5.x 最低要求 Node.js 22,Node-RED 4.x 最低要求 Node.js 18。但第三方 IEC 104 插件不一定兼容最新版本,因此升级前必须先进行测试。


2. 环境检查

2.1 查看系统架构

bash 复制代码
uname -m

根据输出选择对应的 Node.js 安装包:

命令输出 系统架构 Node.js 安装包标识
aarch64 ARM64 linux-arm64
x86_64 x86 64 位 linux-x64

不要在未确认架构的情况下直接下载 ARM64 安装包,否则可能出现"无法执行二进制文件"等错误。

2.2 查看系统版本

bash 复制代码
cat /etc/os-release

2.3 检查常用工具

bash 复制代码
tar --version
unzip -v
systemctl --version

如果缺少 unzip,可根据服务器软件源配置执行:

bash 复制代码
sudo yum install -y unzip

3. 安装 Node.js

以下以原部署版本 Node.js 20.10.0 ARM64 为例。

3.1 准备安装包

在可以访问互联网的电脑上,从 Node.js 官方网站下载:

text 复制代码
node-v20.10.0-linux-arm64.tar.xz

官方下载地址:

text 复制代码
https://nodejs.org/download/release/v20.10.0/

如果服务器是 x86_64 架构,应下载:

text 复制代码
node-v20.10.0-linux-x64.tar.xz

下载完成后,将安装包拷贝到麒麟 V10 服务器。

3.2 校验安装包

建议同时下载官方提供的 SHASUMS256.txt,然后执行:

bash 复制代码
sha256sum node-v20.10.0-linux-arm64.tar.xz

将计算结果与 SHASUMS256.txt 中对应文件的哈希值进行比较,确认安装包未损坏、未被篡改。

3.3 解压并安装

ARM64 架构执行:

bash 复制代码
tar -xJf node-v20.10.0-linux-arm64.tar.xz
sudo mv node-v20.10.0-linux-arm64 /usr/local/node-v20.10.0
sudo ln -sfn /usr/local/node-v20.10.0 /usr/local/node

如果使用的是 x86 64 位安装包,应执行:

bash 复制代码
tar -xJf node-v20.10.0-linux-x64.tar.xz
sudo mv node-v20.10.0-linux-x64 /usr/local/node-v20.10.0
sudo ln -sfn /usr/local/node-v20.10.0 /usr/local/node

3.4 配置环境变量

创建环境变量配置文件:

bash 复制代码
sudo vi /etc/profile.d/nodejs.sh

写入以下内容:

bash 复制代码
export NODE_HOME=/usr/local/node
export PATH=$NODE_HOME/bin:$PATH

保存后执行:

bash 复制代码
source /etc/profile.d/nodejs.sh

注意:环境变量必须写成 $NODE_HOME,不要写成 $NODE_{H}OME

3.5 验证 Node.js

bash 复制代码
node -v
npm -v
which node
which npm

预期结果类似:

text 复制代码
v20.10.0
10.x.x
/usr/local/node/bin/node
/usr/local/node/bin/npm

4. 安装 Node-RED

4.1 使用 npm 全局安装

bash 复制代码
sudo env PATH=/usr/local/node/bin:/usr/bin:/bin \
  /usr/local/node/bin/npm install -g node-red

新版本 npm 通常不再需要 --unsafe-perm 参数。只有在旧版本依赖明确要求时才考虑使用。

4.2 验证安装

bash 复制代码
node-red --version
which node-red
npm list -g --depth=0

正常情况下,Node-RED 命令路径为:

text 复制代码
/usr/local/node/bin/node-red

4.3 首次测试启动

bash 复制代码
node-red

如果启动正常,终端会显示 Node-RED、Node.js、配置目录和监听端口等信息。

默认访问地址:

text 复制代码
http://服务器IP:1880

测试完成后按 Ctrl+C 停止运行。


5. 配置 Node-RED 后台服务

生产环境建议使用独立用户运行 Node-RED,不建议直接使用 root 用户。

5.1 创建运行用户

bash 复制代码
sudo useradd \
  --system \
  --create-home \
  --home-dir /var/lib/node-red \
  --shell /sbin/nologin \
  nodered

创建用户目录并设置权限:

bash 复制代码
sudo mkdir -p /var/lib/node-red
sudo chown -R nodered:nodered /var/lib/node-red

5.2 创建 systemd 服务

bash 复制代码
sudo vi /etc/systemd/system/nodered.service

写入以下内容:

ini 复制代码
[Unit]
Description=Node-RED Runtime
Documentation=https://nodered.org/docs/
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=nodered
Group=nodered
WorkingDirectory=/var/lib/node-red

Environment="PATH=/usr/local/node/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/bin"

ExecStart=/usr/local/node/bin/node /usr/local/node/lib/node_modules/node-red/red.js --userDir /var/lib/node-red

Restart=on-failure
RestartSec=10
KillSignal=SIGINT
TimeoutStopSec=30
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

UserGroupWorkingDirectory--userDir 必须保持一致。不要出现服务使用普通用户运行、配置目录却指向 /root/.node-red 的情况。

5.3 启动并设置开机自启

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl enable --now nodered.service

查看服务状态:

bash 复制代码
sudo systemctl status nodered.service

查看实时日志:

bash 复制代码
sudo journalctl -u nodered.service -f

查看最近 100 条日志:

bash 复制代码
sudo journalctl -u nodered.service -n 100 --no-pager

5.4 检查监听端口

bash 复制代码
sudo ss -lntp | grep 1880

也可以在服务器本机测试:

bash 复制代码
curl -I http://127.0.0.1:1880

6. 配置防火墙

6.1 检查 firewalld 状态

bash 复制代码
sudo systemctl status firewalld

如果未启动:

bash 复制代码
sudo systemctl enable --now firewalld

6.2 放行 Node-RED 端口

bash 复制代码
sudo firewall-cmd \
  --zone=public \
  --add-port=1880/tcp \
  --permanent

重新加载防火墙:

bash 复制代码
sudo firewall-cmd --reload

验证配置:

bash 复制代码
sudo firewall-cmd --list-ports | grep 1880

正常情况下应显示:

text 复制代码
1880/tcp

建议仅允许可信内网访问 1880 端口,不要直接暴露到互联网。

Node-RED 作为 IEC 104 客户端时,通常是主动连接 RTU 或 IEC 104 服务端的 2404/TCP 端口,因此一般不需要在 Node-RED 服务器上开放入站 2404 端口。


7. 配置 Node-RED 登录用户名和密码

Node-RED 编辑器默认没有登录认证。任何能够访问服务器 IP 和 1880 端口的人员都可能进入编辑器并修改、部署流程,因此生产环境必须启用认证。

7.1 生成密码哈希

执行:

bash 复制代码
sudo -u nodered env PATH=/usr/local/node/bin:/usr/bin:/bin \
  /usr/local/node/bin/node-red admin hash-pw

根据提示输入密码,命令会输出一串 bcrypt 哈希值,例如:

text 复制代码
$2b$08$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

复制该哈希值备用。

不要直接将明文密码写入 settings.js

7.2 修改配置文件

首次启动后,配置文件通常位于:

text 复制代码
/var/lib/node-red/settings.js

先备份:

bash 复制代码
sudo cp /var/lib/node-red/settings.js \
  /var/lib/node-red/settings.js.bak

编辑配置:

bash 复制代码
sudo vi /var/lib/node-red/settings.js

module.exports = { ... } 内找到 adminAuth 配置,将其修改为:

javascript 复制代码
adminAuth: {
    type: "credentials",
    users: [
        {
            username: "admin",
            password: "替换为刚才生成的密码哈希",
            permissions: "*"
        }
    ]
},

其中:

  • username:登录用户名。
  • password:通过 node-red admin hash-pw 生成的密码哈希。
  • permissions: "*":拥有全部编辑和部署权限。
  • permissions: "read":仅允许查看。

7.3 设置凭据加密密钥

建议同时在 settings.js 中配置:

javascript 复制代码
credentialSecret: "替换为一段长度足够且不易猜测的随机字符串",

该配置用于加密流程中的账号、密码等凭据信息。

credentialSecret 设置后必须妥善备份。后续如果随意修改或丢失,原有流程中的加密凭据可能无法恢复。

7.4 检查配置文件语法

bash 复制代码
/usr/local/node/bin/node --check /var/lib/node-red/settings.js

如果没有输出,通常表示语法检查通过。

7.5 重启服务

bash 复制代码
sudo systemctl restart nodered.service
sudo systemctl status nodered.service

重新访问:

text 复制代码
http://服务器IP:1880

此时应显示登录页面。


8. 安装 IEC 104 协议插件

插件源码地址:

text 复制代码
https://github.com/iecdriver/node-red-contrib-iec104

该插件属于第三方插件,并非 Node-RED 官方内置节点。安装前建议核对源码、依赖版本及安全性,并在测试环境完成 IEC 104 通信验证。

8.1 下载源码

在可以访问互联网的电脑上下载插件源码压缩包,然后拷贝到服务器。

压缩包名称可能类似:

text 复制代码
node-red-contrib-iec104-main.zip

8.2 解压并统一目录名称

bash 复制代码
sudo mkdir -p /opt/node-red-plugins
sudo unzip node-red-contrib-iec104-main.zip \
  -d /opt/node-red-plugins

将解压目录统一重命名:

bash 复制代码
sudo mv \
  /opt/node-red-plugins/node-red-contrib-iec104-main \
  /opt/node-red-plugins/node-red-contrib-iec104

设置权限:

bash 复制代码
sudo chown -R nodered:nodered \
  /opt/node-red-plugins/node-red-contrib-iec104

确认 package.json 存在:

bash 复制代码
ls -l /opt/node-red-plugins/node-red-contrib-iec104/package.json

8.3 安装插件

如果 /var/lib/node-red/package.json 不存在,先初始化:

bash 复制代码
sudo -u nodered env PATH=/usr/local/node/bin:/usr/bin:/bin \
  /usr/local/node/bin/npm \
  --prefix /var/lib/node-red init -y

安装本地插件:

bash 复制代码
sudo -u nodered env PATH=/usr/local/node/bin:/usr/bin:/bin \
  /usr/local/node/bin/npm \
  --prefix /var/lib/node-red \
  install /opt/node-red-plugins/node-red-contrib-iec104 \
  --omit=dev \
  --save

原文中的 npm install -save 参数写法错误,正确参数为 --save

如果服务器完全无法访问互联网,需要提前准备插件及其全部 npm 依赖。仅复制插件源码并不能保证离线安装成功。

8.4 检查插件

bash 复制代码
sudo -u nodered env PATH=/usr/local/node/bin:/usr/bin:/bin \
  /usr/local/node/bin/npm \
  --prefix /var/lib/node-red \
  list --depth=0

重启 Node-RED:

bash 复制代码
sudo systemctl restart nodered.service

查看启动日志:

bash 复制代码
sudo journalctl -u nodered.service -n 100 --no-pager

进入 Node-RED 编辑器后,检查左侧节点栏中是否出现 IEC 104 客户端节点。


9. 汉化 IEC 104 插件

IEC 104 节点的配置界面、标签和帮助文本通常定义在:

text 复制代码
src/iec104-client.html

建议先修改源码目录中的文件,再重新安装插件。

9.1 备份原文件

bash 复制代码
sudo cp \
  /opt/node-red-plugins/node-red-contrib-iec104/src/iec104-client.html \
  /opt/node-red-plugins/node-red-contrib-iec104/src/iec104-client.html.bak

9.2 编辑文件

bash 复制代码
sudo vi \
  /opt/node-red-plugins/node-red-contrib-iec104/src/iec104-client.html

将内容调整为:

html 复制代码
<script type="text/javascript">
    RED.nodes.registerType("iec104-client", {
        category: "network",
        color: "#3498DB",

        defaults: {
            name: {
                value: ""
            },
            host: {
                value: "127.0.0.1",
                required: true
            },
            port: {
                value: 2404,
                required: true,
                validate: RED.validators.number()
            },
            commonAddress: {
                value: 1,
                required: true,
                validate: RED.validators.number()
            },
            allowSpontaneous: {
                value: true
            },
            enableGeneralInterrogation: {
                value: true
            },
            pollingInterval: {
                value: 60,
                validate: function (value) {
                    return value === "" || !isNaN(value);
                }
            }
        },

        inputs: 0,
        outputs: 1,
        icon: "bridge.svg",

        label: function () {
            return this.name || "IEC 104 " + this.host + ":" + this.port;
        }
    });
</script>

<script type="text/html" data-template-name="iec104-client">
    <div class="form-row">
        <label for="node-input-host">
            <i class="fa fa-server"></i>
            服务器地址
        </label>
        <input
            type="text"
            id="node-input-host"
            placeholder="127.0.0.1"
        />
    </div>

    <div class="form-row">
        <label for="node-input-port">
            <i class="fa fa-plug"></i>
            端口
        </label>
        <input
            type="number"
            id="node-input-port"
            placeholder="2404"
            style="width: 120px;"
        />
    </div>

    <div class="form-row">
        <label for="node-input-commonAddress">
            <i class="fa fa-address-card-o"></i>
            公共地址(CA)
        </label>
        <input
            type="number"
            id="node-input-commonAddress"
            placeholder="1"
            style="width: 120px;"
        />
    </div>

    <div class="form-row">
        <label for="node-input-name">
            <i class="fa fa-tag"></i>
            名称
        </label>
        <input
            type="text"
            id="node-input-name"
            placeholder="节点名称"
        />
    </div>

    <div class="form-row">
        <label for="node-input-allowSpontaneous">
            <i class="fa fa-bolt"></i>
            接收自发数据
        </label>
        <input
            type="checkbox"
            id="node-input-allowSpontaneous"
            style="display:inline-block; width:auto; vertical-align:top;"
        />
        <p class="form-tips">
            禁用后,自发上传的 ASDU 数据将被忽略,但仍会按协议进行确认。
        </p>
    </div>

    <div class="form-row">
        <label for="node-input-enableGeneralInterrogation">
            <i class="fa fa-refresh"></i>
            启用总召唤
        </label>
        <input
            type="checkbox"
            id="node-input-enableGeneralInterrogation"
            style="display:inline-block; width:auto; vertical-align:top;"
        />
        <p class="form-tips">
            启用后,连接建立时自动发送总召唤命令(COT=20)。
        </p>
    </div>

    <div class="form-row">
        <label for="node-input-pollingInterval">
            <i class="fa fa-clock-o"></i>
            总召唤周期
        </label>
        <input
            type="number"
            id="node-input-pollingInterval"
            min="0"
            placeholder="60"
            style="width: 120px;"
        />
        <p class="form-tips">
            单位为秒。设置为 0 时,仅在连接建立后执行一次总召唤。
        </p>
    </div>
</script>

<script type="text/html" data-help-name="iec104-client">
    <p>
        IEC 60870-5-104 主站(客户端)节点,用于连接 IEC 104
        从站、RTU、PLC 或通信网关并接收数据。
    </p>

    <p>
        连接建立后,节点可自动发送总召唤命令,并处理自发上传数据和
        IEC 104 数据确认。
    </p>

    <h3>配置项说明</h3>

    <dl class="message-properties">
        <dt>
            服务器地址
            <span class="property-type">字符串</span>
        </dt>
        <dd>
            IEC 104 服务端、RTU 或通信网关的 IP 地址或主机名。
        </dd>

        <dt>
            端口
            <span class="property-type">数字</span>
        </dt>
        <dd>
            IEC 104 服务端 TCP 端口,默认值为 2404。
        </dd>

        <dt>
            公共地址(CA)
            <span class="property-type">数字</span>
        </dt>
        <dd>
            ASDU 公共地址,默认值为 1,应与现场设备配置保持一致。
        </dd>

        <dt>
            接收自发数据
            <span class="property-type">布尔值</span>
        </dt>
        <dd>
            启用后接收设备主动上送的数据;禁用后将忽略自发消息
            (通常为 COT=3)。
        </dd>

        <dt>
            启用总召唤
            <span class="property-type">布尔值</span>
        </dt>
        <dd>
            控制连接建立后是否发送总召唤请求。
        </dd>

        <dt>
            总召唤周期
            <span class="property-type">数字</span>
        </dt>
        <dd>
            周期性总召唤的时间间隔,单位为秒。设置为 0 时,仅在连接
            建立后执行一次。
        </dd>
    </dl>

    <h3>输出消息示例</h3>

    <pre>{
    "typeId": 30,
    "cot": 3,
    "ca": 1,
    "objects": [
        {
            "ioa": 1,
            "value": "true",
            "quality": "[QualityDescriptor: ...]"
        }
    ]
}</pre>
</script>

只修改界面显示文字,不要修改 iec104-client、字段名称或配置属性名,否则可能导致节点无法加载或原有流程配置失效。

9.3 重新安装插件

修改源码后重新安装:

bash 复制代码
sudo -u nodered env PATH=/usr/local/node/bin:/usr/bin:/bin \
  /usr/local/node/bin/npm \
  --prefix /var/lib/node-red \
  install /opt/node-red-plugins/node-red-contrib-iec104 \
  --omit=dev \
  --save

重启服务:

bash 复制代码
sudo systemctl restart nodered.service

浏览器执行强制刷新:

text 复制代码
Ctrl + F5

如果汉化仍未生效,检查 Node-RED 实际加载的文件:

bash 复制代码
sudo find /var/lib/node-red/node_modules \
  -path "*/src/iec104-client.html" \
  -print

确认修改的是实际安装目录中的文件,而不是未被加载的源码副本。


10. IEC 104 通信配置与测试

10.1 检查网络连通性

bash 复制代码
ping -c 4 IEC104设备IP

10.2 检查 2404 端口

如果系统已安装 nc

bash 复制代码
nc -vz IEC104设备IP 2404

如果连接成功,通常会显示:

text 复制代码
succeeded

如果连接失败,应检查:

  • IEC 104 服务端是否启动。
  • 服务器地址和端口是否正确。
  • 本机、网络设备或对端防火墙是否拦截。
  • 是否存在安全区、白名单或访问控制策略。
  • RTU 是否限制客户端 IP。
  • 对端是否只允许一个主站连接。

10.3 Node-RED 节点主要参数

参数 说明
服务器地址 IEC 104 从站、RTU 或网关的 IP 地址
端口 通常为 2404
公共地址(CA) 应与对端设备的 ASDU 公共地址一致
接收自发数据 是否接收设备主动上送的数据
启用总召唤 连接建立后是否自动发送总召唤
总召唤周期 周期性总召唤间隔,0 表示仅连接后执行一次

11. 常用管理命令

启动服务

bash 复制代码
sudo systemctl start nodered.service

停止服务

bash 复制代码
sudo systemctl stop nodered.service

重启服务

bash 复制代码
sudo systemctl restart nodered.service

查看状态

bash 复制代码
sudo systemctl status nodered.service

查看实时日志

bash 复制代码
sudo journalctl -u nodered.service -f

查看最近日志

bash 复制代码
sudo journalctl -u nodered.service -n 100 --no-pager

检查 1880 端口

bash 复制代码
sudo ss -lntp | grep 1880

查看 Node.js 和 Node-RED 版本

bash 复制代码
node -v
npm -v
node-red --version

12. 常见问题排查

12.1 找不到 node 或 npm 命令

检查环境变量:

bash 复制代码
echo "$PATH"
ls -l /usr/local/node/bin/node
ls -l /usr/local/node/bin/npm

重新加载:

bash 复制代码
source /etc/profile.d/nodejs.sh

systemd 服务不会自动读取 /etc/profile,因此必须在服务文件中配置:

ini 复制代码
Environment="PATH=/usr/local/node/bin:/usr/bin:/bin"

12.2 Node-RED 服务启动失败

bash 复制代码
sudo systemctl status nodered.service
sudo journalctl -u nodered.service -n 200 --no-pager

重点检查:

  • ExecStart 路径是否正确。
  • Node.js 和 Node-RED 是否安装完整。
  • /var/lib/node-red 是否属于 nodered 用户。
  • settings.js 是否存在语法错误。
  • 插件是否缺少依赖。

12.3 浏览器无法打开 Node-RED

依次检查:

bash 复制代码
sudo systemctl status nodered.service
sudo ss -lntp | grep 1880
curl -I http://127.0.0.1:1880
sudo firewall-cmd --list-ports

如果本机可以访问、其他电脑无法访问,通常与防火墙、监听地址或网络策略有关。

12.4 安装后找不到 IEC 104 节点

检查插件:

bash 复制代码
sudo -u nodered env PATH=/usr/local/node/bin:/usr/bin:/bin \
  /usr/local/node/bin/npm \
  --prefix /var/lib/node-red \
  list --depth=0

检查日志:

bash 复制代码
sudo journalctl -u nodered.service -n 200 --no-pager

常见原因包括:

  • 插件目录名称不一致。
  • package.json 不在插件根目录。
  • npm 依赖未安装完整。
  • Node.js 版本与插件不兼容。
  • Node-RED 实际使用的用户目录不是 /var/lib/node-red
  • 插件 HTML 或 JavaScript 文件存在语法错误。

12.5 汉化内容未生效

处理方法:

  1. 确认修改的是实际加载的插件文件。
  2. 重启 Node-RED 服务。
  3. 浏览器按 Ctrl+F5 强制刷新。
  4. 清除浏览器缓存后重新访问。
  5. 查看 Node-RED 启动日志是否存在插件加载错误。

13. 备份与升级建议

升级 Node.js、Node-RED 或插件前,至少备份以下文件:

text 复制代码
/var/lib/node-red/flows.json
/var/lib/node-red/flows_cred.json
/var/lib/node-red/settings.js
/var/lib/node-red/package.json
/var/lib/node-red/package-lock.json

执行备份:

bash 复制代码
sudo tar -czf \
  /var/backups/node-red-$(date +%Y%m%d-%H%M%S).tar.gz \
  -C /var/lib node-red

升级 Node.js 后,部分包含二进制组件的插件可能需要重新编译:

bash 复制代码
sudo -u nodered env PATH=/usr/local/node/bin:/usr/bin:/bin \
  /usr/local/node/bin/npm \
  --prefix /var/lib/node-red rebuild

不建议直接在生产服务器上跨大版本升级 Node.js 或 Node-RED。应先在测试环境验证 IEC 104 连接、总召唤、自发数据、遥测遥信解析及原有流程运行情况。


14. 安装验收清单

  • 系统架构与 Node.js 安装包匹配。
  • node -vnpm -v 输出正常。
  • Node-RED 安装成功。
  • Node-RED 使用独立用户运行。
  • systemd 服务已设置开机自启。
  • nodered.service 状态为 active (running)
  • 1880 端口监听正常。
  • 防火墙已按要求放行 1880 端口。
  • Node-RED 编辑器已启用用户名和密码认证。
  • credentialSecret 已设置并备份。
  • IEC 104 插件加载正常。
  • IEC 104 配置界面已完成汉化。
  • Node-RED 服务器能够访问对端 2404 端口。
  • 总召唤功能测试正常。
  • 自发数据接收测试正常。
  • CA、COT、IOA、类型标识及品质描述解析正常。
  • Node-RED 流程及凭据文件已完成备份。

15. 参考资料

相关推荐
晨枫阳2 小时前
@changesets/cli是什么?哪些情况下需要使用?怎么使用
linux·运维·ubuntu
不会就选b3 小时前
Linux之网络基础(二)
linux·运维·网络
莫浅子4 小时前
Day 4:USB 2.0 时序与带宽预算
linux·运维·网络
ly76894 小时前
Linux 从入门到实践:系统架构、常用命令、服务管理与故障排查详解
linux·运维·系统架构
2401_868534785 小时前
在企业环境中快速安装配置 FreeBSD Unix 服务器操作系
linux·网络协议
小雪崩5 小时前
嵌入式学习 day27:标准IO
linux·c语言·学习
Arnold.Shen5 小时前
Dell Storage SC - 如何发送SupportAssist,并启用安全控制台
linux·安全
wunaiqiezixin5 小时前
MIT 6.S081 xv6 源码精读(Scheduling):sched、scheduler
linux·unix·os·xv6·mit6.s081
书生执笔画浮沉6 小时前
记录一个由浮点运算引起的崩溃
linux