ラズベリーパイのハッキング可能性のレベル


35

私は組み込みシステム(主にマイクロコントローラー)で約3年間働いています。私は実際にオープンソースのRPiの量を知りたいですか?私はarduinoがハードウェア/ソフトウェアなどの完全な詳細を提供することを知っています。しかし、RPiはどうですか?私のチームと私はラズベリーパイで次のことをしたいのでこれは重要です[このプロジェクトはardiino => no OSのようにRPiを使用するつもりです]:

  1. プライマリブートローダー(ROM)を書き換えて、外部SDカードではなくフラッシュから起動します。
  2. オンボードフラッシュにセカンダリブートローダーを用意します。これにより、piのusbポートがアクティブになり、リッスンします。(PCから取得する)バイナリコードを受け入れ、フラッシュに保存する必要があります。後で実行を開始します。
  3. 通信プロトコルを処理する独自のデバイスドライバーを開発します。
  4. PI用の独自のアップローダーとデバッグ環境を開発し、ARM用の組み込みCのカスタム実装(GPIOなどの制御に必要)を開発します。
  5. 可能であれば、組み込みシステム用に独自のOSを実装します。

これはラズベリーパイで可能ですか?そうでない場合:
->私の5つの目標のうち、ラズベリーパイでは不可能なもの。PIと連携する必要がある場合、プロジェクトにどのような変更を加える必要がありますか?
->市場には他にどんなボードがありますか?

回答:


76

いくつかの背景

あなたが知っておくべき最も重要なことは、RaspberryPiがARM CPUメインCPUではない奇妙な獣であるということです-それは唯一のコプロセッサですVideoCore GPU。RaspberryPiが起動すると、GPUブロブがSDカードからL2キャッシュに読み取られて実行されます。次に、このコードはすべての重要な周辺機器(RAM、クロックなど)を表示し、を開始しARM CPUます。その後、第2ステージのブートローダーまたはオペレーティングシステム自体を実行できますARM CPU

GPU blobはブートローダーだけではありません。実際には、それ自体がオペレーティングシステム(Video Core OS)です。システムのいくつかの重要な要素は、ARM CPUから直接アクセスできず、それらを使用するためにGPUmailboxメッセージングシステムを使用して)通信する必要があります。これに関する部分的なドキュメントが利用可能です。現在Video Core OSVCOS)はBroadcomの従業員によって随時拡張されており、Linuxカーネル、RISC OSまたは場合によっては趣味のOSで必要な機能を有効にします。ただし、これに関する適切なドキュメントはありませんRaspberryPi forumgithubおそらくこれに関する情報を見つける他の場所。しかし、それはどこかにあります。また、RaspberryPiで独自のベアメタルコードやOSを作成して支援する人もいます。そしてもちろん、多くのオープンソースコード-RasbperryPiのLinuxカーネルなど。

VideoCoreはプロプライエタリであり、公式のドキュメントと開発ツールはありません。したがって、多くの労力をかけたくない限りVCOS、独自のコードで書き直すことはできません。ただし、Video Coreのリバースエンジニアリングには多少の努力が必要です。詳細については、こちらをご覧ください

もう1つの問題は、USBSynopsys のスタックがプロプライエタリであり、ドキュメントがないことであり、ドキュメントを使用しても確実に実装するのは難しいようです。しかし、ここでもコードは利用可能です(Linuxカーネル、u-boot、CSUD)。の高度なグラフィックス機能を使用Video Coreするのも難しい場合があります- グラフィックスライブラリにはいくつかのオープンソースコードがありますが、それはARMサイド専用です。

そうは言っても、RISC OS利用可能な情報からポートを作成することは可能でした(ただし、一般にアクセス可能な情報のみを使用しているかどうかは完全にはわかりません)、一部の人々はメインライン用にLinuxカーネルを書き換えていますあるFreeBSDポート、「U-boot`など。したがって、独自のOSを作成することは間違いなく可能です。それはおそらくそう簡単ではありません。

あなたの目標

番号1

私の知る限り、SoCが説明された方法以外の方法で起動する方法はありません。そのため、最初の段階のブートローダーをオンにする必要がありSD cardます。そしてGPUARM別の問題であるバイナリではなく、バイナリでなければなりません。また、RaspberryPiにはオンボードフラッシュがありませんが、これも問題です。

2番

主な問題は、flashRaspberryPi にオンボードがないことです。あなたはそれを追加することができ、それはあなたのブートローダーでアクティブ化されることができます(これはすでに第2ステージのブートローダーでなければなりません)。ただし、USBドライバーの作成には問題があります。

番号3、4、5

これは大した問題ではないはずです。周辺機器のほとんど(少なくともアクセス可能なものARM)はここに文書化されています。SoCを完全に構成するので、既存のブートローダーによりこれがさらに簡単になります。あなたは見ることができ、ここここにいくつかのコードとドキュメントのために。

代替案

私はRaspberryPiほど優れたボードを知らないので、何かを推薦するのは難しいですが、OMAPベースのBeagleboard / Beaglebone / Pandaboardなどの成熟したプロジェクトを見てみるか、Allwinnerベースのような新しいボードの開発をフォローすることができますCubieboardまたはPCduino。それはすべて、まさにあなたが何を達成したいかによって異なります。


3
この回答を+100したいです。よくやった。
オリテナ

@maligree lol、心配しないでください-すでに行われています!:)
xxmbabanexx

1
Beableboneの+1は、100%オープンソースであり、ハードウェアを「再回転」して独自の回路基板を作成できるため、
ポートフォワードポッドキャスト

5

Krzysztofのすばらしい答えを更新するために、Broadcomは、オープンソースGPUドライバーの作成を支援するために、3-Clause BSDとしてライセンスされたコードを最終的に公開しました。:2016年に開始したラズベリーパイVPUファームウェアブロブ交換する「RPI-オープンファームウェア」努力https://github.com/christinaa/rpi-open-firmwareをhttps://news.ycombinator.com/item?id=11703842で詳細をご覧ください

ODROID-C1、Cubieboard、Banana Pi、OlimexのOLinuxIno WifiおよびOlinuxIno Mini、EOMA68、Beaglebone blackなど、RaspberryPi-Debian Wikiから簡単に説明およびリンクされた代替ボードが多数あります。


個人的には、代替手段はそれほど優れていないと思います。多くのODROIDボードはブートローダーで署名チェックを実施し、独自のコードを実行できないようにします。TI OMAP3ファミリーは、コードを呼び出す前にセキュアモードが存在し、コードで実行できることも制限します。RPiのVPUは実際には非常に優れており、他のボードよりも優れていると思います。また、今では素晴らしいツールチェーンが用意されているので、見栄えは良くなっています。
クリスティーナブルックス

1

実際には、Raspberry PiでU-bootブートローダーを使用してできることがたくさんあります。基本的には、GPUにUブートイメージを「OS」としてARMコプロセッサーSoCをロードさせるだけです。

この記事は例として役立つことがわかりました。まだやっていませんが、やるつもりです。私は自分でこれを行う方法を探しているときにたまたまあなたの質問を見つけました。それからその記事を見つけました。

U-bootイメージを構築するためのより広範な手順を含む別の記事があります。


1
これは最初は役に立つかもしれませんが、数年後にリンクが機能しなくなり、コンテンツが何であるかについてのヒントが1つもありません。少なくとも、どのU-bootブランチとどのコンパイラーを使用したかを伝えることを検討してください。
ドミトリーグリゴリエフ

ドミトリーに感謝します。すぐにこれに戻り、時間ができたら修正します。
アラン・ヒム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.