您尚未登录。

楼主 # 2022-02-17 17:23:28

taotieren
会员
注册时间: 2020-05-19
已发帖子: 116
积分: 151

Arch Linux 下给 STC-ISP 打 wine 包

使用 Arch Linux 的时候遇到需要给 STC 的 MCU 烧录程序。
众所周知 STC 官方的 STC-ISP 不支持 Linux 系统。
现在网上也有很多 STC 的烧录软件,还有有的 十几年没更新过。
于是想了想能不能用 wine 来跑 STC-ISP。
STC-ISP 单个软件集成的东西比较多,所需要的依赖相当少,
于是就写个了 PKGBUILD ,直接上源码

# Maintainer: taotieren <admin@taotieren.com>

pkgname=stc-isp-wine
pkgver=v6.88L
pkgrel=1
pkgdesc="Wine STC-ISP 下载编程烧录软件"
arch=('any')
url="http://www.stcmcudata.com"
license=('unknow')
provides=('STC-ISP')
conflicts=( ${pkgname%-wine} 'stc-isp-bin')
replaces=('stc-isp-bin')
depends=('wine' 'wqy-microhei' 'winetricks')
optdepends=("wine-mono-gecko-version-fix: Fix the version numbers of wine-mono and wine-gecko files to solve the dialog box that pops up when starting wine.")
makedepends=('unarchiver')
backup=()
options=('!strip')
install=${pkgname}.install
source=("${pkgname%-wine}-${pkgver}.zip::${url}/STCISP/${pkgname%-wine}-15xx-${pkgver}.zip"
        "${pkgname}.install")
sha256sums=('741c7375c173c187a4172156dc2d6eb1f7b9196b0757bad6a0e5fd0da6a2ba50'
            'b2a93211b74f6e23a9c4dd508c65bf374c0a03c11174092f6ccec3e9194e47a6')
noextract=("${pkgname%-wine}-${pkgver}.zip")

prepare() {
    unar -e GBK "${srcdir}/${pkgname%-wine}-${pkgver}.zip"
}

package() {
    export LC_CTYPE="zh_CN.UTF-8"

    _stc="opt/STCMCU"
    _ftname="wqy-microhei.ttc"

    install -dm0755 "${pkgdir}/${_stc}/${pkgname%-wine}"

    cp -ra "${srcdir}/${pkgname%-wine}-${pkgver}/${pkgname%-wine}-${pkgver}.exe" "${pkgdir}/${_stc}/${pkgname%-wine}"

    find "${pkgdir}/${_stc}" -type f -exec chmod 644 "{}" \;
    find "${pkgdir}/${_stc}" -type d -exec chmod 755 "{}" \;

    install -Dm0644 /dev/stdin "${pkgdir}/${_stc}/${pkgname%-wine}/regpatch.reg" << EOF
REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink]
"Lucida Sans Unicode"="${_ftname}"
"Microsoft Sans Serif"="${_ftname}"
"MS Sans Serif"="${_ftname}"
"Tahoma"="${_ftname}"
"Tahoma Bold"="${_ftname}"
"SimSun"="${_ftname}"
"Arial"="${_ftname}"
"Arial Black"="${_ftname}"
"Lucida Sans Unicode"=str(7):"${_ftname}"
"Microsoft Sans Serif"=str(7):"${_ftname}"
"Tahoma"=str(7):"${_ftname}"
"Lucida Sans Unicode"="${_ftname}"
"Microsoft Sans Serif"="${_ftname}"
"Microsoft YaHei"="${_ftname}"
"微软雅黑"="${_ftname}"
"宋体"="${_ftname}"
"新細明體"="${_ftname}"
"DFKai-SB"="${_ftname}"
"FangSong"="${_ftname}"
"KaiTi"="${_ftname}"
"Microsoft JhengHei"="${_ftname}"
"Microsoft YaHei"="${_ftname}"
"MingLiU"="${_ftname}"
"NSimSun"="${_ftname}"
"PMingLiU"="${_ftname}"
"SimHei"="${_ftname}"
"SimKai"="${_ftname}"
"SimSun"="${_ftname}"

[HKEY_CURRENT_USER\Software\Wine\X11 Driver]
"ClientSideAntiAliasWithCore"="N"
"ClientSideAntiAliasWithRender"="N"
"ClientSideWithRender"="N"

[HKEY_CURRENT_USER\Control Panel\Desktop]
"FontSmoothing"="2"
"FontSmoothingType"=dword:00000002
"FontSmoothingGamma"=dword:00000578
"FontSmoothingOrientation"=dword:00000001

[HKEY_LOCAL_MACHINE\Software\Wine\Ports]
"COM1"="/dev/ttyUSB0"
"COM2"="/dev/ttyUSB1"
"COM3"="/dev/ttyUSB2"
"COM4"="/dev/ttyUSB3"
"COM5"="/dev/ttyUSB4"
"COM6"="/dev/ttyUSB5"
"COM7"="/dev/ttyUSB6"
"COM8"="/dev/ttyUSB7"
"COM9"="/dev/ttyUSB8"
"COM10"="/dev/ttyACM0"
"COM11"="/dev/ttyACM1"
"COM12"="/dev/ttyACM2"
"COM13"="/dev/ttyACM3"
"COM14"="/dev/ttyACM4"
"COM15"="/dev/ttyACM5"
"COM16"="/dev/ttyACM6"
"COM17"="/dev/ttyACM7"
"COM18"="/dev/ttyACM8"
"COM19"="/dev/ttyACM9"
EOF

    install -Dm0755 /dev/stdin "${pkgdir}/usr/bin/${pkgname%-wine}" << EOF
#!/bin/bash
export LC_CTYPE="zh_CN.UTF-8"
export WINEARCH=win32 WINEPREFIX="$HOME/.${pkgname%-wine}/wine"

