女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

如何在龍芯2K上運行RT-Thread系統(tǒng)并開源

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 作者:RTThread物聯(lián)網(wǎng)操作 ? 2020-12-29 09:11 ? 次閱讀

項目信息

項目名稱:龍芯2K上的RT-Thread系統(tǒng)
學生姓名:李志銳
學校:聊城大學
方案描述:該項目要求首先實現(xiàn)RT-Thread項目到龍芯2K平臺上的MMU移植,并實現(xiàn)GMAC及SATA/SSD驅動,同時要對接FAT文件系統(tǒng)以及網(wǎng)絡協(xié)議棧。

時間規(guī)劃:

8549ab12-48cf-11eb-8b86-12bb97331649.png

初衷

我從去年開始關注操作系統(tǒng)的領域,由于興趣的緣故,在去年11月自己研究學習了RISC-V架構并在以RocketChip為核心的K210芯片上重實現(xiàn)了,這也是我第一次在于系統(tǒng)內(nèi)核保持近距離的情況下對內(nèi)核進行研究學習,并因此獲得了對于包括上下文切換、系統(tǒng)調用過程等的較深的理解,同時也是第一次接觸支持MMU的非x86架構處理器,RISC-V給我的感覺就是:沒有x86架構繁瑣的分段機制(這是x86歷史原因造成的),同時其硬件頁表機制與現(xiàn)代操作系統(tǒng)契合度高。

今年4月,我了解到了RT-Thread,并提前上手試著將RT-Thread移植到了CK810架構的qemu虛擬機上,RT-Thread的源代碼整體而言給我的感受就是代碼風格的一致性,并且其注釋也比較豐富,同時有完善的文檔支持,這對我的移植起到了不小的輔助。在這次移植工作中,我第一次接觸了Scons,個人感覺相比Makefile,基于Python的Scons構建工具更加方便也更加靈活。

在完成了上述的移植工作后,我參與到了RT-Thread Smart到CK810架構的移植項目之中,RT-Thread Smart給我的感覺就是,相比于公開版的RT-Thread,其功能要強大的多,很多特性更逼近Linux,其強大的用戶態(tài)支持更是吸引了我。 今年6月,我獲知了中科院軟件所的開源軟件計劃,同時了解到RT-Thread社區(qū)在該計劃中擁有一個名為“龍芯2K上的RT-Thread系統(tǒng)”的項目,該項目要求實現(xiàn)公開版RT-Thread在龍芯2K平臺上對SATA/SSD驅動的支持,同時對接FAT文件系統(tǒng),同時要對接網(wǎng)絡協(xié)議棧。同期我也參加了RT-Thread Smart到龍芯2K平臺的適配項目,即要實現(xiàn)MMU等相關特性的適配。

龍芯平臺對我而言比較陌生,之前我僅僅是聽說過龍芯的大名,而龍芯平臺所使用的mips指令集我也比較陌生,SATA控制器和GMAC更是從未接觸過,但是我比較喜歡有一定挑戰(zhàn)性的任務,同時對這些東西也比較有興趣,因此我就接下了。

過程

7月份,當我獲知我中選之后,我就正式開始了項目開發(fā)工作:首先我選擇先實現(xiàn)RT-Thread Smart的龍芯適配工作。一開始我剛拿到龍芯2K的開發(fā)板,就迫不及待地接上顯示器和鍵盤鼠標先上電看一看龍芯自己的Linux系統(tǒng),結果一進桌面處理器就直接掉電復位。經(jīng)過排查發(fā)現(xiàn),我所用的電源適配器和供電線都不達標,最終去買了一個比較好的適配器和一根比較粗的供電線之后,成功將龍芯Linux啟動了起來。

我在閱讀了龍芯教育派的使用手冊之后,了解到龍芯啟動時先啟動pmon,再由pmon引導SSD中的系統(tǒng),pmon比較類似于現(xiàn)代PC機的bios。緊接著我就考慮該如何調試RT-Thread,在翻閱了pmon的相關說明文檔中之后,我了解到pmon支持tftp引導啟動,因此我進入pmon的配置程序,設置了默認的網(wǎng)卡參數(shù),同時在我的PC機上配置了tftp服務端,在路由器中將PC機的IP固定下來,然后進入龍芯Linux,修改了boot.cfg,加入了tftp的啟動引導選項,并設為默認啟動項。

