ここしばらくBeagleBone BlackにFreeBSDをインストールすべく、いろいろ試してきた。一応MicroSDのimg作成までたどり着けそうなので、まとめておこう。
crochet.shを使ったimg作成方法が良く作られているので、これを使う。ブラックボックス化されていて、何がされているのかは分かりにくいところはあるが、logも出力されて残るので、詳しく見てみることもできる。make xdev, make buildworld, make installworldとか何やってるのか良く分からないうちは、一連の作業を連続で行えるので、便利ではある。いろいろカスタマイズもできるようになっているみたいだ。
URLは https://github.com/kientzle/crochet-freebsd.git
1.コンパイル環境としてFreeBSD(i386)を用意する。
FreeBSDは10.0Alpha5のi386(32bit)版がよさそう。9.2と10.0ではコンパイラがgcc→clangになっているがBeagleBone用のソースが10.0なんで相性がよさそう。
32bitがいい理由は途中portsパッケージのインストールを要求されるのだが、これが32bitでのコンパイルの方が問題無いからだ。
PC上にVMWarePlayerを用意して、50Gくらいのディスクにインストールする。TeraTermからsshログインできるようにしておいたほうが便利。OSインストールして、ユーザーアカウント登録している所から始める。#はrootでの作業、$はユーザーアカウントでの作業。
# portsnap fetch
# portsnap extract # portsがインストールできるようになる
# cd/usr/ports/security/sudo
# make install clean # sudoのインストール
# visudo # これでユーザーがsudoを実行できるようにしておく
# cd /usr/ports/devel/git
# make install clean # gitのインストール SVNにチェックを入れると
# subversionもインストールされる
portsからgit (subversion含む), sudo をインストールしておく。ソースはユーザーアカウントしておいて、ログインディレクトリ直下に配置し、sudo コマンド使ってrootでコンパイル(crochet.shの実行)をすることになる。
2.chrochet-freebsdの取得
$ cd
$ git clone https://github.com/kientzle/crochet-freebsd.git
3.config.shを用意する
config.sh.sample を参考にconfig.shを用意する。
board_setup BeagleBone
option ImageSize 15900mb # for 16 Gigabyte card
option User brahmint
option SwapFile 768mb
option UsrSrc
FREEBSD_SRC=${TOPDIR}/src
WORKDIR=${TOPDIR}/work
とりあえず、このあたりを設定してみる。
4.crochet.shを実行する
$ sudo /bin/sh crochet.sh -c config.sh
Password:xxx
Starting at Fri Oct 11 15:16:46 JST 2013
Loading configuration from config.sh
Board: BeagleBone
Option: ImageSize 15900mb
Option: User brahmint
Option: SwapFile 768mb
Option: UsrSrc
grep: /usr/home/brahmint/crochet-freebsd/src/sys/conf/newvers.sh: No such file or directory
OS major version is:
Image name is: /usr/home/brahmint/crochet-freebsd/work/FreeBSD-armv6--BEAGLEBONE.img
[: : bad number
[: : bad number
[: : bad number
Object files are at:
This does not look like a FreeBSD source tree.
Did not find: /usr/home/brahmint/crochet-freebsd/src/COPYRIGHT
You can obtain a suitable FreeBSD source tree with the folowing commands:
$ svn co https://svn0.us-west.freebsd.org/base/head /usr/home/brahmint/crochet-freebsd/src
Set $FREEBSD_SRC in config.sh if you have the sources in a different directory.
Run this script again after you have the sources installed.
$
4.srcを用意する
chrochet.shよりソースを読み込めと指示あり。
$ svn co https://svn0.us-west.freebsd.org/base/head /usr/home/brahmint/crochet-freebsd/src
A src/tools
A src/tools/debugscripts
A src/tools/build
・
・ (途中略)
・
A src/games/fortune/README
A src/games/fortune/tools/do_uniq.py
A src/games/fortune/fortune/fortune.c
A src/games/ppt/ppt.c
A src/games/morse/morse.6
U src
Checked out revision 256307.
1時間ほどでチェックアウトが終わる。
5.chrochet.shの再実行
$ sudo /bin/sh crochet.sh -c config.sh
Starting at Fri Oct 11 18:32:41 JST 2013
Loading configuration from config.sh
Board: BeagleBone
Option: ImageSize 15900mb
Option: User brahmint
Option: SwapFile 768mb
Option: UsrSrc
OS major version is: 11
Image name is: /usr/home/brahmint/crochet-freebsd/work/FreeBSD-armv6-11.0-BEAGLEBONE.img
Object files are at:
Found suitable FreeBSD source tree in:
/usr/home/brahmint/crochet-freebsd/src
Please consider installing sysutils/u-boot-beaglebone-eabi port.
That will avoid the need for Crochet to build U-Boot.
Can't find appropriate FreeBSD xdev tools.
If you have FreeBSD-CURRENT sources in /usr/src, you can build these with the following command:
cd /usr/src && sudo make XDEV=arm XDEV_ARCH=armv6 xdev
Run this script again after you have the xdev tools installed.
$
6.クロスコンパイル環境の構築
ログにはthe xdev toolsをインストールしてねという事で
$ cd /usr/src && sudo make XDEV=arm XDEV_ARCH=armv6 xdev
(実行時間1時間38分)
7. U-Boot
ログにはsysutils/u-boot-beaglebone-eabiのportsも入れとけば、crochet.shでのu-bootのビルドは必要ないというこなので、こちらも。
$ cd /usr/ports/sysutils/u-boot-beaglebone-eabi && sudo make install clean
arm-eabi-gcc-4.5.4 とかのインストールがされるので、そこそこ時間は掛かる。
この途中で、gmp-5.1.3のビルド途中でエラーが出る。最後の方のログはこんな感じ。
/bin/sh /usr/ports/math/gmp/work/gnome-libtool --mode=compile --tag=CC ../mpn/m4-ccas --m4="m4" cc -c -DHAVE_CONFIG_H -I. -I.. -D__GMP_WITHIN_GMP -I.. -DOPERATION_`echo add_n | sed 's/_$//'` -O2 -pipe -fno-strict-aliasing -Wa,--noexecstack `test -f 'add_n.asm' || echo './'`add_n.asm
gnome-libtool: compile: ../mpn/m4-ccas --m4=m4 cc -c -DHAVE_CONFIG_H -I. -I.. -D__GMP_WITHIN_GMP -I.. -DOPERATION_add_n -O2 -pipe -fno-strict-aliasing -Wa,--noexecstack add_n.asm -fPIC -DPIC -o .libs/add_n.o
m4 -DHAVE_CONFIG_H -D__GMP_WITHIN_GMP -DOPERATION_add_n -DPIC add_n.asm >tmp-add_n.s
cc -c -DHAVE_CONFIG_H -I. -I.. -D__GMP_WITHIN_GMP -I.. -DOPERATION_add_n -O2 -pipe -fno-strict-aliasing -Wa,--noexecstack tmp-add_n.s -fPIC -DPIC -o .libs/add_n.o
cc: warning: argument unused during compilation: '-D HAVE_CONFIG_H'
cc: warning: argument unused during compilation: '-I .'
cc: warning: argument unused during compilation: '-I ..'
cc: warning: argument unused during compilation: '-D __GMP_WITHIN_GMP'
cc: warning: argument unused during compilation: '-I ..'
cc: warning: argument unused during compilation: '-D OPERATION_add_n'
cc: warning: argument unused during compilation: '-fno-strict-aliasing'
cc: warning: argument unused during compilation: '-fPIC'
cc: warning: argument unused during compilation: '-D PIC'
tmp-add_n.s:76:15: error: expected ']' in brackets expression
ldr r12, [r13, #0]
^
tmp-add_n.s:77:11: error: unexpected token in argument list
stmfd r13!, { r8, r9, r14 }
^
tmp-add_n.s:78:11: error: unknown token in expression
cmp r12, #1
^
tmp-add_n.s:79:2: error: invalid instruction mnemonic 'b'
b .Lent
^
tmp-add_n.s:87:11: error: unexpected token in argument list
stmfd r13!, { r8, r9, r14 }
^
tmp-add_n.s:88:10: error: unknown token in expression
cmn r0, #0
^
tmp-add_n.s:89:16: error: unknown token in expression
.Lent: tst r3, #1
^
tmp-add_n.s:90:2: error: invalid instruction mnemonic 'beq'
beq .Lskip1
^~~
tmp-add_n.s:91:17: error: unknown token in expression
ldr r12, [r1], #4
^
tmp-add_n.s:92:17: error: unknown token in expression
ldr r14, [r2], #4
^
tmp-add_n.s:93:2: error: invalid instruction mnemonic 'adcs'
adcs r12, r12, r14
^~~~
tmp-add_n.s:94:17: error: unknown token in expression
str r12, [r0], #4
^
tmp-add_n.s:96:10: error: unknown token in expression
tst r3, #2
^
tmp-add_n.s:97:2: error: invalid instruction mnemonic 'beq'
beq .Lskip2
^~~
tmp-add_n.s:98:10: error: unexpected token in argument list
ldmia r1!, { r8, r9 }
^
tmp-add_n.s:99:10: error: unexpected token in argument list
ldmia r2!, { r12, r14 }
^
tmp-add_n.s:100:2: error: invalid instruction mnemonic 'adcs'
adcs r8, r8, r12
^~~~
tmp-add_n.s:101:2: error: invalid instruction mnemonic 'adcs'
adcs r9, r9, r14
^~~~
tmp-add_n.s:102:10: error: unexpected token in argument list
stmia r0!, { r8, r9 }
^
tmp-add_n.s:104:15: error: unknown token in expression
bics r3, r3, #3
^
tmp-add_n.s:105:2: error: invalid instruction mnemonic 'beq'
beq .Lrtn
^~~
tmp-add_n.s:106:11: error: unexpected token in argument list
stmfd r13!, { r4, r5, r6, r7 }
^
tmp-add_n.s:108:16: error: unexpected token in argument list
.Ltop: ldmia r1!, { r4, r5, r6, r7 }
^
tmp-add_n.s:109:10: error: unexpected token in argument list
ldmia r2!, { r8, r9, r12, r14 }
^
tmp-add_n.s:110:2: error: invalid instruction mnemonic 'adcs'
adcs r4, r4, r8
^~~~
tmp-add_n.s:111:14: error: unknown token in expression
sub r3, r3, #4
^
tmp-add_n.s:112:2: error: invalid instruction mnemonic 'adcs'
adcs r5, r5, r9
^~~~
tmp-add_n.s:113:2: error: invalid instruction mnemonic 'adcs'
adcs r6, r6, r12
^~~~
tmp-add_n.s:114:2: error: invalid instruction mnemonic 'adcs'
adcs r7, r7, r14
^~~~
tmp-add_n.s:115:10: error: unexpected token in argument list
stmia r0!, { r4, r5, r6, r7 }
^
tmp-add_n.s:116:10: error: unknown token in expression
teq r3, #0
^
tmp-add_n.s:117:2: error: invalid instruction mnemonic 'bne'
bne .Ltop
^~~
tmp-add_n.s:119:11: error: unexpected token in argument list
ldmfd r13!, { r4, r5, r6, r7 }
^
tmp-add_n.s:121:20: error: unknown token in expression
.Lrtn: adc r0, r3, #0
^
tmp-add_n.s:122:11: error: unexpected token in argument list
ldmfd r13!, { r8, r9, r15 }
^
*** [add_n.lo] Error code 1
make[7]: stopped in /usr/ports/math/gmp/work/gmp-5.1.3/mpn
1 error
make[7]: stopped in /usr/ports/math/gmp/work/gmp-5.1.3/mpn
*** [all-recursive] Error code 1
make[6]: stopped in /usr/ports/math/gmp/work/gmp-5.1.3
1 error
make[6]: stopped in /usr/ports/math/gmp/work/gmp-5.1.3
*** [all] Error code 2
make[5]: stopped in /usr/ports/math/gmp/work/gmp-5.1.3
1 error
make[5]: stopped in /usr/ports/math/gmp/work/gmp-5.1.3
===> Compilation failed unexpectedly.
Try to set MAKE_JOBS_UNSAFE=yes and rebuild before reporting the failure to
the maintainer.
*** Error code 1
Stop.
make[4]: stopped in /usr/ports/math/gmp
*** Error code 1
Stop.
make[3]: stopped in /usr/ports/math/gmp
*** Error code 1
Stop.
make[2]: stopped in /usr/ports/devel/arm-eabi-gcc
*** Error code 1
Stop.
make[1]: stopped in /usr/ports/devel/arm-eabi-gcc
*** Error code 1
Stop.
make: stopped in /usr/ports/sysutils/u-boot-beaglebone-eabi
$
はて、どうしよう。手に余る感じだ。
0 件のコメント:
コメントを投稿