if [ ! -d "$HOME"/.${pkgname%-wine} ] ; then
    mkdir -p "$HOME"/.${pkgname%-wine}/wine || exit 1

    cp -r /${_stc}/${pkgname%-wine}/regpatch.reg "$HOME"/.${pkgname%-wine}/wine || exit 1

    ln -s /${_stc}/${pkgname%-wine}/${pkgname%-wine}-${pkgver}.exe "$HOME"/.${pkgname%-wine}/${pkgname%-wine} || exit 1
fi

if [ ! -f "$HOME"/.${pkgname%-wine}/regpatchok ] ; then
    touch "$HOME"/.${pkgname%-wine}/regpatchok || exit 1
    cd "$HOME"/.${pkgname%-wine}/wine && regedit regpatch.reg && wineserver -k
    winetricks -q mfc42
fi

wine "$HOME"/.${pkgname%-wine}/${pkgname%-wine} "\$@"
EOF

    install -Dm0644 /dev/stdin "${pkgdir}/usr/share/applications/${pkgname%-wine}.desktop" << EOF
[Desktop Entry]
Name=${pkgname%-wine}
Name[zh_CN]=${pkgname%-wine}
Comment=${pkgdesc}
#MimeType=application/x-${pkgname%-wine};
Exec=${pkgname%-wine} %f
Type=Application
Categories=Development;Tool;
Terminal=false
Icon=${pkgname%-wine}.png
Version=${pkgver}
EOF
}

解决了以下问题:
- 处理 STC-ISP 运行环境  -》 /usr/bin/${pkgname%-wine}
- STC-ISP 运行时字体显示方框 -> 写了个注册表导入了 wqy-microhei 字体支持
-  串口号映射 -> 在注册表中处理
- dotnet 运行环境 -> winetricks -q mfc42
- 新版本的 STC-ISP 多了中英文切换,处理语言切换时中文字体乱码 -》 export LC_CTYPE="zh_CN.UTF-8"
- 增加了 Linux 桌面文件   -》/usr/share/applications/${pkgname%-wine}.desktop
- 删除了自带的驱动程序 -》 linux 下安装 win 的驱动,也安装不上,留着也没用,一些串口驱动在 Linux 是能自动识别,使用 lsusb 查看即可,如果没有自行安装驱动,

可能会踩的坑 Ubuntu 等需要将 $USER 加到 串口组(uucp) 里面(新版本一般是 uucp ,旧版本可能是其他的,使用 ls -lsh /dev/ttyUSB* 查看设备所在组。如果在 Linux 下调试时遇到串口不通或者提示没权限,把用户加入串口设备组里面,后重启电脑试试。示例:

❯ ls -lash /dev/ttyS0 0 crwxrwxrwx 1 root uucp 4, 64 Feb 15 19:09 /dev/ttyS0
❯ sudo gpasswd -a `whoami` uucp
[sudo] taotieren 的密码:
正在将用户“taotieren”加入到“uucp”组中
❯ groups `whoami` 
wheel uucp vboxusers taotieren
❯ reboot

效果图

默认启动时英文
切换语言为中文

现在打完包后找不到 STC-ISP 的板子测试了 neutral

已经上传到 Arch Linux 的 AUR 仓库:https://aur.archlinux.org/packages/stc-isp-wine
Arch 系用户可以通过 aur 工具来安装,例如:yay

yay -Sy stc-isp-wine

其他 Linux 想用 wine 运行 STC-ISP 可以参考这里的处理方法

最近编辑记录 taotieren (2022-02-17 17:35:53)

离线

#1 2022-02-18 16:06:07

llinjupt
会员
注册时间: 2020-12-21
已发帖子: 93
积分: 178

Re: Arch Linux 下给 STC-ISP 打 wine 包

开源的 stcgal 应该也可以写这些字段的,有兴趣可以了解下。

离线

#2 2022-02-18 17:41:46

jlau
会员
注册时间: 2018-06-11
已发帖子: 209
积分: 201.5

Re: Arch Linux 下给 STC-ISP 打 wine 包

666!给你打call

离线

楼主 #3 2022-02-18 19:32:47

taotieren
会员
注册时间: 2020-05-19
已发帖子: 116
积分: 151

Re: Arch Linux 下给 STC-ISP 打 wine 包

llinjupt 说:

开源的 stcgal 应该也可以写这些字段的,有兴趣可以了解下。

这个已经有人打包了

❯ yay -Ss stcgal  
aur/stcgal-git v1.6.r41.2d3c24f-1 (+0 0.00) 
    Open Source STC MCU ISP flash tool
aur/stcgal 1.6-1 (+2 0.02) 
    Open Source STC MCU ISP flash tool

离线

#4 2022-02-22 15:07:14

sy373466062
会员
注册时间: 2018-11-12
已发帖子: 130
积分: 116

Re: Arch Linux 下给 STC-ISP 打 wine 包

这里面重点是串口的ln, 以前不了解以为不行. 谢谢.

离线

楼主 #5 2022-02-22 16:00:08

taotieren
会员
注册时间: 2020-05-19
已发帖子: 116
积分: 151

Re: Arch Linux 下给 STC-ISP 打 wine 包

sy373466062 说:

这里面重点是串口的ln, 以前不了解以为不行. 谢谢.

涉及到注册表和 wine 的 ln 相关的内容

离线

楼主 #6 2022-02-22 16:07:33

taotieren
会员
注册时间: 2020-05-19
已发帖子: 116
积分: 151

Re: Arch Linux 下给 STC-ISP 打 wine 包

补充内容

# 如果添加 uucp 后还是不能使用,尝试安装 uucp 软件包,以 Arch 为例,其他 Linux 根据设备组确认
❯ yay -Syu uucp

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn