コンピュータカウボーイ見習いのメモ帳

仕事や趣味の備忘録です

【BeagleBoard】シリアル接続

前の記事書いてからだいぶ時間が空いてしまいましたが、今回はBeagleBoardとPCをシリアル接続してみます。

Windowsの場合はteratermを使っていたのですが、ubuntuの場合はminicomを使えば良いようです。

UbuntuでUSBシリアルを使ってコンソール接続する - HiiHahWIKI - making some notes for... -

ほぼ上記の記事とかぶってしまいますが、シリアルポートの設定をBeagleBoard用にしないといけないので、メモがわりに作業内容を記載します。

まずはBeagleBoardを立ち上げた状態でUSBシリアルケーブルでPCと接続します。

ただしく接続されたか確認するために下記のコマンドを実行します。

$ls /dev/ttyUSB0/
/dev/ttyUSB0/

ファイルがあれば接続できています。ドライバーとか特に設定しなくても認識しました。便利だな〜

次にminicomのインストールです。下記のコマンドでインストールします。

$sudo apt-get install minicom

次に設定画面を起動します。

$sudo minicom -s

設定画面でシリアルポートを選択します。ちなみに設定画面は下記のような形式でカーソルキーで選択してエンターで決定です。

     +-----[設定]------+
     | ファイル名とパス名     | 
     | ファイル転送プロトコル   |
     | シリアルポート       |
     | モデムとダイヤル      |
     | 画面とキーボード      |
     | "dfl" に設定を保存  |
     | 新規に設定を保存      |
     | 終了            |
     | Minicom を終了   |
     +---------------+

シリアルポートの設定は下記のようにします。変更するのは「シリアルポート」と「速度/パリティ/ビット」の項目です。

    +-----------------------------------------------------------------------+
    | A -    シリアルデバイス   : /dev/ttyUSB0 
    | B - ロックファイルの位置  : /var/lock
    | C -   Callin Program      :                                   |
    | D -  Callout Program      :                                   |
    | E - 速度/パリティ/ビット  : 115200 8N1 
    | F - ハードウェア流れ制御  : いいえ
    | G - ソフトウェア流れ制御  : いいえ 
    |                                                               | 
    |    どの設定を変更しますか?        
    +-----------------------------------------------------------------------+  

「シリアルボード」には最初に確認したファイルパスを入れます。

変更が完了したら、Escキーで設定を終了して、「"dtl"に設定を保存」の項目を選択します。

設定を保存しましたという表示になるので、最後に「Minicomを終了」を選択して設定は終了です。

接続の開始は下記のコマンドで行います。

$minicom

接続に成功すると下記のような表示になると思います。

    minicom へようこそ 2.5

オプション: I18n 
コンパイルされた日時は:  May  2 2011, 00:39:27.
Port /dev/ttyUSB0

CTRL-A Z を押すと、説明画面になります。          
                                                 
                                                 ています   |
: not found                                      
# AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0               
AT: not found
c1: not found
#

あとは通常のコンソール接続と同じように使えます。

【BeagleBoard】Androidのポーティング【イメージ書き込み編】

前回の記事カーネルもビルドできたので実際にイメージを書きこんで実行してみたいと思います。

実際にはTI SGXグラフィックドライバーのインストールも必要ですが、これは下記の参考資料通りに実施すればうまくいったので割愛します。

基礎から学ぶ 組み込みAndroid

まずはイメージ保存用のディレクトリを作成します。

$ mkdir ~/image

次にboot.scriptを作成します。こちらは参考資料ではXM用なので下記のWikiを参考にC3用を作成します。

TI-Android-FroYo-DevKit-V2.2 UserGuide - Texas Instruments Wiki

作成したboot.scriptは下記のようになります。

mmc init
fatload mmc 1 80200000 uImage
setenv bootargs 'console=ttyS2,115200n8 androidboot.console=ttyS2 mem=256M omapfb.mode=dvi:1280x720MR-16 omapdss.def_disp="dvi" root=/dev/mmcblk0p2 rw rootfstype=ext3 rootdelay=1 init=/init ip=off mpurate=720 omap_vout.vid1_static_vrfb_alloc=y'
bootm 0x80200000

次にu-boot用の「boot.scr」を作成します。こちらは参考書通りに実行します。

$mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "BeagleBoard" -d boot.script boot.scr

最後にビルドしたカーネルをコピーしてきます。

$ cp ~/myFroyo/kernel/arch/arm/boot/uImage .

作成したイメージをSDカードに書きこんでいきます。

~/images$ cp boot.scr /media/boot/
~/images$ cp uImage /media/boot/

Android本体もSDカードに書きこんでいきます。

