在标准Raspberry Pi OS (Trixie)上使用ED-IPC和ED-HMI

1 概述

介绍在标准的Raspberry Pi OS (Trixie)上使用ED-IPC和ED-HMI的背景和适用范围。

1.1 背景

我司部分ED-IPC与ED-HMI系列产品出厂时预装的操作系统为Raspberry Pi OS(Bookworm)。为满足部分用户基于Raspberry Pi OS(Trixie)进行应用开发的需求,我司已针对此情况完成相关适配优化。

目前,ED-IPC与ED-HMI系列产品已全面兼容标准版Raspberry Pi OS(Trixie)的原生驱动。针对2026年9月15日及之后发布的Raspberry Pi OS(Trixie)版本,用户仅需先通过修改config.txt配置文件启用各端口,再安装对应扩展功能的软件包,即可使产品正常运行。此次升级有效拓展了产品的应用范围,能够更灵活地响应不同用户的多样化需求。

1.2 适用范围

本应用适用于EDATEC的ED-IPC3630和ED-HMI3630系列产品,兼容的OS版本和对应的产品型号如下:

软件范围产品型号
标准的Raspberry Pi OS(Trixie,2026年9月15日及之后发布的版本)ED-HMI3630-101C
ED-HMI3630-116C
ED-HMI3630-133C
ED-HMI3630-156C
ED-IPC3630

2 配置指南

本章介绍在标准版Raspberry Pi OS(Trixie,2026年9月15日及之后发布的版本)上使用 ED-IPC3630 与 ED-HMI3630 系列产品的具体配置方法。不同产品型号的配置步骤略有差异,请根据实际使用的型号进行对应操作。

2.1 适用于ED-HMI3630-101C系列

配置操作包括以下两个步骤,请依次执行:

  1. 修改config.txt配置文件:根据产品型号对配置文件进行相应修改,以启用所需端口。

  2. 安装软件包:完成配置修改后,安装对应的扩展功能软件包,确保产品正常运行。

2.1.1 修改config.txt配置文件

前提条件:

  • 设备已完成最新的标准Raspberry Pi OS (Trixie,2026年9月15日及之后发布的版本)的烧录。
  • 设备已正常启动,且已外接一台显示器。

操作步骤:

  1. 在设备的命令窗格,执行如下命令,打开/boot/firmware/config.txt文件。
sudo nano /boot/firmware/config.txt
  1. 在/boot/firmware/config.txt文件末尾[all]处添加如下信息。
dtoverlay=vc4-kms-dsi-edatec-panel-101c,i2c4,interrupt=7
dtoverlay=ed-ipc,ipc3600
dtoverlay=uart1
dtoverlay=uart2
dtoverlay=uart3
dtoverlay=uart4
dtoverlay=spi1-2cs,cs0_spidev=off,cs1_spidev=off
dtoverlay=mcp2515,spi1-0,oscillator=16000000,interrupt=15
dtoverlay=mcp2515,spi1-1,oscillator=16000000,interrupt=14
dtoverlay=sdio-pi5
dtparam=rtc=off
dtoverlay=i2c-rtc,pcf8563,i2c_csi_dsi0
force_eeprom_read=0
disable_poe_fan=1
dtparam=i2c_arm=on
enable_uart=1

添加信息后的结果如下图所示:

step-2
  1. 输入ctrl+o保存文件,再按Enter,最后输入ctrl+x退出文件编辑模式。

  2. 执行如下命令添加COM口的udev规则。

sudo tee /etc/udev/rules.d/98-com.rules >/dev/null <<'EOF'
KERNEL=="ttyAMA2", PROGRAM="/bin/sh -c 'echo 1'", SYMLINK+="com%c"
KERNEL=="ttyAMA4", PROGRAM="/bin/sh -c 'echo 2'", SYMLINK+="com%c"
KERNEL=="ttyAMA1", PROGRAM="/bin/sh -c 'echo 3'", SYMLINK+="com%c"
KERNEL=="ttyAMA3", PROGRAM="/bin/sh -c 'echo 4'", SYMLINK+="com%c"
EOF
step-4
  1. 执行如下命令添加CAN口的udev规则。
