2011-07-01 12 views
12

Linuxカーネルがさまざまなハードウェアクロックの設定をどのように実装しているかを理解するためのいくつかのポインタを見ています。これは基本的に、LCD、UARTなどのハードウェア機能が使用するさまざまなクロックを設定する作業に関係します。たとえば、Linuxの起動時に、UARTやUSBのクロックの設定をどのように処理するのか。時計のマネージャーなどのようなものかもしれません。Linuxカーネルにおけるハードウェアクロック信号の実装

私は基本的に、私が取り組んでいる新しいハードウェア上の別のOSに類似したものを実装しようとしています。どんな助けでも本当に感謝しています。

[編集]
返信とリンクをありがとう。それでは、これまで私が実装してきたことがあります。これは私がどこに向かうのかをあなたに知らせるはずです。

ターゲットとする特定のシステムのハードウェアリファレンスマニュアルを参照し、私が興味のある周辺機器の信号/ピンを監視/修正するコードを書いています。つまり、コマンドラインからON/OFFすることです。これらのクロック/信号の集合体が一緒にペリフェラルを制御します。HRMは、UARTなどをオンにしたい場合は、そのような信号/ピンをオンにします。そして@BjoernDはい私は周辺機器と通信するためにmmap()関数のようなものを使用しています。

私の疑問は、すでに書いたユーティリティを使用するクロック/ペリフェラルマネージャの設計と実装を理解したいことです。このクロック/ペリフェラルマネージャは私に必要なペリフェラルを有効/無効にするコントロールを与えます。このマネージャは、今実行しているinitコードを変更することができます。また、ランタイム中にプロセスはこのマネージャを呼び出して、デバイスの電源をオン/オフして消費電力を最適化します。それは完璧な意味を作っていないかもしれませんが、私は自分の頭をこの周りに包み込んでいます。

これは、Linuxで実装されていたか、それともパフォーマンス上の問題のOSであっても(ブート時にすべての周辺機器をオンにして電源を切ることを望む人はいないでしょう)。私はそれのソフトウェアアーキテクチャを理解したい。どんなOSからのリファレンスでも、今のところ、頭をはっきりさせることができます。また私は自分のOSを書いているわけではないが、そこにはOSがあるが、ボードレベルのソフトウェアであるBSPをもっと見ている人がいる。とにかくOSリンクのおかげで、彼らは本当に良いです。感謝します。

ありがとうございます!

答えて

6

あなたが達成したいのは、a)使用しているプラ​​ットフォームと、b)使用するデバイスに固有のものです。たとえば、x86では、デバイスと通信する3つの方法があります。

  1. 割り込みによってデバイスはCPUに信号を送ることができます。 OSは通常、割り込みハンドラを登録するメカニズムを提供します。割り込みの発生時に呼び出される関数です。 Linuxではrequest_irq()とlinux/include/interrupt.hのフレンドを参照してください。
  2. メモリマップされたI/Oは、プラットフォームのBIOSが簡単な物理メモリにアクセスするのと同じ方法で利用できるデバイスの物理メモリです。メモリアドレスへの書き込み。そのようなメモリの後ろにあるもの(例えば、ネットワークインターフェイス設定レジスタまたはLCDフレームバッファ)は、デバイスによって異なり、通常、デバイスのデータシートで指定されます。
  3. I/Oポートには、特別なアドレス空間と特別な命令(INB/OUTB & co。)を介してアクセスします。それ以外はI/Oメモリと同様に動作します。

デバイスが提供するリソースと、BIOSがそれらをマッピングした場所を調べる方法はたくさんあります。一部のプラットフォームでは、ACPIテーブル(Googleで1,000kページ仕様)を使用しています.PCIはPCIコンフィグレーション空間で標準化された方法でデバイスに関する情報を提供し、USBはバスに接続されたデバイスを検出する同様の方法を持ち、プラットフォームに合わせて設定された事前設定されたI/O範囲で使用できるように指定されています。

Linuxを理解するための出発点として、"Understanding the Linux kernel"をお勧めします。 Linuxがデバイスをどのように扱い、ドライバを書くために何があるかについては、Linux Device Driversをご覧ください。さらに、使用しているプラ​​ットフォームとドライブしたいデバイスの特質を調べる必要があります。

独自のOSを起動したい場合、UARTは確かにデバッグ出力を出力するのに役立つようなものですから、まずこれを行うことをお勧めします。

これですべてのことを書いたので、あなたの実際の質問は、オペレーティングシステムの設計をどのように始めるかということです。この質問はあなたにとって非常に貴重です。What are some resources for getting started in operating system development?

+0

だから、私は基本的にやろうとしていますが、いくつかの種類を持っているCPUやメモリバスをスローダウンそれぞれのh/wに必要な信号/クロックを適切にオンにすることができます。 –

+0

Contd(復帰キーでコメントが貼られていると思われます) 例えば起動中にUARTのみがオンになるかもしれませんが、残りは電源を節約するためにオフになっている可能性があります。その後、LCDを起動する必要があるときにユーティリティ/ (これらはh/w仕様から知られています)。したがって、ユーティリティはLCDの制御レジスタの必要なビットを "HIGH"に設定することによって適切な処置を行います。 –

+0

これは、Linuxカーネルで整理された方法で処理されていると確信しています。 –

0

ほとんどのコンピュータの2人の大人は、CPUとディスクです。どちらもLinuxの省電力機能を備えています。システムがビジーでないときはCPUクロックを遅くすることができ、I/Oが発生していないときにディスクモーターを停止することができます。 UARTの場合、クロックをオフにして使用するすべての電力を節約しても、UARTのロジックがそれほど多くないため、他のものと比べてまだ小さいです。電力を節約する

ベストな方法です 1)、より効率的な電力供給 2))SSD 3を備えた回転ディスクを交換

+0

あなたの答えはどのように質問に関連していますか? – BjoernD

+0

スティーブ - 私はあなたのパワーを節約する方法を言及していただきありがとうございますが、私は私の質問に詳述しているように、電力を節約するために効率的に私の周辺機器を管理する方法のより多くを見ています。私は動的CPU周波数スケーリングが良い選択肢であることを知っていますが、私は今のところそれに取り組んでいません。そして、私はUARTについてだけではなく、LCD、USBなどの周辺機器を扱うマネージャーではなく、多くの電力を消費することに同意すると思います。 –

関連する問題