2011-07-01 116 views
12

我正在看一些理解Linux內核如何實現設置各種硬件時鐘的指針。這基本上涉及如何設置LCD,UART等硬件功能所使用的各種時鐘。例如,當Linux啓動時,它如何處理設置UART或USB的時鐘。也許像時鐘管理器之類的東西。在Linux內核中實現硬件時鐘信號內核

我基本上是試圖在我正在研究的新硬件上爲不同的操作系統執行類似的操作。任何幫助將非常感激。

[編輯]
感謝您的回覆和鏈接。所以這是我迄今爲止實施的內容。這應該讓你知道我的目標。

我查閱了針對特定系統的硬件參考手冊,並編寫了一些代碼來監視/修改我感興趣的外設的信號/引腳,即從命令行將它們打開/關閉。現在這些時鐘/信號的集合共同控制外設.HRM會說,如果你想打開UART或什麼的,然後打開這樣和那樣的信號/引腳。而@BjoernD是的,我正在使用類似於mmap()的函數來與外設通話。

我的問題的關鍵是我想了解使用我已經編寫的實用程序的時鐘/外設管理器的設計和實現。這個時鐘/外設管理器可以讓我控制啓用/禁用我想要的外設。基本上這個管理器將使我能夠對正在運行的init代碼進行更改。在運行期間,進程也可以調用該管理器來打開/關閉設備,以便優化功耗。它可能沒有完美的意義,但我自己試圖把我的頭圍繞着這個。

現在我確信類似這樣的東西可能已經在Linux或者任何操作系統中實現了性能問題(沒人願意在啓動時打開所有外設來浪費電源)。我想了解它的軟件架構。從任何操作系統的參考將至今做到至少得到一個頭馬。此外,我不寫自己的操作系統,有一個操作系統的地方,但我更多地看板級軟件,即BSP工作。但是,無論如何感謝操作系統的鏈接,他們真的很好。欣賞它。

謝謝!

回答

6

你想達到什麼是非常具體的a)你使用的平臺和b)你想要使用的設備。例如,在x86上有三種與設備通信的方式:

  1. 中斷允許設備發信號通知CPU。 OS通常提供註冊中斷處理程序的機制 - 中斷髮生時調用的函數。在Linux中,請參閱linux/include/interrupt.h中的request_irq()和好​​友。
  2. 內存映射I/O是平臺BIOS提供的設備的物理內存,與訪問普通物理內存的方式相同 - 只需通過寫入一個內存地址。這種存儲器背後究竟是什麼(例如,網絡接口配置寄存器或LCD幀緩衝器)取決於器件,通常在器件數據表中指定。
  3. 通過特殊的地址空間和特殊指令(INB/OUTB & co。)訪問I/O端口。除此之外,它們的工作方式與I/O內存相似。

有許多方法可以找出設備提供的資源以及BIOS映射到的位置。有些平臺使用ACPI表格(谷歌自己爲1,000k頁面規格),PCI通過PCI配置空間以標準方式提供設備信息,USB有類似的方式來發現連接到總線的設備,有些設備,例如UARTS只是簡單地指定爲在爲您的平臺固定的預配置I/O範圍內可用。

作爲理解Linux的開始,我推薦使用"Understanding the Linux kernel"。有關Linux如何處理設備的具體細節以及寫驅動程序的具體信息,請參見Linux Device Drivers。此外,您需要了解您的平臺和您想要駕駛的設備的特性。

如果你想開始一個自己的操作系統,一個UART肯定會有助於打印調試輸出,所以你可能首先要做的。

現在我寫下了所有這些,看起來您的實際問題是:如何開始使用操作系統設計。這個問題對你來說應該是非常有價值的:What are some resources for getting started in operating system development?

+0

那麼,我基本上是試圖做的是有某種的系統,以便我可以適當地打開所需的信號/時鐘爲各自的h/w。 –

+0

Contd(返回鍵據說貼上評論) 因此,例如在啓動過程中,可能只有UART可能被打開,但其餘的可能會關閉以節省電力。當LCD需要啓動時,它可以發送請求到公用設施/管理器以轉動在某些信號上(這些信息可以從h/w規格中得知)。因此,公用設施將通過將控制寄存器中所需的位設置爲「高」來採取適當的行動。 –

+0

我確信這已經在Linux內核中以有組織的方式處理過了,只是我不知道在哪裏尋找。 –

0

大多數計算機中的兩個大用戶是CPU和磁盤。這些都具有在Linux中節能的功能。當系統不忙時CPU時鐘可以減慢,當沒有I/O發生時磁盤馬達可以停止。對於UART而言,即使通過關閉時鐘來節省其使用的所有功率,與其他UART相比,它仍然很小,因爲UART中沒有太多邏輯。以節省電力

最佳方式是 1)更高效的電源 2)更換SSD 3旋轉盤)慢下來的CPU和內存總線

+0

你的回答與這個問題有關嗎? – BjoernD

+0

史蒂夫 - 我很感激你提到節能的方法,但我正在尋找更多的方法來有效地管理我的外設以節省電力,正如我在我的問題中所詳述的。我知道動態CPU頻率調整是一個很好的選擇,但我現在還沒有開始工作。我不只是在談論UART,更多的是處理所有外設的經理,包括LCD,USB等,我認爲你會同意消耗大量的電力。 –