sudo tee /etc/udev/rules.d/50-can.rules >/dev/null <<'EOF'
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", DEVPATH=="/devices/platform/axi/*.pcie/*.spi/spi_master/spi1/spi1.0/net/can*", NAME="canb0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", DEVPATH=="/devices/platform/axi/*.pcie/*.spi/spi_master/spi1/spi1.1/net/can*", NAME="canb1"
EOF
step-5
  1. 创建自动化脚本配置LCD屏幕属性。

a. 执行如下命令,创建配置脚本文件。

sudo nano ed-hmi-primary.sh

b. 将以下内容复制到脚本文件中。

#!/bin/bash

D_DSI="DSI-2"
D_I2C="10-0014"
I2C_ALIAS="i2c_csi_dsi0"

init_i2c()
{
    local t_dsi
    local t_i2c

    t_dsi=$(
        dtc -I fs /proc/device-tree 2>/dev/null |
        sed -nE "s/.*${I2C_ALIAS} = (.*i2c.*);$/\1/p" |
        sed 's/\//\\\//g'
    )

    t_i2c=$(
        dtc -I fs /proc/device-tree 2>/dev/null |
        sed -nE "s/.*\<i2c([0-9]*) = ${t_dsi};$/\1/p" |
        head -n 1
    )

    if [ -n "${t_i2c}" ]; then
        D_I2C="${t_i2c}-0014"
    fi
}

update_wayfire()
{
    local t_user=$1

    mkdir -p "/home/${t_user}/.config"

    cat > "/home/${t_user}/.config/wayfire.ini" << EOF
[command]
repeatable_binding_volume_up = KEY_VOLUMEUP
command_volume_up = wfpanelctl volumepulse volu
repeatable_binding_volume_down = KEY_VOLUMEDOWN
command_volume_down = wfpanelctl volumepulse vold
binding_mute = KEY_MUTE
command_mute = wfpanelctl volumepulse mute
binding_menu = <super>
command_menu = wfpanelctl smenu menu
binding_terminal = <ctrl> <alt> KEY_T
command_terminal = lxterminal
binding_bluetooth = <ctrl> <alt> KEY_B
command_bluetooth = wfpanelctl bluetooth menu
binding_netman = <ctrl> <alt> KEY_W
command_netman = wfpanelctl netman menu
binding_grim = KEY_SYSRQ
command_grim = grim
binding_orca = <ctrl> <alt> KEY_SPACE
command_orca = gui-pkinst orca reboot
binding_quit = <ctrl> <alt> KEY_DELETE
command_quit = lxde-pi-shutdown-helper
binding_power = KEY_POWER
command_power = pwrkey

[input-device:generic ft5x06 (79)]
output = ${D_DSI}

[input-device:generic ft5x06 (80)]
output = ${D_DSI}

[input-device:FT5406 memory based driver]
output = ${D_DSI}

[input]
xkb_model = pc105
xkb_layout = gb
xkb_variant =

[output:${D_DSI}]
mode = 800x1280@40000
position = 0,0
transform = 90
primary = true

[input-device:Goodix Capacitive TouchScreen]
output = ${D_DSI}

[input-device:${D_I2C} Goodix Capacitive TouchScreen]
output = ${D_DSI}

[window-rules]
rule-1 = on created if title is "LXTerminal" then maximize
EOF
}

update_kanshi()
{
    local t_user=$1

    mkdir -p "/home/${t_user}/.config/kanshi"

    cat > "/home/${t_user}/.config/kanshi/config" << EOF
profile {
        output ${D_DSI} mode 800x1280 position 0,0 transform 90
}

profile {
        output ${D_DSI} mode 800x1280 position 0,0 transform 90
        output HDMI-A-1 enable position 1280,0 transform normal
}
EOF
}

update_labwc()
{
    local t_user=$1

    mkdir -p "/home/${t_user}/.config/labwc"

    cat > "/home/${t_user}/.config/labwc/rc.xml" << EOF
<?xml version="1.0" encoding="UTF-8"?>
<labwc_config>
  <touch deviceName="Goodix Capacitive TouchScreen" mapToOutput="${D_DSI}" />
  <touch deviceName="${D_I2C} Goodix Capacitive TouchScreen" mapToOutput="${D_DSI}" />
</labwc_config>
EOF
}

update_labwc_autostart()
{
    local t_user=$1

    mkdir -p "/home/${t_user}/.config/labwc"

    cat > "/home/${t_user}/.config/labwc/autostart" << EOF
if [ -f /home/${t_user}/.config/wf-panel-pi.ini ]; then

    grep -q "^monitor=" /home/${t_user}/.config/wf-panel-pi.ini

    if [ \$? -ne 0 ]; then
        sed -i "/^\[panel\]/a\monitor=${D_DSI}" \
            /home/${t_user}/.config/wf-panel-pi.ini
    fi

else

    cat > /home/${t_user}/.config/wf-panel-pi.ini << EOL
[panel]
monitor=${D_DSI}
launcher_000001=lxde-x-www-browser.desktop
launcher_000002=pcmanfm.desktop
launcher_000003=lxterminal.desktop
EOL

fi
EOF
}

update_squeekboard()
{
    local file="/etc/xdg/labwc/autostart"

    if [ ! -f "${file}" ]; then
        return
    fi
    if grep -q "^export SQUEEKBOARD_PREFERRED_OUTPUT=" "${file}"; then
        sed -i \
            "s|^export SQUEEKBOARD_PREFERRED_OUTPUT=.*|export SQUEEKBOARD_PREFERRED_OUTPUT=${D_DSI}|" \
            "${file}"

    else
        sed -i \
            "1i export SQUEEKBOARD_PREFERRED_OUTPUT=${D_DSI}" \
            "${file}"

    fi
}

update_wayland()
{
    local home
    local t_user

    for home in /home/*; do

        [ -d "${home}" ] || continue

        t_user=$(basename "${home}")

        echo "Configuring Wayland for user: ${t_user}"

        update_wayfire "${t_user}"
        update_kanshi "${t_user}"
        update_labwc "${t_user}"
        update_labwc_autostart "${t_user}"

        chown -R "${t_user}:${t_user}" \
            "/home/${t_user}/.config"

    done

    update_squeekboard
}

update_x11()
{
    cat > /usr/share/dispsetup.sh << 'EOF'
#!/bin/sh

D_DSI=$(xrandr | awk '/^DSI.* connected/ {print $1; exit}')

D_HDMI=$(xrandr | awk '/^HDMI.* connected/ {print $1; exit}')

D_TOUCH=$(xinput | awk -F'id=' \
'/Goodix Capacitive TouchScreen/ && /pointer/ {
    gsub(/^.*↳ /,"",$1)
    sub(/[ \t]+$/,"",$1)
    print $1
    exit
}')


if [ -n "$D_DSI" ]; then

    if [ -n "$D_HDMI" ] && \
       xrandr \
       --output "$D_HDMI" \
       --auto \
       --pos 1280x0 \
       --output "$D_DSI" \
       --primary \
       --mode 800x1280 \
       --pos 0x0 \
       --rotate left \
       --dryrun
    then

        xrandr \
        --output "$D_HDMI" \
        --auto \
        --pos 1280x0 \
        --output "$D_DSI" \
        --primary \
        --mode 800x1280 \
        --pos 0x0 \
        --rotate left

    elif xrandr \
         --output "$D_DSI" \
         --primary \
         --mode 800x1280 \
         --pos 0x0 \
         --rotate left \
         --dryrun
    then

        xrandr \
        --output "$D_DSI" \
        --primary \
        --mode 800x1280 \
        --pos 0x0 \
        --rotate left

    fi


    if [ -n "$D_TOUCH" ]; then
        xinput --map-to-output "$D_TOUCH" "$D_DSI"
    fi

fi

if [ -e /usr/share/ovscsetup.sh ]; then
    /usr/share/ovscsetup.sh
fi

exit 0
EOF

    chmod 755 /usr/share/dispsetup.sh
}

run()
{
    if [ "$(id -u)" -ne 0 ]; then
        echo "ERROR: this script must be run as root"
        exit 1
    fi
    init_i2c
    update_wayland
    update_x11

    echo "HMI36 101C display setup completed."
}

run

c. 执行如下命令,执行配置脚本。

sudo chmod +x ed-hmi-primary.sh && sudo ./ed-hmi-primary.sh
step-56
  1. LCD屏幕属性配置完成后,执行如下命令,重启设备使配置生效。
sudo reboot
  1. 设备重新启动后,屏幕可以正常显示且各接口均可正常工作。

2.1.2 安装软件包

前提条件:

设备已完成config.txt配置文件的修改。

操作步骤:

  1. 打开终端命令窗格,依次执行如下命令,下载密钥并创建edatec.list文件。
curl -sS https://apt.edatec.cn/pubkey.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/edatec-archive-stable.gpg 
echo "deb https://apt.edatec.cn/raspbian stable main" | sudo tee /etc/apt/sources.list.d/edatec.list
sudo apt update
  1. 执行如下命令,安装ed-reboot软件包。
sudo apt install ed-reboot 
  1. 执行如下命令,安装ed-rtc软件包。
sudo apt install ed-rtc 
  1. 执行如下命令,安装ed-clte软件包。
sudo apt install ed-clte   
  1. 执行如下命令,安装ed-usb-tools软件包。
sudo apt install ed-usb-tools  
  1. 执行如下命令,安装ed-lvd软件包。
sudo apt install ed-lvd

2.2 适用于ED-IPC3630、ED-HMI3630-116C、ED-HMI3630-133C和ED-HMI3630-156C系列

配置操作包括以下两个步骤,请依次执行:

  1. 修改config.txt配置文件:根据产品型号对配置文件进行相应修改,以启用所需端口。

  2. 安装软件包:完成配置修改后,安装对应的扩展功能软件包,确保产品正常运行。

2.2.1 修改config.txt配置文件

前提条件:

  • 设备已完成最新的标准Raspberry Pi OS (Trixie,2026年9月15日及之后发布的版本)的烧录。
  • 设备已正常启动,且已外接一台显示器。

操作步骤:

  1. 在设备的命令窗格,执行如下命令,打开/boot/firmware/config.txt文件。
sudo nano /boot/firmware/config.txt
  1. 在/boot/firmware/config.txt文件末尾[all]处添加如下信息。
dtoverlay=ed-ipc,ipc3600
dtoverlay=uart1
dtoverlay=uart2
dtoverlay=uart3
dtoverlay=uart4
dtoverlay=spi1-2cs,cs0_spidev=off,cs1_spidev=off
dtoverlay=mcp2515,spi1-0,oscillator=16000000,interrupt=15
dtoverlay=mcp2515,spi1-1,oscillator=16000000,interrupt=14
dtoverlay=sdio-pi5
dtparam=rtc=off
dtoverlay=i2c-rtc,pcf8563,i2c_csi_dsi0
force_eeprom_read=0
disable_poe_fan=1
dtparam=i2c_arm=on
enable_uart=1

添加信息后的结果如下图所示:

step-56
  1. 输入ctrl+o保存文件,再按Enter,最后输入ctrl+x退出文件编辑模式。
  2. 执行如下命令添加COM口的udev规则。
sudo tee /etc/udev/rules.d/98-com.rules >/dev/null <<'EOF'
KERNEL=="ttyAMA2", PROGRAM="/bin/sh -c 'echo 1'", SYMLINK+="com%c"
KERNEL=="ttyAMA4", PROGRAM="/bin/sh -c 'echo 2'", SYMLINK+="com%c"
KERNEL=="ttyAMA1", PROGRAM="/bin/sh -c 'echo 3'", SYMLINK+="com%c"
KERNEL=="ttyAMA3", PROGRAM="/bin/sh -c 'echo 4'", SYMLINK+="com%c"
EOF
step-56
  1. 执行如下命令添加CAN口的udev规则。
cat > "/etc/udev/rules.d/50-can.rules" <<'EOF'
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", DEVPATH=="/devices/platform/axi/*.pcie/*.spi/spi_master/spi1/spi1.0/net/can*", NAME="canb0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", DEVPATH=="/devices/platform/axi/*.pcie/*.spi/spi_master/spi1/spi1.1/net/can*", NAME="canb1"
EOF
step-56
  1. 执行如下命令,重启设备使配置生效。
sudo reboot
  1. 设备重新启动后,屏幕可以正常显示且各接口均可正常工作。

2.2.2 安装软件包

前提条件:

设备已完成config.txt配置文件的修改。

操作步骤:

  1. 打开终端命令窗格,依次执行如下命令,下载密钥并创建edatec.list文件。
curl -sS https://apt.edatec.cn/pubkey.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/edatec-archive-stable.gpg 
echo "deb https://apt.edatec.cn/raspbian stable main" | sudo tee /etc/apt/sources.list.d/edatec.list
sudo apt update
  1. 执行如下命令,安装ed-reboot软件包。
sudo apt install ed-reboot 
  1. 执行如下命令,安装ed-rtc软件包。
sudo apt install ed-rtc 
  1. (可选)执行如下命令,安装ed-ddcci-mib-tool软件包。
sudo apt install ed-ddcci-mib-tool

提示

ED-HMI3630-116C、ED-HMI3630-133C和ED-HMI3630-156C均需要安装ed-ddcci-mib-tool软件包,ED-IPC3630无需安装此软件包。

  1. 执行如下命令,安装ed-clte软件包。
sudo apt install ed-clte   
  1. 执行如下命令,安装ed-usb-tools软件包。
sudo apt install ed-usb-tools  
  1. 执行如下命令,安装ed-lvd软件包。
sudo apt install ed-lvd