緊接著,我在Windows下配置了完整的編譯工具鏈,并利用Vmware配置了一臺裝有Ubuntu16.04 x64的虛擬機,在虛擬機中編譯安裝龍芯2K的qemu著實花了我一天時間,不過最終成功完成了配置工作,由于RT-Thread的公開版已經(jīng)完成了龍芯2K的基本適配工作,因此我將該鏡像進行編譯同時利用該鏡像測試了qemu,一切正常。

由于我平時在Windows下利用VSCode開發(fā),在Linux下利用qemu仿真調試RT-Thread,各種命令比較多,敲起來也比較復雜,因此將Windows下的RT-Thread鏡像輸出目錄映射到了虛擬機內(nèi),我在Linux利用Python開發(fā)了一個qemu監(jiān)控端,同時在Windows下利用C#開發(fā)了一個控制Linux下qemu監(jiān)控端的客戶端程序,利用該客戶端程序,可以實現(xiàn)內(nèi)核一鍵編譯、一鍵啟動gdb仿真(即首先通知Linux下的qemu監(jiān)控程序啟動qemu,然后在Windows下啟動gdb并自動建立連接,在入口點斷下,然后可以自動執(zhí)行預先在文本框中設置好的一系列調試命令)。

由于musl libc庫的mips64的系統(tǒng)調用接口和crt接口已經(jīng)預先被配置好,因此我直接對libc庫進行了編譯,然后對用戶程序進行了編譯,并生成了ROM,我在RT-Thread Smart將公開版的龍芯2K啟動代碼、上下文切換代碼、中斷控制器代碼和串口控制器代碼先移植了進去,花了一點時間通過了編譯,然后利用qemu進行調試,形成了初步的程序框架,然后在main.c中構建了一些mmu的測試用例,對龍芯2K的MMU展開了一系列測試,并最終完成了全部測試工作。

形成了mips_mmu.c/.h,緊接著我開始試著啟動hello.elf程序,發(fā)現(xiàn)系統(tǒng)無反應,經(jīng)過跟蹤發(fā)現(xiàn),RT-Thread Smart默認使用的ELF32模型,我將其改成了ELF64模型,同時對接了內(nèi)核syscall接口,也對接了lwp用戶態(tài)的相關接口,為每個線程創(chuàng)建了獨立的異常棧和系統(tǒng)調用棧,同時在上下文切換代碼中實現(xiàn)了頁表的切換,并最終實現(xiàn)了hello world的輸出。

我在調試ping/pong程序的時候,發(fā)現(xiàn)龍芯2K的qemu源代碼中存在一個BUG:Config4寄存器未初始化導致無法使用KScratch1/2寄存器,我將其修正并進行了提交,最終ping/pong程序也調試通過。

實現(xiàn)signal支持我花了比較長的時間,這也是第一次接觸signal這個概念——用戶態(tài)模擬的中斷,在進入用戶態(tài)的信號處理程序之前,我將上下文保存在了用戶上下文中,由于這涉及到用戶態(tài)虛擬地址的訪問,在上下文保存過程中可能會發(fā)生tlb miss從而導致epc被毀,因此這里我也做了特殊處理,最終usersignal.elf也測試通過,在usersignal.elf的調試過程中,我還遇到了一個問題:線程執(zhí)行的時候堆棧錯誤,最終獲知我要在用戶態(tài)的線程創(chuàng)建syscall中為線程獨立分配堆棧,同時要在線程堆棧中放置一段讓線程退出的trap代碼,將lr指向這里,從而讓線程執(zhí)行時擁有獨立堆棧并在執(zhí)行完后順利返回系統(tǒng)并清理線程運行環(huán)境。

在上述工作全部完成后,我開始嘗試在實機運行,結果一運行用戶程序就報錯了,經(jīng)過詢問龍芯相關技術人員得知,由于Cache重影的問題,龍芯不支持4K頁,最少要使用16K頁,于是我花了一晚上進行修改,并在第二天實現(xiàn)了實機的完美運行,此時已經(jīng)到了7月25日。然后我在公開版的RT-Thread中加入了一條mmu_test命令,并放置了一個簡單的mmu測試用例,提交到了點亮計劃提供的gitlab中。

