1

Linux の起動中に組み込みデバイスの LED を点滅させようとしています。基本的に、LED の点滅は、Linux が起動中であることを示しています。LEDを点滅させるには、次のことを行っています

  1. init/main.c static struct timer_list pwr_led_timer; にグローバル タイマー (LED 点滅タイマー) を作成しました。

  2. start_kernel() setup_timer および mod_timer 関数を使用して、init_timers() 関数が終了するとすぐにタイマーを開始しました。

  3. タイマーが起動すると、タイマー ハンドラで LED がトグルされます。そしてタイマーが再起動しました。

  4. カーネルがブート プロセス全体を終了したら、LED をオフにしてタイマーを削除します。del_timer_sync(&pwr_led_timer);

質問: タイマーを停止し、カーネルで停止するのではなく、アプリケーションからユーザー空間から LED を切り替えたいと考えています (ポイント番号 4)。ユーザー空間からカーネル実行タイマーを停止する標準的な方法はありますか?

pwr_led_timer はグローバル構造体であるため、IOCTL 呼び出しを使用してユーザー空間からタイマーを停止できますか? 私の考えは、いくつかの IOCTL を実行してカーネルにアクセスすることです。pwr_led_timer はグローバルであるため、IOCTL で pwr_led_timer を使用して del_timer_sync() を呼び出すことができます。しかし、どのデバイスを IOCTL に対して開くべきかわかりません (?)

申し訳ありませんが、カーネル/ドライバーのプログラミングは初めてです。ネットで調べてみましたが、手がかりがありませんでした。

誰かが入力を持っているかどうか教えてください。前もって感謝します。

よろしく、エマーソン

4

1 に答える 1

0

netlinkを試すことを検討しましたか? これは、シンプルで軽量な、ユーザーからカーネル (またはプロセスからプロセス) への通信のための強力な方法です。

于 2013-07-08T14:16:50.360 に答える