文章目录
解决 `JFlashExe` 在 Arch/Manjaro Linux 找不到 `Flash.cvs` 的问题在 Arch Linux 下使用 `JFlashExe` 时查看 `JLink` 的安装位置是否存在 `ETC` 文件夹发现没有 `ETC` 目录。搜索发现在 `/etc/JFlash/` 下。克隆 `jlink-software-and-documentation`查看 `PKGBUILD`确认是维护者将 `ETC/JFlash` 移动到 `/etc` 下。
修改 `PKGBUILD` 后:保存退出,并进行编译打包安装:再次运行 `JFlashExe`:结果如图所示:编译好的 `AUR` 包,[懒人专用](https://download.csdn.net/download/taotieren/12570363)AUR 仓库维护者已采用解决方式并已更新,后续可以直接通过 `AUR` 下载编译安装
题外话
解决 JFlashExe 在 Arch/Manjaro Linux 找不到 Flash.cvs 的问题
在 Arch Linux 下使用 JFlashExe 时
$ JFlashExe
JFlashExe could not
open flash device list
file [/opt/SEGGER/Jlink/ETC/JFlash/Flash.cvs
] File not found
!
查看 JLink 的安装位置是否存在 ETC 文件夹
$
ls /opt/SEGGER/Jlink/
发现没有 ETC 目录。搜索发现在 /etc/JFlash/ 下。
查看Jlink 的 AUR 的 PKGBUILD
克隆 jlink-software-and-documentation
git clone https://aur.archlinux.org/jlink-software-and-documentation.git
查看 PKGBUILD
pkgname
=jlink-software-and-documentation
pkgver
=6.80d
pkgrel
=0
epoch
=28
pkgdesc
="Segger JLink software & documentation pack for Linux"
arch
=('i686' 'x86_64')
license
=('custom')
groups
=('jlink')
depends
=('glibc' 'libudev0-shim')
source_x86_64
=("JLink_Linux_${pkgver/./}_x86_64.tgz::https://www.segger.com/downloads/jlink/JLink_Linux_V${pkgver/./}_x86_64.tgz")
source_i686
=("JLink_Linux_${pkgver/./}_i686.tgz::https://www.segger.com/downloads/jlink/JLink_Linux_V${pkgver/./}_i386.tgz")
source
=("99-jlink.rules.patch")
md5sums_i686
=('833284e3e2f2847ec8d9e7184c4e5b82')
md5sums_x86_64
=('73ce51ac0078ca6f92f53f5c8024fce9')
md5sums
=('a57d93b791581c1f36e4c672303bb85d')
install
=$pkgname.install
url
="https://www.segger.com/jlink-software.html"
conflicts
=("j-link-software-and-documentation")
replaces
=("j-link-software-and-documentation")
DLAGENTS
=("https::/usr/bin/env curl -o %o -d accept_license_agreement=accepted -d non_emb_ctr=confirmed")
options
=(!strip
)
prepare
() {
if [ ${CARCH} = "i686" ]; then
mv JLink_Linux_V
${pkgver/./}_i386 JLink
else
mv JLink_Linux_V
${pkgver/./}_x86_64 JLink
fi
}
package
(){
install -dm755
"${pkgdir}/opt/SEGGER/JLink" \
"${pkgdir}/usr/share/licenses/${pkgname}" \
"${pkgdir}/usr/lib/" \
"${pkgdir}/usr/bin/" \
"${pkgdir}/etc/" \
"${pkgdir}/usr/lib/udev/rules.d/" \
"${pkgdir}/usr/share/doc/${pkgname}/"
cd "${srcdir}/JLink"
cp --preserve
=mode -r J* Doc Samples Devices ThirdParty README.txt GDBServer lib*
"${pkgdir}/opt/SEGGER/JLink"
if [ ${CARCH} = "x86_64" ]; then
cp --preserve
=mode -r x86
"${pkgdir}/opt/SEGGER/JLink"
fi
cp --preserve
=mode -r ETC/JFlash
"${pkgdir}/etc"
ln -s /opt/SEGGER/JLink/Doc/LicenseIncGUI.txt
"${pkgdir}/usr/share/licenses/${pkgname}/"
sed -i
's/0x//g' 99-jlink.rules
patch -i
"${srcdir}/99-jlink.rules.patch" 99-jlink.rules
install -Dm644 99-jlink.rules
"${pkgdir}/usr/lib/udev/rules.d/"
rm -f
"${pkgdir}/etc/udev/rules.d/99-jlink.rules"
for f
in J*
; do
ln -s /opt/SEGGER/JLink/
"$f" "${pkgdir}/usr/bin"
done
rm "${pkgdir}/usr/bin/JLinkDevices.xml"
for f
in Doc/*
; do
ln -s /opt/SEGGER/JLink/
"$f" "${pkgdir}/usr/share/doc/${pkgname}"
done
}
确认是维护者将 ETC/JFlash 移动到 /etc 下。
cp --preserve
=mode -r ETC/JFlash
"${pkgdir}/etc"
修改 PKGBUILD 后:
pkgname
=jlink-software-and-documentation
pkgver
=6.80d
pkgrel
=0
epoch
=28
pkgdesc
="Segger JLink software & documentation pack for Linux"
arch
=('i686' 'x86_64')
license
=('custom')
groups
=('jlink')
depends
=('glibc' 'libudev0-shim')
source_x86_64
=("JLink_Linux_${pkgver/./}_x86_64.tgz::https://www.segger.com/downloads/jlink/JLink_Linux_V${pkgver/./}_x86_64.tgz")
source_i686
=("JLink_Linux_${pkgver/./}_i686.tgz::https://www.segger.com/downloads/jlink/JLink_Linux_V${pkgver/./}_i386.tgz")
source
=("99-jlink.rules.patch")
md5sums_i686
=('833284e3e2f2847ec8d9e7184c4e5b82')
md5sums_x86_64
=('73ce51ac0078ca6f92f53f5c8024fce9')
md5sums
=('a57d93b791581c1f36e4c672303bb85d')
install
=$pkgname.install
url
="https://www.segger.com/jlink-software.html"
conflicts
=("j-link-software-and-documentation")
replaces
=("j-link-software-and-documentation")
DLAGENTS
=("https::/usr/bin/env curl -o %o -d accept_license_agreement=accepted -d non_emb_ctr=confirmed")
options
=(!strip
)
prepare
() {
if [ ${CARCH} = "i686" ]; then
mv JLink_Linux_V
${pkgver/./}_i386 JLink
else
mv JLink_Linux_V
${pkgver/./}_x86_64 JLink
fi
}
package
(){
install -dm755
"${pkgdir}/opt/SEGGER/JLink" \
"${pkgdir}/usr/share/licenses/${pkgname}" \
"${pkgdir}/usr/lib/" \
"${pkgdir}/usr/bin/" \
"${pkgdir}/etc/" \
"${pkgdir}/usr/lib/udev/rules.d/" \
"${pkgdir}/usr/share/doc/${pkgname}/"
cd "${srcdir}/JLink"
cp --preserve
=mode -r J* Doc ETC Samples Devices ThirdParty README.txt GDBServer lib*
"${pkgdir}/opt/SEGGER/JLink"
if [ ${CARCH} = "x86_64" ]; then
cp --preserve
=mode -r x86
"${pkgdir}/opt/SEGGER/JLink"
fi
ln -s /opt/SEGGER/JLink/Doc/LicenseIncGUI.txt
"${pkgdir}/usr/share/licenses/${pkgname}/"
sed -i
's/0x//g' 99-jlink.rules
patch -i
"${srcdir}/99-jlink.rules.patch" 99-jlink.rules
install -Dm644 99-jlink.rules
"${pkgdir}/usr/lib/udev/rules.d/"
rm -f
"${pkgdir}/etc/udev/rules.d/99-jlink.rules"
for f
in J*
; do
ln -s /opt/SEGGER/JLink/
"$f" "${pkgdir}/usr/bin"
done
rm "${pkgdir}/usr/bin/JLinkDevices.xml"
for f
in Doc/*
; do
ln -s /opt/SEGGER/JLink/
"$f" "${pkgdir}/usr/share/doc/${pkgname}"
done
}
保存退出,并进行编译打包安装:
makepkg -C -f -i
再次运行 JFlashExe:
JFlashExe
结果如图所示:
编译好的 AUR 包,懒人专用
AUR 仓库维护者已采用解决方式并已更新,后续可以直接通过 AUR 下载编译安装
题外话
由于 Segger 重写了 JFlash ,从 7.20 版本开始实现了跨平台的功能。因为中文字符的编码问题导致 Segger 自家的 ES IDE 出现各奇奇怪怪的问题。目前是自家产品不在支持中文字符了,以后还会不会支持中文字符暂时不得知。文件夹名或工程名还喜欢用中文命名需要注意了。以后用新版本 JFlash 开带有中文字符的工程烧录那就是显示乱码了。测试发现还是能烧录成功,文件校验值是正常。