!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