/out/target/product/beagleboard$ sudo ../../../../build/tools/mktarball.sh ../../../host/linux-x86/bin/fs_get_stats android_roofs . rootfs android_rootfs.tar.bz2
sudo tar xjvf android_rootfs.tar.bz2 -C /media/rootfs

これで起動したのですが、黒い画面のままで立ち上がりませんでした。

そこでRS232C経由でコンソール画面を立ち上げてみたところ下記のエラーが

PVR_K: (FAIL) SGXInit: Incompatible HW core rev (10205) and SW core rev (10201).

調べてみるとBeagleBoard C3で立ち上げる場合はデバイスドライバを「OMAPES=3.x」のオプションをつけてビルドしなければいけないとのこと

Issue 74 - rowboat - Booting fail: PVR_K: (FAIL) SGXInit: Incompatible HW core rev (10205) and SW core rev (10201). - Android for Texas Instruments Devices (Sitara) - Google Project Hosting

OMAP35x_Android_Graphics_SDK_3_01_00_03$ make install OMAPES=3.x

これでビルドしてから再度Android本体をSDカードに書きこんで実行したところうまく立ち上がった・:*:・(*´∀`*)ウットリ・:*:・

f:id:countzero_channel:20140720192532j:plain

ちょっと解像度があっていないのか、ロゴが中央からずれてる:(;゙゚'ω゚'):

ただ以前でていたディスプレイ側のエラーがなくなったのでやっぱりデモ用だとデバイスドライバーの設定がうまく行っていなかったみたい^^;

f:id:countzero_channel:20140720192157j:plain

起動直後にこのエラーが、更にホームキーとかも効かない(;´Д`)

 