然后我開始實現(xiàn)RT-Thread公開版上gmac驅動和lwip協(xié)議棧的適配,這部分工作必須完全在實機上完成,而我從龍芯手冊上只發(fā)現(xiàn)了GMAC的PCI頭,經(jīng)過一些資料的閱讀,我對PCI總線有了基本的認識,獲取到了BAR,經(jīng)過多方打聽和實驗,我獲知龍芯2K1000采用的GMAC是Synopsys的標準核,于是我下載了Synopsys Ethernet 3.50a版本的手冊,進行了閱讀,了解到gmac是一種數(shù)據(jù)鏈路層的器件,負責幀的收發(fā),我根據(jù)手冊的寄存器說明讀出了龍芯2K1000的GMAC IP核的版本號,發(fā)現(xiàn)與手冊的版本差異不是太大。

于是我就按照手冊的要求開始進行調試,我將RT-Thread中l(wèi)s1c的gmac驅動直接拷貝了過來,替換了寄存器起始地址,同時對接了一些Cache相關的接口,同時我選擇了lwip 2.0.2進行移植,由于驅動和lwip原先是在32位環(huán)境下工作,其中有大量硬編碼的地址類型轉換,因此出現(xiàn)了很多兼容性問題,我進行了逐一修改,終于,鏈路層握手成功,但是DHCP死活無法握手,我嘗試使用Wireshark進行抓包,也一無所獲,沒有獲取到任何數(shù)據(jù)包,我開始對照數(shù)據(jù)手冊分析DMA的發(fā)送列表和接收列表,發(fā)現(xiàn)其列表是連續(xù)環(huán)形方式構建的。

但是鏈表到處亂跳,根本不遵循手冊,經(jīng)過幾天的調試我一無所獲,后來我獲知龍芯的GMAC的DMA也是通過Cache讀取內(nèi)存,因此我就把一些Cache相關地址轉換功能去掉了,但是依然不工作,后來我偶爾在數(shù)據(jù)手冊中發(fā)現(xiàn)了Enhanced Descriptor,于是我將驅動程序轉為增強描述符運行模式,緊接著我就在wireshark中抓到了數(shù)據(jù)包,其發(fā)送列表和接收列表也完全正常工作了,我對細節(jié)進行一些調試后,DHCP就正常完成了握手工作,同時ping操作也可以正常執(zhí)行了,經(jīng)過長達10個小時的ping命令運行,證明其可以正常工作,這部分工作我在8月11日成功完成。

緊接著我撰寫了中期報告并通過了中期考核,緊接著我開始寫SATA控制器驅動,這部分比較順利,我閱讀了Synopsys的標準AHSATA控制器的手冊,發(fā)現(xiàn)其和龍芯2K的寄存器定義完全一致,由此證明其使用的又是Synopsys的標準IP核,然后我將uboot的AHSATA驅動移植了過來,在移植過程中,我注意到其中有大量的源代碼文件,經(jīng)過篩選,我逐漸知道了AHSATA和SATA并不是一種東西AHSATA指的是AHCI + SATA,獲得了正確的驅動后,讀出了AHSATA控制器的BAR并替換進源代碼,同時處理好64位運行環(huán)境的兼容問題后,SSD的MBR就被我完整讀出了。

原定計劃是移植FAT文件系統(tǒng),但是我注意到龍芯2K的pmon依賴Linux根文件系統(tǒng)下的boot.cfg引導文件,并且其中的龍芯Linux也不想破壞掉,因此最終改為移植lwext4,其支持ext2/3/4文件系統(tǒng),其移植過程比較順利,同時我還加入了mbr的解析支持,從而支持了多分區(qū)掛載,最終在8月19日,我完成了全部的工作,并于后來撰寫了結題報告,通過了結題考核。

心得體會

本次項目我提前一個半月完成,整體而言,經(jīng)歷了這次項目,我獲得了大量操作系統(tǒng)方面的相關開發(fā)經(jīng)驗,接觸到了signal機制,同時理解了GMAC與SATA控制器,對之前所學的大量知識有了更深入的理解,最重要的是,我也獲得了一些閱讀他人代碼和大型工程代碼的經(jīng)驗,也結識了很多圈子內(nèi)的大佬,獲得了更多的機會,同時也獲得了更多操作系統(tǒng)方面的最新和最前沿信息。

對RT-Thread的感受

