質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

ARMv7

ARMv7は、ARM命令セットアーキテクチャーVersion 7のことです。

MIPS

MIPSは、コンピュータの処理速度を表す単語。1MIPSは、1秒間に100万命令実行であることを表します。CPU/MPUなどのプロセッサの性能を反映するため、プロセッサの性能指標としても用いられます。

Q&A

解決済

2回答

244閲覧

組み込みにおいてinitramfsから外部ペリフェラルにアクセスする際に使用するドライバについて

teratail2020

総合スコア10

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

ARMv7

ARMv7は、ARM命令セットアーキテクチャーVersion 7のことです。

MIPS

MIPSは、コンピュータの処理速度を表す単語。1MIPSは、1秒間に100万命令実行であることを表します。CPU/MPUなどのプロセッサの性能を反映するため、プロセッサの性能指標としても用いられます。

0グッド

1クリップ

投稿2024/09/13 12:56

実現したいこと

ARMやMIPSとubootを組み合わせてlinuxを動かすことを考えています。

発生している問題・分からないこと

initramfsがrootfsをマウントする時やコンソール出力する際にCPUやボード毎のドライバ(SDカードドライバやUARTドライバ)はどこから取得するのでしょうか。
initramfsにはルートファイルシステムに配置されている/lib/modulesのようなカーネルドライバは含まれていないように思います。
https://zenn.dev/miwarin/articles/d2fb1532185891

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

initramfsの作り方はいろんなサイトに有りますがbusyboxをビルドして/binや/sbinの内容を作るものであり、ドライバに関する記述はありませんでした。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

initramfsの作り方はいろんなサイトに有りますがbusyboxをビルドして/binや/sbinの内容を作るものであり、ドライバに関する記述はありませんでした。

に関して補足です。
カーネルのドライバーをモジュールのままinitramfsに配置して、組み込みこともできます。
Busyboxをinsmodを有効にしてビルドすれば、カーネルモジュールを起動時に組み込むこともできます。
insmodは
https://atmarkit.itmedia.co.jp/ait/articles/1901/10/news012.html
です。
Busyboxのビルド設定は
https://monoist.itmedia.co.jp/mn/articles/0808/04/news117_2.html
が参考になるかと思います。

カーネルモジュールを配置するディレクトリは、llib/modules配下でなくてもよいです。

投稿2024/09/21 22:08

TWSNMP

総合スコア105

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teratail2020

2024/09/22 01:47

insmodの存在は知りませんでした。情報を提供下さりありがとう御座います。
guest

0

私が開発する場合は、起動(boot)時に必要なドライバーが組み込まれたカーネルをビルドして使っています。
ですからinitramfsから読み込む必要はありません。
起動後に読み込むドライバーは、/lib/modulesに配置しています。

カーネルのビルドは、

https://qiita.com/progrunner/items/d2ab0a85b3881a4b7ed8

などいろいろあります。
カーネルのコンフィグで、ドライバーを後から読み込むモジュールから組み込みに変更できます。

投稿2024/09/16 01:15

TWSNMP

総合スコア105

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teratail2020

2024/09/21 00:20 編集

解答ありがとうございます。initramfsにはドライバを配置せず、カーネル内に埋め込むということ理解致しました。また、https://labs.dese.iisc.ac.in/embeddedlab/device-tree-and-boot-flow/ からの情報になるのですが、そのカーネル内に埋め込んだドライバをinitramfsで使うためにはデバイスツリーの作成が必要になってくると思うのですが、以下の考えであっておリますでしょうか。 カーネルビルド時に使うモジュールを選択=> 該当するデバイスツリーを作成=> カーネル(モジュール含む)とデバイスツリーをビルド=> SDカードなどに配置=> bootm等でカーネル(モジュール含む)とデバイスツリーをddrに展開=> カーネルはデバイスツリーを元に使用するモジュールを統合
TWSNMP

2024/09/21 21:37

私が開発してるものではDevice Treeを変更した経験がないので、調べた範囲で回答します。 参考のサイト https://qiita.com/eofz/items/20cfa99601756fc98905 https://www.silex.jp/library/blog/20240529-2 などです。 開発しようとしてるボード(ハード)が何等かの開発キット(ボード)を元にしているのであれば その、設定を元にして変更するのがよいと思います。 質問に書かれていた https://zenn.dev/miwarin/articles/d2fb1532185891 の例の場合 https://www.qemu.org/docs/master/system/arm/versatile.html が参考なるかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問