デバイスドライバーの作成までを目標にしていたけどまだ先は長そうだ(´・ω・`)

【BeagleBoard】ビルド済みイメージをSDに書き込む際のエラー

イメージの作成に失敗したのか起動しなかったので以前書き込んだビルド済みのイメージを再度書き込んだ時下記のエラーが発生した。

$ sudo ./mkmmc-android.sh /dev/sdd
Assuming Default Locations for Prebuilt Images
All data on /dev/sdd now will be destroyed! Continue? [y/n]
y
[Unmounting all existing partitions on the device ]
umount: /dev/sdd: マウントされていません
[Partitioning /dev/sdd...]
ディスク /dev/sdd は正常なパーティションテーブルを含んでいません
DISK SIZE - bytes
(standard_in) 1: syntax error
CYLINDERS -
expr: 構文エラー
[Making filesystems...]
[Copying files...]
[Copying START_HERE floder to boot partition]
mount: スペシャルデバイス /dev/sdd2 が存在しません
umount: /dev/sdd2: 見つかりません
[Copying all clips to data partition]
mount: スペシャルデバイス /dev/sdd3 が存在しません
cp: ディレクトリ `/mnt/Audio' を作成できません: 入力/出力エラーです
cp: ディレクトリ `/mnt/Images' を作成できません: 入力/出力エラーです
cp: ディレクトリ `/mnt/Video' を作成できません: 入力/出力エラーです
umount: /dev/sdd3: 見つかりません
[Done]

メッセージに表示している日本語が悪さしているようで正しくsh内の変数(CYLINDERS)に値が入っていなくてうまく行かなった模様。根本的な原因はわかりませんでしたが(特に追ってないけど)、LANG変数を日本語から英語にすることでうまく行きます。

$ export LANG=en_US
$ sudo ./mkmmc-android.sh /dev/sdd
Assuming Default Locations for Prebuilt Images
All data on /dev/sdd now will be destroyed! Continue? [y/n]
y
[Unmounting all existing partitions on the device ]
umount: /dev/sdd: not mounted
[Partitioning /dev/sdd...]
Disk /dev/sdd doesn't contain a valid partition table
DISK SIZE - 2002780160 bytes
CYLINDERS - 243
[Making filesystems...]
[Copying files...]
[Copying START_HERE floder to boot partition]
[Copying all clips to data partition]
[Done]

ビルド環境作っていくなかで変な設定したのかな?と思っていたがまさか日本語とは...

【BeagleBoard】Androidのポーティング【カーネルビルド編】

前回の記事でビルドが完了したのでカーネルのビルドを行います。

今回はbeagleBoard C3用のイメージを作成するので下記のページを参考にdefault configを「omap3_beagle_android_defconfig」にして実行します。

TI-Android-FroYo-DevKit-V2.2 UserGuide - Texas Instruments Wiki

$ cd kernel/
kernel$ make CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- omap3_beagle_android_defconfig
#
# configuration written to .config
#

次に実際のビルドを行います。

kernel$ make CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- uImage
scripts/kconfig/conf -s arch/arm/Kconfig
  CHK     include/linux/version.h
make[1]: `include/asm-arm/mach-types.h' は更新済みです
  CHK     include/linux/utsrelease.h
  SYMLINK include/asm -> include/asm-arm
  CALL    scripts/checksyscalls.sh
:1523:2: warning: #warning syscall recvmmsg not implemented
  CHK     include/linux/compile.h
  GZIP    kernel/config_data.gz
  IKCFG   kernel/config_data.h
  CC      kernel/configs.o
  LD      kernel/built-in.o
  LD      vmlinux.o
  MODPOST vmlinux.o
  GEN     .version
  CHK     include/linux/compile.h
  UPD     include/linux/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1
  KSYM    .tmp_kallsyms1.S
  AS      .tmp_kallsyms1.o
  LD      .tmp_vmlinux2
  KSYM    .tmp_kallsyms2.S
  AS      .tmp_kallsyms2.o
  LD      .tmp_vmlinux3
  KSYM    .tmp_kallsyms3.S
  AS      .tmp_kallsyms3.o
  LD      vmlinux
  SYSMAP  System.map
  SYSMAP  .tmp_System.map
  OBJCOPY arch/arm/boot/Image
  Kernel: arch/arm/boot/Image is ready
  GZIP    arch/arm/boot/compressed/piggy.gz
  AS      arch/arm/boot/compressed/piggy.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
  UIMAGE  arch/arm/boot/uImage
Image Name:   Linux-2.6.32
Created:      Sun Jul 13 02:28:53 2014
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    2618348 Bytes = 2556.98 kB = 2.50 MB
Load Address: 80008000
Entry Point:  80008000
  Image arch/arm/boot/uImage is ready

カーネルのビルドは特に問題が起きなかったので記事にする必要なかったかも^^;

【BeagleBoard】Androidのポーティング【ビルド編】

前回の記事から大分時間が開いてしまいましたが、ソースコードの準備ができたのでビルドを実行したいと思います。

とりあえず実行すると下記のエラー達が

$ make TARGET_PRODUCT=beagleboard -j2
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.2
TARGET_PRODUCT=beagleboard
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=MASTER
============================================
build/core/Makefile:19: 警告: ターゲット `out/target/product/beagleboard/system/usr/keylayout/qwerty.kl' へのコマンドを置き換えます
sdk/emulator/keymaps/Android.mk:13: 警告: ターゲット `out/target/product/beagleboard/system/usr/keylayout/qwerty.kl' への古いコマンドは無視されます
host Java: apicheck (out/host/common/obj/JAVA_LIBRARIES/apicheck_intermediates/classes)
Header: out/host/linux-x86/obj/include/libpng/png.h

...省略

host Java: dx (out/host/common/obj/JAVA_LIBRARIES/dx_intermediates/classes)
注:入力ファイルの操作のうち、未チェックまたは安全ではないものがあります。
注:詳細については、-Xlint:unchecked オプションを指定して再コンパイルしてください。
Notice file: frameworks/base/libs/utils/NOTICE -- out/host/linux-x86/obj/NOTICE_FILES/src//lib/libutils.a.txt

...省略

host Java: junit (out/host/common/obj/JAVA_LIBRARIES/junit_intermediates/classes)
注:一部の入力ファイルは推奨されない API を使用またはオーバーライドしています。
注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてください。
注:入力ファイルの操作のうち、未チェックまたは安全ではないものがあります。
注:詳細については、-Xlint:unchecked オプションを指定して再コンパイルしてください。
host Java: androidprefs (out/host/common/obj/JAVA_LIBRARIES/androidprefs_intermediates/classes)
Notice file: prebuilt/common/commons-compress/NOTICE -- out/host/linux-x86/obj/NOTICE_FILES/src//framework/commons-compress-1.0.jar.txt
host Java: archquery (out/host/common/obj/JAVA_LIBRARIES/archquery_intermediates/classes)
注:一部の入力ファイルは推奨されない API を使用またはオーバーライドしています。
注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてください。
注:入力ファイルの操作のうち、未チェックまたは安全ではないものがあります。
注:詳細については、-Xlint:unchecked オプションを指定して再コンパイルしてください。

...省略

Notice file: prebuilt/common/jfreechart/NOTICE -- out/host/linux-x86/obj/NOTICE_FILES/src//framework/jfreechart-1.0.9-swt.jar.txt
host Java: descGen (out/host/common/obj/JAVA_LIBRARIES/descGen_intermediates/classes)
cts/tools/utils/DescriptionGenerator.java:40: パッケージ com.sun.javadoc は存在しません。
import com.sun.javadoc.AnnotationDesc;
                       ^
...省略

cts/tools/utils/DescriptionGenerator.java:578: シンボルを見つけられません。
シンボル: クラス MethodDoc
場所    : DescriptionGenerator.TestClass の クラス
                for (MethodDoc method : superClass.methods()) {
                     ^
エラー 32 個
make: *** [out/host/common/obj/JAVA_LIBRARIES/descGen_intermediates/javalib.jar] エラー 41
make: *** 未完了のジョブを待っています....

上のほうに出てくる警告はあとから対処するとしてまずはエラーを消していきます。

 

host Java: descGen (out/host/common/obj/JAVA_LIBRARIES/descGen_intermediates/classes)
cts/tools/utils/DescriptionGenerator.java:40: パッケージ com.sun.javadoc は存在しません。
import com.sun.javadoc.AnnotationDesc;
                       ^

sunのjavadocが無いとでてる...

ちょっと調べたら下記のサイトを発見。

ドックレットの概要

com.sun.javadoc パッケージは、ドックレット API を定義するいくつかのインタフェースで構成されています。これらのインタフェースは、Java 2 SDKlib/tools.jar ファイルに含まれています。

libの下にあるtools.jarが必要なのか〜前回設定した「bashrc」の参照は「bin」からになっていたので読み込めなかったんだという仮定のもとその上から参照するように変更してみます。

$ vim ~/.bashrc

最終行というかJAVAの参照を下記のように変えます。

PATH=$PATH:/usr/local/jdk1.5.0_22/ #JDK Java5

これで再度実行してみます

$ make TARGET_PRODUCT=beagleboard -j2
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.2
TARGET_PRODUCT=beagleboard
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=MASTER
============================================
build/core/Makefile:19: 警告: ターゲット `out/target/product/beagleboard/system/usr/keylayout/qwerty.kl' へのコマンドを置き換えます
sdk/emulator/keymaps/Android.mk:13: 警告: ターゲット `out/target/product/beagleboard/system/usr/keylayout/qwerty.kl' への古いコマンドは無視されます
host C: acp <= build/tools/acp/acp.c
host C++: libhost <= build/libs/host/pseudolocalize.cpp
host C: libhost <= build/libs/host/CopyFile.c
target Generated: libclearsilver-jni <= out/host/common/obj/JAVA_LIBRARIES/clearsilver_intermediates/javalib.jar
target Generated: libclearsilver-jni <= out/host/common/obj/JAVA_LIBRARIES/clearsilver_intermediates/javalib.jar
host C: libneo_util <= external/clearsilver/util/neo_err.c

...省略

host C++: aapt <= frameworks/base/tools/aapt/Command.cpp
In file included from frameworks/base/tools/aapt/AaptAssets.h:18:0,
                 from frameworks/base/tools/aapt/AaptAssets.cpp:5:
frameworks/base/tools/aapt/ZipFile.h:65:5: 警告: ‘typedef’ was ignored in this declaration [デフォルトで有効]
In file included from frameworks/base/tools/aapt/AaptAssets.h:18:0,
                 from frameworks/base/tools/aapt/Main.h:14,
                 from frameworks/base/tools/aapt/Command.cpp:6:

...省略

frameworks/base/tools/aapt/Resource.cpp:566:98: 警告: 書式 ‘%ld’ は引数の型が ‘long int’ であると予期されますが、第 2 引数の型は ‘size_t {aka unsigned int}’ です [-Wformat]
host C++: aapt <= frameworks/base/tools/aapt/SourcePos.cpp
host C++: aapt <= frameworks/base/tools/aapt/ZipEntry.cpp
host C++: aapt <= frameworks/base/tools/aapt/ZipFile.cpp
In file included from frameworks/base/tools/aapt/ZipFile.cpp:26:0:
frameworks/base/tools/aapt/ZipFile.h:65:5: 警告: ‘typedef’ was ignored in this declaration [デフォルトで有効]

...省略

frameworks/base/libs/utils/RefBase.cpp: メンバ関数 ‘void android::RefBase::weakref_type::trackMe(bool, bool)’ 内:
frameworks/base/libs/utils/RefBase.cpp:483:67: エラー: passing ‘const android::RefBase::weakref_impl’ as ‘this’ argument of ‘void android::RefBase::weakref_impl::trackMe(bool, bool)’ discards qualifiers [-fpermissive]
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] エラー 1
make: *** 未完了のジョブを待っています....

以前出ててたjavaのエラーがなくなってC++のエラーが発生したorz

これはjavaのほうがうまくいったのか、ただ参照できなくなってコンパイル出来なかったのかわからないな(´・ω・`)