首先,相較于傳統(tǒng)的RTOS,公開版RT-Thread提供了更豐富的調度機制、組件機制以及驅動模型,其次,RT-Thread Smart提供了更完整的用戶態(tài)支持,同時與傳統(tǒng)的RTOS最大的不同在于,可以加載來自文件系統(tǒng)中的elf文件,我認為,若加入網(wǎng)絡文件系統(tǒng)支持,便可以執(zhí)行存儲于網(wǎng)絡中來自任意一臺嵌入式設備中的可執(zhí)行文件,這種高度自由的特性非常適應如今的物聯(lián)網(wǎng)場景。我認為RT-Thread屬于類Unix系統(tǒng)。

其高度可定制化的特性、對多平臺的兼容性以及對硬件的低要求,促使其可以快速地適應多種應用場合,并快速切入市場,同時也是一個比較成型的國產(chǎn)操作系統(tǒng),讓國家的國產(chǎn)化進程更向前了一步,比較適合IoT領域,甚至有切入智能手持設備和桌面平臺的潛力,整體而言,這是一個極具發(fā)展?jié)摿Φ膰a(chǎn)操作系統(tǒng),我比較看好其未來的發(fā)展趨勢。

責任編輯:xj

原文標題:經(jīng)驗分享|在龍芯2K上運行RT-Thread系統(tǒng)并開源

文章出處:【微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關注!文章轉載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 龍芯
    +關注

    關注

    3

    文章

    370

    瀏覽量

    31784
  • 開源
    +關注

    關注

    3

    文章

    3616

    瀏覽量

    43498
  • RT-Thread
    +關注

    關注

    32

    文章

    1371

    瀏覽量

    41533

