chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

將Circle驅(qū)動(dòng)框架移植到一個(gè)自制微內(nèi)核操作系統(tǒng)的過(guò)程

安芯教育科技 ? 來(lái)源:嵌入式客棧 ? 2023-07-21 09:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一 前言

什么是Circle?

Circle是一個(gè)叫rsta2的大佬用C++寫(xiě)的bare-metal的樹(shù)莓派驅(qū)動(dòng)框架,同時(shí)支持現(xiàn)存的幾乎所有版本樹(shù)莓派,能夠驅(qū)動(dòng)樹(shù)莓派上的大部分設(shè)備,包SD控制器、有線和無(wú)線網(wǎng)卡、GPIO、USB控制器及一些常用USB設(shè)備等。

這些設(shè)備驅(qū)動(dòng)中有一些是rsta2參考Linux或其它bare-metal的實(shí)現(xiàn)自己寫(xiě)的,還有一些是他直接從其它系統(tǒng)移植過(guò)來(lái)的。各驅(qū)動(dòng)對(duì)外封裝成了C++類(lèi)的形式,可以按需對(duì)其實(shí)例化和使用。對(duì)于在樹(shù)莓派上編寫(xiě)自制操作系統(tǒng)并且希望盡快驅(qū)動(dòng)一些設(shè)備的場(chǎng)景,將Circle整個(gè)移植過(guò)來(lái)是非常值得考慮的選項(xiàng)。當(dāng)然,需要注意的是,Circle的開(kāi)源協(xié)議是GPLv3,具有傳染性,應(yīng)該把它作為系統(tǒng)的非必要組件來(lái)使用。

本文干了什么?

本文將簡(jiǎn)要記述將Circle驅(qū)動(dòng)框架移植到一個(gè)自制微內(nèi)核操作系統(tǒng)(實(shí)際上是實(shí)驗(yàn)室項(xiàng)目),作為用戶(hù)態(tài)驅(qū)動(dòng)進(jìn)程的過(guò)程。

由于只是簡(jiǎn)要地記錄移植過(guò)程和經(jīng)驗(yàn)總結(jié),本文不會(huì)深入到每一個(gè)具體的細(xì)節(jié),如果你恰好有相似的需求,除了參考本文,還需要具體地去研究Circle的代碼,并根據(jù)具體情況具體分析。

二 確定需求

首先一開(kāi)始不要盲目移植,先確定一下自己需要Circle中的哪些設(shè)備驅(qū)動(dòng),比如說(shuō),如果你只是需要USB相關(guān)驅(qū)動(dòng),那么在移植過(guò)程中可以不關(guān)心WLAN那塊是否有不兼容。

然后跑一些Circle提供的sample,確定Circle確實(shí)可以滿(mǎn)足需求。

三 移植基本部分

這部分包括一些非常必要的組件,比如mailbox訪問(wèn),許多驅(qū)動(dòng)都需要通過(guò)mailbox獲取信息或申請(qǐng)資源等。這部分移植完成后,將可以在啟動(dòng)時(shí)獲取機(jī)器信息,并點(diǎn)亮LED燈。

具體地,主要需要做下面這些事情:

1.修改Rules.mkMakefile,去掉任何boot相關(guān)的代碼。

2.重新實(shí)現(xiàn)一些模塊,去除需要特權(quán)指令的地方,并使用用戶(hù)態(tài)lib提供的功能代替:

assert:assert失敗后不要真的關(guān)機(jī)或重啟,可以exit;

interrupt:一開(kāi)始可簡(jiǎn)單打印點(diǎn)內(nèi)容,不用真的實(shí)現(xiàn);

logger:改為printf輸出;

new:使用malloc分配;

sysinit:提供假實(shí)現(xiàn);

timer:使用nanosleep實(shí)現(xiàn)SimpleusDelay;

memory:CMemorySystem類(lèi)可以直接去掉,一開(kāi)始會(huì)有地方用到CMemorySystem::GetCoherentPage;

改用系統(tǒng)提供的分配物理上連續(xù)的non-cacheable內(nèi)存的接口。

3.Circle進(jìn)程啟動(dòng)時(shí)將物理地址的外設(shè)區(qū)域直接對(duì)等映射到當(dāng)前進(jìn)程的虛擬地址空間,這樣將不需要改動(dòng)Circle中通過(guò)MMIO訪問(wèn)外設(shè)時(shí)使用的地址。

