色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

將Circle驅動框架移植到一個自制微內核操作系統的過程

安芯教育科技 ? 來源:嵌入式客棧 ? 2023-07-21 09:14 ? 次閱讀

一 前言

什么是Circle?

Circle是一個叫rsta2的大佬用C++寫的bare-metal的樹莓派驅動框架,同時支持現存的幾乎所有版本樹莓派,能夠驅動樹莓派上的大部分設備,包SD控制器、有線和無線網卡、GPIO、USB控制器及一些常用USB設備等。

這些設備驅動中有一些是rsta2參考Linux或其它bare-metal的實現自己寫的,還有一些是他直接從其它系統移植過來的。各驅動對外封裝成了C++類的形式,可以按需對其實例化和使用。對于在樹莓派上編寫自制操作系統并且希望盡快驅動一些設備的場景,將Circle整個移植過來是非常值得考慮的選項。當然,需要注意的是,Circle的開源協議是GPLv3,具有傳染性,應該把它作為系統的非必要組件來使用。

本文干了什么?

本文將簡要記述將Circle驅動框架移植到一個自制微內核操作系統(實際上是實驗室項目),作為用戶態驅動進程的過程。

由于只是簡要地記錄移植過程和經驗總結,本文不會深入到每一個具體的細節,如果你恰好有相似的需求,除了參考本文,還需要具體地去研究Circle的代碼,并根據具體情況具體分析。

二 確定需求

首先一開始不要盲目移植,先確定一下自己需要Circle中的哪些設備驅動,比如說,如果你只是需要USB相關驅動,那么在移植過程中可以不關心WLAN那塊是否有不兼容。

然后跑一些Circle提供的sample,確定Circle確實可以滿足需求。

三 移植基本部分

這部分包括一些非常必要的組件,比如mailbox訪問,許多驅動都需要通過mailbox獲取信息或申請資源等。這部分移植完成后,將可以在啟動時獲取機器信息,并點亮LED燈。

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

1.修改Rules.mkMakefile,去掉任何boot相關的代碼。

2.重新實現一些模塊,去除需要特權指令的地方,并使用用戶態lib提供的功能代替:

assert:assert失敗后不要真的關機或重啟,可以exit;

interrupt:一開始可簡單打印點內容,不用真的實現;

logger:改為printf輸出;

new:使用malloc分配;

sysinit:提供假實現;

timer:使用nanosleep實現SimpleusDelay;

memory:CMemorySystem類可以直接去掉,一開始會有地方用到CMemorySystem::GetCoherentPage;

改用系統提供的分配物理上連續的non-cacheable內存的接口

3.Circle進程啟動時將物理地址的外設區域直接對等映射到當前進程的虛擬地址空間,這樣將不需要改動Circle中通過MMIO訪問外設時使用的地址。

經過一些調試后,可以點亮LED燈,輸出日志到stdout,然后退出(需要編寫適當的kernel.cpp,可參考sample),這意味著簡單的MMIO已經可以了。

四 驅動屏幕

這一步同樣需要重新實現一些模塊:

synchronize:主要是刷cache相關操作;

bcmframebuffer:向GPU申請frame buffer后需要將其映射到當前進程的虛擬地址。

經過一些調試后,可以通過HDMI輸出內容到屏幕。

模擬實現Timer

對于一些稍復雜的驅動,例如USB和WLAN,會依賴timer獲取當前tick,因此需要重新實現timer模塊。

具體地,可以在CTimer::Initialize中創建一個新的線程,每隔10ms(利用nanosleep等函數)調用一次CTimer::InterruptHandler,其它代碼幾乎不用改動。此外,還需要實現CTimer::GetClockTicks以獲得當前 tick數。

經過一些調試后,輸出的日志中能夠包含當前時間,此時說明timer基本實現對了。

六 解決內存相關的一系列問題

