低価格のARMベースのミニデバイス(綿菓子など)がたくさん出ています。そのうちのいくつかはAndroidのみ、一部はLinux専用、一部は両方のオペレーティングシステムを実行できます。
唯一の問題は、これらすべてがARMベースのデバイスであることです。 Androidアプリはx86とAndroid on ARMの両方で実行できますが、ARMベースのLinuxで実行されている便利なアプリを見つけるのに苦労しました。実際、Ubuntu on ARMもまだ正しくサポートされていません。
2つの関連する質問があります。
- Ubuntu / Linuxと関連するx86アプリケーションを実行できる手頃な価格のx86デバイスを作成するのは難しいですか?
- Androidアプリはx86とARMでシームレスに動作しますが、LinuxアプリはARM用に再コンパイルする必要があるのはなぜですか?
答え1
厳密に言えば、「Linux」は、AndroidとUnix系のオペレーティングシステムの両方で使用されるオペレーティングシステムカーネルです。素人の観点からLinuxとして知られ、時にはより正式にGNU / Linuxとして知られており、UbuntuやDebianなどのディストリビューションで知られています。 LinuxオペレーティングシステムのカーネルはCで書かれており、基本的な機械語コードにコンパイルする必要があります。
Jordanが質問2にとてもよく答えたと思います。ユーザースペースGNU / LinuxとAndroidの違いこれはAndroidスタックです:
Linux (native machine code, instantiated by bootloader)
Dalvik (native machine code, instantiated by linux)
Application (java bytecode instantiated by dalvik)
Dalvikは、Javaでプリコンパイルされたバイトコードを実行時に解釈する「仮想マシン」です。つまり、サーバーのように常に実行され、要求を処理するユーザースペースアプリケーションです。バイトコード。 AndroidアプリケーションはJavaで書かれ、バイトコードでプリコンパイルされ、Dalvik仮想マシン内で実行されます。
これは、シェル、Python、Perl、Ruby、JavaScriptなどのランタイムインタプリタが実行する作業と非常によく似ています。つまり、これらのインタプリタ用に書かれたコードが機能することを意味します。通訳がそうするなら。コードと実行の間のステップの両方に同じ戦略はありませんが、これは別のトピックです。
これらのインタプリタはすべて、コンピュータを実行しているオペレーティングシステムのカーネルによって実行されます。カーネルとインタプリタの両方がディスク上に機械語コードとして存在します。カーネルはメモリに起動します。プロセッサを介して実行される命令の基本的な流れは、カーネルのカーネルはまた、RAMにロードされた他のマシンコードアーティファクト(dalvik仮想マシン、initデーモン、シェル、またはXサーバー)からのコマンドをストリーミングすることができます。は置き換えることはできません。すべてのハードウェアのこするので、長さの長さにつながり、時計をコントロールします。
android / dalvikは、PerlやPythonが単純化するように、ユーザーアプリケーションの移植性を単純化します。最適化の形でコードからコンパイルされます。特定のアーキテクチャの要件を満たすためのものではありません。。カーネルと同様に、インタプリタもアーキテクチャ固有の方法で設定してコンパイルする必要があります。
これでこれはGNU / Linuxスタックです:
Linux (native machine code, instantiated by bootloader)
Application (native machine code, instantiated by linux)
ここにあるアプリケーションには、Shell および init デーモンが含まれます。この意味では、シェルスクリプトはシェルによって解釈されるため、アプリケーションではなく、Java、Python、Perlなどのプログラムではありませんが、ディスクにデフォルトのマシンコードとして存在する場合は、シェルまたはinitデーモンで実行されるアプリケーションです。アプリケーションです。 、initとshellは実際にカーネルにこれを行うように要求するので、自分で行うことはできません。
シェル、initデーモン、Xサーバー、Webブラウザ(主にCまたはC ++で書かれている)など、これらのアプリケーションはすべて、アーキテクチャ固有の形式で個別にコンパイルする必要があります。
これがインスピレーションを与えることを願っています。 ARMベースのLinuxには2つの主流があります。 1 つは ARM で使用される armv6 命令セットです。ラズベリーパイ- これらは専門化されています。また、ほとんどのモバイルデバイスを含むと考えられるarmv7の一般的なストリームもあります。 Fedora、debian、ubuntuなどのARMディストリビューションは後者に属し、pidora、raspbianなどは前者に属します。
答え2
2番目の質問は、このサイトのトピックに関連しているので答えます。 Androidアプリケーションは仮想マシンと呼ばれるプロセスを実行しますDalvik
。これはJavaのJVMと非常によく似ています。これの基本的なアイデアは、「一度作成すればどこでも実行可能」です。 Javaコードはデフォルトの機械語コードにコンパイルされず、VMで実行できるバイトコードにコンパイルされます。 Cなどの言語では、コードはアーキテクチャに依存する機械語コードにコンパイルされます。