經(jīng)過(guò)一些調(diào)試后,可以點(diǎn)亮LED燈,輸出日志到stdout,然后退出(需要編寫(xiě)適當(dāng)?shù)?strong>kernel.cpp,可參考sample),這意味著簡(jiǎn)單的MMIO已經(jīng)可以了。

四 驅(qū)動(dòng)屏幕

這一步同樣需要重新實(shí)現(xiàn)一些模塊:

synchronize:主要是刷cache相關(guān)操作;

bcmframebuffer:向GPU申請(qǐng)frame buffer后需要將其映射到當(dāng)前進(jìn)程的虛擬地址。

經(jīng)過(guò)一些調(diào)試后,可以通過(guò)HDMI輸出內(nèi)容到屏幕。

模擬實(shí)現(xiàn)Timer

對(duì)于一些稍復(fù)雜的驅(qū)動(dòng),例如USB和WLAN,會(huì)依賴(lài)timer獲取當(dāng)前tick,因此需要重新實(shí)現(xiàn)timer模塊。

具體地,可以在CTimer::Initialize中創(chuàng)建一個(gè)新的線程,每隔10ms(利用nanosleep等函數(shù))調(diào)用一次CTimer::InterruptHandler,其它代碼幾乎不用改動(dòng)。此外,還需要實(shí)現(xiàn)CTimer::GetClockTicks以獲得當(dāng)前 tick數(shù)。

經(jīng)過(guò)一些調(diào)試后,輸出的日志中能夠包含當(dāng)前時(shí)間,此時(shí)說(shuō)明timer基本實(shí)現(xiàn)對(duì)了。

六 解決內(nèi)存相關(guān)的一系列問(wèn)題

許多驅(qū)動(dòng)在運(yùn)行的過(guò)程中需要分配內(nèi)存以供外設(shè)進(jìn)行DMA,同時(shí)又需要在進(jìn)程內(nèi)訪問(wèn)這塊內(nèi)存以讀寫(xiě)跟外設(shè)交互的數(shù)據(jù)。因此,這塊內(nèi)存既需要能通過(guò)虛擬地址訪問(wèn),又需要能獲取到物理地址,同時(shí)在物理地址上連續(xù)且non-cacheable。malloc是不能滿(mǎn)足這個(gè)需求的,因?yàn)?strong>malloc只保證分配出的內(nèi)存虛擬地址連續(xù),不能保證物理地址連續(xù),也無(wú)法配置成non-cacheable。

要解決這個(gè)問(wèn)題,需要內(nèi)核提供分配物理上連續(xù)且non-cacheable的內(nèi)存并映射到虛擬地址空間的相關(guān)系統(tǒng)調(diào)用,然后再在Circle中利用這些系統(tǒng)調(diào)用重新實(shí)現(xiàn)內(nèi)存相關(guān)模塊。其實(shí)在前面已經(jīng)粗略地實(shí)現(xiàn)了,但在這一步需要確保實(shí)現(xiàn)的正確性。對(duì)Circle的修改主要涉及CMemorySystem::GetCoherentPage、DMA_BUFFER、BUS_ADDRESS、new(HEAP_DMA)的定義及使用它們的地方。

七 用戶(hù)態(tài)處理中斷

對(duì)于像USB和WLAN這些需要利用中斷通知操作系統(tǒng)發(fā)生了特定事件的設(shè)備,還需要把之前虛假實(shí)現(xiàn)的interrupt模塊實(shí)現(xiàn)對(duì)。

首先要求內(nèi)核提供讓特定用戶(hù)態(tài)進(jìn)程處理特定IRQ的能力,具體來(lái)說(shuō)就是驅(qū)動(dòng)進(jìn)程要能夠通過(guò)系統(tǒng)調(diào)用注冊(cè)一個(gè)函數(shù)作為特定編號(hào)的IRQ的用戶(hù)態(tài)處理函數(shù),然后內(nèi)核在收到IRQ后調(diào)用此函數(shù)來(lái)處理。

接著重新實(shí)現(xiàn)interrupt模塊,把CInterruptSystem::ConnectIRQ改為使用上述注冊(cè)IRQ處理函數(shù)的系統(tǒng)調(diào)用,暫時(shí)用不到的函數(shù)可以不實(shí)現(xiàn),比如與FIQ相關(guān)的。

八驅(qū)動(dòng)USB

