From Fedora Project Wiki
Line 49: Line 49:
</pre>
</pre>


== Going Live ==
== Продолжаем ==


You might want to save a cop of your rootfs at this point, just in case.
Можно сохронить состояние кореневой системы на данный момент, на всякий случай.


You can now copy the files uImage-$VERSION-armv7hl-tegra and uInitrd-$VERSION-armv7hl-tegra over the current ones referenced from boot.scr so they are used for booting (in my case it loads files uImage and uInitrd). Or alternatively rebuild boot.scr to  point at the new files.
Можно скопировать файлы uImage-$VERSION-armv7hl-tegra и uInitrd-$VERSION-armv7hl-tegra в одно место с boot.scr, т.к. они используются для загрузки (в примере это файлы uImage и uInitrd). Или пересобрать boot.scr с указанием на новые файлы.


The 3.4.0 kernel shown here is a lot bigger than the one I was using previously. If that is true for you this might mean that you need to change the load addresses used in your boot.cmd to load the uInitrd file at a higher initial address. Rebuild boot.scr using this command:
Ядро 3.4.0 показанное здесь намного больше, чем используемое выше. Если это так, то возможно необходимо изменить используемы адрес загрузки в boot.cmd, для установки файлу uInitrd высшего внутреннего адреса. Пересобираем boot.scr используя команды:


<pre>
<pre>
Line 62: Line 62:
</pre>
</pre>


Currently my boot.cmd contains the following
На данный момент boot.cmd содержит следующее:


<pre>
<pre>
Line 73: Line 73:
</pre>
</pre>


Will Cohen and Jon Masters recommended replacing 4480000 with 8400000. All you need to do is make sure that the uImage file extent does not overlap the uInitrd file extent
Will Cohen и Jon Masters рекомендуют менять 4480000 на 8400000. Всё что нужно, это убедиться, что размер файла uImage не перекрывает размер файла uInitrd:


<pre>
<pre>
Line 84: Line 84:
</pre>
</pre>


n.b. don't forget to set the correct device in boot.cmd -- usb 0:1 identifies my USB stick but you may need to specify a memory card or local disk and so the device may be different. Check UBOOT_DEVICE in /etc/sysconfig/uboot which ought to match the value in boot.cmd/boot.scr
Следует обратить внимание, на то чтобы не забыть прописать в boot.cmd корректно носители -- usb 0:1 в данном случае это USB-носитель, но можно так же определить карту памяти, диск или другой носитель. Проверить значение UBOOT_DEVICE в /etc/sysconfig/uboot которое должно совпадать с значением в boot.cmd/boot.scr


OK, now reboot and enjoy, fingers crossed!
Хорошо, перезагружаем (скрестив руки :) и наслаждаемся!

Revision as of 12:19, 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

Хорошо, перезагружаем (скрестив руки :) и наслаждаемся!