Pull to refresh

Сборка Quake 3 под Raspberry Pi (Arch Linux)

В сети очень много инструкций по сборке Quake 3 под Raspberry Pi. Но, к сожалению, мне не удалось найти ни одной, что приводила бы к желаемому результату. В результате — пришлось немного подумать и найти последовательность действий, приводящую к желаемому результату.

Мат. часть:
  • Raspberry Pi Model B ( с маркировкой «2011»)
  • ARM Arh Linux (3.2.27-10-ARCH+)
  • SanDisk SD card 16 Gb (class 10/UHC)
  • Стандартный источник питания (by Farnell)- 5V, 1200 mA
  • USB hub (с источником питания)
  • Radio Keyboard and Mouse by Genius


Итак, начнём.

1. Соберём необходимые инструменты

Нам понадобится
nano:
$ sudo pacman -S nano

git:
$ sudo pacman -S git

инструменты для сборки:
$ sudo pacman -S base-devel

Поддержка md5sum:
$ sudo pacman -S mhash

2. Загружаем исходный код Quake3

Все действия будем выполнять в домашнем каталоге, чтобы в него попасть, нужно выполнить:
$ cd ~

Выполняем загрузку кода
$ git clone https://github.com/raspberrypi/quake3.git

3. Подготавливаем build.sh

Жирным шрифтом выделены отличия от оригинального файла

#!/bin/bash
# this script builds q3 with SDL
# invoke with ./build.sh
# or ./build.sh clean to clean before build

# directory containing the ARM shared libraries (rootfs, lib/ of SD card)
# specifically libEGL.so and libGLESv2.so
ARM_LIBS=/opt/vc/lib
SDL_LIB=lib

# directory containing baseq3/ containing .pk3 files - baseq3 on CD
BASEQ3_DIR="/home/${USER}/"

# directory to find khronos linux make files (with include/ containing
# headers! Make needs them.)
INCLUDES="-I/opt/vc/include"

