解决 JFlashExe 在 ArchManjaro Linux 找不到 Flash.cvs 的问题

    技术2022-07-17  75

    文章目录

    解决 `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

    # Maintainer: Alexis Polti <ArchSegger at gmail dot com> # Maintainer: pzl <alsoelp at gmail dot com> 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() { # Change src path name if [ ${CARCH} = "i686" ]; then mv JLink_Linux_V${pkgver/./}_i386 JLink else mv JLink_Linux_V${pkgver/./}_x86_64 JLink fi } package(){ # Match package placement from their .deb, in /opt 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" # Bulk copy everything 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" # Create links where needed 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 后:

    # Maintainer: Alexis Polti <ArchSegger at gmail dot com> # Maintainer: pzl <alsoelp at gmail dot com> 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() { # Change src path name if [ ${CARCH} = "i686" ]; then mv JLink_Linux_V${pkgver/./}_i386 JLink else mv JLink_Linux_V${pkgver/./}_x86_64 JLink fi } package(){ # Match package placement from their .deb, in /opt 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" # Bulk copy everything 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 # cp --preserve=mode -r ETC/JFlash "${pkgdir}/etc" # Create links where needed 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 开带有中文字符的工程烧录那就是显示乱码了。测试发现还是能烧录成功,文件校验值是正常。
    Processed: 0.014, SQL: 9