Песочница →
Nokia и ёжики. Часть 1
На мой взгляд, hedgewars — одна из лучших open-source игр жанра «артиллерия», к тому же, с российскими корнями. Ёжики портируются под Android и iOS, а недавно я начал портировать их под свой N900, а заодно и под N9, так что пусть этот пост поучаствует в конкурсе «Умные телефоны за умные посты».
Во время портирования приходилось решать различные вопросы, которые могут возникнуть при разработке приложений с использованием эмулятора N900/N9.
Среда кросс-компиляции
Что понадобится для портирования:
- Компилятор free pascal, который идёт вместе с дистрибутивом
- Исходные коды free pascal версии 2.5
- Исходный код binutils
- Nokia SDK, с которым идут многие необходимые средства кросс-компиляции
Сборка паскалевского кросс-компилятора:
Кросс-компилятор получится собрать с использованием make не новее 2.81, например, если вы пользуетесь Arch Linux, то вам придётся воспользоваться downgrade.
Для сборки кросс-компилятора я использовал toolchain, идущий с Qt SDK:
$ sudo make crossinstall CPU_TARGET=arm OS_TARGET=linux \
CROSSBINDIR=qt-sdk-n9/Maemo/4.6.2/toolchains/arm-2007q3-51sb6-gdb71-arm-none-linux-gnueabi_linux_x86_64/bin/ \
BINUTILSPREFIX=arm-none-linux-gnueabi- OPT=-dFPC_ARMEL \
INSTALL_PREFIX=/usr
$ sudo ln -s /usr/lib/fpc/2.5.1/ppcrossarm /usr/bin/ppcrossarm
Также, нужно дописать параметры компилятора для arm в ~/.fpc.cfg, чтобы не вводить их при запуске компилятора:
#IFDEF CPUARM
-Xr/usr/lib/fpc/2.5.1/units/arm-linux/rtl/
-XParm-none-linux-gnueabi-
-darm
-Tlinux
#ENDIF
Проверка кросс-компилятора
Например, на helloworld
$ export PATH=$PATH:<...>/qt-sdk-n9/Maemo/4.6.2/toolchains/arm-2007q3-51sb6-gdb71-arm-none-linux-gnueabi_linux_x86_64/bin/
$ ppcrossarm hello.pas && file ./hello
hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, stripped
Подготавливаем эмулятор
Доступ по ssh
Обычный терминал гораздо удобнее, чем окошечко терминала в эмуляторе, так что имеет смысл настроить ssh-подключение. По умолчанию, на 22й порт устройства можно подключиться через 6666 порт localhost'a.
На устройстве изменяем пароль юзера на более удобный и инициализируем настройки пользователя для ssh:
$ devel-su
# passwd user
$ ssh-keygen
Добавляем свой публичный ключ к ключам юзера на устройстве
$ scp ~/.ssh/id_rsa.pub user@localhost:~/.ssh/authorized_keys -p6666
Монтирование корневой раздел устройства в папку машины-хоста
Образ с системой подключается, как сетевое блочное устройство, которое может быть смонтировано в локальную папку.
modprobe nbd max_part=63
qemu-nbd arm-qemu-rm680-image.qcow2
nbd-client localhost 1024 /dev/nbd0
mount /dev/nbd0p2 <path>/n9-root/
Таким образом, можно будет использовать уже готовые библиотеки, собранные под arm, просто указав к ним путь.
Увеличиваем размер /tmp
Если вы будете что-то компилировать прямо в эмуляторе, места в /tmp может оказаться слишком мало. Параметры /tmp содержатся вовсе не в /etc/fstab, а в /etc/init.d/rcS:
mount -n -t tmpfs -o size=<нужный размер tmp>,noatime tmpfs /tmp
Дополнительные репозитории
Список подключаемых репозиториев находится в файле /etc/apt/sources.d/nicks.list
deb http://repo.pub.meego.com/home:/jokylanp/MeeGo_1.2_Harmattan/ ./
deb http://repo.pub.meego.com/home:/sandst1:/harmattan/MeeGo_1.2_Harmattan/ ./
deb http://repo.pub.meego.com/home:/tjyrinki/harmattan/ ./
deb http://repo.pub.meego.com/home:/javispedro:/SDL/harmattan/ ./
В этих репозиториях содержатся приложения и библиотеки, которые могут пригодиться при разработке.
Похоже, что можно браться и за ежей.
Берём последнюю версию из репозитория mercurial.
$ hg clone https://hedgewars.googlecode.com/hg/ hedgewars
И подготавливаем её
$ cd hedgewars
$ cmake .
$ cd hedgewars
$ ppcrossarm hwengine.pas -Tlinux \
-Fl<path_to_sdk>/qt-nokia-sdk/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/lib \
-Fl<path_to_mounted>/n9-root/lib \
-Fl<path_to_mounted>/n9-root/usr/lib \
-dLUA_DISABLED
Может возникнуть ошибка «Error: string types doesn't match, because of $V+ mode» — ничего страшного не случится, если отключить эту проверку. Для этого нужно добавить {$V-} в файл options.inc
Это была лишь подготовка, ведь начал портирование я совсем недавно и смогу заниматься ёжиками лишь по выходным, когда я свободен от всех дел, но если общественности моё начинание покажется полезным, я готов больше времени уделять этой задаче и даже написать продолжение
Источники информации:
- Как монтировать QEMU образы qcow2
- Создание кросс-компилятора Free Pascal и Lazarus
- Список репозиториев для разработчика
- Сборка ежей под андроид
- Конечно же, канал #hedgewars на FreeNode
06.12.2011 19:09+0400