!eeeenoteでPython
!とりあえずビルド用のLinuxをつくろう
Debianにしてみる (Ubuntuはなぜか途中で上手く行かなかった)
VirtualBoxに入れてみよう
http://www.debian.org/CD/netinst/
ネットブートイメージでやってみる
VirutalBoxでテキトーなVMを作って上記から落としてきたmini.isoを入れて起動
- ブート画面が出てくるので「Install」
- Language -> Japanese
- 画面に従う
パッケージは
- SSHサーバ
- 標準システムユーティリティ
でいいかな
ネットワークはブリッジアダプタにしよう(はじめはNATだった)
sshサーバも入れたのでココからはsshで入って作業する。
!開発環境を作ろう
http://freeenote.org/
- http://freeenote.org/pages/devkit_howto.html
ここにamd64とi386のパッケージがある 今回はi386で
>> code bash
ina@foreeenote:~/dl$ wget http://freeenote.org/downloads/devkit/eeenote-toolchain-i386.deb
<<
ダウンロードしよう
>> code bash
ina@foreeenote:~/dl$ ls
eeenote-toolchain-i386.deb
<<
>> code bash
root@foreeenote:/home/ina/dl# dpkg -i eeenote-toolchain-i386.deb
以前に未選択のパッケージ eeenote-toolchain を選択しています。
(データベースを読み込んでいます ... 現在 41758 個のファイルとディレクトリがインストールされています。)
(eeenote-toolchain-i386.deb から) eeenote-toolchain を展開しています...
dpkg: 依存関係の問題により eeenote-toolchain の設定ができません:
eeenote-toolchain は以下に依存 (depends) します: qtcreator (>= 1.3.1-1ubuntu1.1) ...しかし:
パッケージ qtcreator はまだインストールされていません。
dpkg: eeenote-toolchain の処理中にエラーが発生しました (--install):
依存関係の問題 - 設定を見送ります
処理中にエラーが発生しました:
eeenote-toolchain
<<
でおぼえさせておいて
>> code bash
root@foreeenote:/home/ina/dl# aptitude install
以下の、インストールが完了していないパッケージが設定されます:
eeenote-toolchain{b}
インストール・削除・更新されるパッケージがありません。
更新: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
0 バイトのアーカイブを取得する必要があります。展開後に 0 バイトのディスク領域が新たに消費されます。
以下のパッケージには満たされていない依存関係があります:
eeenote-toolchain : 依存: qtcreator (>= 1.3.1-1ubuntu1.1) [インストールされません]
以下のアクションでこれらの依存関係の問題は解決されます:
以下のパッケージを削除する:
1) eeenote-toolchain
この解決方法を受け入れますか? [Y/n/q/?]n
以下のアクションでこれらの依存関係の問題は解決されます:
以下のパッケージをインストールする:
1) dbus [1.6.8-1+deb7u1 (stable)]
2) fontconfig [2.9.0-7.1 (stable)]
3) gifsicle [1.67-1 (stable)]
4) libaudio2 [1.9.3-5 (stable)]
5) libavahi-client3 [0.6.31-2 (stable)]
6) libavahi-common-data [0.6.31-2 (stable)]
7) libavahi-common3 [0.6.31-2 (stable)]
8) libcups2 [1.5.3-5 (stable)]
9) libdbus-1-3 [1.6.8-1+deb7u1 (stable)]
10) libgl1-mesa-swx11 [8.0.5-4+deb7u2 (stable)]
11) libglib2.0-0 [2.33.12+really2.32.4-5 (stable)]
12) libglib2.0-data [2.33.12+really2.32.4-5 (stable)]
13) libgstreamer-plugins-base0.10-0 [0.10.36-1.1 (stable)]
14) libgstreamer0.10-0 [0.10.36-1.2 (stable)]
15) libjbig0 [2.0-2 (stable)]
16) libjpeg8 [8d-1 (stable)]
17) liblcms1 [1.19.dfsg-1.2 (stable)]
18) libmng1 [1.0.10-3 (stable)]
19) liborc-0.4-0 [1:0.4.16-2 (stable)]
20) libosmesa6 [8.0.5-4+deb7u2 (stable)]
21) libpng12-0 [1.2.49-1 (stable)]
22) libqt4-declarative [4:4.8.2+dfsg-11 (stable)]
23) libqt4-designer [4:4.8.2+dfsg-11 (stable)]
24) libqt4-help [4:4.8.2+dfsg-11 (stable)]
25) libqt4-network [4:4.8.2+dfsg-11 (stable)]
26) libqt4-opengl [4:4.8.2+dfsg-11 (stable)]
27) libqt4-script [4:4.8.2+dfsg-11 (stable)]
28) libqt4-sql [4:4.8.2+dfsg-11 (stable)]
29) libqt4-sql-sqlite [4:4.8.2+dfsg-11 (stable)]
30) libqt4-svg [4:4.8.2+dfsg-11 (stable)]
31) libqt4-xml [4:4.8.2+dfsg-11 (stable)]
32) libqt4-xmlpatterns [4:4.8.2+dfsg-11 (stable)]
33) libqtcore4 [4:4.8.2+dfsg-11 (stable)]
34) libqtdbus4 [4:4.8.2+dfsg-11 (stable)]
35) libqtgui4 [4:4.8.2+dfsg-11 (stable)]
36) libqtwebkit4 [2.2.1-5 (stable)]
37) libsystemd-login0 [44-11 (stable)]
38) libtiff4 [3.9.6-11 (stable)]
39) qt4-doc [4:4.8.2+dfsg-11 (stable)]
40) qt4-qmlviewer [4:4.8.2+dfsg-11 (stable)]
41) qtcreator [2.5.0-2 (stable)]
42) qtcreator-doc [2.5.0-2 (stable)]
43) shared-mime-info [1.0-1+b1 (stable)]
44) xvt [2.1-20.1 (stable)]
以下の依存関係を未解決のままにする:
45) qtcreator が gdb を推奨
46) qtcreator が qt4-demos を推奨
47) qtcreator が qt4-dev-tools を推奨
この解決方法を受け入れますか? [Y/n/q/?]
<<
1つ目は気に入らないのでn 2つ目でYを選択
とりあえずインストールできたかな?
>> code bash
ina@foreeenote:~/dl$ ls /opt/ea800-toolchain/
arm-unknown-linux-gnueabi bin build.log.bz2 lib libexec share
<<
ココに入ったっぽい
!Pythonのクロスビルド
ここからはこのページに従ってみる
http://randomsplat.com/id5-cross-compiling-python-for-embedded-linux.html
忠実に真似するため2.7.2を拾ってくる
http://www.python.org/ftp/python/2.7.2/
>> code bash
ina@foreeenote:~/dl$ wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz
<<
>> code bash
ina@foreeenote:~/build$ tar xzf ../dl/Python-2.7.2.tgz
ina@foreeenote:~/build$ ls
Python-2.7.2
ina@foreeenote:~/build$ cd Python-2.7.2/
ina@foreeenote:~/build/Python-2.7.2$ ./configure
(略)
ina@foreeenote:~/build/Python-2.7.2$ make python Parser/pgen
(略)
ina@foreeenote:~/build/Python-2.7.2$ mv python hostpython
ina@foreeenote:~/build/Python-2.7.2$ mv Parser/pgen Parser/hostpgen
ina@foreeenote:~/build/Python-2.7.2$ make distclean
<<
上のページで紹介されてるパッチを落としてくる
http://randomsplat.com/wp-content/uploads/2011/10/Python-2.7.2-xcompile.patch
>> code bash
ina@foreeenote:~/build/Python-2.7.2$ wget http://randomsplat.com/wp-content/uploads/2011/10/Python-2.7.2-xcompile.patch
<<
>> code bash
ina@foreeenote:~/build/Python-2.7.2$ patch -p1 < Python-2.7.2-xcompile.patch
<<
よし パッチがあたったな
えーっと上のページにはこう書いてある、これをeeenoteのgccを指すようにすれば良さそう
>>
CC=ppc_6xx-gcc CXX=ppc_6xx-g++ AR=ppc_6xx-ar RANLIB=ppc_6xx-ranlib ./configure --host=ppc-linux --build=x86_64-linux-gnu --prefix=/python
make HOSTPYTHON=./hostpython HOSTPGEN=./Parser/hostpgen BLDSHARED="ppc_6xx-gcc -shared" CROSS_COMPILE=ppc_6xx- CROSS_COMPILE_TARGET=yes HOSTARCH=ppc-linux BUILDARCH=x86_64-linux-gnu
make install HOSTPYTHON=./hostpython BLDSHARED="ppc_6xx-gcc -shared" CROSS_COMPILE=ppc_6xx- CROSS_COMPILE_TARGET=yes prefix=~/Python-2.7.2/_install
<<
分解して考える
|CC=ppc_6xx-gcc|CC=/opt/ea800-toolchain/bin/arm-unknown-linux-gnueabi-g
|CXX=ppc_6xx-g++|CXX=/opt/ea800-toolchain/bin/arm-unknown-linux-gnueabi-g++
|AR=ppc_6xx-ar|AR=/opt/ea800-toolchain/bin/arm-unknown-linux-gnueabi-ar
|RANLIB=ppc_6xx-ranlib|RANLIB=/opt/ea800-toolchain/bin/arm-unknown-linux-gnueabi-ranlib
|./configure|configureコマンド(そのままでよし)
| --host=ppc-linux|ターゲットの環境? ( /opt/ea800-toolchain/arm-unknown-linux-gnueabi/ とかあるし) arm-unknown-linux-gnueabi
| --build=x86_64-linux-gnu|ビルドする環境?(/usr/lib/gcc/i486-linux-gnu/ とかあるし) i486-linux-gnu
| --prefix=/python|インストールされる場所 見た感じこのあとインストールまではしないので意味はない?
という事で1つ目のコマンドができた
>> code bash
CC=/opt/ea800-toolchain/bin/arm-unknown-linux-gnueabi-gcc CXX=/opt/ea800-toolchain/bin/arm-unknown-linux-gnueabi-g++ AR=/opt/ea800-toolchain/bin/arm-unknown-linux-gnueabi-ar RANLIB=/opt/ea800-toolchain/bin/arm-unknown-linux-gnueabi-ranlib ./configure --host=arm-unknown-linux-gnueabi --build=i486-linux-gnu --prefix=/python
<<
お、configure通った!
次は
>>
make HOSTPYTHON=./hostpython HOSTPGEN=./Parser/hostpgen BLDSHARED="ppc_6xx-gcc -shared" CROSS_COMPILE=ppc_6xx- CROSS_COMPILE_TARGET=yes HOSTARCH=ppc-linux BUILDARCH=x86_64-linux-gnu
<<
単純に ppc_6xx → arm-unknown-linux-gnueabi、 x86_64-linux-gnu → i486-linux-gnu とすればよさそう
>> code bash
ina@foreeenote:~/build/Python-2.7.2$ make HOSTPYTHON=./hostpython HOSTPGEN=./Parser/hostpgen BLDSHARED="/opt/ea800-toolchain/bin/arm-unknown-linux-gnueabi-gcc -shared" CROSS_COMPILE=arm-unknown-linux-gnueabi- CROSS_COMPILE_TARGET=yes HOSTARCH=arm-unknown-linux-gnueabi- BUILDARCH=x86_64-linux-gnu
<<
結構時間がかかります がんばれー (configure間違えてるとここでパスが無いとかいって落ちたりします、一つ上のconfigure見なおして再実行したりしました)
>>
checking host system type... Invalid configuration `arm-unknown-linux-gnueabi-': machine `arm-unknown-linux-gnueabi' not recognized
configure: error: /bin/bash /home/ina/build/Python-2.7.2/Modules/_ctypes/libffi/config.sub arm-unknown-linux-gnueabi- failed
Failed to configure _ctypes module
<<
なんかだめっぽい? _ctypesが無かったら困るかな?すすめてみよう
さて、最後は
>>
make install HOSTPYTHON=./hostpython BLDSHARED="ppc_6xx-gcc -shared" CROSS_COMPILE=ppc_6xx- CROSS_COMPILE_TARGET=yes prefix=~/Python-2.7.2/_install
<<
これも同様に書き換えてみる
>> code bash
make install HOSTPYTHON=./hostpython BLDSHARED="/opt/ea800-toolchain/bin/arm-unknown-linux-gnueabi-gcc -shared" CROSS_COMPILE=arm-unknown-linux-gnueabi- CROSS_COMPILE_TARGET=yes prefix=~/Python-2.7.2/_install
<<
できた?
>> code bash
ina@foreeenote:~/Python-2.7.2/_install$ ls ~/Python-2.7.2/_install
bin include lib share
<<
できたっぽい!
>> code bash
ina@foreeenote:~/Python-2.7.2/_install$ file bin/python2.7
bin/python2.7: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.21, not stripped
<<
ARM! やったね! こいつをeeenoteに持っていけば動く!
~/Python-2.7.2/_install以下をSDカードにまるまるコピーして、eeenoteでConsoleQなどからアクセスすればPythonがうごくはず!
5643382
wiki
1371359390