とりあえずC++のエラーを潰します。

エラーメッセージでググったら海の向こう側の人も同じエラー出てたみたい

Building Android: error: passing ‘const android::RefBase::weakref_impl’ | Bicosyes – since evermore…

frameworks/base/libs/utils/Android.mkに「fpermissive」オプションをつければ良いみたい。

fpermissiveオプションは適合しないコードを許可するらしい。

fpermissive

とりあえず情報を鵜呑みにしてmakeファイルを書き換えます。

LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) -fpermissive

 再度実行してみたら結局javadocが見つからないエラーが...

さっきjavaのエラーが出なかったのはmake cleanしてなかったから一度終わったjavaのところ飛ばしてたっぽい(凡ミス

問題のエラーの出ているmakeファイル「/cts/tools/utils/Android.mk」に

LOCAL_CLASSPATH := $(HOST_JDK_TOOLS_JAR) $(LOCAL_PATH)/lib/junit.jar

無理やり参照を追加してみた

LOCAL_CLASSPATH := $(HOST_JDK_TOOLS_JAR) $(LOCAL_PATH)/lib/junit.jar /usr/local/jdk1.5.0_22/lib/tools.jar 

参照を加えたら加えた部分のエラーは発生しなくなった模様(・∀・)

大元の参照に追加したらうまく行くかも(´・ω・`)ってことで先程のmakeファイルから参照を定義している大元を調べて書き換えてみた(^^)

/build/core/config.mk

HOST_JDK_TOOLS_JAR:= $(shell $(BUILD_SYSTEM)/find-jdk-tools-jar.sh)
HOST_JDK_TOOLS_JAR:= $(shell $(BUILD_SYSTEM)/find-jdk-tools-jar.sh) /usr/local/jdk1.5.0_22/lib/tools.jar

shell読むの大変なのでまずは直書き

これで実行すると下記のエラーが^^;

$ make TARGET_PRODUCT=beagleboard -j2

...省略

/home/sho/myFroyo/system/core/libcutils/threads.c:27: undefined reference to `pthread_getspecific'
out/host/linux-x86/obj/STATIC_LIBRARIES/libcutils_intermediates/libcutils.a(threads.o): In function `thread_store_set':
/home/sho/myFroyo/system/core/libcutils/threads.c:36: undefined reference to `pthread_key_create'
/home/sho/myFroyo/system/core/libcutils/threads.c:44: undefined reference to `pthread_setspecific'
collect2: ld はステータス 1 で終了しました
make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] エラー 1
make: *** 未完了のジョブを待っています....
host Executable: dexlist (out/host/linux-x86/obj/EXECUTABLES/dexlist_intermediates/dexlist)
true

「pthread_key_create」とかが参照できないっぽい(´・ω・`)

調べてみると「pthread.h」が必要な模様

Man page of PTHREAD_SPECIFIC

使うために必要なライブラリは「-lpthread」らしい。

エラーが出ているソースのある「system/core/libcutils/Android.mk」の中を見ると「-lpthread」の参照はある。そこでもう少し調べてみると下記の記事が

endroid: fix Android building error on ubuntu 11.10

完全に同じエラーで困ってる(´・ω・`)

この直し方を鵜呑みにして下記のように「frameworks/base/tools/aapt/Android.mk」(元記事では「appt」になってたけど実際は「aapt」)と「frameworks/base/tools/localize/Android.mk」を変更します。

ifeq ($(HOST_OS),linux)
LOCAL_LDLIBS += -lrt
endif
ifeq ($(HOST_OS),linux)
LOCAL_LDLIBS += -lrt -lpthread
endif

書き換えてからビルドすると今度は下記のエラーが

$ make TARGET_PRODUCT=beagleboard -j2

...省略

Exception in thread "main" java.lang.NoClassDefFoundError: /usr/local/jdk1/5/0_22/lib/tools/jar
make: *** [out/host/linux-x86/obj/EXECUTABLES/vm-tests_intermediates/tests] エラー 1
make: *** 未完了のジョブを待っています....

なぜこれで直るのか全然わからないけどとりあえず同じ事例を見つけたのでやってみる(´・ω・`)

AndroidFAQ < Android4SAM < TWiki

「/etc/security/limits.conf」の最終行を下記のように変更

#@student        -       maxlogins       4
# End of file
#@student        -       maxlogins       4
*       soft  nofile   8192                                                      
*       hard  nofile   8192
# End of file

次はこのエラー^^;

$ make TARGET_PRODUCT=beagleboard -j2

...省略

Install: out/host/linux-x86/framework/cts-dalvik-buildutil.jar
acp: file 'out/host/linux-x86/obj/EXECUTABLES/vm-tests_intermediates/tests/data' does not exist
make: *** [out/host/linux-x86/bin/../cts_dalviktests/timestamp] エラー 1

やっぱり同じくエラーが起きてる人がいたので参考に

Shuiqing Wang: [Solved]"acp: file 'out/host/linux-x86/obj/EXECUTABLES/vm-tests_intermediates/tests/data' does not exist"

対処療法な気がするけど存在しないディレクトリを作成します。

$ mkdir -p out/host/linux-x86/obj/EXECUTABLES/vm-tests_intermediates/tests/data

とりあえずやってみたけどなんで結果出力先に必要なディレクトリが生成されないんだろう?

それについては後で調べるとして再度実行

$ make TARGET_PRODUCT=beagleboard -j2

...省略

Image Name:   Linux-2.6.32
Created:      Sun Jul 13 01:19:10 2014
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    2618364 Bytes = 2557.00 kB = 2.50 MB
Load Address: 80008000
Entry Point:  80008000
  Image arch/arm/boot/uImage is ready
make[1]: ディレクトリ `/home/sho/myFroyo/kernel' から出ます
make -C external/ti_android_sgx_sdk ANDROID_ROOT_DIR=`pwd` TOOLS_PREFIX=prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- 
make[1]: ディレクトリ `/home/sho/myFroyo/external/ti_android_sgx_sdk' に入ります
make[1]: 警告: jobserver が利用不可: -j1 を使い, 親 make ルールに `+' を追加しましょう
Installing OMAP35x Android Graphics SDK...
make[1]: ./internal_install_SDK.exp: コマンドが見つかりませんでした
make[1]: *** [prepare] エラー 127
make[1]: ディレクトリ `/home/sho/myFroyo/external/ti_android_sgx_sdk' から出ます
make: *** [sgx] エラー 2

メッセージ見てたらそろそろ終わるかなと思った時に再びエラー

日本語で書いてあるけど「親 makeルールに`+' を追加しましょう」の意味がわからない^^;どこにだよ。。。

とりあえずオプションを「-j1」にして再度実行してみる。

$ make TARGET_PRODUCT=beagleboard -j1

...省略

make -C external/ti_android_sgx_sdk ANDROID_ROOT_DIR=`pwd` TOOLS_PREFIX=prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- 
make[1]: ディレクトリ `/home/sho/myFroyo/external/ti_android_sgx_sdk' に入ります
Installing OMAP35x Android Graphics SDK...
make[1]: ./internal_install_SDK.exp: コマンドが見つかりませんでした
make[1]: *** [prepare] エラー 127
make[1]: ディレクトリ `/home/sho/myFroyo/external/ti_android_sgx_sdk' から出ます
make: *** [sgx] エラー 2

「親 makeルールに`+' を追加しましょう」は特になにもしなくてよかった感じ(・∀・)

コマンドが見つからないのはインストールされてないからだよなと思いつつ調べてみると案の定インストールされていないものがあった。

TI-Android-Froyo-DevKit-V2.2のビルドでinternal_install_SDK.expが見つからないとエラーが出るときの対処 - ゲームとかプログラムとかパソコンとか

$ sudo apt-get install expect

でインストールしてから再度実行

make TARGET_PRODUCT=beagleboard -j1

...省略

Installation complete!

make[2]: ディレクトリ `/home/sho/myFroyo/external/ti_android_sgx_sdk/SDK' から出ます
make[1]: ディレクトリ `/home/sho/myFroyo/external/ti_android_sgx_sdk' から出ます

キタ━━━━(゚∀゚)━━━━ッ!!やっと終わった

試行錯誤の過程全部書いちゃったから長い記事になってしまった^^;

ポーティング完了したらまとめ直そう。

【BeagleBoard】Androidのポーティング【BeagleBoard用Androidソースの取得】

前回repoでBeagleBoardのソース取得しようとして失敗したのですが、manifestファイルを変えたらできたのでそのメモ。

まず再度イニシャライズするために「.repo」ファイルを削除します。

rm -rf .repo

これしてなかったせいで、下記のエラーがでてなにが悪いんだかわからなった^^;

$ repo init -u git://gitorious.org/rowboat/manifest.git -m TI-Android-FroYo-DevKit-V2.2.0.0.xml
fatal: manifest 'TI-Android-FroYo-DevKit-V2.2.0.0.xml' not available
fatal: manifest TI-Android-FroYo-DevKit-V2.2.0.0.xml not found

本題のmanifestを変えてのイニシャライズは下記を実行

$ repo init -u git://gitorious.org/rowboat/manifest.git -m TI-Android-FroYo-DevKit-V2.2.0.0.xml

ソースコードの取得は時間がかかるのでうまくいくことを祈るばかり。

【BeagleBoard】Androidのポーティング【ビルド準備編】

前回はビルドされているAndroidのイメージをBeagleBoardに書きこんでAndroidを起動させることに成功したので今回はポーティングに挑戦してみたいと思います。

作業が多くなると思うので今回はビルドできる環境の構築からソースの取得まで。

 

参考資料ではFroyoをビルドして使っていますが、かなり古いのでBeagleBoardM3にポーティングできる最新のものを取得したいと思います。

参考資料どおりにGetting the Sorceにアクセスしようと思ったら、ページがなくなっていたので、まず下記のサイトにアクセス

Initializing a Build Environment | Android Developers

 

ビルド環境の部分を読んでみるとGengerBreadからは64bitでないとビルドできないらしい。俺のPC32bitじゃん\(^o^)/

結局Froyoをビルドすることにしますorz そろそろ変えどきだと思ってたのでPC買い換えたら最新バージョンのビルドに挑戦しよう。

Java

気をとり直してまずはビルドするためにJavaの環境を構築していきます。最新のバージョンの場合はOpenJDKのJava7で良いようなのですが、今回ビルドする「Froyo」はJava 5でなければならないようなのでOracleのサイトからJDKをダウンロードします。

ダウンロードが完了したらファイルをJavaのファイルを展開したい場所に移動して実行します。

私は「/usr/local」にしました。

$ sudo mv jdk-1_5_0_22-linux-i586.bin /usr/local
$ cd /usr/local/
$ chmod 777 jdk-1_5_0_22-linux-i586.bin 
$ sudo ./jdk-1_5_0_22-linux-i586.bin

実行するとライセンス文が表示されるのでスペースキーで飛ばします。
最後にyesを入力します。
展開が完了したら、パスを通します。

$ vim ~/.bashrc

最終行に展開したディレクトリの中のbinのパスを記載します。

PATH=$PATH:/usr/local/jdk1.5.0_22/bin/ #JDK Java5

記載内容を反映させてJavaのバージョンを確認します。

$ source ~/.bashrc
$ java -version
java version "1.5.0_22"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03)
Java HotSpot(TM) Server VM (build 1.5.0_22-b03, mixed mode)

