在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

OneOS的BSP移植: 1、學習和理解OneOS的啟動流程

死龍的RTOS研究室 ? 來源: 死龍的RTOS研究室 ? 作者: 死龍的RTOS研究室 ? 2022-08-16 10:23 ? 次閱讀

前言

很多同學都問過這個問題,移植RTOS到一個開發板上,難么?需要學習哪些知識? 從我學習國內常見的RTOS,以及一些構建系統的經驗上看。真正要做移植的工作,需要的知識范圍還是非常廣泛的。

1. 理解這個RTOS的系統源碼目錄組成,源碼層級結構(需要知道廠家SDK放哪里,系統層的Driver驅動,板級配置目錄,工程模板目錄)
2. 理解構建系統(需要知道對應的RTOS所使用的構建系統相關配置,清楚板級的宏定義開關在哪里設置,RTOS配置,以及c文件和h文件如何添加)
3. 理解RTOS的啟動流程(萬一移植后編譯成功,但是無法運行系統時,要清楚如何調試,找到問題點)
4. 理解所移植的MCU的系統時鐘配置,外設配置等等內容
5. 理解RTOS的系統調度和內存管理(萬一無法運行系統,不清楚這些就不能調試)
6. 熟悉調試工具(不管是什么IDE,什么link,都需要熟悉至少一種自己常用的)

個人覺得,移植RTOS其實是一個非常嚴謹的工作,需要的知識除了上面列舉的這些,當然越多越好。有興趣移植的話,建議先把調試工具,RTOS的系統調度、內存管理和啟動流程先給熟悉了,否則一旦碰到問題就不知道自己錯在哪里。

為什么我要先過一遍OneOS的啟動流程

首先我對RTOS的基礎知識還是有一些的,其次也比較熟悉OneOS的目錄結構和系統結構,對構建系統也稍微有一些了解(非常不喜歡Scons,但是沒辦法,OneOS沒有別的構建方式)。 由于長期沒有玩OneOS,對OneOS的啟動流程有點生疏了,為了快速梳理一遍啟動的相關流程和細節,我找到了AliOS-Things的DeveloperKit開發板。這是一塊stm32l496的開發板,目前OneOS的支持也挺好的,串口、SPI屏幕,GPIO等外設都支持得很好了。代碼量相對來說也是比較少的,所以選用這一塊開發板作為熟悉啟動流程的板子。點亮圖片如下:

poYBAGL69OuAf-iMAAdhAbVldng703.png

準備工作

一、安裝編譯工具鏈: 下載gcc-arm-none-eabi工具鏈(arm官網有,自己喜歡哪個版本就下哪個),并安裝。

二、安裝OpenOCD(需要配置好PATH環境變量)和VSCode(隨便裝裝就行,插件只需要Cortex-Debu),網上已經有教程了,不再累贅。

三、下載源碼和編譯 到gitee上克隆OneOS源碼,然后打開OneOS源碼目錄(git clone下來的),切換到v2.3.0版本,并打開根目錄下projects目錄,按教程生成stm32l496-ali-developerkit模板的工程,并編譯好。

開始調試

我用的是VSCode,要調試嵌入式設備,僅僅需要安裝Cortex-Debug這個插件就可以開始調試了(編譯工具鏈和OpenOCD需要提前安裝和配置好)。按下圖的順序創建launch.json調試配置文件。

1. 創建launch.json文件:

poYBAGL69WOARm30AAKPV8Hq-cc698.png

2. 選擇Cortex Debug調試器

poYBAGL69WyAC58JAAL9_ljY0qw717.png

3. 在打開的launch.json文件編輯中,將文件內容替換成以下內容。

{
   // 使用 IntelliSense 了解相關屬性。
   // 懸停以查看現有屬性的描述。
   // 欲了解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387
   "version": "0.2.0",
   "configurations": [
       {
           "name": "Cortex Debug",
           "cwd": "${workspaceFolder}/build",                   //  調試時的工作目錄應和編譯目錄一致,否則在調試中會定位不到源碼
           "executable": "${workspaceFolder}/out/oneos.elf",    //  修改成編譯生成的elf文件路徑
           "request": "launch",
           "type": "cortex-debug",
           "runToEntryPoint": "Reset_Handler",     // 入口點改成stm32的復位入口函數
           "servertype": "openocd",               //  GDB Server修改成openocd
           "configFiles": [
               "interface/stlink.cfg",            //  使用板載stlink
               "target/stm32l4x.cfg"              //  調試目標為stm32l4x
           ]
       }
   ]
}

