2015-03-30 45 views
2

儘管我已經在C中實現了很多項目,但我對操作系統完全陌生。我在Discovery主板(STM32)上試用了實時Linux,並獲得了LED閃爍的正確結果,但由於我只是按照步驟進行操作,無法在互聯網上找到每一步的完整描述,所以我並不完全瞭解整個過程。使用Real Time Linux開始編程的最佳方式是什麼?

我想在實時linux上實現調度。什麼是最好的開始?任何網站,書籍,教程可用?

完整的RTLinux進程描述將不勝感激。

謝謝進階

+3

像這樣類似的問題,「最好」(IMOHO)的方式就是*去做吧*。然後*重做*和*再次*如果您不知道從哪裏開始,請研究一個已經開始的項目並對其進行處理/模仿。如果您對特定的代碼或流程有特定的問題,請閱讀文檔(或專門詢問)。調整學習策略以適應你。 – user2864740 2015-03-30 23:43:17

回答

4

從「裸機」向基於操作系統的編程過渡是我經歷的反向事件。我開始了一個完整的軟件人員,完全進入OS的一面,隨着時間的推移,我轉向了與之相反的方向(甚至用VHDL設計電路!)。我的建議是從簡單開始。 Linux非常複雜,無論你在哪裏看到,都有很多層次的東西一起工作來提供最終產品。如果你已經死在一個實時Linux擴展,我很樂意推薦https://xenomai.org/這是一個Linux的實時擴展。

但是,要更具體地解決有關在Linux中執行調度的問題,您可以,但這將是一項大量工作,並且可能非常複雜。操作系統使用完全公平的調度過程(http://en.wikipedia.org/wiki/Completely_Fair_Scheduler),每當你啓動一個線程時,它就會被添加到列表中運行。如果您在內核空間中將您的代碼作爲驅動程序實施,依靠硬件中斷等,這可能會有所不同,但總的來說,這就是Linux的工作原理。實時通常意味着它有能力分配線程中的幾個不同優先級之一,並在任何給定時間完全利用線程搶佔,這些概念實際上並不屬於vanilla Linux。它有一些這樣的概念,但是它有一些侷限性,當你從Linux中尋找實時行爲時會導致問題。

對您有幫助的是RTOS。如果您正在尋找完整的實時操作系統,請查看FreeRTOS http://www.freertos.org/。它擁有一個龐大的社區,並通過大量示例代碼支持許多不同的設備。他們甚至用一個示例包來支持你的特定板子,所以你可以給它一個沒有失去的東西! http://www.freertos.org/FreeRTOS-for-Cortex-M3-STM32-STM32F100-Discovery.html。它使您能夠訪問許多操作系統ish構造,如網絡API,內存管理和線程,而無需巨大操作系統的開銷和延遲。使用RTOS,您可以創建任務併爲其分配優先級,以便您成爲調度程序,而不再受操作系統的限制。你運行的操作系統,而不是操作系統運行你(如果這是有道理的)。此外,RTOS中提供的結構將非常類似於裸機代碼,因此將更容易遵循,理解和充分學習。學習Linux或Windows等完整操作系統的基礎構建塊是一個更簡單的世界。如果這個選項聽起來不錯,我會建議在FreeRTOS網站上查看所支持的設備,然後選擇一個你想要試驗的設備,然後去做。我強烈建議這是一種通用的調度和操作系統結構的學習方式,因爲它可以像開源一樣簡單。一旦你掌握了RTOS的基礎知識,購買一本關於Linux的書不是一個壞主意。儘管網絡上有許多免費資源與學習Linux相關,但它們通常是相互矛盾的,可能會產生誤導。一般來說,學習Linux專用知識和操作系統,它會感覺壓倒性的。更簡單的開始將有助於防止被燒燬,並最大限度地減少你感到迷失的時間。 Linux絕對是一個學習過程,但是像任何學習過程一樣,從簡單開始,記住最終目標,制定計劃,並沿着該計劃採取小型,可管理的步驟,直到您查找並準確找到自己想要的位置。然後去解決下一座山!

0

如果您想學習實時操作系統,那麼我建議您獲得一個FPGA,例如Altera DE2,並嘗試使用您自己的操作系統和ucos。您可以閱讀關於嵌入式RTOS here的好文本。

你也可以得到一個Linux Raspberry並編寫你自己的操作系統。

2

實時Linux環境非常混亂。 99.99%的信息僅僅是過時的。

首先,有很多「微內核」將Linux作爲一項任務運行。 (如已停用的RTLinux)。問題在於你必須將你的實時任務寫入不同的API,並且不能依賴於任何在Linux中的任何東西,因爲在任務運行時Linux將在後臺被凍結。所以除非你的任務很簡單(「按下這個按鈕時停止電動機」),否則這種方法會比增益造成更多的痛苦。

接下來,有一個實時的Linux補丁集。 This hasn't been doing so well.因爲下一個項目:

最後,目前的Linux內核有gotten rid of the problems,導致人們過去需要實時。您甚至可以將您的某個處理器上的Linux關閉至have full control of the CPU。另見this paper

要回答你的問題:我看到兩個不同的路徑,你可以採取:

1)啓動與正常3.xx的Linux內核,並探索各種API和實時技術(即實時優先級,內存牽制,等等)這可以讓你「足夠接近」99%的人們想要的「實時」。如果它對於高頻交易來說足夠好,那對你來說可能已經足夠了。 2)如果你有一個很難實時的需求,並且擔心Linux不會削減它,那麼(就像Nick提到的那樣),只要去購買一個處理器,然後編寫沒有OS的實時代碼。通過將「實時」和「非實時」代碼分解到不同的CPU上,可以使整個系統更簡單,並且更加穩健。

相關問題