15

「ソフトウェア開発者にとって、低レベルの組み込みシステムのプログラミングは難しい」というこの質問の反対の一種として、低レベルの組み込みシステムから、OS、特に組み込みLinuxを備えたより高度なシステムのプログラミングに移行するためのアドバイスをお願いしたいと思います。

私は主に小さなマイクロコントローラーのハードウェアとソフトウェアを使用してきましたが、現在はソフトウェアのみを使用しています。私の教育も主にハードウェアと組み込みのもので構成されています。私はプログラミングコースをあまり持っておらず、ソフトウェア設計やOOコーディングについてあまり知りません。

今、私は組み込みLinuxで行われる予定の大きなプロジェクトを手にしています。以前は本当にそうする必要がなかったので、物事を設計し、管理しやすくすることに大きな問題があります。また、メイン関数から「並列」タスクを実行する代わりに、マルチタスクとブロック呼び出しを利用することは、別の世界のようです。

低水準プログラミングからOS(Linux)を備えたより大きなシステムに移行する際にどのような経験がありますか?何が大変で、どのように解決しましたか?どんな考え方が必要ですか?

ゼロからC++を学ぶこと、またはプレーンCを使い続けることは価値がありますか?

4

4 に答える 4

10

Linuxカーネルを使用してマイクロコントローラーシステムを置き換える際の主な問題は、インターフェースしているデバイスを駆動することです。このために、ドライバーを作成する必要があるかもしれません。ユーザースペースをできるだけクリーンに保ちたいので、言語としてCを使用することをお勧めしますよりスリムなC標準ライブラリについては、uclibcライブラリを調べてください。

http://www.uclibc.org/

また、busyboxが役立つ場合があります。これにより、多くのユーザースペースユーティリティが単一のバイナリとして提供されます。

http://www.busybox.net/

次に、ストレージからライブシステムを起動し、ハードウェアとインターフェイスするinitを介して制御ロジックを実行するだけです。必要に応じて、ライブシステムにアクセスし、busyboxユーティリティを実行できます。実際、唯一の違いは、ユーザースペースが正規分布よりもはるかにスリムであり、目的の観点からカーネルに「近い」作業を行うことです。

また、リアルタイムLinuxも調べてください。

http://www.realtimelinuxfoundation.org/

タスク完了の正式な約束が必要な場合。エキゾチックな場合、最も難しいのは、起動/永続ストレージとハードウェアとのインターフェースだと思います。Linuxの起動に慣れていない場合は、

http://www.cromwell-intl.com/unix/linux-boot.html

役立つかもしれません。

つまり、Linuxの深いレベルで開発したり、独自のディストリビューションを構築したり、カーネルの経験がない場合は、プログラミングが難しいと感じるかもしれません

http://www.linuxdevices.com/も役立つかもしれません

幸運を

于 2009-06-02T22:09:01.383 に答える
2

私は少し前に非常によく似た苦境にありました。Embedded Linux Primerを購入して読みましたが、(マイクロコントローラーの観点から) 高レベル OS への精神的な移行を行うのに非常に役立つ方法でした。

「時間をかけて」時間があれば、明らかに移行できます。しかし、すぐに慣れる必要がある場合は、技術的なメンターに指導してもらうことを強く検討することをお勧めします。

于 2009-06-03T11:56:45.203 に答える
1

また、 ucLinuxから始めて、Linux に取り掛かると役立つ場合もあります。基本的には、マイクロコントローラー上の Linux です。移行としての仮想メモリの側面がなくても、カーネルの感触をつかむことができます。すでに使い慣れているマイクロコントローラーを ucLinux がサポートしているかどうかを確認し、カーネルがそのアーキテクチャーとどのように相互作用するかを確認してください。

Embedded Linux Primer 本は、組込み Linux に頭を悩ませるのに最適であることに同意します。今のところ、C に固執する方がよいでしょう。C++ は待つことができ、ドライバー コードではなく、アプリケーションにとってより便利です。

ucLinux の動作に慣れたら、MMU と仮想メモリを備えた ARM などのマイクロプロセッサ アーキテクチャ上の通常の Linux カーネルから始めることができます。

ちょうど私の2セント!

于 2009-06-09T04:20:37.313 に答える