在Zephyr TLS線程本地存儲(chǔ)的實(shí)現(xiàn)一文中說明了如何在Zephyr上使用TLS,在這種默認(rèn)的情況下Zephyr的編譯是使用的是Zephyr SDK提供的工具鏈。
而在一些特殊情況下我們希望使用重新配置編譯第三方工具鏈來編譯Zephyr,這就需要配置讓第三方工具鏈支持TLS,并修改Zephyr的Kconifg加入第三方工具鏈支持TLS.
工具鏈編譯
到https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads下載要用的source code,例如我選擇的是gcc-arm-none-eabi-9-2020-q2-update-src.tar.bz2
解壓縮后有一個(gè)How-to-build-toolchain.pdf文檔說明如何編譯
安裝依賴
我的環(huán)境是ubuntu 18.04,安裝依賴
1
2
sudo su
apt-get install software-properties-common
add-apt-repository universe
cat 》/etc/apt/sources.list.d/xenial.list 《《EOF
deb http://archive.ubuntu.com/ubuntu xenial main universe
deb-src http://archive.ubuntu.com/ubuntu xenial main universe
deb http://security.ubuntu.com/ubuntu xenial-security main
EOF
dpkg --add-architecture i386
apt-get update
apt-get install -y -t xenial
gcc-mingw-w64-i686 g++-mingw-w64-i686 binutils-mingw-w64-i686
apt-get -f install -y
build-essential
autoconf
autogen
bison
dejagnu
flex
flip
gawk
git
gperf
gzip
nsis
openssh-client
p7zip-full
perl
python-dev
libisl-dev
scons
tcl
texinfo
tofrodos
wget
zip
texlive
texlive-extra-utils
libncurses5-dev
exit
修改編譯配置項(xiàng)
不需要mingw32,配置為跳過加速編譯
1
2
skip_mingw32=yes
skip_mingw32_gdb_with_python=yes
將--disable-tls修改為--enable-tls
gcc-arm-none-eabi默認(rèn)是關(guān)閉tls的,gcc編譯代碼后訪問TLS時(shí)使用的是emulated tls,和Zephyr的實(shí)現(xiàn)不一致,需要改為--enable-tls
編譯
執(zhí)行下面命令進(jìn)行編譯
1
2
3
。/install-sources.sh
。/build-prerequisites.sh
。/build-toolchain.sh
編譯完成后的結(jié)果會(huì)被打包放在pkg/下, 例如我這里生成的就是gcc-arm-none-eabi-9-2021-q2-x86_64-linux.tar.bz2
在編譯gdb的時(shí)候可能會(huì)提示python有問題,原因是我的默認(rèn)版本是python3, 需要進(jìn)行python版本切換gcc-arm-none-eabi-9-2020-q2使用python 2.7, 切換方法見Python2和3切換
第三方工具鏈配置TLS
使用第三方工具鏈
將gcc-arm-none-eabi-9-2021-q2-update-x86_64-linux.tar.bz2解壓縮,根據(jù)解壓縮的路徑修改~/.zephyrrc如下,Zephyr就會(huì)使用第三方工具鏈進(jìn)行編譯
1
2
export ZEPHYR_TOOLCHAIN_VARIANT=gnuarmemb
export GNUARMEMB_TOOLCHAIN_PATH=/mnt/d/code/gcc-arm-none-eabi-9-2021-q2-update
修改Zephyr配置
當(dāng)使用第三方工具鏈后即使配置了CONFIG_THREAD_LOCAL_STORAGE=y在編譯的時(shí)候也會(huì)提示由于TOOLCHAIN_SUPPORTS_THREAD_LOCAL_STORAGE為n而無法TLS, 但由于TOOLCHAIN_SUPPORTS_THREAD_LOCAL_STORAGE是Zephyr的隱藏配置項(xiàng)因此無法在prj.conf中配置。
修改方式是在zephyr/kernel/Kconfig中為gnuarmemb添加默認(rèn)支持TLS
1
2
3
config TOOLCHAIN_SUPPORTS_THREAD_LOCAL_STORAGE
bool
default y if (“$(ZEPHYR_TOOLCHAIN_VARIANT)” = “zephyr” || “$(ZEPHYR_TOOLCHAIN_VARIANT)” = “gnuarmemb”)
通過以上修改,用第三方工具鏈gnuarmemb編譯就可以支持Zephyr的TLS。
參考
https://docs.zephyrproject.org/latest/getting_started/toolchain_3rd_party_x_compilers.html
編輯:jq
-
代碼
+關(guān)注
關(guān)注
30文章
4888瀏覽量
70272 -
編譯
+關(guān)注
關(guān)注
0文章
676瀏覽量
33760 -
python
+關(guān)注
關(guān)注
56文章
4825瀏覽量
86223
原文標(biāo)題:Zephyr在第三方工具鏈下開啟TLS
文章出處:【微信號(hào):ZephyrProject,微信公眾號(hào):ZephyrProject】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
SGS榮獲比亞迪乘用車第三方實(shí)驗(yàn)室資質(zhì)認(rèn)可證書
技術(shù)分享 | RK3568編譯第三方驅(qū)動(dòng)

用第三方的dlp3010板子時(shí)遇到的幾個(gè)問題求解
北匯信息再次獲得長(zhǎng)城汽車的第三方實(shí)驗(yàn)室認(rèn)可證書及認(rèn)可項(xiàng)目擴(kuò)項(xiàng)

i.MX8M Yocto工程更新第三方軟件包

用于InterBase的ODBC驅(qū)動(dòng)程序:可與多個(gè)第三方工具兼容

EE-303:將VisualDSP線程安全庫與第三方RTOS配合使用

武漢第三方三坐標(biāo)測(cè)量檢測(cè)中心協(xié)助外地用戶完成產(chǎn)品驗(yàn)收

第三方檢測(cè)機(jī)構(gòu)該如何提升核心競(jìng)爭(zhēng)力?

鴻蒙Flutter實(shí)戰(zhàn):05-使用第三方插件
三維天地低代碼開發(fā)平臺(tái)助力第三方質(zhì)檢行業(yè)數(shù)據(jù)可視化

炬芯科技低功耗藍(lán)牙SoC通過Apple授權(quán)第三方測(cè)試機(jī)構(gòu)合規(guī)性驗(yàn)證
請(qǐng)問esp8266會(huì)開放使用第三方云服務(wù)器嗎?
x-ray射線無損檢測(cè)第三方檢測(cè)機(jī)構(gòu)廠家

評(píng)論