Собираем систему для Orange Pi PC

2016-02-03

Дистрибутив Debian для Orange PI PC поставляется с довольно ограниченным количеством поддерживаемых устройств “из коробки”, поэтому имеет смысл дособрать нужные модули самому.

Но это не совсем тривиальная задача, из-за того, что в сборках от loboris отсутствует deb-пакет kernel-headers, а ручное копирование нужных “запчастей” как правило не приводит к успеху.

Поэтому задачу будем решать комплексно.

Нам понадобится либо “живой” компьютер с Ubuntu, либо виртуальная машина.
Я тестировал на 14.04 LTS 64bit, все прошло довольно гладко.

Для начала поставим git штатными средствами

sudo apt-get install git

Скорее всего, нужно будет доставить еще и вот эти пакеты:

sudo apt-get install uboot-mkimage sudo apt-get install u-boot-tools sudo apt-get install libusb-1.0-0-dev sudo apt-get install debootstart sudo apt-get install debootstrap sudo apt-get install qemu-user-static sudo apt-get install ia32-libs sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 sudo apt-get install lib32stdc++6 sudo apt-get install mkimage sudo apt-get install build-essential fakeroot kernel-package u-boot-tools zlib1g-dev libncurses5-dev

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

git clone https://github.com/loboris/OrangePI-Kernel

На диске в вашей рабочей директории появится еще одна:

OrangePI-Kernel

В принципе, там нет ничего сложного, скрипты для сборки и конфигурации в комплекте, поэтому можно ознакомиться с readme да и запускать их так, как там описано.

В своем варианте перед сборкой я запустил

./config_linux_kernel.sh

и включил все возможные wifi-usb драйвера.

После сборк НЕ ЗАБЫВАЕМ собрать все варианты script.bin. Они нам понадобятся. Для этого есть специальный скрипт -

./build_scripts

Впрочем, readme достаточно исчерпывающее, главное - помнить, какой девайс мы используем.

После успешной сборки нужно собрать образ системы. Для этого нужно склонировать еще один репозиторий.

==Внимание, не выполняйте эту команду в той директории, где собирали ядро.
Здесь и далее подразумевается, что папки с ядром и с образом системы лежат “рядом”.==

Итак:

git clone https://github.com/loboris/OrangePi-BuildLinux

Если все хорошо, у вас теперь две директории - одна с ядром, другая с запчастями для сборки образа.

Перейдем в папку OrangePi-BuildLinux и сделаем так, чтобы для сборки использовались наше ядро, которое мы собрали на предыдущем шаге, а не то, которое приехало из GIT.

cd OrangePi-BuildLinux rm -rf orange
ln -s ../OrangePI-Kernel/build orange

На этом шаге мы подменяем папку orange из репозитория на то, что мы собирали до этого.

Все почти готово. Осталось лишь указать параметры дистрибутива, которые мы собираем. Для этого отредактируем файл params.sh.
Комментируем внутри секцию “ubuntu” и снимаем комментарии с Debian

# === Debian ===

# distro="wheezy

distro="jessie"

repo="http://ftp.hr.debian.org/debian"

raspbian="no"

Тут мы указываем, что хотим Jessie, это нифига не Raspbian и репозитарий будем использовать хорватский. Кстати, это можно изменить на желаемый.

Дальше - собираем согласно README.
sudo ./create_image

Процесс долгий. И будьте внимательны - финальный образ помещается в файл с расширением .img.xz. Не надо использовать просто .img.

Образ нужно распаковать и записать на microSD (как обычно).
После чего, подложить правильный script.bin - то есть переименовать файл вида script.bin.platform.video просто в script.bin.
Не ошибитесь - это важно для работы всего. Он находится на партиции FAT32, поэтому операцию можно выполнить даже в Windows. Не забывайте извлечь флешку “правильно”.

Это собственно была прелюдия =).

Зачем это всё ? Всего лишь для обеспечения возможности установки сторонних модулей путём сборки их из исходных текстов.
Собирать мы их будем на той же машине с Ubuntu.
Итак, предположим мы добыли исходник “дров” для чудо-вайфая по цене 3 рубля за пучок в Китае.

Распакуем содержимое и перейдем в директорию.

tar -xzvf super_wifi_src_driver_for_linux.tar.gz cd super_wifi_src_driver_for_linux

Ну а дальше нам помогут 2 команды - либо одна, либо другая.

Команда раз:

make LINUX_SRC=/home/user/OrangePI-Kernel/linux-3.4/ ARCH=arm CROSS_COMPILE=/home/user/OrangePI-Kernel/brandy/gcc-linaro/bin/arm-linux-gnueabi-

Либо команда два:

make KSRC=/home/user/OrangePI-Kernel/linux-3.4/ ARCH=arm CROSS_COMPILE=/home/user/OrangePI-Kernel/brandy/gcc-linaro/bin/arm-linux-gnueabi-

Как видно, они различаются только именем переменной, описывающей местонахождение ядра.

Для того, чтобы понять, какую именно, нужно заглянуть в Makefile.

grep KSRC Makefile

Остальное дело техники - если у вас “вылупилось” один или несколько .ko файлов, то можно переносить их на целевую систему, класть в соответствующую папку (уж местонахождение-то должны знать) и запускать depmod -a.

С помощью этого “приёма” были собраны следующие модули:

  • Обновленный модуль Realtek 8188 - протестирован
  • Стабильный модуль для mt7601 - протестирован. Он, кстати, “заточен” на ядра меньше 3.10 (наш случай)
  • Модуль для mt7601 для работы в режиме точки доступа - собран, не протестирован

В целом, всё не так плохо. Остается дождаться работающего ядра 4.x и жизнь заиграет совершенно другими красками :).


В массы

В трубу