ビルドに必要なパッケージのインストール

まずソフトのインストールに必要な「aptitude」をインストールします。

普段は「apt-get」使っているんですが、参考書は「aptitude」を使ってたので。

$ sudo apt-get install aptitude

参考書でインストールが必要と言っているもので入っていないもののみインストールします。

$ sudo aptitude install git-core flex gperf libsdl-dev libesd0-dev libwxgtk2.6-dev libreadline5-dev uboot-mkimage

実行してみると下記のメッセージが出た^^;

libreadline5-dev のインストール候補のバージョンが見つかりません

Ubuntu – lucid の libreadline5-dev パッケージに関する詳細

ここを参考にインストールします。まずはapt-getのリストにミラーサイトを登録します。

$ sudo vi /etc/apt/sources.list

開いたファイルの最終行に下記のアドレスを追加します。

deb http://mirrors.kernel.org/ubuntu lucid main

再度インストールを試みます

$ sudo apt-get install libreadline5-dev
パッケージリストを読み込んでいます...
依存関係ツリーを作成しています...
状態情報を読み取っています...
パッケージ libreadline5-dev はデータベースには存在しますが、利用できません。
おそらく、そのパッケージが見つからないか、もう古くなっているか、
あるいは別のソースからのみしか利用できないという状況が考えられます
しかし、以下のパッケージで置き換えられています:
  libreadline-gplv2-dev lib64readline-gplv2-dev

