RM新时代网站-首页

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

OneOS的BSP移植: 1、學(xué)習(xí)和理解OneOS的啟動(dòng)流程

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

前言

很多同學(xué)都問過這個(gè)問題,移植RTOS到一個(gè)開發(fā)板上,難么?需要學(xué)習(xí)哪些知識(shí)? 從我學(xué)習(xí)國(guó)內(nèi)常見的RTOS,以及一些構(gòu)建系統(tǒng)的經(jīng)驗(yàn)上看。真正要做移植的工作,需要的知識(shí)范圍還是非常廣泛的。

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

個(gè)人覺得,移植RTOS其實(shí)是一個(gè)非常嚴(yán)謹(jǐn)?shù)墓ぷ?,需要的知識(shí)除了上面列舉的這些,當(dāng)然越多越好。有興趣移植的話,建議先把調(diào)試工具,RTOS的系統(tǒng)調(diào)度、內(nèi)存管理和啟動(dòng)流程先給熟悉了,否則一旦碰到問題就不知道自己錯(cuò)在哪里。

為什么我要先過一遍OneOS的啟動(dòng)流程

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

poYBAGL69OuAf-iMAAdhAbVldng703.png

準(zhǔn)備工作

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

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

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

開始調(diào)試

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

1. 創(chuàng)建launch.json文件:

poYBAGL69WOARm30AAKPV8Hq-cc698.png

2. 選擇Cortex Debug調(diào)試器

poYBAGL69WyAC58JAAL9_ljY0qw717.png

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

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

進(jìn)入調(diào)試狀態(tài)

點(diǎn)擊綠色的小三角開始調(diào)試,30秒左右就正式進(jìn)入調(diào)試狀態(tài)了如下圖。

pYYBAGL69XuAPpjZAA6N-2tjkP8646.png

在這里,我們先不著急執(zhí)行程序,往下拉到110行,會(huì)發(fā)現(xiàn)程序入口點(diǎn)被修改成了entry,如下圖:

pYYBAGL69cyAASVeAAKHK2FH09U993.png

注意:很多RTOS都會(huì)修改啟動(dòng)文件,替換程序入口點(diǎn)。因?yàn)樾枰谟脩魬?yīng)用調(diào)用之前,先初始化RTOS的相關(guān)內(nèi)容。對(duì)于用戶來說,這些初始化的東西在大部分的時(shí)候是不需要關(guān)注的(寫應(yīng)用時(shí)重點(diǎn)關(guān)注應(yīng)用邏輯,外設(shè)初始化、操作系統(tǒng)初始化這些是移植時(shí)就要完善好的)。假如是一款全新的芯片(源碼中找不到類似或者已有的芯片支持和啟動(dòng)文件的)要移植進(jìn)來,需要關(guān)注入口點(diǎn),否則就算編譯通過了,也沒辦法正常啟動(dòng)系統(tǒng)。

OneOS啟動(dòng)流程學(xué)習(xí)

當(dāng)我們跟著entry函數(shù),會(huì)發(fā)現(xiàn)它實(shí)際上調(diào)用的是_k_startup函數(shù),如下圖:

pYYBAGL69eCARZX-AAGyRrWL5jg363.png

真正的啟動(dòng)流程_k_startup函數(shù)

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

poYBAGL69jKAdw83ABAHf7MuRp4170.png

對(duì)于移植工作來說,最容易讓人迷惑的,也就是_k_core_auto_init這個(gè)函數(shù)的內(nèi)容,函數(shù)實(shí)現(xiàn)如下圖:

pYYBAGL69jqAJGrSAAYLWI3LvUI739.png

是不是完全看不懂它做了什么,其實(shí)這就是有名的Init Call機(jī)制。因?yàn)镽TOS運(yùn)行前,需要做相當(dāng)多的準(zhǔn)備工作,而根據(jù)用戶的組件設(shè)定的不同(例如使用了不同的組件),調(diào)用的內(nèi)容也會(huì)有所區(qū)別。所以對(duì)于這些變化的準(zhǔn)備工作,如果都寫在一個(gè)函數(shù)里,會(huì)很亂,也很難看。所以不少RTOS都借鑒了LinuxInit Call機(jī)制。 通過一段區(qū)分了不同初始化級(jí)別的指針,按順序取出指針并執(zhí)行對(duì)應(yīng)的初始化函數(shù)。

