2016-05-25 15 views
-3

私はライブラリとdalveik仮想マシンが配置されているアンドロイドの第2層にエンジンやプラットフォームを追加しなければならないプロジェクトに取り組んでいます。私の質問は、どのように2番目のレイヤーに何かを追加し、それにLinuxカーネルリソースを提供するべきかということです。linuxカーネルがアンドロイドランタイムとライブラリとどのようにインターフェースしますか?

どのようにLinuxカーネルがアプリケーションを実行するためにライブラリとアンドロイドランタイムとやり取りするのですか? 私が自由に話すことができるように探ることができるソースまたはリソースは何ですか?

答えて

0

実際には、ここで使用した単語は、あなたの要件とは異なる意味を持ちます。

私はあなたがライブラリのセットを実装する必要があると思います。

まずLinux OSの動作を理解してから、アンドロイドがその目的のためにどのように利用するのかを理解する必要があります。

ここでは、要件に関する簡単な説明をしようとします。

Linuxカーネルには、ユーザースペースとカーネルスペースの2つのレイヤーがあり、ユーザースペースはユーザーとのやりとりを担当し、カーネルはハードウェアとのやりとりを担当します。そして、両方がお互いにやりとりする方法は、システムコールと呼ばれる手順です。

ここでもコアコンセプトは同じです。示されているように、上位3つのレイヤはユーザ空間の一部です。下層はカーネル層です。ここ

layers of android

また、ユーザ空間とカーネル空間の間の通信のモードは、システムコールです。しかし、通常、ライブラリのレイヤだけが、上記のレイヤとカー​​ネルとの間の通信を行う役割を果たします。

あなたの要件があります。

は、どのように私はあなたが使用しているシステムは、あなたができるインターフェースを呼び出すに新しいライブラリを追加することができ、あなたはまた同じことをしなければならないこと

にLinuxカーネルリソースを第二の層で何かを追加し、提供しなければなりませんカーネルに話す。

また、Javaコードから共有ライブラリのメソッドにアクセスするには、共有ライブラリから公開されているメソッドの周りにJNI wrappersを持ち込む必要があります。

その後、あなたはまた、あなたのライブラリーを開発することができ、あなたの要件ごとに、すべてをだの.soファイル here you can refer a sample how to develop a shared library for android

を得ることができ、クロスコンパイル後。

adb pushコマンドを使用して、そのファイルを/system/libにプッシュする必要があります。

adb shell mount -o remount,rw /system //and then again try to push 
adb push mylibrary.so /system/lib/mylibrary.so 
adb shell chmod 644 /system/lib/mylibrary.so // set the permission 

いつか場合、あなたはまだできていない、そのファイルを押し、そのデバイスを根絶しようとすることができるシステム/その後、マウントしようと、ケースのプッシュが機能しない場合があり、そのことができます。

ライブラリが動作するデバイスを再起動した後。

+0

私はあなたの与えられたダイアグラムで2番目の層にドッキングエンジンを挿入する必要がありますが、そうするためには、ネイティブライブラリがLinuxカーネル(アンドロイド)で行うプロトコルとインターフェイスを知っていなければなりません。 。だから、私はドッカーエンジンとLinuxカーネルのインターフェイスを介してリソースを提供する必要があるコンテナを実行する。私は私の見解を説明してくれることを望みます。 ? –

+0

あなたはdockerエンジンが上層にapiを提供し、カーネル層と話すことを意味しますか?ドッキングエンジンの他の使用? –

+0

私はそれをやろうとしています。それを行う方法を見つけることができません。 https://www.docker.com/what-docker –

関連する問題