E: パッケージ 'libreadline5-dev' にはインストール候補がありません

ということなので「libreadline-gplv2-dev」を変わりにインストールします。

$ sudo aptitude install libreadline-gplv2-dev
以下の新規パッケージがインストールされます:
  libreadline-gplv2-dev 
0 個のパッケージを更新、 1 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
233 k バイトのアーカイブを取得する必要があります。 展開後に 586 k バイトのディスク領域が新たに消費されます。
以下のパッケージには満たされていない依存関係があります:
 libreadline6-dev : 競合: libreadline-gplv2-dev [5.2-11 がインストール予定となっています]
以下のアクションでこれらの依存関係の問題は解決されます:

     以下のパッケージを削除する:
1)     libreadline6-dev         
この解決方法を受け入れますか? [Y/n/q/?] 

上位のバージョンだと動かない可能性もありますが、とりあえず削除してインストールします。

repoのインストール

ソースコードの取得に必要なrepoをインストールします。

作業用のディレクトリを作成してパスを通してrepoをダウンロードします。

$ mkdir bin
$ export PATH=$PATH:~/bin
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ ls -l bin/repo
-rwxr-xr-x 1 username workgroup 24081  5月 21 22:29 bin/repo

実行できる権限もつけておきます。

ソースの取得

とりあえずカレントディレクトリに「myFroyo」というディレクトリを作成してソースコードを取得してみます。