許多驅動在運行的過程中需要分配內存以供外設進行DMA,同時又需要在進程內訪問這塊內存以讀寫跟外設交互的數據。因此,這塊內存既需要能通過虛擬地址訪問,又需要能獲取到物理地址,同時在物理地址上連續且non-cacheable。malloc是不能滿足這個需求的,因為malloc只保證分配出的內存虛擬地址連續,不能保證物理地址連續,也無法配置成non-cacheable。

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

七 用戶態處理中斷

對于像USB和WLAN這些需要利用中斷通知操作系統發生了特定事件的設備,還需要把之前虛假實現的interrupt模塊實現對。

首先要求內核提供讓特定用戶態進程處理特定IRQ的能力,具體來說就是驅動進程要能夠通過系統調用注冊一個函數作為特定編號的IRQ的用戶態處理函數,然后內核在收到IRQ后調用此函數來處理。

接著重新實現interrupt模塊,把CInterruptSystem::ConnectIRQ改為使用上述注冊IRQ處理函數的系統調用,暫時用不到的函數可以不實現,比如與FIQ相關的。

八驅動USB

Timer、DMA buffer、中斷這幾個重要的部分移植完成后,比較容易就可以驅動USB控制器,進而可以檢測并驅動USB鍵盤、鼠標、存儲、串口轉換器等設備,對于樹莓派3,還可以驅動有線網卡(LAN7800)。

九其它驅動

到目前為止已經移植了大部分驅動所需的運行環境,之后的移植工作主要看具體的需求了,比如如果需要網絡協議棧,還要重新實現sched模塊,里面包括線程抽象、調度、線程同步機制等。





審核編輯:劉清

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

    關注

    112

    文章

    16332

    瀏覽量

    177808
  • Linux系統
    +關注

    關注

    4

    文章

    593

    瀏覽量

    27392
  • GPIO
    +關注

    關注

    16

    文章

    1204

    瀏覽量

    52052
  • C++語言
    +關注

    關注

    0

    文章

    147

    瀏覽量

    6989
  • 樹莓派
    +關注

    關注

    116

    文章

    1706

    瀏覽量

    105607

原文標題:移植樹莓派驅動框架Circle到自制操作系統

