文章目錄
- 解決 `JFlashExe` 在 Arch/Manjaro Linux 找不到 `Flash.cvs` 的問題
- 在 Arch Linux 下使用 `JFlashExe` 時
- 查看 `JLink` 的安裝位置是否存在 `ETC` 文件夾
- 發現沒有 `ETC` 目錄。搜索發現在 `/etc/JFlash/` 下。
- 克隆 `jlink-software-and-documentation`
- 查看 `PKGBUILD`
- 修改 `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
開帶有中文字符的工程燒錄那就是顯示亂碼了。 - 測試發現還是能燒錄成功,文件校驗值是正常。