ART-PI Smart 開發(fā)板介紹
art-pi smart 是rt-thread公司推出的一款基于NXP公司imx6ull處理器的開發(fā)板,主要用來測試評估RT公司去年新發(fā)布的混合微內(nèi)核操作系統(tǒng)RT-Smart。
RT-Thread Smart(簡稱 rt-smart)嵌入式實時操作系統(tǒng)是基于 RT-Thread 操作系統(tǒng)衍生的新分支,面向帶 MMU,中高端應(yīng)用的芯片,例如 ARM Cortex-A 系列芯片,MIPS 芯片,帶 MMU 的 RISC-V 芯片等。rt-smart 在 RT-Thread 操作系統(tǒng)的基礎(chǔ)上啟用獨立、完整的進(jìn)程方式,同時以混合微內(nèi)核模式執(zhí)行。
rt-smart 是一款高性能混合微內(nèi)核操作系統(tǒng),在傳統(tǒng)嵌入式操作系統(tǒng)劃分中,rt-smart 能夠填補(bǔ)傳統(tǒng) RTOS 和大型操作系統(tǒng) Linux 之間的空白,在實時性、成本、安全性、啟動速度等方面可以取得最佳的平衡。
開發(fā)環(huán)境的建立
下載RT-Smart SDK
RT官方針對ART-PI Smart開發(fā)板提供了完整的SDK開發(fā)包,該SDK有完整的bsp支持,并且有詳細(xì)的readme文件作為離線參考,在進(jìn)行開發(fā)之前,先從gittee上獲取該sdk完整的文件(本人電腦離線使用居多,所以簡單粗暴直接從gittee上下載zip本地解壓即可)。這里需要注意一下,因為后續(xù)本人選擇的是scons構(gòu)建工具通過ENV命令行窗口來進(jìn)行構(gòu)建,所以SDK放置的目錄一定不要有中文(任何開發(fā)設(shè)計工作,都不要出現(xiàn)中文路徑,這是個好習(xí)慣)。1.ART-Pi-Smart SDK倉庫https://gitee.com/rtthread/ART-Pi-smart
2.ART-Pi-Smart 用戶手冊
https://art-pi.gitee.io/smart-website/docs/#/user_manual/user_manual?id=windows-%e4%b8%8b%ef%bc%8c%e5%bf%ab%e9%80%9f%e4%bd%93%e9%aa%8c-rt-smart
如下圖所示,是ART-PI Smart的SDK目錄結(jié)構(gòu):
安裝ENV和SCONS構(gòu)建工具
Env 是 RT-Thread 推出的開發(fā)輔助工具,針對基于 RT-Thread 操作系統(tǒng)的項目工程,提供編譯構(gòu)建環(huán)境、圖形化系統(tǒng)配置及軟件包管理功能。其內(nèi)置的 menuconfig 提供了簡單易用的配置剪裁工具,可對內(nèi)核、組件和軟件包進(jìn)行自由裁剪,使系統(tǒng)以搭積木的方式進(jìn)行構(gòu)建。主要特性
menuconfig 圖形化配置界面,交互性好,操作邏輯強(qiáng);- 豐富的文字幫助說明,配置無需查閱文檔;
- 使用靈活,自動處理依賴,功能開關(guān)徹底;
- 自動生成 rtconfig.h,無需手動修改;
- 使用scons工具生成工程,提供編譯環(huán)境,操作簡單;
- 提供多種軟件包,模塊化軟件包耦合關(guān)聯(lián)少,可維護(hù)性好;
- 軟件包可在線下載,軟件包持續(xù)集成,包可靠性高;
-
RT官方ENV用戶手冊
https://www.rt-thread.org/document/site/#/development-tools/env/env
-
RT官方SCONS用戶手冊
https://www.rt-thread.org/document/site/#/development-tools/scons/scons
安裝對應(yīng)系統(tǒng)下的編譯工具鏈
ART-PT Smart可以在windows下開發(fā),也可以在Linux環(huán)境下開發(fā),本人選擇了日常熟悉的windows環(huán)境開部署相關(guān)的編譯工具鏈,也方便后續(xù)新上手的朋友們快速熟悉。在解壓好的SDK根目錄下,找到toos文件夾,進(jìn)去之后,在tools文件夾下,打開ENV窗口,輸入指令
1pythonget_toolchain.py
在主機(jī)保證聯(lián)網(wǎng)的前提下,該腳本會自動識別用戶當(dāng)前的開發(fā)環(huán)境,自動安裝相匹配的編譯工具鏈安裝完畢之后,在ENV命令行界面,輸入如下指令,查看工具鏈?zhǔn)欠癜惭b正確:
1arm-linux-musleabi-gcc-v
出現(xiàn)如下內(nèi)容代表工具鏈已經(jīng)自動安裝好:
1Usingbuilt-inspecs.
2COLLECT_GCC=arm-linux-musleabi-gcc
3COLLECT_LTO_WRAPPER=e:/test/rt-smart/tools/gnu_gcc/arm-linux-musleabi_for_i686-w64-mingw32/bin/../libexec/gcc/arm-linux-musleabi/7.3.0/lto-wrapper.exe
4Target:arm-linux-musleabi
5Configuredwith:../src_gcc/configure--disable-werror--prefix=--target=arm-linux-musleabi--with-sysroot=/arm-linux-musleabi--with-build-sysroot=/builds/research/musl-toolchain/build/arm-linux-musleabi_for_i686-w64-mingw32/sysroot/--enable-languages=c,c++--disable-multilib--enable-tls--disable-libmudflap--disable-libsanitizer--disable-gnu-indirect-function--disable-libmpx--enable-libstdcxx-time--host=i686-w64-mingw32--disable-bootstrapAR_FOR_TARGET=arm-linux-musleabi-arAS_FOR_TARGET=arm-linux-musleabi-asLD_FOR_TARGET=arm-linux-musleabi-ldNM_FOR_TARGET=arm-linux-musleabi-nmOBJCOPY_FOR_TARGET=arm-linux-musleabi-objcopyOBJDUMP_FOR_TARGET=arm-linux-musleabi-objdumpRANLIB_FOR_TARGET=arm-linux-musleabi-ranlibREADELF_FOR_TARGET=arm-linux-musleabi-readelfSTRIP_FOR_TARGET=arm-linux-musleabi-strip
6Threadmodel:posix
7gccversion7.3.0(GCC)
8builddate:Sep30202113:47:19
9buildsha:b998444eb32a74bdeb55fd70963187255ae6efe0
10buildjob:173019
接著,打開ENV工具,然后輸入執(zhí)行:
1smart-env.bat
該操作是在進(jìn)一步開發(fā)前先設(shè)置好環(huán)境變量(rt-smart 工具鏈、編譯器等),輸入如下指令,查看環(huán)境變量是否生效:
1setRTT
如果生效,則會顯示如下信息,否則請檢sdk相關(guān)查路徑是否有中文,或者工具鏈沒有安裝等。
1RTT_CC=gcc
2RTT_CC_PREFIX=arm-linux-musleabi-
3RTT_EXEC_PATH=E: est
t-smart oolsgnu_gccarm-linux-musleabi_for_i686-w64-mingw32
4in
(注意:后續(xù)每次打開ENV工具進(jìn)行scons之類的操作,都必須線設(shè)置該環(huán)境變量,否則后續(xù)編譯構(gòu)建將會報錯?。?/span>
構(gòu)建和編譯內(nèi)核
內(nèi)核裁剪與構(gòu)建
進(jìn)入到SDK根目錄下,然后依次進(jìn)入到ART-PI Smart BSP所在的目錄下,例如:
1盤符:..ART-Pi-smart-masterkernelspimx6ull-artpi-smart
在該目錄下,打開ENV命令行窗口,輸入指令:
1menuconfig
則ENV窗口會自動彈出內(nèi)核的圖形配置界面,如下圖所示:
1scons
該編譯指令其實還可以配合其他參數(shù)一起使用,具體細(xì)節(jié)請參考前文提到的官方SCONS用戶手冊。
新內(nèi)核的更新方式
在bsp目錄下,scons成功之后,將會生成內(nèi)核的可執(zhí)行文件,分別是:
1rtthread.bin
2rtthread.elf
3rtthread.imx
4rtthread.img
運行新的內(nèi)核,本文只用到了以上兩種文件格式,分別是imx和bin格式的內(nèi)核文件。
單次運行新內(nèi)核
通過開發(fā)板網(wǎng)絡(luò)接口,可以傳輸內(nèi)核文件到開發(fā)板并且執(zhí)行,檢測內(nèi)核當(dāng)前運行情況。同時也可以利用開發(fā)板上第二個usb接口,通過上位機(jī)軟件加載啟動內(nèi)核。這兩種方式在官方手冊里介紹的較為詳細(xì),本文不再贅述。請參考前文給出的官方鏈接。在這里提及這種方式,主要是想引出一個自己遇到的問題,本人手中的板子,emmc文件系統(tǒng)上的內(nèi)核文件版本較老,網(wǎng)絡(luò)IP不能靜態(tài)設(shè)置,只能DHCP動態(tài)分配,而我身邊恰好沒有路由器,更新之后內(nèi)核用到官方的方式加載運行之后,可以正常設(shè)置靜態(tài)IP,但是復(fù)位之后,系統(tǒng)內(nèi)核又回到舊的版本,也就是說,上面提到的官方示例的加載運行方式是把內(nèi)核文件加載到RAM種運行了,所以,如果跟我一樣有需要把內(nèi)核文件上傳到emmc的文件系統(tǒng)中的朋友,可以用下面兩種方式。
固化內(nèi)核到EMMC文件系統(tǒng)
方法一:通過webserver傳輸目前Smart的內(nèi)核中,帶有webclien.elf程序,在電腦端可以建立一個webserver服務(wù)器,在板子上,執(zhí)行webclient.elf,可以直接訪問并下載對應(yīng)路徑下的內(nèi)核bin文件,然后在控制臺窗口,通過cp指令把新的內(nèi)核bin文件拷貝覆蓋到舊的內(nèi)核所在的路徑下即可。這種方式比較一勞永逸,但是,在本人實際測試過程中,webclient下載到的文件一直出錯,文件大小也不對。不知道是否是webclient.elf源碼有bug。該方法暫時記錄在此處,有興趣研究的朋友可以后續(xù)自行嘗試。 下面貼出我在電腦端建立建議websever的python指令:
1python-mhttp.server8080
方法二:通過sd傳輸除了web下載內(nèi)核bin文件到emmc上的文件系統(tǒng)中,還可以更簡單粗暴的通過sd卡把bin文件傳輸?shù)轿募到y(tǒng)中。該過程較為簡單,在系統(tǒng)控制臺界面,進(jìn)入sd卡的bin文件所在路徑,直接cp操作就ok。
這里需要記錄一下本人在使用SD卡時出現(xiàn)的小問題。當(dāng)前smart系統(tǒng)不支持sd卡的熱插拔檢測,所以,在系統(tǒng)運行時,拔掉sd卡,內(nèi)核會報rt_device相關(guān)的錯誤。其二是,在系統(tǒng)初始化打印信息的時候,每次都提示SD卡初始化失敗,但是進(jìn)入系統(tǒng)后,sd卡目錄又能正常訪問,不知道是不是系統(tǒng)bug,后續(xù)感興趣的朋友可以嘗試解決一下。
用戶態(tài)程序編譯
內(nèi)核的相關(guān)操作之后,就是用戶APP程序的相關(guān)操作介紹了。這一部分較為簡單,在ENV窗口下(確保已經(jīng)執(zhí)在根目錄下行過set RTT指令,并且檢查環(huán)境變量是正確的),進(jìn)入到如下路徑
1盤符:...ART-Pi-smart-masteruserapps
該路徑下apps文件夾下,存放的是用戶app的源文件,例如HELLO文件夾下,存放的就是輸出“hello world”的歷程源碼,在root/bin路徑下,存放的是用戶app對應(yīng)編譯生成的系統(tǒng)elf格式的可執(zhí)行文件。用戶APP程序構(gòu)建使用的是SCONS工具,該工具采用的python語言編寫,類似于Liunx下常用的的Cmake之類的工具,我們以官方hello程序為例,默認(rèn)scons構(gòu)建腳本已經(jīng)寫好,具體scons的操作方法,請參考前文提到的官網(wǎng)文檔,此處不贅述。此時在ENV界面下,輸入如下指令即可完成編輯和生成elf文件:
1scons--app=hello
編譯成功之后,會看到相應(yīng)的信息和生成的elf文件名稱,如果程序有語法錯誤,那么此處會有詳細(xì)的報錯。這里再本人測試使用中發(fā)現(xiàn)一個問題,當(dāng)前編譯檢查較為嚴(yán)格,移植之前自己寫的小例程,發(fā)現(xiàn)一些沒有調(diào)用的變量和函數(shù),統(tǒng)統(tǒng)會被視為錯誤,或者一些不是那么匹配的數(shù)據(jù)類型(如char到int之類的),也是直接全部報錯,而不是警告,這一點是可以修改編譯規(guī)則的,但是本人太熟悉對應(yīng)的腳本文件,所以暫時沒有處理,在次提出該問題,供后來朋友避坑。
用戶態(tài)程序下載運行
在sd卡運行
用戶程序生成的elf文件,在root/bin路徑下,拷貝該elf文件到sd卡,并且掛載sd卡到系統(tǒng)上,進(jìn)入到對應(yīng)目錄,即可運行用戶的應(yīng)用程序。這個方法對于需要反復(fù)調(diào)試的操作很不友好。所以更推薦下面這種做法。tftp方式運行
在群友@Red 的推薦下,本人測試了一款開源的tftp客戶端,名字叫做tftpxtftpx github倉庫鏈接
https://github.com/ideawu/tftpx/blob/master/client.c
它在開發(fā)板上運行之后,配合電腦端tftp服務(wù)器,即可下載對應(yīng)路徑下的elf文件到板子系統(tǒng)中去。電腦端推薦使用tftp64.exe這個軟件,按照要求建立好TFTP服務(wù)器,設(shè)置好IP和文件所在路徑,即可。然后通過SD卡,把tftpx.elf文件拷貝到板子系統(tǒng)root/bin路徑下,并且執(zhí)行,執(zhí)行格式如下:
1tftpx.elf192.168.1.1008080
此時只要網(wǎng)絡(luò)暢通,就會提示相應(yīng)的操作說明,我們可以輸入如下指令,來下載剛剛編譯好的hello.elf
用戶app。
1gethello.elf
下載完畢后退出,即可。本人把編譯好的tftpx.elf文件放在附件中,供有需要的朋友下載使用。如果您有更方便更高效的elf傳輸加載方式,也可回帖分享介紹哦。(●'?'●)
總結(jié)
rt-smart作為國產(chǎn)新一代操作系統(tǒng)。未來可期。在起步階段,能做到當(dāng)下的完成程度,實屬不易,任何一個做軟件開發(fā)的工程師,都能想象到這其中的艱辛和不易。在本次初步使用過程中,既體會到了RT系統(tǒng)高效精煉的特點,也發(fā)現(xiàn)了些許問題,在積極與群里各位大佬交流中,不僅解決了問題,還學(xué)到了很多其他方面的知識。我認(rèn)為這才是一種良心循環(huán)。作為一個開源系統(tǒng),衷心希望在@bernard 的帶領(lǐng)下,大家都多多參與進(jìn)來,貢獻(xiàn)自己微薄的力量,讓Smart在未來能以洪水之勢迅猛發(fā)展。最后,再次感謝RT官方提供的這次試用機(jī)會,感謝熊大@bernard 在半夜還在給大家解決問題.感謝@RT-Thread小師弟認(rèn)真負(fù)責(zé)的態(tài)度,在疫情期間保證了板子的順利發(fā)貨以及本活動的順利進(jìn)行。本人預(yù)計后續(xù)會陸續(xù)把最近在使用過程中的一些心得、程序設(shè)計等方面的感悟分享出來。作為該分享的第一篇,我想以詩人北島的詩《回答》中的幾句話,作為第一篇文章的結(jié)束;致代碼,致理想,致這個世界上每一個參與開源項目的蕓蕓碼農(nóng)。“如果海洋注定要決堤,
就讓所有的苦水都注入我心中,
如果陸地注定要上升,
就讓人類重新選擇生存的峰頂。
新的轉(zhuǎn)機(jī)和閃閃星斗,
正在綴滿沒有遮攔的天空。
那是五千年的象形文字,
那是未來人們凝視的眼睛?!?br /> ---北島《回答》節(jié)選
作者:RT-Thread社區(qū)成員RickFlying
原文標(biāo)題:RickFlying
文章出處:【微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
NXP
+關(guān)注
關(guān)注
61文章
1348瀏覽量
189416 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5682瀏覽量
104833 -
RT-Thread
+關(guān)注
關(guān)注
32文章
1409瀏覽量
41963
原文標(biāo)題:RickFlying
文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
ART-Pi Smart開發(fā)板開箱體驗
ART Pi Smart基于RT-Thread Smart系統(tǒng)的LVGL移植

評論