# prefix of arm cross compiler installed
#CROSS_COMPILE=bcm2708-

    # clean
    if [ $# -ge 1 ] && [ $1 = clean ]; then
       echo "clean build"
       rm -rf build/*
    fi

    # sdl not disabled
    make -j4 -f Makefile COPYDIR="$BASEQ3_DIR" ARCH=arm \
        CC=""$CROSS_COMPILE"gcc" USE_SVN=0 USE_CURL=0 USE_OPENAL=0 \
        CFLAGS="-DVCMODS_MISC -DVCMODS_OPENGLES -DVCMODS_DEPTH -DVCMODS_REPLACETRIG $INCLUDES" \
        LDFLAGS="-L"$ARM_LIBS" -L$SDL_LIB -lSDL -lvchostif -lvmcs_rpc_client -lvcfiled_check -lpthread -lbcm_host -lkhrn_static -lvchiq_arm -lopenmaxil -lEGL -lGLESv2 -lvcos -lrt"

    # copy the required pak3 files over
    # cp "$BASEQ3_DIR"/baseq3/*.pk3 "build/release-linux-arm/baseq3/"
    # cp -a lib build/release-linux-arm/baseq3/
    exit 0


4. Создаём мягкие ссылки на необходимые заголовочные файлы

$ sudo ln -s /opt/vc/include/interface/vcos/pthreads/vcos_futex_mutex.h /opt/vc/include/interface/vcos/
$ sudo ln -s /opt/vc/include/interface/vcos/pthreads/vcos_platform.h /opt/vc/include/interface/vcos/
$ sudo ln -s /opt/vc/include/interface/vcos/pthreads/vcos_platform_types.h /opt/vc/include/interface/vcos/

5. Убедимся в том, что build.sh является исполняемым

$ cd ~/quake3
$ chmod +x ./build.sh

6. Запускаем сборку

$ ./build.sh

Если всё ОК, сборка закончится примерно через час.

7. Копируем необходимые файлы

Я создал папку, с названием quake3arena (в своей домашней папке), куда и собираюсь скопировать все файлы, необходимые для запуска игры.

$ mkdir ~/quake3arena
$ cd ~/quake3/build/release-linux-arm/
$ cp ioq3ded.arm ~/quake3arena/
$ cp ioquake3.arm ~/quake3arena/
$ mkdir ~/quake3arena/baseq3$ mkdir ~/quake3arena/lib
$ cp ./baseq3/cgamearm.so ~/quake3arena/baseq3/$ cp ./baseq3/qagamearm.so ~/quake3arena/baseq3/$ cp ./baseq3/uiarm.so ~/quake3arena/baseq3/
$ cd ~/quake3/lib
$ cp ./libSDL.so ~/quake3arena/lib/$ cp ./libSDL-1.2.so.0 ~/quake3arena/lib/$ cp ./libSDL-1.2.so.0.11.3 ~/quake3arena/lib/


В результате, мы должны получить следующую структуру файлов и папок:
quake3arena/ioq3ded.arm
quake3arena/ioquake3.arm
quake3arena/baseq3/cgamearm.so
quake3arena/baseq3/qagamearm.so
quake3arena/baseq3/uiarm.so
quake3arena/lib/libSDL.so
quake3arena/lib/libSDL-1.2.so.0
quake3arena/lib/libSDL-1.2.so.0.11.3

8. Копируем pak* файлы

Нужно найти pak* файлы с нужными ресурсами. Их можно взять из установленной игры на ПК или скачать из множества мест в Сети. Поскольку данный пост является самодостаточной инструкцией, то предлагаю взять ресурсы у меня:

Создаём временный каталог в домашней папке:
$ mkdir ~/tmp
$ cd ~/tmp

Загружаем ресурсы из Dropbox
$ wget http://dl.dropbox.com/u/23494653/Q3DemoPaks.zip

Или из Wuala:
$ wget http://content.wuala.com/contents/KittyHawk/quake3/Q3DemoPaks.zip

md5 hash данного файла должен быть cafa463365567560c36ef316c95636ef
Если вы желаете проверить md5, выполните
$ md5sum ~/tmp/Q3DemoPaks.zip

Распаковываем полученный файл:
$ unzip Q3DemoPaks.zip

Копируем необходимые файлы в папку, где мы собираем файлы, необходимые для запуска игры.
$ cp ~/tmp/baseq3/pak* ~/quake3arena/baseq3/

9. Создаём скрипт для запуска игры


$ nano ~/quake3arena/start.sh

В редакторе создаём файл со следующим содержимым:
    #!/bin/bash
    sudo LD_LIBRARY_PATH=lib:/opt/vc/lib ./ioquake3.arm


10. Делаем скрипт исполняемым

$ chmod +x ~/quake3arena/start.sh

11. Настраиваем разделение памяти между ARM и GPU


Разделим 256 Мб (имеющихся на борту) так что отдадим CPU 192M и 64M GPU.
$ sudo cp /boot/arm192_start.elf /boot/start.elf && sudo reboot

После выполнения этой команды устройство перезагрузится.

12. Тестируем игру

$ cd ~/quake3arena
$ ./start.sh

13. Очистка карты памяти

Удаляем мягкие ссылки, созданные нами ранее
$ sudo unlink /opt/vc/include/interface/vcos/vcos_platform.h
$ sudo unlink /opt/vc/include/interface/vcos/vcos_platform_types.h
$ sudo unlink /opt/vc/include/interface/vcos/vcos_futex_mutex.h

Удаляем каталог ~/tmp
$ rm -rf ~/tmp

Удаляем объектные файлы
$ rm -rf ~/quake3/build

Если нам уже не нужны исходники Quake — удаляем и их:
$ rm -rf ~/quake3

Надеюсь, вы сможете насладиться игрой на своём Raspberry Pi.

Если вы хотите использовать мою сборку Quake, вы можете найти необходимые инструкции на моём блоге.

Источники:
Мой блог (приношу извинения за уровень владения английским):
kittyhawkrpi.blogspot.com/2012/10/building-quake-3-on-arch-linux.html

R-Pi Troubleshooting:
elinux.org/R-Pi_Troubleshooting#Choosing_the_right_ARM.2FGPU_memory_split

Официальный форму RPi:
www.raspberrypi.org/phpBB3

И ещё очень много других блогов и статей.

Удачи!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.