z80oolong さんはインスタンス qiitadon.com のユーザーです。アカウントさえ持っていればフォローしたり会話したりできます。 もしお持ちでないなら こちら からサインアップできます。

# Termux 開発コミュニティによる libandroid-shmem.so を Debian noroot 環境に導入する

## はじめに

Debian noroot とは、 Android OS 上において root 権限を取ることなく Debian 環境を構築するためのアプリケーションです。

CPU の性能とメモリ容量が潤沢にある Android 端末であれば、 Debian noroot の導入によって Android 端末上で非常に軽快な Debian 環境を実現することができます。

[pelya 氏][1]によって作成された Debian noroot 環境には、共有メモリ関連の標準 C ライブラリ関数を /dev/ashmem によってエミュレートする Debian noroot 環境のための動的ライブラリである libandroid-shmem.so が導入されています。

[1]:github.com/pelya

(続き)
しかし、 [pelya 氏][1]による
libandroid-shmem.so では、 Qt の共有メモリ関係のライブラリ関数を用いたソフトウエアが正常に動作しなかったり、その他の共有メモリを使用したソフトウェアの動作のパフォーマンスがあまり良くないという問題があります。

ここで、 Debian noroot 環境において、 [pelya 氏][1]による libandroid-shmem.so に代えて、 [termux の開発コミュニティ][2]によって改良された libandroid-shmem.so を導入することにより、Qt の共有メモリ関係のライブラリ関数を用いたソフトウエアの正常な動作や、その他の共有メモリを使用したソフトウェアの動作のパフォーマンスの向上を図ることが出来るようになりました。

[1]:github.com/pelya
[2]:termux.com/

## 差分ファイルの適用とソースコードのコンパイル

まず、 [termux の開発コミュニティ][2]による libandroid-shmem.so の github 版若しくは v0.2 版を以下の URL から入手し、 tarball の場合は適当なディレクトリに展開します。

- github.com/termux/libandroid-s
- github.com/termux/libandroid-s

次に、[termux の開発コミュニティ][2]による libandroid-shmem.so を Debian noroot 環境に再移植するための差分ファイルを以下の URL より入手します。

- gist.githubusercontent.com/z80

[2]:termux.com/

(続き)
そして、入手したソースコードが置かれているディレクトリに、以下のようにして、差分ファイル libandroid-shmem-termux-0.2_1-fix.diff を適用して通常通りに make コマンドによってコンパイルすると、動的ライブラリ libandroid-shmem-termux.so が生成されます。

$ patch -p1 < /path/to/diff/libandroid-shmem-termux-0.2_1-fix.diff
(ここに、 /path/to/diff は、 libandroid-shmem-termux-0.2_1-fix.diff が置かれているディレクトリのパス名)
$ make ... (オプションを適宜設定すること。)

(続き)
この動的ファイルを使用するには、まず最初に生成された動的ライブラリを Debian noroot 環境のルートディレクトリにインストールします。

# install -v -m 0755 libandroid-shmem-termux.so /

次に、 Debian noroot 環境の初期化ファイルである /proot.sh において、環境変数 LD_PRELOAD が定義されている行を以下のように修正します。

# LD_PRELOAD="... /libandroid-shmem.so ..."
LD_PRELOAD="... /libandroid-shmem-termux.so ..." # /libandroid-shmem.so を /libandroid-shmem-termux.so に修正。

初期化ファイル /proot.sh の修正後は、 Debian noroot 環境を再起動して設定を有効にします。

z80oolong @z80oolong

## 結論

[pelya 氏][1]による libandroid-shmem.so と異なり、 [termux の開発コミュニティ][2]による libandroid-shmem.so は、関数 shmget(2) の第一引数 key に IPC_PRIVATE 以外の値を指定出来るために、 [termux の開発コミュニティ][2]による libandroid-shmem.so の導入によって Qt の共有メモリ関連のライブラリ関数を用いたソフトウェア等が Debian noroot 環境 で正常に動作し、また、他の共有メモリを使用したソフトウェアについても動作のパフォーマンスが向上したことが判りました。

[1]:github.com/pelya
[2]:termux.com/

· Web · 0 · 1