文章出處:【微信號:Ithingedu,微信公眾號:安芯教育科技】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    為了學習內核開發,大佬手搓了輕量級操作系統YiYiYa OS

    、gpio、i2c、spi驅動系統移植教程 作者本人及團隊自制的開源掌機FunKey所采用的操作系統就是基于Linux
    發表于 08-27 10:08

    為了學習內核開發,大佬手搓了輕量級操作系統YiYiYa OS

    作者:evilbinary(鴨佬) YiYiYa操作系統樸實無華的操作系統,追求快速開發,最小實現,同時遵循SOLID原則。編碼簡潔明了,非常適合學習
    發表于 08-30 14:57

    微內核操作系統在嵌入式平臺上的應用

    的功能。而隨著微內核(microkernel)操作系統的理論和實現越來越成熟,微內核操作系統開始成為嵌入式平臺很好的選擇。圖1 嵌入式平
    發表于 09-01 13:41

    微內核操作系統有什么好處?

    。可見Windows在內核之上來說的確是很干練的系統。其實這是微軟的貫作風,就算是目前我們使用的Win 7旗艦版其
    發表于 01-11 13:11

    實時操作系統移植Linux系統應用

    操作系統一個操作系統應用程序的移植即使在最
    發表于 07-15 07:25

    如何Linux操作系統移植目標平臺上?

    如何Linux操作系統移植目標平臺上?Linux交叉編譯環境的建立及內核配置和編譯Linux移植
    發表于 04-22 07:04

    ThreadX內核的IAR方式移植和設計框架

    第6章 ThreadX操作系統移植(IAR)本章節將為大家介紹ThreadX內核的IAR方式移植和設計框架,理論上不建議初學者直接學習,因為
    發表于 08-10 06:47

    基于NET+50 ARM7的DeltaOS操作系統內核移植

             嵌入式實時操作系統內核移植是嵌入式系統開發的瓶頸之
    發表于 09-09 10:33 ?13次下載

    實時操作系統Linux系統移植

    操作系統一個操作系統應用程序的移植即使在最
    發表于 05-06 10:27 ?1318次閱讀

    微內核操作系統在嵌入式平臺上的應用

    微內核操作系統的可靠性、實時性和安全性特點很好得匹配了嵌入式平臺對操作系統的需求。所謂嵌入式系統是指為特定應用而設計的專用電腦系統,通常執行的是帶有特定要求的預先
    發表于 12-26 11:24 ?1371次閱讀
    <b class='flag-5'>微內核操作系統</b>在嵌入式平臺上的應用

    為什么要選擇微內核操作系統

    例如原來在宏內核操作系統中,用戶應用程序是通過系統調用,陷入內核中,然后再讀取、訪問文件。而在微內核操
    的頭像 發表于 06-03 14:35 ?4116次閱讀

    RT-Thread Smart微內核操作系統發布!

    9月1日,由上海睿賽德電子科技有限公司舉辦的RT-Thread Smart微內核操作系統發布會于北京圓滿落幕,發布會以見微為主題,邀請到中國工程院院士、產業專家、高校教授及行業從業人員100余位蒞臨
    的頭像 發表于 09-09 10:49 ?2678次閱讀

    RT-Thread定義款新形態操作系統——混合微內核操作系統

    RT-Thread Smart開源混合微內核操作系統橫空出世,替換智能設備中的Linux! 來源:嵌入式資訊 隨著嵌入式系統軟件開發復雜度的不斷攀升,嵌入式操作系統越來越多地被應用于軟件開發。當前
    的頭像 發表于 09-10 15:04 ?3704次閱讀

    如何實現微內核操作系統的設計

    設計并實現了運行在Bochs虛擬機上的微內核結構的操作系統, 詳細描述了系統中進程管理、進程間通訊、基本內存管理、磁盤服務器以及文件服務
    發表于 11-13 17:28 ?28次下載
    如何實現<b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>微內核操作系統</b>的設計

    睿賽德科技微內核操作系統rt-smart已支持Arm Mali GPU

    睿賽德科技今日宣布,其微內核操作系統 RT-Thread Smart(簡稱:rt-smart)已支持Arm Mali GPU,為實時操作系統在汽車、消費電子等GUI應用領域提供新的
    的頭像 發表于 09-29 10:42 ?2069次閱讀
    主站蜘蛛池模板: 2020美女视频黄频大全视频| 国产午夜精品久久久久九九| 亚洲 欧美 制服 视频二区| 久久才是精品亚洲国产| 爱穿丝袜的麻麻3d漫画acg| 印度性hd18| 亚洲视频免费在线观看| 校园全肉高h湿一女多男| 欧美影院在线观看完整版 mp4| 妓女嫖客叫床粗话对白| 国产免费怕怕免费视频观看| gv肉片视频免费观看| 诱咪youmiss| 夜里18款禁用的免费B站动漫| 午夜伦理yy44008影院| 色橹| 入禽太深视频免费视频| 日韩精品免费一区二区| 女配穿书病娇被强啪h| 久久综久久美利坚合众国| 久久综合老色鬼网站| 久草色在线| 巨乳中文无码亚洲| 男欢女爱免费视频| 日本女人水多| 探花口爆颜射乳交日韩| 丝袜美女被艹| 无限资源在线完整高清观看1| 四虎精品久久| 亚洲第一伊人| 2018久久视频在线视频观看| 91久久精品一区二区三区| 99热在线观看| 岛国精品在线观看| 国产亚洲欧美ai在线看片| 激情床戏视频片段有叫声| 老阿姨才是最有V味的直播| 皮皮色狼网| 亚洲精品97福利在线| 一品探花论坛| 爱穿丝袜的麻麻3d漫画免费|