BeagleBoard用のAndroidを構築する


この記事では、ARMコントローラーのAndroidビルドプロセスについて説明します。 一部の人々にとって、この記事が開発者だけでなく、洗練されたユーザーにとっても役に立つことを願っています。 基本的に、もちろん、モバイルデバイスのオペレーティングシステムであるアセンブリのプロセスがどのように進行しているかを示したいと思います。 「モルモット」として、 BeagleBoard-xMを選択しました。
これは、このような目的に最適なデバッグボードの1つです。 とりわけ、結果を「感じる」ために、HDMIおよびS-VIDEO出力を備えています。 また、キーボード、マウスなどを接続するのに十分な4つのUSBポートもあります。 私の実験では、 eBayで購入したBeadaFrameを使用しましたが 、「TV」がそうであるように、この状態は絶対に重要ではありません。

したがって、ボードにはmicroSDがロードされ、Androidを構築するには、たとえばUbuntu 13.04-AMD x64などのLinuxマシンが必要です。仮想マシンを使用することはかなり可能ですが、MMCデバイスに仮想マシンからアクセスできるようにすることをお勧めします。 microSDカード自体ですが、最初に次のパッケージをインストールする必要があります。
sudo apt-get install aptitude sudo aptitude install ia32-libs sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 curl 


Androidでは、次の3つの主なものを収集する必要があります。


そして、仕事のために、ある種の作業ディレクトリを作成します。例: / home / ubuntu / Adroid /
 mkdir /home/ubuntu/Android cd /home/ubuntu/Android 

そしてすぐにこのディレクトリをパスに追加します:
 export PATH=/home/ubuntu/Android:$PATH 

仮想マシンにgitがインストールされていない場合は、次を実行する必要があります。
 sudo apt-get install git git config --global user.email "you@example.com" git config --global user.name "You Name" 

リポジトリの初期化


次に、Android自体のソースコードを取得する必要があります。このソースコードから、将来、オペレーティングシステムとファイルシステムのカーネルを構築します。 これを行うには、作業ディレクトリ/ home / ubuntu / Adroid内で、次のコマンドを実行します。
 curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > androidrepo 

その結果、 androidrepoファイルを取得しました 。これを使用して、リポジトリを操作します。 これを行うには、 androidrepoの実行可能ファイルの権限を割り当てます。
 chmod a+x androidrepo 

次に、作業ディレクトリ内に、ソースコード用のディレクトリを作成します。
 mkdir /home/ubuntu/Android/source cd /home/ubuntu/Android/source 

リポジトリを開始します。
 androidrepo init -u git://gitorious.org/rowboat/manifest.git -m rowboat-jb-am37x.xml 

正常に開始された後、リポジトリと同期します
 androidrepo sync 

同期にはカーネルのソースコードだけでなく、ローダーとカーネルの両方がアセンブルされるファイルシステムとコンパイラも含まれるため、同期はかなり長いプロセスです。
同期の最後に、次のような成功した同期に関する情報が表示されます。
作業ツリーの同期:100%(261/261)、完了。
ここで、ビルドする前に、カーネルとローダーの両方をビルドするコンパイラーへのパスを構成する必要があります。 コンパイラー自体は、リポジトリー内のprebuilts / gcc / linux-x86 / arm / arm-eabi-4.6 / binディレクトリーにあるため、PATH変数でパスを設定します。
 export PATH=/home/ubuntu/Android/source/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:$PATH 

これに関して、準備作業は完了したと見なすことができます。

ブートローダーアセンブリ


すでに書いたように、ブートローダーとして、u-bootを使用します。 ビルドするには、作業フォルダーにu-bootリポジトリーのクローンを作成する必要があります。
 git clone git://git.denx.de/u-boot.git u-boot 

そして、最初のビルドで最初のdistcleanコマンドであるブートローダーを収集します。スキップできます。
u-bootをビルドするには、すでにインストールされているパスであるarm-eabi-gccコンパイラを使用します。
 d u-boot-main make CROSS_COMPILE=arm-eabi- distclean make CROSS_COMPILE=arm-eabi- omap3_beagle_config make CROSS_COMPILE=arm-eabi- 

ブートローダーのビルド結果は、2つのMLOファイルとu-boot.binです。 これらのファイルは両方とも、u-bootディレクトリのルートにあります。 ビルドディレクトリなど、便宜上、どこにでもすぐに転送します。

カーネルアセンブリ


これで、カーネル自体のアセンブリに到達しました。 物理的には、これは1つのuImageファイルであり、実際にはこれ以上何も表しません-Linuxカーネル ただし、アセンブリを続行する前に、Java SE 1.6をインストールする必要があります。 また、バージョン1.6であり、リポジトリからインストールできます。
 sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install oracle-java6-installer 

または、たとえば、この記事で説明されているように。
次に、カーネルをビルドするには、Androidリポジトリ内のカーネルディレクトリに移動する必要があります。 私たちの場合: / home / ubuntu / Adroid / source / kernelそして、u-bootローダーをビルドする例に従ってビルドします:
 make ARCH=arm CROSS_COMPILE=arm-eabi- distclean make ARCH=arm CROSS_COMPILE=arm-eabi- omap3_beagle_android_defconfig make ARCH=arm CROSS_COMPILE=arm-eabi- uImage 

omap3_beagle_android_defconfigは 、カーネル構成が配置されているkernel / arch / arm / configsディレクトリから取得されることに注意してください 。 必要に応じて、特定のハードウェアに適した構成を変更、追加、または選択できます。
アセンブリの結果は、 kernel / arch / arm / bootフォルダー、つまり 私たちの場合/ home / ubuntu / Adroid / source / kernel / arch / arm / bootで、 uImageファイル、カーネル自体を取得し、すでに便利なビルドディレクトリに転送します。

