Для начала скачиваем SDK для MotoMAGX. Устанавливаем его, подробнее про установку написано тут, в закреплённом посту. Скачиваем собственно исходники Python 2.2.1. Скачиваем Патч для кросс-компиляции Python.
Далее подгружаем переменные окружения:
1 2 |
cd /home/z6 . setenv-z6.sh |
Распаковываем исходники Python-2.2.1:
1 |
tar -C /home/z6 -xzvf /home/z6/Python-2.2.1.tgz |
Создаём папку python/ в SDK:
1 |
mkdir /opt/toolchains/motomagx/arm-eabi2/python |
Применяем патч (он должен лежать в /home/z6/):
1 2 |
cd /home/z6 cat python-cross-compile.diff | patch -p0 |
Заходим в директорию с исходниками Python’а и выполняем:
1 2 3 |
cd/home/z6/Python-2.2.1 ./configure --host=arm-linux-gnueabi --prefix=/opt/toolchains/motomagx/arm-eabi2/python make |
После make ругнётся, что не может запустить исполняемый файл python:
1 |
./python: 1: Syntax error: word unexpected (expecting ")") |
Забейте на эту ошибку, так как мы ведь компилировали не под х86, а под ARM. Так что выполняем:
1 |
make install |
Далее просто копируем папку /opt/toolchains/motomagx/arm-eabi2/python/ на телефон. Я, например, скопировал её в /mmc/mmca1/games/ (/mmc/mmca1/— это флешка).
Кстати, не забываем устанавливать необходимые либы, понадобится libutils и ещё некоторые. Если у вас тут возникнут проблемы — стучите в асечку.
Ну и собственно Hello World на Python. Первым делом создаём файл test.py и с помощью Notepad++ пишем туда следующее:
1 |
print "Hello, Motorola!" |
Сохраняем, кидаем файл куда-нибудь на телефон, например в папку /mmc/mmca1/test/.
Далее создаём такой скриптик start.sh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#!/bin/sh mypath=${0%/*} export HOME=$mypath LIBDIR1=/ezxlocal/download/mystuff/games/lib LIBDIR2=/mmc/mmca1/games/lib LIBDIR3=$mypath/lib export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LIBDIR1:$LIBDIR2:$LIBDIR3 PYTHONHOME=/mmc/mmca1/games/python export PYTHONHOME PYTHONPATH=${PYTHONHOME}/lib/python2.2/site-packages:$PYTHONPATH PYTHONPATH=${PYTHONHOME}/lib/python2.2:$PYTHONPATH PYTHONPATH=${PYTHONHOME}:$PYTHONPATH export PYTHONPATHLD_LIBRARY_PATH=${PYTHONHOME}/extras:${LD_LIBRARY_PATH} export LD_LIBRARY_PATH exec $PYTHONHOME/bin/python2.2 -v $mypath/test.py |
Копируем скрипт в папку test/, рядом с нашим test.py, подключаемся через Telnet, выполняем:
1 |
/mmc/mmca1/test/start.sh |
И видим следующее:
1 2 3 4 5 6 7 8 9 10 |
ture__.pyc Python 2.2.1 (#1, Nov 28 2010, 15:31:13) [GCC 3.4.3 (MontaVista 3.4.3-25.0.96.%{_mvl_build_id} 2007-11-17)] on linux2 Type "help", "copyright", "credits" or "license" for more information. Hello, Motorola! # clear __builtin__._ # clear sys.path # clear sys.argv # clear sys.ps1 # clear sys.ps2 |
Избавиться от мусора можно просто убрав флажок -v в скрипте запуска start.sh:
1 |
exec $PYTHONHOME/bin/python2.2 $mypath/test.py |
Тогда будет просто:
1 2 |
[root@Symbiosis ~] /mmc/mmca1/test/start.sh Hello, Motorola! |
Результат можно вывести в файл:
1 |
exec $PYTHONHOME/bin/python2.2 $mypath/test.py > $mypath/output.txt |
Вот, к примеру, скрипт на Python для получения числа π:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#! /usr/bin/env python # Print digits of pi forever. # # The algorithm, using Python's 'long' integers ("bignums"), works # with continued fractions, and was conceived by Lambert Meertens. # # See also the ABC Programmer's Handbook, by Geurts, Meertens & Pemberton, # published by Prentice-Hall (UK) Ltd., 1990. import sys def main(): k, a, b, a1, b1 = 2L, 4L, 1L, 12L, 4L while 1: # Next approximation p, q, k = k*k, 2L*k+1L, k+1L a, b, a1, b1 = a1, b1, p*a+q*a1, p*b+q*b1 # Print common digits d, d1 = a/b, a1/b1 while d == d1: output(d) a, a1 = 10L*(a%b), 10L*(a1%b1) d, d1 = a/b, a1/b1 def output(d): # Use write() to avoid spaces between the digits # Use str() to avoid the 'L' sys.stdout.write(str(d)) # Flush so the output is seen immediately sys.stdout.flush() main() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#!/bin/sh mypath=${0%/*} export HOME=$mypath LIBDIR1=/ezxlocal/download/mystuff/games/lib LIBDIR2=/mmc/mmca1/games/lib LIBDIR3=$mypath/lib export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LIBDIR1:$LIBDIR2:$LIBDIR3 PYTHONHOME=/mmc/mmca1/games/python export PYTHONHOME PYTHONPATH=${PYTHONHOME}/lib/python2.2/site-packages:$PYTHONPATH PYTHONPATH=${PYTHONHOME}/lib/python2.2:$PYTHONPATH PYTHONPATH=${PYTHONHOME}:$PYTHONPATH export PYTHONPATHLD_LIBRARY_PATH=${PYTHONHOME}/extras:${LD_LIBRARY_PATH} export LD_LIBRARY_PATH exec $PYTHONHOME/bin/python2.2 $mypath/pi.py > $mypath/pi.txt |
Ждём с минутку, нажимаем Ctrl + C, и в файле pi.txt будет число π.
Примеры скриптов, демок и остального можно посмотреть в директории /home/z6/Python-2.2.1/Demo/.
В общем, направление я дал. Дело за вами. Теперь насчёт pyGame и визуальной оболочки: pyGame реально портировать, он уже портирован на такие устройства как Dingoo A320, GP2X. Я думаю нам нужно будет сделать лишь вывод изображения. Я не сильно знаком с Python, но если из него можно будет запускать необходимые ShowModules — получим оболочку.
При написании мануала я пользовался этой инструкцией — ARM Cross-compiling Python и статьёй уважаемого racinglocura07.
Зеркала. Перелил все файлы на MotoFan.Ru:
Скачать исходники Python-2.2.1
Скачать патч python-cross-compile
Скачать уже откомпилированный Python-2.2.1 для Z6/V8/EM30/ZN5 и прочих MotoMAGX
Скачать HelloWorld’ы, примеры скриптов
Разработчик shevayura собрал новую версию Python 2.6.2: скачать.
Особенности Python 2.6.2:
- Собран с либами. Все предыдущие сборки выложенные здесь — собраны без библиотек (только сам питон и жизненно-важные встроенные библиотеки);
- Либы спрятаны в архив. Питон подгружается чуть медленней, но импорт библиотек быстрее. Да и не придётся заливать >4000 файлов на телефон (теперь около 180);
- Точно не работает socket (и производные от неё а-ля urllib’ы).
Запускать так (вариант для Motorola V8 с Fusion3 Speed):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/bin/sh mypath=${0%/*} export home=$mypath libdir1=/ezxlocal/download/mystuff/.system/linxtend/usr/lib libdir2=/mmc/mmca1/.system/lib libdir3=$mypath/lib export ld_library_path=$ld_library_path:$libdir1:$libdir2:$libdir3 pythonhome=/mmc/mmca1/.system/qtdownload/python export pythonhome pythonpath=${pythonhome}/lib/python2.6/site-packages:$pythonpath pythonpath=${pythonhome}/lib/python2.6:$pythonpath pythonpath=${pythonhome}/lib/python2.6/python2.6.zip:$pythonpath pythonpath=${pythonhome}:$pythonpath export pythonpath ld_library_path=${pythonhome}/extras:${ld_library_path} export ld_library_path exec $pythonhome/bin/python2.6 $1 $2 $3 |
Замените PYTHONHOME=/mmc/mmca1/.soft/python на путь к папке с питоном. Также возможно придётся заменить пути с библиотеками. Можно сохранить это в файлик python26 и кинуть на телефон в /mmc/mmca1/, после чего запускать так: ./mmc/mmca1/python26.
Чтобы запустить файл замените в последней строчке exec $PYTHONHOME/bin/python2.6 $1 $2 $3 на exec $PYTHONHOME/bin/python2.6 ИМЯ_ФАЙЛА.