ART-PI Smart 開發板介紹
art-pi smart 是rt-thread公司推出的一款基于NXP公司imx6ull處理器的開發板,主要用來測試評估RT公司去年新發布的混合微內核操作系統RT-Smart。
RT-Thread Smart(簡稱 rt-smart)嵌入式實時操作系統是基于 RT-Thread 操作系統衍生的新分支,面向帶 MMU,中高端應用的芯片,例如 ARM Cortex-A 系列芯片,MIPS 芯片,帶 MMU 的 RISC-V 芯片等。rt-smart 在 RT-Thread 操作系統的基礎上啟用獨立、完整的進程方式,同時以混合微內核模式執行。
rt-smart 是一款高性能混合微內核操作系統,在傳統嵌入式操作系統劃分中,rt-smart 能夠填補傳統 RTOS 和大型操作系統 Linux 之間的空白,在實時性、成本、安全性、啟動速度等方面可以取得最佳的平衡。
開發環境的建立
下載RT-Smart SDK
RT官方針對ART-PI Smart開發板提供了完整的SDK開發包,該SDK有完整的bsp支持,并且有詳細的readme文件作為離線參考,在進行開發之前,先從gittee上獲取該sdk完整的文件(本人電腦離線使用居多,所以簡單粗暴直接從gittee上下載zip本地解壓即可)。這里需要注意一下,因為后續本人選擇的是scons構建工具通過ENV命令行窗口來進行構建,所以SDK放置的目錄一定不要有中文(任何開發設計工作,都不要出現中文路徑,這是個好習慣)。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目錄結構:
如下圖所示,是開發板控制臺界面下smart系統目錄結構,具體開發板上電鏈接流程請參考官方文檔,此處不贅述。需要注意的是,電腦上要提前安裝cp210x的驅動。
安裝ENV和SCONS構建工具
Env 是 RT-Thread 推出的開發輔助工具,針對基于 RT-Thread 操作系統的項目工程,提供編譯構建環境、圖形化系統配置及軟件包管理功能。其內置的 menuconfig 提供了簡單易用的配置剪裁工具,可對內核、組件和軟件包進行自由裁剪,使系統以搭積木的方式進行構建。主要特性
menuconfig 圖形化配置界面,交互性好,操作邏輯強;- 豐富的文字幫助說明,配置無需查閱文檔;
- 使用靈活,自動處理依賴,功能開關徹底;
- 自動生成 rtconfig.h,無需手動修改;
- 使用scons工具生成工程,提供編譯環境,操作簡單;
- 提供多種軟件包,模塊化軟件包耦合關聯少,可維護性好;
- 軟件包可在線下載,軟件包持續集成,包可靠性高;
-
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
安裝對應系統下的編譯工具鏈
ART-PT Smart可以在windows下開發,也可以在Linux環境下開發,本人選擇了日常熟悉的windows環境開部署相關的編譯工具鏈,也方便后續新上手的朋友們快速熟悉。在解壓好的SDK根目錄下,找到toos文件夾,進去之后,在tools文件夾下,打開ENV窗口,輸入指令
1pythonget_toolchain.py
在主機保證聯網的前提下,該腳本會自動識別用戶當前的開發環境,自動安裝相匹配的編譯工具鏈安裝完畢之后,在ENV命令行界面,輸入如下指令,查看工具鏈是否安裝正確:
1arm-linux-musleabi-gcc-v
出現如下內容代表工具鏈已經自動安裝好:
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工具,然后輸入執行:
1smart-env.bat
該操作是在進一步開發前先設置好環境變量(rt-smart 工具鏈、編譯器等),輸入如下指令,查看環境變量是否生效:
1setRTT
如果生效,則會顯示如下信息,否則請檢sdk相關查路徑是否有中文,或者工具鏈沒有安裝等。
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
(注意:后續每次打開ENV工具進行scons之類的操作,都必須線設置該環境變量,否則后續編譯構建將會報錯!)
構建和編譯內核
內核裁剪與構建
進入到SDK根目錄下,然后依次進入到ART-PI Smart BSP所在的目錄下,例如:
1盤符:..ART-Pi-smart-masterkernelspimx6ull-artpi-smart
在該目錄下,打開ENV命令行窗口,輸入指令:
1menuconfig
則ENV窗口會自動彈出內核的圖形配置界面,如下圖所示:
1scons
該編譯指令其實還可以配合其他參數一起使用,具體細節請參考前文提到的官方SCONS用戶手冊。
新內核的更新方式
在bsp目錄下,scons成功之后,將會生成內核的可執行文件,分別是:
1rtthread.bin
2rtthread.elf
3rtthread.imx
4rtthread.img
運行新的內核,本文只用到了以上兩種文件格式,分別是imx和bin格式的內核文件。
單次運行新內核
通過開發板網絡接口,可以傳輸內核文件到開發板并且執行,檢測內核當前運行情況。同時也可以利用開發板上第二個usb接口,通過上位機軟件加載啟動內核。這兩種方式在官方手冊里介紹的較為詳細,本文不再贅述。請參考前文給出的官方鏈接。在這里提及這種方式,主要是想引出一個自己遇到的問題,本人手中的板子,emmc文件系統上的內核文件版本較老,網絡IP不能靜態設置,只能DHCP動態分配,而我身邊恰好沒有路由器,更新之后內核用到官方的方式加載運行之后,可以正常設置靜態IP,但是復位之后,系統內核又回到舊的版本,也就是說,上面提到的官方示例的加載運行方式是把內核文件加載到RAM種運行了,所以,如果跟我一樣有需要把內核文件上傳到emmc的文件系統中的朋友,可以用下面兩種方式。
固化內核到EMMC文件系統
方法一:通過webserver傳輸目前Smart的內核中,帶有webclien.elf程序,在電腦端可以建立一個webserver服務器,在板子上,執行webclient.elf,可以直接訪問并下載對應路徑下的內核bin文件,然后在控制臺窗口,通過cp指令把新的內核bin文件拷貝覆蓋到舊的內核所在的路徑下即可。這種方式比較一勞永逸,但是,在本人實際測試過程中,webclient下載到的文件一直出錯,文件大小也不對。不知道是否是webclient.elf源碼有bug。該方法暫時記錄在此處,有興趣研究的朋友可以后續自行嘗試。 下面貼出我在電腦端建立建議websever的python指令:
1python-mhttp.server8080
方法二:通過sd傳輸除了web下載內核bin文件到emmc上的文件系統中,還可以更簡單粗暴的通過sd卡把bin文件傳輸到文件系統中。該過程較為簡單,在系統控制臺界面,進入sd卡的bin文件所在路徑,直接cp操作就ok。
這里需要記錄一下本人在使用SD卡時出現的小問題。當前smart系統不支持sd卡的熱插拔檢測,所以,在系統運行時,拔掉sd卡,內核會報rt_device相關的錯誤。其二是,在系統初始化打印信息的時候,每次都提示SD卡初始化失敗,但是進入系統后,sd卡目錄又能正常訪問,不知道是不是系統bug,后續感興趣的朋友可以嘗試解決一下。
用戶態程序編譯
內核的相關操作之后,就是用戶APP程序的相關操作介紹了。這一部分較為簡單,在ENV窗口下(確保已經執在根目錄下行過set RTT指令,并且檢查環境變量是正確的),進入到如下路徑
1盤符:...ART-Pi-smart-masteruserapps
該路徑下apps文件夾下,存放的是用戶app的源文件,例如HELLO文件夾下,存放的就是輸出“hello world”的歷程源碼,在root/bin路徑下,存放的是用戶app對應編譯生成的系統elf格式的可執行文件。用戶APP程序構建使用的是SCONS工具,該工具采用的python語言編寫,類似于Liunx下常用的的Cmake之類的工具,我們以官方hello程序為例,默認scons構建腳本已經寫好,具體scons的操作方法,請參考前文提到的官網文檔,此處不贅述。此時在ENV界面下,輸入如下指令即可完成編輯和生成elf文件:
1scons--app=hello
編譯成功之后,會看到相應的信息和生成的elf文件名稱,如果程序有語法錯誤,那么此處會有詳細的報錯。這里再本人測試使用中發現一個問題,當前編譯檢查較為嚴格,移植之前自己寫的小例程,發現一些沒有調用的變量和函數,統統會被視為錯誤,或者一些不是那么匹配的數據類型(如char到int之類的),也是直接全部報錯,而不是警告,這一點是可以修改編譯規則的,但是本人太熟悉對應的腳本文件,所以暫時沒有處理,在次提出該問題,供后來朋友避坑。
用戶態程序下載運行
在sd卡運行
用戶程序生成的elf文件,在root/bin路徑下,拷貝該elf文件到sd卡,并且掛載sd卡到系統上,進入到對應目錄,即可運行用戶的應用程序。這個方法對于需要反復調試的操作很不友好。所以更推薦下面這種做法。tftp方式運行
在群友@Red 的推薦下,本人測試了一款開源的tftp客戶端,名字叫做tftpxtftpx github倉庫鏈接
https://github.com/ideawu/tftpx/blob/master/client.c
它在開發板上運行之后,配合電腦端tftp服務器,即可下載對應路徑下的elf文件到板子系統中去。電腦端推薦使用tftp64.exe這個軟件,按照要求建立好TFTP服務器,設置好IP和文件所在路徑,即可。然后通過SD卡,把tftpx.elf文件拷貝到板子系統root/bin路徑下,并且執行,執行格式如下:
1tftpx.elf192.168.1.1008080
此時只要網絡暢通,就會提示相應的操作說明,我們可以輸入如下指令,來下載剛剛編譯好的hello.elf
用戶app。
1gethello.elf
下載完畢后退出,即可。本人把編譯好的tftpx.elf文件放在附件中,供有需要的朋友下載使用。如果您有更方便更高效的elf傳輸加載方式,也可回帖分享介紹哦。(●'?'●)
總結
rt-smart作為國產新一代操作系統。未來可期。在起步階段,能做到當下的完成程度,實屬不易,任何一個做軟件開發的工程師,都能想象到這其中的艱辛和不易。在本次初步使用過程中,既體會到了RT系統高效精煉的特點,也發現了些許問題,在積極與群里各位大佬交流中,不僅解決了問題,還學到了很多其他方面的知識。我認為這才是一種良心循環。作為一個開源系統,衷心希望在@bernard 的帶領下,大家都多多參與進來,貢獻自己微薄的力量,讓Smart在未來能以洪水之勢迅猛發展。最后,再次感謝RT官方提供的這次試用機會,感謝熊大@bernard 在半夜還在給大家解決問題.感謝@RT-Thread小師弟認真負責的態度,在疫情期間保證了板子的順利發貨以及本活動的順利進行。本人預計后續會陸續把最近在使用過程中的一些心得、程序設計等方面的感悟分享出來。作為該分享的第一篇,我想以詩人北島的詩《回答》中的幾句話,作為第一篇文章的結束;致代碼,致理想,致這個世界上每一個參與開源項目的蕓蕓碼農。“如果海洋注定要決堤,
就讓所有的苦水都注入我心中,
如果陸地注定要上升,
就讓人類重新選擇生存的峰頂。
新的轉機和閃閃星斗,
正在綴滿沒有遮攔的天空。
那是五千年的象形文字,
那是未來人們凝視的眼睛。”
---北島《回答》節選
作者:RT-Thread社區成員RickFlying
原文標題:RickFlying
文章出處:【微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。
-
NXP
+關注
關注
60文章
1243瀏覽量
181455 -
開發板
+關注
關注
25文章
4766瀏覽量
96149 -
RT-Thread
+關注
關注
31文章
1238瀏覽量
39424
原文標題:RickFlying
文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論