進入調試狀態

點擊綠色的小三角開始調試,30秒左右就正式進入調試狀態了如下圖。

pYYBAGL69XuAPpjZAA6N-2tjkP8646.png

在這里,我們先不著急執行程序,往下拉到110行,會發現程序入口點被修改成了entry,如下圖:

pYYBAGL69cyAASVeAAKHK2FH09U993.png

注意:很多RTOS都會修改啟動文件,替換程序入口點。因為需要在用戶應用調用之前,先初始化RTOS的相關內容。對于用戶來說,這些初始化的東西在大部分的時候是不需要關注的(寫應用時重點關注應用邏輯,外設初始化、操作系統初始化這些是移植時就要完善好的)。假如是一款全新的芯片(源碼中找不到類似或者已有的芯片支持和啟動文件的)要移植進來,需要關注入口點,否則就算編譯通過了,也沒辦法正常啟動系統。

OneOS啟動流程學習

當我們跟著entry函數,會發現它實際上調用的是_k_startup函數,如下圖:

pYYBAGL69eCARZX-AAGyRrWL5jg363.png

真正的啟動流程_k_startup函數

然后在_k_startup函數中,有不同功能的函數,大致如下圖:

poYBAGL69jKAdw83ABAHf7MuRp4170.png

對于移植工作來說,最容易讓人迷惑的,也就是_k_core_auto_init這個函數的內容,函數實現如下圖:

pYYBAGL69jqAJGrSAAYLWI3LvUI739.png

是不是完全看不懂它做了什么,其實這就是有名的Init Call機制。因為RTOS運行前,需要做相當多的準備工作,而根據用戶的組件設定的不同(例如使用了不同的組件),調用的內容也會有所區別。所以對于這些變化的準備工作,如果都寫在一個函數里,會很亂,也很難看。所以不少RTOS都借鑒了LinuxInit Call機制。 通過一段區分了不同初始化級別的指針,按順序取出指針并執行對應的初始化函數。

Init Call 機制的簡單理解

其實我們并不需要過于在意Init Call機制是如何實現的,我們只需要知道,它是保存在Flash中的一段指針,通過這些指針可以有順序的對初始化函數進行調用即可。以下是在Map文件中搜索.init_call找到的對應內容。在文件中我們不難看出, 當前的工程里一共分了1、2、3、4、5、7個啟動等級(別問我為啥沒有6,以為map文件里沒有),并保存了對應等級需要執行的函數指針。

pYYBAGL69uaACgmwABKtTZ_H41U594.png

1. 現在我們繼續跟著啟動流程走,點擊單步執行,進入 Init Call 機制 指定的第一個函數(cotex_m_set_vector)中,大部分情況下可以不用管它,應該是處理中斷向量表指針之類的內容。

2. 單步跳出這個函數后,接下來進入 Init Call 機制 指定的第二個函數(os_hw_board_init),這個函數調用了**板級的外設初始化函數**,這個在我們移植的時候需要注意把板級外設初始化的函數更名成下圖的名稱。同時在圖中也可以看到Init Call 機制實現的重要一環,OS_PREV_INIT(函數名稱, 啟動等級)。正是通過一行,編譯器才會將這個函數指針存入Init Call 機制在flash中指定的固定指針段里。

poYBAGL69wCAAmilAA-e6sM_2KE207.png

1. 單步跳出這個函數后,接下來進入 Init Call 機制 指定的第三個函數(driver_stm32_usart_early_driver_init),這個函數給系統的前期輸出指派了對應的串口設備(oneos_config.h文件中定義的OS_CONSOLE_DEVICE_NAME串口名稱一致的設備)。若發現沒有串口輸出信息,可以先檢查是否正確初始化了對應串口,以及是否正確指派了串口設備。

poYBAGL69ySABw6-ABCui3NISck542.png

接下來的啟動過程,就不再去分析了(太菜,后面的也不知道怎么解釋)。我們移植前期需要關注的啟動內容,大概就是這些了。基本上完成一個移植工作,串口正常工作,系統調度正常運行,這兩個工作是優先保障的。因為串口Debug也是一個常用的技巧,大部分時候串口輸出可以幫助調試。而完成了串口和線程調度,移植的初步階段就完成了。RTOS的Shell交互,也是非常有用的一個工具。以下是進入OneOS的啟動信息和shell截圖。可以通過在shell中查看線程信息,線程堆信息等待內容。甚至可以在shell中開啟外設,修改外設狀態等(需要編寫shell命令進行支持)。