Timer、DMA buffer、中斷這幾個(gè)重要的部分移植完成后,比較容易就可以驅(qū)動(dòng)USB控制器,進(jìn)而可以檢測(cè)并驅(qū)動(dòng)USB鍵盤(pán)、鼠標(biāo)、存儲(chǔ)、串口轉(zhuǎn)換器等設(shè)備,對(duì)于樹(shù)莓派3,還可以驅(qū)動(dòng)有線網(wǎng)卡(LAN7800)。

九其它驅(qū)動(dòng)

到目前為止已經(jīng)移植了大部分驅(qū)動(dòng)所需的運(yùn)行環(huán)境,之后的移植工作主要看具體的需求了,比如如果需要網(wǎng)絡(luò)協(xié)議棧,還要重新實(shí)現(xiàn)sched模塊,里面包括線程抽象、調(diào)度、線程同步機(jī)制等。





審核編輯:劉清

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

    關(guān)注

    114

    文章

    17621

    瀏覽量

    190046
  • Linux系統(tǒng)
    +關(guān)注

    關(guān)注

    4

    文章

    609

    瀏覽量

    29619
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1312

    瀏覽量

    55674
  • C++語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    147

    瀏覽量

    7578
  • 樹(shù)莓派
    +關(guān)注

    關(guān)注

    122

    文章

    2069

    瀏覽量

    109527

原文標(biāo)題:移植樹(shù)莓派驅(qū)動(dòng)框架Circle到自制操作系統(tǒng)