$ mkdir myFroyo
$ cd myFroyo
/myFroyo$ repo init -u git://gitorious.org/rowboot/manifest.git -m TI-Android-FroYo-Devkit-V2.xml
gpg: 鍵輪「/home/user/.repoconfig/gnupg/secring.gpg」ができました
gpg: 鍵輪「/home/user/.repoconfig/gnupg/pubring.gpg」ができました
gpg: /home/user/.repoconfig/gnupg/trustdb.gpg: 信用データベースができました
gpg: 鍵920F5C65: 公開鍵“Repo Maintainer <repo@android.kernel.org>”を読み込みました
gpg: 鍵692B382C: 公開鍵“Conley Owens <cco3@android.com>”を読み込みました
gpg: 処理数の合計: 2
gpg:               読込み: 2  (RSA: 1)

Get https://gerrit.googlesource.com/git-repo
remote: Counting objects: 117, done
remote: Finding sources: 100% (117/117)
remote: Total 2866 (delta 1519), reused 2866 (delta 1519)
Receiving objects: 100% (2866/2866), 2.40 MiB | 2.09 MiB/s, done.
Resolving deltas: 100% (1519/1519), done.
From https://gerrit.googlesource.com/git-repo
 * [new branch]      maint      -> origin/maint
 * [new branch]      master     -> origin/master
 * [new branch]      stable     -> origin/stable
 * [new tag]         v1.0       -> v1.0
 * [new tag]         v1.0.1     -> v1.0.1

