Сборка ядра для Cubieboard (Cubietruck)

Сегодня мы с вами рассмотрим процесс сборки ядра для Cubieboard. Пересборка ядра может понадобиться для акцивации каких-то функций (например 1-wire), или для того, чтобы накатить какие-то патчи, ну или вам просто нечем заняться :-)

Автор . Дата: 23.02.2015

Сегодня мы с вами рассмотрим процесс сборки ядра для Cubieboard. Пересборка ядра может понадобиться для акцивации каких-то функций (например 1-wire), или для того, чтобы накатить какие-то патчи, ну или вам просто нечем заняться :-) В любом случае, если вы решили пересобрать ядро, то эта статья для вас.

Пересобрать ядро изначально я пробывал на самой плате, но у меня вечно выскакивали ошибки на menuconfig, в итоге я решил собирать его на виртуалке. Почему на виртуалке? Да потому, что на моем домашнем компьютере установлен Windows, а ставить сторой системой Linux мне как-то не особо хотелось. Вы можете пойти любым удобным для вас способом.

Для начала, вам нужно подготовить ОС для сборки ядра. Если у вас *ubuntu, то вы можете установить toolchain прямо из репозитория командой:

apt-get install gcc-arm-linux-gnueabihf

Если у вас какой-то другой дистрибутив, или же в вашем репозитории нет этого пакета, то вы можете скачать toolchain отсюда: http://releases.linaro.org/14.06/components/toolchain/gcc-linaro/4.7

Люди говорят, что лучше не использовать toolchain версии 4.8, ибо там какие-то ошибки, но при установке из репозитария версии 4.8 у меня все собралось без проблем. Похоже, что у кого как. Поэтому сами решайте, какую версию использовать.

После скачивания архива распакуйте его в какую-нибудь папку, и добавьте в переменные окружения новую запись:

export PATH="$PATH":/home/user/folder/gcc-linaro-arm-linux-gnueabihf-*_linux/bin/

Где  /home/user/folder/gcc-linaro-arm-linux-gnueabihf-*_linux/bin/ полный путь до папки bin, которая была в архиве. Если же вы устанавливали toolchain из репозитория, то вам это делать не нужно.

Так же вам нужно установить следующие пакеты:

apt-get install ncurses-dev build-essential u-boot-tools

Теперь перейдем к скачиванию исходного кода ядра. Создадим для удобства папку cubie в вашей домашней дирректории и перейдем в неё:

mkdir ~/cubie
cd ~/cubie

Теперь вам нужно скачать исходных код ядра а так же конфигурацию для cubieboard:

git clone -b sunxi-3.4 https://github.com/linux-sunxi/linux-sunxi.git
git clone https://github.com/cubieboard/cubie_configs

Если у вас не установлен git, то нужно его установить. После скачивания исходного кода вам нужно скопировать конфигурацию для платы в ядро:

cp cubie_configs/kernel-configs/3.4/cubietruck_defconfig linux-sunxi/.config

Теперь перейдем в папку с исходниками ядра:

cd linux-sunxi

и запустим конфигурацию:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

После запуска конфигурации откроется окно, в котором будут различные параметры, которые вы можете поменять. Если вам не нужно ничего менять, то и конфигурирование вам не нужно запускать. Иначе находите нужные пункты и включаете/выключаете их. Навигация там простая, вверху окна написано что куда.

Теперь мы готовы запустить сам процесс сборки:

make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage modules

Опция -j4 указывает, во сколько потоков будет идти компиляция. Если у вас многоядерный или многопроцессорный ПК, то укажите число равное кол-во ядер или процессоров умноженное на 2. Это ускорит процесс сборки.

После удачной сборки нужно слинковать новое ядро и модули. Делается это следующией командой:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=output modules_install

Если в процессе сборки не было каких-либо ошибок, то мы в текущей папке получим папку output, которая будет содержать папку lib. Вот её нам нужно будет перенести на нашу плату. Так же в папке arch/arm/boot/ будет лежать файл uImage. Его нам тоже нужно скопировать. Это и есть по сути само ядро. Теперь перейдем к процессу установки.

Все последующие действия нужно выполнять от имени root пользователя. 

Для начала нам нужно обновить ядро. Для этого смонтируем nanda в mnt:

mount /dev/nanda /mnt

В папке /mnt будет лежать текущий файл ядра uImage. Заменяем его новым. После этого нужно скопировать содержимое папки lib в папку lib, которая лежит в корневом разделе. Все сделали? Скрещиваем пальцы и перезагружаемся:

reboot

И пробуем подключиться к плате через ssh или смотрим как идет процесс загрузки, если у вас подключен монитор. Если плата включилась, то это уже хороший знак. Проверим версию ядра:

uname -a

Мы увидем что-то в духе этого:

Linux cubietruck 3.4.103+ #2 SMP PREEMPT Mon Feb 23 13:26:16 EAT 2015 armv7l armv7l armv7l GNU/Linux

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

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


comments powered by HyperComments