使用 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 的板子测试了
已经上传到 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)
离线
开源的 stcgal 应该也可以写这些字段的,有兴趣可以了解下。
离线
666!给你打call
离线
开源的 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
离线
这里面重点是串口的ln, 以前不了解以为不行. 谢谢.
离线
这里面重点是串口的ln, 以前不了解以为不行. 谢谢.
涉及到注册表和 wine 的 ln 相关的内容
离线
补充内容
# 如果添加 uucp 后还是不能使用,尝试安装 uucp 软件包,以 Arch 为例,其他 Linux 根据设备组确认
❯ yay -Syu uucp
离线