Line 87: | Line 87: | ||
Хорошо, перезагружаем (скрестив руки :) и наслаждаемся! | Хорошо, перезагружаем (скрестив руки :) и наслаждаемся! | ||
[[Category:LocalizationRussian]] |
Latest revision as of 12:20, 16 August 2013
Обновление ядра Fedora системах с Arm
Обычно, при обновлении, достаточно через yum установить последний выпуск ядра Fedora. Однако, иногда необходимо собирать и устанавливать "собственные" ядра для отладки нового функционала.
Цель
Обновление ситем на ARM со "свеже собранным" ядро необходимо так, чтобы был доступ из uboot.
Это Пособие основано на опыте обновления trimslice устройствах. Однако, основные принципы вполне приминимы в других системах.
Сборка ядра из исходников
Получив архив, для сбрки следуйте инструкциям описанных в README.
# cd linux-xxxxx # or wherever you uinpacked the kernel to # make mrproper # cp/path/to/provided/config ./config # make oldconfig # make -j 6
конечно, возможно потребуется установить некоторые патчи перед фактичеким выполнением шагов сборки.
Следует обратить внимание, в примере выше конфигурационный файл идёт вместе с ядром. Если отсутствуют предварительные настройки, при выполнении команды 'make config', интерактивно, можно выбрать интиресующие опции из широкого списка или выполнить команду 'make arm_defconfig', чтобы сгенерировать конфигурация для ARM по-умолчанию.
Кроме того, вероятно, это наболее быстрый способ кросс-компиляции из, скажем, x86 исли имется доступный инструмент. Конечно, после сборки необходимо подготовить доступные исходники к установке на trimslice.
Установка ядра
Пользователем root в иходниках корневом каталоге:
# make modules_install install
Этя команда должна переложить vmlinux и initramfs в /boot , /boot/uboot или туда где находятся скрипты и образы. Путь может отличаться в зависимости от конфигурации системы. Конечная деректория для установки, должна быть определена переменной UBOOT_DIR в /etc/sysconfig/uboot .
Генерация uImage и uInitrd образов требуемых UBoot
Далее необходимо сгенерировать файлы uInitrd (uboot initial ram disk) и uImage (uboot image) в конечной загрузочной директории. Можно так же указать подходящий суффикс,например как ниже armv7hl-tegra, если имеется другая архитектура.
# cd /boot # or whatever UBOOT_DIR is # export VERSION=3.4.0-rc4 # or whatever the kernel version is # mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n $VERSION -d ./vmlinuz-$VERSION uImage-$VERSION-armv7hl-tegra # mkimage -A arm -O linux -T ramdisk -C none -n $VERSION -d ./initramfs-$VERSION.img uInitrd-$VERSION-armv7hl-tegra
Продолжаем
Можно сохронить состояние кореневой системы на данный момент, на всякий случай.
Можно скопировать файлы uImage-$VERSION-armv7hl-tegra и uInitrd-$VERSION-armv7hl-tegra в одно место с boot.scr, т.к. они используются для загрузки (в примере это файлы uImage и uInitrd). Или пересобрать boot.scr с указанием на новые файлы.
Ядро 3.4.0 показанное здесь намного больше, чем используемое выше. Если это так, то возможно необходимо изменить используемы адрес загрузки в boot.cmd, для установки файлу uInitrd высшего внутреннего адреса. Пересобираем boot.scr используя команды:
# mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "Trim Slice F17 boot script" -d boot.cmd boot.scr
На данный момент boot.cmd содержит следующее:
setenv bootargs mem=384M@0M mem=512M@512M nvmem=128M@384M vmalloc=248M video=tegrafb console=ttyS0,115200n8 rw root=/dev/sdb1 nohdparm rootwait earlyprintk rd_NO_PLYMOUTH ext2load usb 0:1 4080000 /boot/uImage ext2load usb 0:1 4480000 /boot/uInitrd bootm 4080000 4480000
Will Cohen и Jon Masters рекомендуют менять 4480000 на 8400000. Всё что нужно, это убедиться, что размер файла uImage не перекрывает размер файла uInitrd:
setenv bootargs mem=384M@0M mem=512M@512M nvmem=128M@384M vmalloc=248M video=tegrafb console=ttyS0,115200n8 rw root=/dev/sdb1 nohdparm rootwait earlyprintk rd_NO_PLYMOUTH ext2load usb 0:1 4080000 /boot/uImage ext2load usb 0:1 8400000 /boot/uInitrd bootm 4080000 8400000
Следует обратить внимание, на то чтобы не забыть прописать в boot.cmd корректно носители -- usb 0:1 в данном случае это USB-носитель, но можно так же определить карту памяти, диск или другой носитель. Проверить значение UBOOT_DEVICE в /etc/sysconfig/uboot которое должно совпадать с значением в boot.cmd/boot.scr
Хорошо, перезагружаем (скрестив руки :) и наслаждаемся!