前言
最近在學習 RT-Smart ,正巧有在全志開發者論壇看到這么一篇帖子【驚】在麻雀上運行國產rt-smart系統,看到很多人都在關注 D1S 在 Smart 上的運行情況。如今該 BSP 已經合并到 RT-Smart 主倉庫,于是我來展示一下 D1S 運行 RT-Smart 的步驟,供大家參考~
做嵌入式開發的人對 RT-Thread 操作系統平臺應該都是非常熟悉的,而 RT-Thread Smart 是基于 RT-Thread 操作系統上的混合操作系統,簡稱為 rt-smart,它把應用從內核中獨立出來,形成獨立的用戶態應用程序,并具備獨立的地址空間。相比較于 linux 操作系統而言,RT-Thread Smart 是實時的操作系統。
環境及所需工具
軟件環境:
Ubuntu20.0.4
硬件環境:
全志F系列—D1s芯片
柿餅派M7
麻雀MQ
下載代碼
下載 RT-Smart 用戶態應用代碼:
gitclonehttps://github.com/RT-Thread/userapps.git
gitclone-brt-smarthttps://gitee.com/rtthread/rt-thread.git
配置工具鏈
在 userapps ools 目錄下運行 get_toolchain.py 的腳本,會下載對應的工具鏈并展開到 userapps oolsgun_gcc 目錄。后面的工具鏈名稱可以是 arm | riscv64。
因為 D1S 是 RISCV-64 架構的,所以輸入下面的命令:
python3get_toolchain.pyriscv64
在 userapps 目錄下,運行 smart-env.sh 配置工具鏈路徑,目前支持的參數可以是 arm | riscv64
sourcesmart-env.shriscv64
編譯內核程序
進入 rt-thread/bsp/allwinner/d1s 目錄下,執行以下命令拉取一下軟件包
注:若系統沒有安裝 env,需要手動輸入 scons --menuconfig 命令手動下載 env
source~/.env/env.sh
pkgs--update
使用 scons 命令進行編譯,編譯成功后會在 userapps/rt-thread/bsp/allwinner/d1s 目錄下生成 sd.bin,這個文件就是我們需要燒錄到開發板中的文件,它包括了 uboot.dtb,opensbi,rtthread.bin。
燒錄程序
接下來介紹兩種燒錄方式:
第一種針對使用 EMMC 啟動方式的 D1S,例:柿餅派M7
詳見:D1S/README.md 文檔中的 真實硬件環境搭建 章節。
第二種是針對使用 TF卡 作為啟動方式的開發板,例:麻雀 D1S
1、首先準備一張容量在 128G 以內的空白 TF卡
2、使用 fdisk 分區。將 TF卡 掛載到 ubuntu 系統后,使用 df 查看設備路徑。筆者使用的 32GB TF卡,扇區大小 512 字節,我們需要預留前 8M 的空間,那么計算得知分區扇區開始于:16384,使用命令:sudo fdisk /dev/sdb,選擇:o,n,p,1,16384,回車。
1Command(mforhelp):o
2
3CreatedanewDOSdisklabelwithdiskidentifier0x3668b987.
4
5Command(mforhelp):n
6
7Partitiontype
8
9pprimary(0primary,0extended,4free)
10
11eextended(containerforlogicalpartitions)
12
13Select(defaultp):p
14
15Partitionnumber(1-4,default1):1
16
17Firstsector(2048-62410751,default2048):16384
18
19Lastsector,+sectorsor+size{K,M,G,T,P}(16384-62410751,default62410751):
20
21Createdanewpartition1oftype'Linux'andofsize29.8GiB.
22
23Command(mforhelp):w
24
25Thepartitiontablehasbeenaltered.
正確的分區效果如下:
然后格式化 sdb1 分區為 fat32 格式:
1$sudomkfs-tfat/dev/sdb1
這里可以使用 Gparted 工具可視化查看一下分區狀況:
3、接下來使用以下命令燒錄 RT-SMART 內核:
1sudoddif=boot0_sdcard_sun20iw1p1_d1s.binof=/dev/sdbbs=1024seek=8
2
3sudoddif=sd.binof=/dev/sdbbs=1024seek=56
注:boot0_sdcard_sun20iw1p1_d1s.bin 文件在 userapps/rt-thread/bsp/allwinner/d1s/tools 路徑下
這里的 /dev/sdb 設備要根據自己的選擇
下面是燒錄成功的顯示:
啟動 RT-Smart
方式一(EMMC)啟動:
串口0 波特率 500000,然后上電即可。
方式二(TF 卡)啟動:
此時將 TF 卡放入開發板,串口0(底部排針的7,8腳),串口波特率 500000,然后上電,如下 RT-Smart 已經成功啟動!(真的快,啪的一下就進入系統了
1|/
2-RT-ThreadSmartOperatingSystem
3/|5.0.0buildNov12022
42006-2022Copyrightbyrt-threadteam
5lwIP-2.0.2initialized!
6hal_sdc_create0
7card_detectinsert
8Initialcardsuccess.capacity:30436MB
9sdmmcbytes_per_secotr:200,sectorcount:3b72400
10foundpart[0],begin:8388608,size:29.732GB
11foundpartition:sd0ofmbratoffset0000000000004000,size:0000000003b6e400
12hal_sdc_create1
13card_detectinsert
14Initialcardfailed!!
15[E/drv-sdmmc]initsdmmcfailed!
16[E/drv-sdmmc]sdmmc_initfailed!
17[I/sal.skt]SocketAbstractionLayerinitializesuccess.
18[D/FAL](fal_flash_init:47)Flashdevice|sdcard0|addr:0x00000000|len:0x76e480000|blk_size:0x00000200|initializedfinish.
19[I/FAL]====================FALpartitiontable====================
20[I/FAL]|name|flash_dev|offset|length|
21[I/FAL]-------------------------------------------------------------
22[I/FAL]|download|sdcard0|0x00800000|0x00800000|
23[I/FAL]|easyflash|sdcard0|0x01000000|0x00100000|
24[I/FAL]|filesystem|sdcard0|0x01100000|0x00c00000|
25[I/FAL]=============================================================
26[I/FAL]RT-ThreadFlashAbstractionLayerinitializesuccess.
27HelloRISC-V
28[W/DBG]disp:[parser_disp_init_para575]of_property_readscreen1_output_typefail
29msh/>Mount"sd0p0"on"/"success
30msh/>
編譯用戶態程序
進入 userapps 目錄下,使用 scons 編譯用戶態程序,編譯好的文件會生成在 root/bin 目錄下。
運行用戶態程序
從 root/bin 目錄下拷貝出祖傳 hello 程序,到 TF卡 的文件系統中。
拔出 TF 卡,插入到開發板,上電。即可體驗屬于自己的 helloworld 程序了。
1msh/bin>ls
2Directory/bin:
3dbkit_client.elf616960
4elmFATKit.elf373880
5em.elf585504
6hdc_test.elf339976
7hello.elf339624
8lvgl.elf1382168
9lwIPKit.elf976784
10mmapctrl.elf339976
11ntp.elf363560
12ping.elf344208
13pmq.elf345176
14pong.elf339624
15syslog.elf364736
16syslogd.elf377560
17vi.elf446568
18webclient.elf358048
19msh/bin>
20msh/bin>hello.elf
21msh/bin>helloworld!
Q&A
Q:不小心把 TF 卡分區燒錄錯了/如何格式化分區?
A:首先使用 sudo fdisk /dev/sdX 命令,輸入 p ,查看 SD卡 現有分區,如下圖該 SD卡有一個分區。
然后輸入 d,刪除這個分區。
使用 sudo fdisk -l 查看SD卡分區情況,可以看到已經沒有分區了,接著按照教程方式重新制作分區即可。
更多 QA 可詳見:D1S/README.md 文檔中的 QA 章節。
版權聲明:本文為RT-Thread論壇用戶「Rb君」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:
https://club.rt-thread.org/ask/article/c0609a2215117c31.html
END
2022RDC RT-Thread開發者大會
一年一度的 RDC RT-Thread 開發者大會正式啟動報名,本屆大會以 "聚勢而強,乘勢而上" 為主題,并將于 2022年12月25日在上海麗昂豪生大酒店舉行。
立即掃碼報名
你可以添加微信17775983565為好友,注明:公司+姓名,拉進RT-Thread官方微信交流群!
愛我就給我點在看
點擊閱讀原文進入論壇
原文標題:優雅的在D1S上運行RT-Smart
文章出處:【微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。
-
RT-Thread
+關注
關注
31文章
1239瀏覽量
39438
原文標題:優雅的在D1S上運行RT-Smart
文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論