原文標題:經(jīng)驗分享|在龍芯2K上運行RT-Thread系統(tǒng)并開源

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    RT-Thread審核團招募: 深度參與開源RTOS社區(qū)治理與演進

    開源實時操作系統(tǒng),正持續(xù)優(yōu)化社區(qū)協(xié)作流程,現(xiàn)面向全球開發(fā)者招募審核團(ReviewTeam)成員,共同維護代碼質量,推動RT-Thread生態(tài)繁榮發(fā)展!什么是RT
    的頭像 發(fā)表于 05-21 18:02 ?474次閱讀
    <b class='flag-5'>RT-Thread</b>審核團招募: 深度參與<b class='flag-5'>開源</b>RTOS社區(qū)治理與演進

    如何將RT-Thread移植到NXP MCUXPressoIDE

    RT-Thread默認支持的IDE只有IAR 和 Keil, 那如何將RT-Thread移植到NXP MCUXPressoIDE呢?本文內(nèi)容比較簡單但稍有瑣碎,希望對有需要的小伙伴有所幫助。
    的頭像 發(fā)表于 02-13 10:37 ?1750次閱讀
    如何將<b class='flag-5'>RT-Thread</b>移植到NXP MCUXPressoIDE<b class='flag-5'>上</b>

    RT-Smart首次線下培訓,鎖定2024 RT-Thread開發(fā)者大會!

    2024年RT-Thread開發(fā)者大會將于12月21日正式拉開帷幕!本次大會以“開源共生商業(yè)共贏”為主題,RT-Thread將攜手合作伙伴、客戶伙伴、行業(yè)專家,以及全球開發(fā)者,共同探索如何在
    的頭像 發(fā)表于 12-11 18:41 ?1488次閱讀
    <b class='flag-5'>RT</b>-Smart首次線下培訓,鎖定2024 <b class='flag-5'>RT-Thread</b>開發(fā)者大會!

    開源中來到開源中去-RT-Thread北京社區(qū)篇

    RT-Thread今年全域推行不同區(qū)域社區(qū)網(wǎng),通過建立區(qū)域社區(qū)網(wǎng),構建更加緊密聯(lián)系的開源社區(qū),實現(xiàn)更廣泛的開源資源共享,讓更多的RT-Thread開發(fā)者受益。今年8月份
    的頭像 發(fā)表于 11-29 01:05 ?409次閱讀
    從<b class='flag-5'>開源</b>中來到<b class='flag-5'>開源</b>中去-<b class='flag-5'>RT-Thread</b>北京社區(qū)篇

    【S32K146 RT-Thread】之 使用SFUD組件驅動spi flash

    【S32K146 RT-Thread】之 使用SFUD組件驅動spi flash
    的頭像 發(fā)表于 11-21 01:05 ?994次閱讀
    【S32<b class='flag-5'>K</b>146 <b class='flag-5'>RT-Thread</b>】之 使用SFUD組件驅動spi flash

    RT-ThreadCAN實踐

    開箱測試RT-Thread官方已完成了對英飛凌XMC7200EVK的移植,通過shell可以看到做好了uart3的console。本文將介紹如何進行RT-ThreadCan移植。接下來我們要完成CAN_FD的驅動移植,正常啟動
    的頭像 發(fā)表于 11-13 01:03 ?1920次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>上</b>CAN實踐

    混合部署 | 在迅為RK3568同時部署RT-Thread和Linux系統(tǒng)

    系統(tǒng)RT-Thread系統(tǒng)已經(jīng)同時運行了,其中CPU0、CPU1、CPU2運行Linux
    發(fā)表于 11-01 10:31

    開源共生 商業(yè)共贏 | RT-Thread 2024開發(fā)者大會報名啟動!

    開發(fā)者大會將以“開源共生,商業(yè)共贏”為主題,將于2024年12月21日全天在上海臨港中心舉行。開源RT-Thread如何實現(xiàn)商業(yè)化?這一直是外界對RT-Thread
    的頭像 發(fā)表于 10-29 08:06 ?867次閱讀
    <b class='flag-5'>開源</b>共生 商業(yè)共贏 | <b class='flag-5'>RT-Thread</b> 2024開發(fā)者大會報名啟動!

    睿賽德科技正式推出RT-Thread開源 4+服務,助力企業(yè)用戶發(fā)展

    RT-Thread始于2006年,是100%由中國開發(fā)者編寫的開源嵌入式操作系統(tǒng)。經(jīng)過10多年的發(fā)展,已經(jīng)成為國內(nèi)最流行的嵌入式操作系統(tǒng),廣泛應用于工業(yè)、電力、軌道交通、智慧城市、智能
    的頭像 發(fā)表于 10-15 08:07 ?695次閱讀
    睿賽德科技正式推出<b class='flag-5'>RT-Thread</b><b class='flag-5'>開源</b> 4+服務,助力企業(yè)用戶發(fā)展

    混合部署 | 在迅為RK3568同時部署RT-Thread和Linux系統(tǒng)

    RT-Thread系統(tǒng)已經(jīng)同時運行了,其中CPU0、CPU1、CPU2運行Linux系統(tǒng),CP
    發(fā)表于 09-18 10:54

    何在RT-thread studio的裸機例程移植freertos?

    何在RT-thread studio的裸機例程移植freertos
    發(fā)表于 09-13 06:32

    【QEMU系列】不用開發(fā)板運行RT-Thread指南-ARM架構

    成為一個門檻。本文將詳細介紹如何在QEMU虛擬機的Vexpress-A9平臺運行RT-Thread,幫助開發(fā)者在沒有實際硬件開發(fā)板的情況下,輕松體驗和學習
    的頭像 發(fā)表于 08-09 08:35 ?1458次閱讀
    【QEMU系列】不用開發(fā)板<b class='flag-5'>運行</b><b class='flag-5'>RT-Thread</b>指南-ARM架構

    RT-Thread內(nèi)部機制大揭秘,帶你深入操作系統(tǒng)內(nèi)核

    一、RT-Thread概述RT-Thread是一款具有顯著優(yōu)勢的開源嵌入式實時操作系統(tǒng)。它不僅具備輕量級、實時性強的特點,還擁有廣泛的開源
    的頭像 發(fā)表于 08-01 08:11 ?4894次閱讀
    <b class='flag-5'>RT-Thread</b>內(nèi)部機制大揭秘,帶你深入操作<b class='flag-5'>系統(tǒng)</b>內(nèi)核

    RT-Thread 新里程碑達成——GitHub Star 破萬!

    RT-Thread實時操作系統(tǒng)開源項目在GitHub的star數(shù)量突破一萬!截止發(fā)文,RT-Thread作為實時操作
    的頭像 發(fā)表于 07-04 08:35 ?712次閱讀
    <b class='flag-5'>RT-Thread</b> 新里程碑達成——GitHub Star 破萬!

    基于 RT-Thread專業(yè)版的EtherCAT主站方案

    特點。在RT-Thread實時操作系統(tǒng)運行EtherCAT主站協(xié)議,大大提高了實時性,極大降低了循環(huán)同步抖動時間,可滿足各種對實時性要求苛刻的應用場景。以下是在瑞
    的頭像 發(fā)表于 06-19 08:35 ?1701次閱讀
    基于 <b class='flag-5'>RT-Thread</b>專業(yè)版的EtherCAT主站方案