Init Call 機(jī)制的簡(jiǎn)單理解

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

pYYBAGL69uaACgmwABKtTZ_H41U594.png

1. 現(xiàn)在我們繼續(xù)跟著啟動(dòng)流程走,點(diǎn)擊單步執(zhí)行,進(jìn)入 Init Call 機(jī)制 指定的第一個(gè)函數(shù)(cotex_m_set_vector)中,大部分情況下可以不用管它,應(yīng)該是處理中斷向量表指針之類的內(nèi)容。

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

poYBAGL69wCAAmilAA-e6sM_2KE207.png

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

poYBAGL69ySABw6-ABCui3NISck542.png

接下來的啟動(dòng)過程,就不再去分析了(太菜,后面的也不知道怎么解釋)。我們移植前期需要關(guān)注的啟動(dòng)內(nèi)容,大概就是這些了?;旧贤瓿梢粋€(gè)移植工作,串口正常工作,系統(tǒng)調(diào)度正常運(yùn)行,這兩個(gè)工作是優(yōu)先保障的。因?yàn)榇贒ebug也是一個(gè)常用的技巧,大部分時(shí)候串口輸出可以幫助調(diào)試。而完成了串口和線程調(diào)度,移植的初步階段就完成了。RTOS的Shell交互,也是非常有用的一個(gè)工具。以下是進(jìn)入OneOS的啟動(dòng)信息和shell截圖??梢酝ㄟ^在shell中查看線程信息,線程堆信息等待內(nèi)容。甚至可以在shell中開啟外設(shè),修改外設(shè)狀態(tài)等(需要編寫shell命令進(jìn)行支持)。

poYBAGL690yAR6qjAAgeCsPlztM423.png

本次分享就暫時(shí)告一段路,移植經(jīng)驗(yàn)的分享會(huì)接著做構(gòu)建系統(tǒng)部分的。

