N900の代替ビルド環境

現在、N900用にコンパイルする公式の方法は、Scratchboxを使用する場合のみです。 彼はどうして私を喜ばせなかったの? はい、ここにあります。 第一に、これはi386でのみ利用可能 、これに続くすべての楽しみとともに、32ビットライブラリの束を保持する必要があるという形で利用できます。 第二に、/ scratchboxに何らかの理由ですべての規範に反して、同時にモジュールをbinfmtに登録し、他のいたずらをして、調和のとれた配布構造を破壊します。 第三に、非常に古いqemuがありますが、これは決して記録的なコンパイル速度を与えません。 そして4番目に、この奇跡は非常にゆっくりインストールされます(どこでホストされているのかわかりませんが、インストーラーはパケットの半分のパケットをかなり長い時間ダウンロードしました。
まあ、最も重要なこと。 qemu-user 、カーネルシステムコールのセット全体をサポートしていません 。 そして、それはソフトウェアの一部(特に、モノラル)が機能しないことを意味します。 この問題は、フルエミュレーションモードでアームシステムから環境にchrootすることで解決できますが、ポイント1を参照してください。
一般的に、悲惨な共有で、誰の手が本格的なプロジェクトでそれを使用するというアイデアを提起したのか、まったく想像できません。

原則として、デバイス上で直接コンパイルできます。 しかし、ここで問題はbusyboxがそこに立っているということです。それとまったく同じdpkg-buildpackageは非常に貧弱な友人です。 したがって、デバイスからrootfsを転送して使用しようとすると、このレーキはどこにも消えません。 それをcoreutilsに置き換えるのはそれほど簡単ではありません。依存関係の一部を壊し、ハーフシステムから落ちるからです。



そして何をすべきか? そして、私たちは他の方法で行きます。 ミュンヒハウゼン男爵の熱烈な信者を装い、ブートストラップ手順の最高の伝統(靴ひもで自分を持ち上げる)で、システムをパッケージからゼロからインストールします。 正確に、カットの下で読んでください。

実際、Debianに基づいたディストリビューション(APTパッケージ管理システム)を手に入れて、その心臓部を動かす必要があります。 そして、apt-getの助けを借りて初めて、他のすべてをインストールできます。 ただし、その操作にはdpkgが必要です。 また、dpkgを開始するには、少なくともいくつかの基本的な環境が必要です。 一般的に言えば、通常のディストリビューションでは、debootstrapは作成の大まかな作業を行いますが、Maemo用のスクリプトはありません。 そのため、これを行う最も簡単な方法は、手で行うことです。

まず、メインシステムにこのdpkgをインストールする必要があります。 Debianに基づいたものがなければ、心配する必要はありません。dpkgはほとんどすべてのディストリビューションのリポジトリにあります。 これに加えて、何らかの方法で「ゲスト」システムにchroot-goする必要があります。 これらの目的のために、qemu-userユーティリティ(上記のスクラッチボックスによって容赦なく悪用される)があります。これは、binfmtカーネルモジュールに知られ、現在のカーネルで直接他のアーキテクチャのバイナリを実行し、プロセッサをエミュレートし、システムコール(syscall)を適切に変換します。 どこでもパッケージの名前は異なりますが、qemu-arm-staticファイルと、必要に応じて書き込むものが必要です。 Ubuntuでは、必要なパッケージはqemu-kvm-extras-staticと呼ばれます。

さらに、8つのdebパッケージを取得する必要があります。 libc6、gcc-4.2-base、libgcc1、perl-base、sysv-rc、dpkg、libstdc ++ 6およびapt。 はい、システムをゼロから持ち上げるのに必要なパッケージは8つだけです。 maemo.org/packagesを見ると、安全にそれらを圧縮できます。 いいえ、嘘をついています。 彼らが言うように、これらのパッケージの内容は、sh、ln、rmなどの基本的なものがなければ「離陸しません」。 そして、彼らはcoreutilsに横たわっています。 また、coreutilsもそのようにはインストールされず、あらゆる種類の違いが必要です。 になる方法

前述のbusyboxが助けになります。 さらに、Maemoのバージョンは私たちにとって興味深いものではなく、ライブラリも必要です。 そのため、ports.ubuntu.comを踏みます(または、必要に応じてdebian.orgで)、そこから静的にリンクされたビジネスボックスを含むパッケージを引き出します。 彼は通常、カーネルシステムコールインターフェイス以外は必要ありません。 もの自体。 dpkg -xを使用してパッケージを解析し、そこから目的の実行可能ファイルを引き出します。

さて、これですべての準備が整いました。次に進むことができます。

最初に、将来のシステム用のディレクトリを作成し、そこにqemuをドロップします(chrootになるため、内部にある必要があります。そうしないと、奇跡は機能しません)。

mkdir -p root / usr / bin
cp / usr / bin / qemu-arm-static root / usr / bin


今、私たちはbiziboksaのコピーを/ビンに投げ込みます。 coreutilsおよびその他のパッケージのユーティリティはそれらを使用しますが、今では重要です。

mkdir -p root / bin
cp busybox root / bin / sh
cp busybox root / bin / ln
cp busybox root / bin / touch
cp busybox root / bin / chmod
cp busybox root / bin / chown
cp busybox root / bin / cp
cp busybox root / bin / tar
cp busybox root / bin / rm
cp busybox root / bin / gzip
cp busybox root / bin / grep


ここで、最小限のディレクトリセットを作成する必要があります。これがないと、メインシステムのdpkgは「ゲスト」に対して何もできません。

mkdir root / etc
mkdir -p root / var / lib / dpkg
mkdir root / var / lib / dpkg / tmp.ci
mkdir root / var / lib / dpkg /アップデート
mkdir root / var / lib / dpkg / info
mkdir -p root / var / log
mkdir -p root / dev / pts
タッチルート/ var / lib / dpkg / status
touch root / var / lib / dpkg / available
ルート/ etc / ld.so.confに触れます
mkdir / var / backups
/var/backups/infodir.bakをタッチします


今すぐパッケージを置く方法は? はい、簡単です。 Dpkgには--rootパラメーターがあり、指定されたディレクトリをルートと見なして機能します。 とても助かりました。 一般に、彼はアーキテクチャの不一致を誓う必要があります(そこにメインシステムがARMにないのですか?)、たとえば--force-architecture

export DPKG = "dpkg --force-architecture --root = root -i„

$ DPKGパッケージ/ libc6_2.5.1-1eglibc27 + 0m5_armel.deb
$ DPKGパッケージ/ gcc-4.2-base_4.2.1-4maemo13 + 0m5_armel.deb
$ DPKGパッケージ/ libgcc1_4.2.1-4maemo13 + 0m5_armel.deb
$ DPKGパッケージ/ perl-base.deb
$ DPKGパッケージ/ dpkg_1.14.25maemo3 + 0m5_armel.deb
$ DPKGパッケージ/ sysv-rc_2.85-22.osso15_all.deb


理論的には、彼はすべてが成功したことを報告する必要があります。 いくつかのパッケージをインストールするときに必要になるため、ここでゲストに/ dev / ptsをマウントします。

マウント--bind / dev / pts root / dev / pts


できることは、chroot root / bin / shだけです。 これで、新しく作成されたシステムになりました。 ここではまだ空であり、実際には何も機能しません。 次に、APTをインストールする必要があります。 以前にコピーした残りの2つのパッケージに、システムにすでに存在するdpkgを設定します。 まず、ロケールをまだ設定していないため、ロケールをCに設定します。

エクスポートLC_ALL = C
dpkg -i libstdc ++ 6_4.2.1-4maemo13 + 0m5_armel.deb
dpkg -i apt_0.7.20.2maemo13.1 + 0m5_armel.deb


次に、resolv.confにDNSを登録します。 私は通常8.8.8.8を入れますが、それは皆のためではありません。 また、sources.listを次の形式にします。

deb http_://repository.maemo.org/extras/ fremantle-1.3 free non-free
deb http_://repository.maemo.org/extras-testing/ fremantle-1.3 free non-free
deb http_://repository.maemo.org/extras-devel/ fremantle-1.3 free non-free
deb http_://repository.maemo.org/ fremantle / sdk free non-free


apt-get update
apt-get --allow-unauthenticated -y install apt-transport-https coreutils tar build-essential gzip grep bash aptitude libgtk2.0-dev
apt-get clean


apt-getがパッケージをすばやくダウンロードしてインストールする間、私たちは座って待ちます。 resolv.confを上書きするかどうかを尋ねられたら、フォレストを送信します。 出力では、コンパクトな環境(約200メガバイト、一般にネットワークから約60ポンプで排出)が得られ、そこにあらゆる種類の違いを安全にchrootしてコンパイルできます。 そして、Scratchboxの異なる曲線を使用せずにこれらすべてを実行できます。 できることはXephirを使用することだけですが、ハードウェアデバッグに多少なりとも近づいています。 必要に応じて、同じシステムをi386バージョンにデプロイできます。プロセスに違いはありませんが、Xサーバーが選択するはずです。

上記の手順の後、所有者(特に、OpenGLライブラリではなく、Qtがインストールされていない)にアクセスするために、 ここに行く必要がある場合があります。 ところで、nokia-binariesとnokia-appsはaptitudeを介してインストールする必要があります。 apt-getは何らかの理由で依存関係を解決できません。

qemu-userモードでは、一部のソフトウェアセットが機能しないことを思い出します。 qemu-arm-systemを使用して、ARMでアセンブルされた通常のLinuxのイメージに対して設定し、そこからchrootを実行することを強くお勧めします。 ubuntaのイメージは、 このマニュアルでここで作成できます。複雑なことは何もありません。 しかし、通常のGCCでは、qemu-userで十分です。

ご清聴ありがとうございました、すぐに会いましょう。

パッケージとインストーラースクリプトでアーカイブする

Source: https://habr.com/ru/post/J117364/


All Articles