文章出處:【微信號(hào):Ithingedu,微信公眾號(hào):安芯教育科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    為了學(xué)習(xí)內(nèi)核開(kāi)發(fā),大佬手搓了個(gè)輕量級(jí)操作系統(tǒng)YiYiYa OS

    、gpio、i2c、spi驅(qū)動(dòng)系統(tǒng)移植教程 作者本人及團(tuán)隊(duì)自制的開(kāi)源掌機(jī)FunKey所采用的操作系統(tǒng)就是基于Linux
    發(fā)表于 08-27 10:08

    為了學(xué)習(xí)內(nèi)核開(kāi)發(fā),大佬手搓了個(gè)輕量級(jí)操作系統(tǒng)YiYiYa OS

    作者:evilbinary(鴨佬) YiYiYa操作系統(tǒng)個(gè)樸實(shí)無(wú)華的操作系統(tǒng),追求快速開(kāi)發(fā),最小實(shí)現(xiàn),同時(shí)遵循SOLID原則。編碼簡(jiǎn)潔明了,非常適合學(xué)習(xí)
    發(fā)表于 08-30 14:57

    微內(nèi)核操作系統(tǒng)在嵌入式平臺(tái)上的應(yīng)用

    的功能。而隨著微內(nèi)核(microkernel)操作系統(tǒng)的理論和實(shí)現(xiàn)越來(lái)越成熟,微內(nèi)核操作系統(tǒng)開(kāi)始成為嵌入式平臺(tái)個(gè)很好的選擇。圖1 嵌入式平
    發(fā)表于 09-01 13:41

    微內(nèi)核操作系統(tǒng)有什么好處?

    。可見(jiàn)Windows在內(nèi)核之上來(lái)說(shuō)的確是個(gè)很干練的系統(tǒng)。其實(shí)這是微軟的貫作風(fēng),就算是目前我們使用的Win 7旗艦版其
    發(fā)表于 01-11 13:11

    實(shí)時(shí)操作系統(tǒng)移植Linux系統(tǒng)應(yīng)用

    個(gè)操作系統(tǒng)一個(gè)操作系統(tǒng)應(yīng)用程序的移植即使在最
    發(fā)表于 07-15 07:25

    如何Linux操作系統(tǒng)移植目標(biāo)平臺(tái)上?

    如何Linux操作系統(tǒng)移植目標(biāo)平臺(tái)上?Linux交叉編譯環(huán)境的建立及內(nèi)核配置和編譯Linux移植
    發(fā)表于 04-22 07:04

    ThreadX內(nèi)核的IAR方式移植和設(shè)計(jì)框架

    第6章 ThreadX操作系統(tǒng)移植(IAR)本章節(jié)將為大家介紹ThreadX內(nèi)核的IAR方式移植和設(shè)計(jì)框架,理論上不建議初學(xué)者直接學(xué)習(xí),因?yàn)?/div>
    發(fā)表于 08-10 06:47

    基于NET+50 ARM7的DeltaOS操作系統(tǒng)內(nèi)核移植

             嵌入式實(shí)時(shí)操作系統(tǒng)內(nèi)核移植是嵌入式系統(tǒng)開(kāi)發(fā)的瓶頸之
    發(fā)表于 09-09 10:33 ?13次下載

    實(shí)時(shí)操作系統(tǒng)Linux系統(tǒng)移植

    個(gè)操作系統(tǒng)一個(gè)操作系統(tǒng)應(yīng)用程序的移植即使在最
    發(fā)表于 05-06 10:27 ?1581次閱讀

    微內(nèi)核操作系統(tǒng)在嵌入式平臺(tái)上的應(yīng)用

    微內(nèi)核操作系統(tǒng)的可靠性、實(shí)時(shí)性和安全性特點(diǎn)很好得匹配了嵌入式平臺(tái)對(duì)操作系統(tǒng)的需求。所謂嵌入式系統(tǒng)是指為特定應(yīng)用而設(shè)計(jì)的專(zhuān)用電腦系統(tǒng),通常執(zhí)行的是帶有特定要求的預(yù)先
    發(fā)表于 12-26 11:24 ?1716次閱讀
    <b class='flag-5'>微內(nèi)核操作系統(tǒng)</b>在嵌入式平臺(tái)上的應(yīng)用

    為什么要選擇微內(nèi)核操作系統(tǒng)?

    例如原來(lái)在宏內(nèi)核操作系統(tǒng)中,用戶(hù)應(yīng)用程序是通過(guò)系統(tǒng)調(diào)用,陷入內(nèi)核中,然后再讀取、訪問(wèn)文件。而在微內(nèi)核操
    的頭像 發(fā)表于 06-03 14:35 ?4731次閱讀

    RT-Thread Smart微內(nèi)核操作系統(tǒng)發(fā)布!

    9月1日,由上海睿賽德電子科技有限公司舉辦的RT-Thread Smart微內(nèi)核操作系統(tǒng)發(fā)布會(huì)于北京圓滿(mǎn)落幕,發(fā)布會(huì)以見(jiàn)微為主題,邀請(qǐng)到中國(guó)工程院院士、產(chǎn)業(yè)專(zhuān)家、高校教授及行業(yè)從業(yè)人員100余位蒞臨
    的頭像 發(fā)表于 09-09 10:49 ?3271次閱讀

    RT-Thread定義款新形態(tài)操作系統(tǒng)——混合微內(nèi)核操作系統(tǒng)

    RT-Thread Smart開(kāi)源混合微內(nèi)核操作系統(tǒng)橫空出世,替換智能設(shè)備中的Linux! 來(lái)源:嵌入式資訊 隨著嵌入式系統(tǒng)軟件開(kāi)發(fā)復(fù)雜度的不斷攀升,嵌入式操作系統(tǒng)越來(lái)越多地被應(yīng)用于軟件開(kāi)發(fā)。當(dāng)前
    的頭像 發(fā)表于 09-10 15:04 ?4294次閱讀

    如何實(shí)現(xiàn)個(gè)微內(nèi)核操作系統(tǒng)的設(shè)計(jì)

    設(shè)計(jì)并實(shí)現(xiàn)了個(gè)運(yùn)行在Bochs虛擬機(jī)上的微內(nèi)核結(jié)構(gòu)的操作系統(tǒng), 詳細(xì)描述了系統(tǒng)中進(jìn)程管理、進(jìn)程間通訊、基本內(nèi)存管理、磁盤(pán)服務(wù)器以及文件服務(wù)
    發(fā)表于 11-13 17:28 ?28次下載
    如何實(shí)現(xiàn)<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>微內(nèi)核操作系統(tǒng)</b>的設(shè)計(jì)

    睿賽德科技微內(nèi)核操作系統(tǒng)rt-smart已支持Arm Mali GPU

    睿賽德科技今日宣布,其微內(nèi)核操作系統(tǒng) RT-Thread Smart(簡(jiǎn)稱(chēng):rt-smart)已支持Arm Mali GPU,為實(shí)時(shí)操作系統(tǒng)在汽車(chē)、消費(fèi)電子等GUI應(yīng)用領(lǐng)域提供個(gè)新的
    的頭像 發(fā)表于 09-29 10:42 ?2811次閱讀