poYBAGL690yAR6qjAAgeCsPlztM423.png

本次分享就暫時告一段路,移植經驗的分享會接著做構建系統部分的。

審核編輯 黃昊宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6037

    文章

    44558

    瀏覽量

    635298
  • 移植
    +關注

    關注

    1

    文章

    379

    瀏覽量

    28132
  • RTOS
    +關注

    關注

    22

    文章

    813

    瀏覽量

    119636
  • BSP
    BSP
    +關注

    關注

    1

    文章

    87

    瀏覽量

    26152
收藏 人收藏

    評論

    相關推薦

    oneOS框架基礎及應用

    oneOS框架基礎及應用1. 為什么引入oneos2. Oneos平臺3. Oneos系統4. Python開發5. 軟件開發
    發表于 02-17 07:53

    基于VxWorks的BSP技術分析

    結合嵌入式操作系統設計的主要特點,針對486 目標機上VxWorks 的定制,運用其BSP 技術解決了移植過程中底層硬件與上層軟件無關性的問題。描述了BSP 的概念和啟動
    發表于 08-15 10:45 ?17次下載

    VxWorks及BSP啟動流程與順序

    本文首先介紹vxworks映像的類型及各類型vxworks映像的啟動順序;然后介紹BSP啟動流程與初始化順序。 關鍵詞:vxworks映像;BSP
    發表于 11-07 15:50 ?105次下載
    VxWorks及<b class='flag-5'>BSP</b><b class='flag-5'>啟動</b><b class='flag-5'>流程</b>與順序

    中國移動物聯網操作系統OneOS發布

    云上科技周”在網絡云平臺正式開幕。中移物聯網有限公司總經理喬輝在會上發布了中國移動物聯網操作系統——OneOS
    發表于 07-04 11:20 ?756次閱讀

    物聯網操作系統OneOS介紹

    方案介紹 OneOS是中國移動針對物聯網領域推出的輕量級操作系統,具有可裁剪、跨平臺、低功耗、高安全等特點,支持ARM Cortex-M/R/A、MIPS、RISC-V等主流芯片架構,兼容POSIX
    的頭像 發表于 11-04 11:55 ?3438次閱讀

    中國移動OneOS攜手青島國創,加速推進家電智能化創新

    ,物聯網操作系統OneOS在大會智慧政企展臺亮相。在20日召開的中國移動物聯網聯盟產業生態峰會上,OneOS戰略合作伙伴青島國創智能家電研究院有限公司行業總監鄒峘浩應邀作主題演講。 在題為《操作系統在智能家電領域的生態建設》的演講中,青島國創智能家電研究院行業總監鄒
    的頭像 發表于 11-26 12:54 ?1730次閱讀

    中國移動OneOS亮相2021 國際 AIoT 生態發展大會,并榮膺NICT創新獎

    設計,豐富的安全能力,完善的安全認證。智慧化場景需要端到云整體安全設計,OneOS支持多種安全硬件載體,可以實現安全啟動、安全升級、安全通信等功能。OneOS是符合IEC 61508 SIL3標準
    發表于 07-29 17:06 ?531次閱讀
    中國移動<b class='flag-5'>OneOS</b>亮相2021 國際 AIoT 生態發展大會,并榮膺NICT創新獎

    超10萬+,中國移動OneOS攜手啟英泰倫在智能家居行業再發力!

    和算法開發的應用方案提供商,在智能家居生態拓展上與中國移動OneOS形成了良好的軟硬優勢互補。在硬件層面:啟英泰倫AI智能語音芯片集成了聲紋識別、波束形成、語音定向、離在線識別、本地命令詞學習等更豐富
    的頭像 發表于 08-16 16:44 ?1287次閱讀
    超10萬+,中國移動<b class='flag-5'>OneOS</b>攜手啟英泰倫在智能家居行業再發力!

    中國移動oneos框架基礎及其組件解析

    oneOS框架基礎及應用1. 為什么引入oneos2. Oneos平臺3. Oneos系統4. Python開發5. 軟件開發
    發表于 12-22 18:55 ?4次下載
    中國移動<b class='flag-5'>oneos</b>框架基礎及其組件解析

    中國移動OneOS正式加入中國RISC-V產業聯盟

    日前,中國移動OneOS物聯網操作系統正式加入中國RISC-V產業聯盟(CRVIC),將發揮OneOS在RISC-V領域芯片適配及軟件生態的能力,聯合聯盟成員積極投入到RISC-V技術創新和生態建設
    的頭像 發表于 03-28 16:42 ?1476次閱讀
    中國移動<b class='flag-5'>OneOS</b>正式加入中國RISC-V產業聯盟

    中國移動OneOS 3.0物聯網操作系統正式發布

    11月28日,由中移物聯網有限公司舉辦的“中國移動OneOS 3.0LTS物聯網操作系統發布會暨生態合作論壇”在線上隆重舉行。中國工程院院士倪光南、中國移動通信集團有限公司政企事業部總經理劉堅、中移
    的頭像 發表于 11-28 17:16 ?1685次閱讀
    中國移動<b class='flag-5'>OneOS</b> 3.0物聯網操作系統正式發布

    中移物聯OneOS聯合紫光展銳實現智能穿戴芯片W217首發量產

    近日,中移物聯OneOS與紫光展銳合作的智能穿戴W217項目首批產品完成產線生產。本項目將OneOS物聯網操作系統與紫光展銳最新穿戴芯片W217進行整合,實現OTA、位置服務、RTC等核心功能的集成
    的頭像 發表于 03-28 11:32 ?985次閱讀

    【直播來襲】OneOS系統教程全面上線,邀您和ST、OneOS一起來學習啦!

    【直播來襲】OneOS系統教程全面上線,邀您和ST、OneOS一起來學習啦!
    的頭像 發表于 04-22 14:33 ?704次閱讀
    【直播來襲】<b class='flag-5'>OneOS</b>系統教程全面上線,邀您和ST、<b class='flag-5'>OneOS</b>一起來<b class='flag-5'>學習</b>啦!

    摩博會亮點提前看:OneOS物聯網實時操作系統,速度與安全并驅

    Model系列芯片與OneOS的深度融合打造了“國產芯片+國產操作系統+解決方案”的高速度、高安全的國產彩屏儀表。
    的頭像 發表于 09-03 17:26 ?676次閱讀
    摩博會亮點提前看:<b class='flag-5'>OneOS</b>物聯網實時操作系統,速度與安全并驅

    2024摩博會在渝開幕!恒石智能聯合OneOS 攜 Model 系列芯片驅動的智能彩屏儀表閃耀登場

    2024年9月13日,備受矚目的中國摩博會在重慶國際博覽中心盛大開幕。在這場全球摩托車行業的盛會中,恒石智能聯合OneOS震撼亮相,為觀眾帶來全新亮相的十幾款集科技與設計與一身的智能彩屏儀表,為廣大
    的頭像 發表于 09-14 08:08 ?480次閱讀
    2024摩博會在渝開幕!恒石智能聯合<b class='flag-5'>OneOS</b> 攜 Model 系列芯片驅動的智能彩屏儀表閃耀登場
    主站蜘蛛池模板: 日本一区二区视频| 狠狠色噜噜狠狠狠狠97老肥女| 1v1高h肉爽文bl| 久久久久久亚洲精品| 精品午夜久久福利大片免费| 亚洲欧美在线观看| 日韩综合图区| 欧美福利视频网站| 韩国三级视频| 操狠狠| 天天做.天天爱.天天综合网| 操久久久| 日本www在线观看| 国产三级日本三级日产三| 久久国产乱子伦精品免费看 | 国产福利在线观看一区二区| 国产在线精品一区免费香蕉| 久色网| 精品视频一区在线观看| 在线色网| 国产免费色视频| 日韩特黄| 中年艳妇乱小玩| 亚洲伊人久久网| 日本三级日产三级国产三级| 午夜亚洲国产| 免费的黄视频| 精品乩伦视频| 天天插天天射| 字幕网中文aⅴ资源站| 色男人综合| 天天舔天天插| 不卡视频一区| freesexvideo性2| 国产真实乱在线更新| 午夜丁香婷婷| 天天摸天天干天天操| 在线天堂资源| 夜色成人| 99热久久久久久久免费观看| 不卡一级毛片免费高清|