ファイルシステムアセンブリ


これは、オペレーティングシステムのアセンブリの最終段階です。このため、リポジトリのルートに移動して、アセンブリする必要があります。
 make TARGET_PRODUCT=beagleboard droid 

ファイルシステムは長い間使用されており、ディスク領域には約20Gbが必要です。 ファイルシステム自体をコンパイルした後、必要なすべてのファイルを含むアーカイブを取得する必要があります。
 make TARGET_PRODUCT=beagleboard fs_tarball 

アーカイブが完了すると、ファイルfootfs.tar.bz2を取得します。このファイルはoutディレクトリ/home/ubuntu/Adroid/source/out/target/product/beagleboard/rootfs.tar.bz2にあり、実際にはAndroidファイルシステムが含まれています。 オペレーティングシステムの一部であるすべてのシステムファイル、アプリケーション、およびユーティリティを以下に示します。

システム構成


設定プロセス自体は非常に単純ですが、単純化するために、Texas InstrumentsのRowboat Toolsを使用します 。 ブートローダー変数の設定を含むboot.scrブートローダー設定ファイルが必要です。
Rowboat Tools自体をダウンロードして解凍します。
 cd /home/ubuntu/Android/ wget https://rowboat.googlecode.com/files/RowboatTools-JB.tar.gz tar -xvzf RowboatTools-JB.tar.gz 

私たちにとっては、 RowboatTools-JB / am37x / mk-bootscrディレクトリにあるmkbootscrファイルが注目されています。 ファイル内を見ると、同様の行があります。
 setenv bootargs 'console=ttyO2,115200n8 androidboot.console=ttyO2 mem=256M root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait init=/init ip=off omap_vout.vid1_static_vrfb_alloc=y vram=8M omapfb.vram=0:8M omapdss.def_disp=dvi omapfb.mode=dvi:1024x768-16' 

これはブートローダー変数のインストールです。 たとえば、画面の解像度を「デフォルト」とは異なる値に設定する必要があるため、 dvi1024x768-16を変更し、 mkbootscrを実行する必要があります。 その結果、新しい設定でboot.scrファイルを取得します。 boot.scrをすぐに変更しても機能しません。これは、チェックサムに関する情報を保持するためです。もちろん、ファイル自体のサイズと一致する必要があります。

インストールとダウンロード


ボード自体は、原則として、ARMコントローラー上のほとんどのデバイスは、NANDメモリー、SD / MMCまたはUSB / RS-232から起動できます。 この場合、MMCから起動します。 第一に、これはNANDメモリファームウェアよりも安全であり、第二に、私の意見では、特にデモンストレーションの目的でより便利です。
そのため、MMCが必要です(できれば2〜8 Gb)。 MMCをLinuxマシンに接続し、ファイルシステムを準備します。
起動可能なMMCディスクには、少なくとも2つのパーティションが含まれている必要があります。 最初のFAT16はブートと呼ばれ、そこからu-bootとオペレーティングシステムのカーネルが実際にブートされ、2番目のExt4はファイルシステムが置かれると、rootfsと呼ばれます。
ファイルシステムの作成を簡単にするために、使いやすくするために小さなbashスクリプトを用意しました。 コントローラがブートセクタを見つけられない場合、プラットフォームは単にブートできません。
 #!/bin/bash -e if ! [ $(id -u) = 0 ] ; then echo "This script should be run as sudo user or root" exit 1 fi mmcdisk=$1 conf_boot_startmb="1" conf_boot_endmb="96" sfdisk_fstype="0xE" label_boot="boot" label_rootfs="rootfs" # Umount existion partitions echo "Unmounting partitions" mountpoints=$(mount | grep -v none | grep "$mmcdisk" | wc -l) for ((i=1;i<=${mountpoints};i++)) do currentdisk=$(mount | grep -v none | grep "$mmcdisk" | tail -1 | awk '{print $1}') umount ${currentdisk} >/dev/null 2>&1 || true done dd if=/dev/zero of=${mmcdisk} bs=1M count=16 sync # Create partition table LC_ALL=C sfdisk --force --in-order --Linux --unit M "${mmcdisk}" <<-__EOF__ $conf_boot_startmb,$conf_boot_endmb,$sfdisk_fstype,* ,,,- __EOF__ sync partprobe ${mmcdisk} # Setup partitions echo "Setup partitions" LC_ALL=C fdisk -l "${mmcdisk}" LC_ALL=C mkfs.vfat -F 16 ${mmcdisk}p1 -n ${label_boot} sync LC_ALL=C mkfs.ext4 ${mmcdisk}p2 -L ${label_rootfs} sync 

スクリプトが機能するには、引数として、MMCデバイスの名前を渡す必要があります。 例: / dev / mmcblk0 スクリプト自体はこのMMCまたはHDDをチェックしないため、デバイスの名前には非常に注意して注意してください。
ブートディスクを作成したら、収集したファイルを正しくコピーするだけです。 これを行うには、ブートパーティションで、 uImageカーネル自体、 u-boot.binMLOローダー、およびboot.scr構成ファイルをコピーします 。 2番目のセクション:rootfsでは、ファイルシステムrootfs.tar.bz2でアーカイブを解凍する必要があります。
以上で、新しく組み立てたAndroidの準備が整い、microSDをアンマウントして、ターゲットデバイスに挿入し、電源をオンにします。 もちろん、リセットキーを押す必要がある場合があり、最初の起動には通常より少し時間がかかります。 しかし、まだ-これは「コールドスタート」です。

おわりに


ターゲットデバイスでの展開プロセスが異なることを除いて、携帯電話とタブレットのAndroidビルドプロセスは似ています。 また、BeagleBoardやBeagleBoneなどのデバッグボード用 デバイス構成のみが異なります。

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


All Articles