2017-07-20 17 views
-2

私はアンドロイド携帯電話のカーネル開発に興味があります。私はアンドロイドカーネル開発についてインターネット上で検索し、Linuxマシン上でカーネルを構築する方法を知っているのは、カスタムカーネルを作成するためのツールの使い方だけですが、アンドロイドカーネルを作るためのコードを書く方法を知りたいのです。どのようにCプログラミングとALPで始める。私を案内してください。linuxを使ったAndroidカーネル開発

答えて

1

AndroidはLinuxカーネルを使用しているため、まずLinuxに精通している必要があります。

投稿から私はあなたがCプログラミング言語をあまり知らないと推測しています。カーネルの作業を始める前に、Cでアプリケーションを書くことができるはずです。アプリケーションを書くことができなければ、おそらくカーネルを理解できないからです。

C言語を学習するには、数十のリソースがありますので、Brian W. Kernighanの書籍「Cプログラミング言語」をお勧めします。 Denis M. Ritchie(Cの発明者)。

アプリケーションは、いわゆる「ユーザーモード」で動作し、カーネルによって仮想メモリにアクセスできます。アプリケーションが仮想空間にないメモリにアクセスしようとすると、カーネルはアボート信号を送信します。これにより、システムがクラッシュするのを防ぎます。カーネルはカーネルが「カーネルモード」で動作し、何か間違ったことが起きたときにシステム全体の停止から永続的なストレージの抹消などに至るまで、アドレス空間全体にアクセスできるため、カーネルではそうではありません。

最初にアプリケーションを書く方法を学んでください。ネイティブアプリケーションの場合は、「システムコール」について学習してカーネルが提供する機能を使用してみてください。この目的のために、私はMark Mitchelによる "Advanced Linux Programming"という本をお勧めします。そのウェブサイトはhttp://advancedlinuxprogramming.com/で自由にホストされています。あなたはここでいくつかの参照を見つけることができますhttps://en.wikibooks.org/wiki/The_Linux_Kernel

Linuxカーネルが提供するCとサービスの両方に慣れている場合は、あなたがカーネルに潜入することを考え始めるよりも、非常に人気のある本はRobert Loveの "Linux kernel development"です。私はそれが非常に最新ではないと思うが、それはその主題に関連する主要なトピックをカバーすべきである、おそらくもっと最新のリソースがあるだろう。

これは長い旅であり、あなたが実際にそれを "ユーザー空間"で行うことができるかもしれないことに応じて、まずそれについて考えるべきです。

+0

ありがとうございます。私は、メモリ管理ファイルの操作などを処理するポインタ構造のデータまでCプログラミングを知っています。しかし、私が言ったように私はサービスについて知らない。これはLinuxカーネル開発を開始するのに十分です –

+0

私があなただったら私はCをマスターし、私があなたに示したリンクを見ます。少数のアプリケーションを書いて、それまで気づいたらカーネルについての本を手に入れ、理解していないことを常に調べます。また、カーネルの特定の部分を選択する必要があります。例えば、デバイスドライバやファイルシステムを作成したいですか?あなたには多くの要因があるので、あなたを導くことは非常に難しいです。 –

+0

私を案内してくれてありがとう。 –

関連する問題