審核編輯 黃昊宇

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

    關(guān)注

    6035

    文章

    44554

    瀏覽量

    634614
  • 移植
    +關(guān)注

    關(guān)注

    1

    文章

    379

    瀏覽量

    28124
  • RTOS
    +關(guān)注

    關(guān)注

    22

    文章

    811

    瀏覽量

    119592
  • BSP
    BSP
    +關(guān)注

    關(guān)注

    1

    文章

    87

    瀏覽量

    26147
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    oneOS框架基礎(chǔ)及應(yīng)用

    oneOS框架基礎(chǔ)及應(yīng)用1. 為什么引入oneos2. Oneos平臺(tái)3. Oneos系統(tǒng)4. Python開發(fā)5. 軟件開發(fā)
    發(fā)表于 02-17 07:53

    基于VxWorks的BSP技術(shù)分析

    結(jié)合嵌入式操作系統(tǒng)設(shè)計(jì)的主要特點(diǎn),針對(duì)486 目標(biāo)機(jī)上VxWorks 的定制,運(yùn)用其BSP 技術(shù)解決了移植過程中底層硬件與上層軟件無關(guān)性的問題。描述了BSP 的概念和啟動(dòng)
    發(fā)表于 08-15 10:45 ?17次下載

    VxWorks及BSP啟動(dòng)流程與順序

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

    中國(guó)移動(dòng)物聯(lián)網(wǎng)操作系統(tǒng)OneOS發(fā)布

    云上科技周”在網(wǎng)絡(luò)云平臺(tái)正式開幕。中移物聯(lián)網(wǎng)有限公司總經(jīng)理喬輝在會(huì)上發(fā)布了中國(guó)移動(dòng)物聯(lián)網(wǎng)操作系統(tǒng)——OneOS。
    發(fā)表于 07-04 11:20 ?751次閱讀

    物聯(lián)網(wǎng)操作系統(tǒng)OneOS介紹

    方案介紹 OneOS是中國(guó)移動(dòng)針對(duì)物聯(lián)網(wǎng)領(lǐng)域推出的輕量級(jí)操作系統(tǒng),具有可裁剪、跨平臺(tái)、低功耗、高安全等特點(diǎn),支持ARM Cortex-M/R/A、MIPS、RISC-V等主流芯片架構(gòu),兼容POSIX
    的頭像 發(fā)表于 11-04 11:55 ?3434次閱讀

    中國(guó)移動(dòng)OneOS攜手青島國(guó)創(chuàng),加速推進(jìn)家電智能化創(chuàng)新

    ,物聯(lián)網(wǎng)操作系統(tǒng)OneOS在大會(huì)智慧政企展臺(tái)亮相。在20日召開的中國(guó)移動(dòng)物聯(lián)網(wǎng)聯(lián)盟產(chǎn)業(yè)生態(tài)峰會(huì)上,OneOS戰(zhàn)略合作伙伴青島國(guó)創(chuàng)智能家電研究院有限公司行業(yè)總監(jiān)鄒峘浩應(yīng)邀作主題演講。 在題為《操作系統(tǒng)在智能家電領(lǐng)域的生態(tài)建設(shè)》的演講中,青島國(guó)創(chuàng)智能家電研究院行業(yè)總監(jiān)鄒
    的頭像 發(fā)表于 11-26 12:54 ?1722次閱讀

    中國(guó)移動(dòng)OneOS亮相2021 國(guó)際 AIoT 生態(tài)發(fā)展大會(huì),并榮膺NICT創(chuàng)新獎(jiǎng)

    設(shè)計(jì),豐富的安全能力,完善的安全認(rèn)證。智慧化場(chǎng)景需要端到云整體安全設(shè)計(jì),OneOS支持多種安全硬件載體,可以實(shí)現(xiàn)安全啟動(dòng)、安全升級(jí)、安全通信等功能。OneOS是符合IEC 61508 SIL3標(biāo)準(zhǔn)
    發(fā)表于 07-29 17:06 ?525次閱讀
    中國(guó)移動(dòng)<b class='flag-5'>OneOS</b>亮相2021 國(guó)際 AIoT 生態(tài)發(fā)展大會(huì),并榮膺NICT創(chuàng)新獎(jiǎng)

    超10萬+,中國(guó)移動(dòng)OneOS攜手啟英泰倫在智能家居行業(yè)再發(fā)力!

    和算法開發(fā)的應(yīng)用方案提供商,在智能家居生態(tài)拓展上與中國(guó)移動(dòng)OneOS形成了良好的軟硬優(yōu)勢(shì)互補(bǔ)。在硬件層面:?jiǎn)⒂⑻﹤怉I智能語音芯片集成了聲紋識(shí)別、波束形成、語音定向、離在線識(shí)別、本地命令詞學(xué)習(xí)等更豐富
    的頭像 發(fā)表于 08-16 16:44 ?1281次閱讀
    超10萬+,中國(guó)移動(dòng)<b class='flag-5'>OneOS</b>攜手啟英泰倫在智能家居行業(yè)再發(fā)力!

    中國(guó)移動(dòng)oneos框架基礎(chǔ)及其組件解析

    oneOS框架基礎(chǔ)及應(yīng)用1. 為什么引入oneos2. Oneos平臺(tái)3. Oneos系統(tǒng)4. Python開發(fā)5. 軟件開發(fā)
    發(fā)表于 12-22 18:55 ?4次下載
    中國(guó)移動(dòng)<b class='flag-5'>oneos</b>框架基礎(chǔ)及其組件解析

    中國(guó)移動(dòng)OneOS正式加入中國(guó)RISC-V產(chǎn)業(yè)聯(lián)盟

    日前,中國(guó)移動(dòng)OneOS物聯(lián)網(wǎng)操作系統(tǒng)正式加入中國(guó)RISC-V產(chǎn)業(yè)聯(lián)盟(CRVIC),將發(fā)揮OneOS在RISC-V領(lǐng)域芯片適配及軟件生態(tài)的能力,聯(lián)合聯(lián)盟成員積極投入到RISC-V技術(shù)創(chuàng)新和生態(tài)建設(shè)
    的頭像 發(fā)表于 03-28 16:42 ?1467次閱讀
    中國(guó)移動(dòng)<b class='flag-5'>OneOS</b>正式加入中國(guó)RISC-V產(chǎn)業(yè)聯(lián)盟

    中國(guó)移動(dòng)OneOS 3.0物聯(lián)網(wǎng)操作系統(tǒng)正式發(fā)布

    11月28日,由中移物聯(lián)網(wǎng)有限公司舉辦的“中國(guó)移動(dòng)OneOS 3.0LTS物聯(lián)網(wǎng)操作系統(tǒng)發(fā)布會(huì)暨生態(tài)合作論壇”在線上隆重舉行。中國(guó)工程院院士倪光南、中國(guó)移動(dòng)通信集團(tuán)有限公司政企事業(yè)部總經(jīng)理劉堅(jiān)、中移
    的頭像 發(fā)表于 11-28 17:16 ?1680次閱讀
    中國(guó)移動(dòng)<b class='flag-5'>OneOS</b> 3.0物聯(lián)網(wǎng)操作系統(tǒng)正式發(fā)布

    中移物聯(lián)OneOS聯(lián)合紫光展銳實(shí)現(xiàn)智能穿戴芯片W217首發(fā)量產(chǎn)

    近日,中移物聯(lián)OneOS與紫光展銳合作的智能穿戴W217項(xiàng)目首批產(chǎn)品完成產(chǎn)線生產(chǎn)。本項(xiàng)目將OneOS物聯(lián)網(wǎng)操作系統(tǒng)與紫光展銳最新穿戴芯片W217進(jìn)行整合,實(shí)現(xiàn)OTA、位置服務(wù)、RTC等核心功能的集成
    的頭像 發(fā)表于 03-28 11:32 ?974次閱讀

    【直播來襲】OneOS系統(tǒng)教程全面上線,邀您和ST、OneOS一起來學(xué)習(xí)啦!

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

    摩博會(huì)亮點(diǎn)提前看:OneOS物聯(lián)網(wǎng)實(shí)時(shí)操作系統(tǒng),速度與安全并驅(qū)

    Model系列芯片與OneOS的深度融合打造了“國(guó)產(chǎn)芯片+國(guó)產(chǎn)操作系統(tǒng)+解決方案”的高速度、高安全的國(guó)產(chǎn)彩屏儀表。
    的頭像 發(fā)表于 09-03 17:26 ?662次閱讀
    摩博會(huì)亮點(diǎn)提前看:<b class='flag-5'>OneOS</b>物聯(lián)網(wǎng)實(shí)時(shí)操作系統(tǒng),速度與安全并驅(qū)

    2024摩博會(huì)在渝開幕!恒石智能聯(lián)合OneOS 攜 Model 系列芯片驅(qū)動(dòng)的智能彩屏儀表閃耀登場(chǎng)

    2024年9月13日,備受矚目的中國(guó)摩博會(huì)在重慶國(guó)際博覽中心盛大開幕。在這場(chǎng)全球摩托車行業(yè)的盛會(huì)中,恒石智能聯(lián)合OneOS震撼亮相,為觀眾帶來全新亮相的十幾款集科技與設(shè)計(jì)與一身的智能彩屏儀表,為廣大
    的頭像 發(fā)表于 09-14 08:08 ?474次閱讀
    2024摩博會(huì)在渝開幕!恒石智能聯(lián)合<b class='flag-5'>OneOS</b> 攜 Model 系列芯片驅(qū)動(dòng)的智能彩屏儀表閃耀登場(chǎng)
    RM新时代网站-首页