...省略

 * [new tag]         v1.9.5     -> v1.9.5
 * [new tag]         v1.9.6     -> v1.9.6
Get git://gitorious.org/rowboot/manifest.git
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
fatal: cannot obtain manifest git://gitorious.org/rowboot/manifest.git

古い本なのでいやな予感はしましたがリポジトリなくなっているっぽいです。

とりあえず本家からダウンロードしてみます。

こっちの方法ならうまくいきました(・∀・)

【BeagleBoard】Androidのポーティング【BeagleBoard用Androidソースの取得】 - コンピュータカウボーイ見習いのメモ帳

 

/myFroyo$ repo init -u https://android.googlesource.com/platform/manifest
Get https://android.googlesource.com/platform/manifest
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (22) The requested URL returned error: 404
Server does not provide clone.bundle; ignoring.
remote: Counting objects: 106, done
remote: Finding sources: 100% (106/106)
remote: Total 1251 (delta 244), reused 1251 (delta 244)
Receiving objects: 100% (1251/1251), 1.05 MiB, done.
Resolving deltas: 100% (244/244), done.
From https://android.googlesource.com/platform/manifest
 * [new branch]      android-1.6_r1 -> origin/android-1.6_r1
 * [new branch]      android-1.6_r1.1 -> origin/android-1.6_r1.1

...省略

 * [new tag]         android-sdk-adt_r20 -> android-sdk-adt_r20
 * [new tag]         android-sdk-support_r11 -> android-sdk-support_r11

Your Name  [user]: user
Your Email [user@user-desktop.(none)]: user@mail.co.jp

Your identity is: user <user@mail.co.jp>
is this correct [y/N]? y

Testing colorized output (for 'repo diff', 'repo status'):
  black    red      green    yellow   blue     magenta   cyan     white 
  bold     dim      ul       reverse 
Enable color display in this user account (y/N)? y

repo has been initialized in /home/user/myFroyo

途中でユーザー名やらメールアドレスが聞かれるのでそのまま答えていきます。 Froyoは2.2なのでそのリポジトリを設定します。

/myFroyo$ repo init -u https://android.googlesource.com/platform/manifest -b android-2.2_r1
Your Name  [user]: user
Your Email [user@user-desktop.(none)]: user@mail.co.jp

Your identity is: user <user@mail.co.jp>
is this correct [y/N]? y

repo has been initialized in /home/user/myFroyo

早速ダウンロードを開始します。

repo sync

これでダウンロードまでの手順は終わりです。実際にビーグルボードで動くかは次回書きたいと思います、