Задача: обновить ядро на Таволге с mitx-def-3.19.12 на mitx-un-4.9.72 как описано в https://www.altlinux.org/%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%8F%D0%B4%D1%80%D0%B0 Процедура: apt-get install update-kernel update-kernel -t mitx-un Running kernel version: kernel-image-mitx-def-3.19.12-alt2 ... Try to install new kernel kernel-image-mitx-un-4.9.72-alt3 and update its modules [y]/n?... После завершения получается следующая конфигурация: cat bootconf default: bootconf0 bootconf0 vmlinuz 0x80004000 0x80004000 tplatforms_mitx2.dtb initrd.img ... [root@localhost boot]# ls -l �и�т�о�г�о 30688 drwxr-xr-x 2 root root 16384 �с�е�н 13 10:47 bkup -rw-r--r-- 1 root root 322 �с�е�н 12 17:06 bootconf -rw-r--r-- 1 root root 105773 �а�в�г 9 18:44 config-3.19.12-mitx-def-alt2 -rw-r--r-- 1 root root 115906 �и�ю�л 10 01:55 config-4.9.72-mitx-un-alt3 lrwxrwxrwx 1 root root 35 �с�е�н 13 10:53 dtb -> /lib/devicetree/4.9.72-mitx-un-alt3 -rw------- 1 root root 4665892 �с�е�н 12 15:03 initrd-3.19.12-mitx-def-alt2.img -rw------- 1 root root 4683382 �с�е�н 13 10:53 initrd-4.9.72-mitx-un-alt3.img lrwxrwxrwx 1 root root 30 �с�е�н 13 10:53 initrd.img -> initrd-4.9.72-mitx-un-alt3.img lrwxrwxrwx 1 root root 30 �с�е�н 13 10:53 initrd-mitx-un.img -> initrd-4.9.72-mitx-un-alt3.img drwx------ 2 root root 32768 �с�е�н 12 17:03 lost+found -rw-r--r-- 1 root root 1810249 �а�в�г 9 18:44 System.map-3.19.12-mitx-def-alt2 -rw-r--r-- 1 root root 2004877 �и�ю�л 10 01:55 System.map-4.9.72-mitx-un-alt3 -rw-r--r-- 1 root root 13410 �с�е�н 12 15:01 tplatforms_mitx2-3.19.12-mitx-def-alt2.dtb lrwxrwxrwx 1 root root 42 �с�е�н 12 15:01 tplatforms_mitx2.dtb -> tplatforms_mitx2-3.19.12-mitx-def-alt2.dtb lrwxrwxrwx 1 root root 27 �с�е�н 13 10:53 vmlinuz -> vmlinuz-4.9.72-mitx-un-alt3 -rw-r--r-- 1 root root 8477184 �а�в�г 9 18:44 vmlinuz-3.19.12-mitx-def-alt2 -rw-r--r-- 1 root root 9413200 �и�ю�л 10 01:55 vmlinuz-4.9.72-mitx-un-alt3 lrwxrwxrwx 1 root root 27 �с�е�н 13 10:53 vmlinuz-mitx-un -> vmlinuz-4.9.72-mitx-un-alt3 То есть будет грузиться новое ядро и initrd: vmlinuz -> vmlinuz-4.9.72-mitx-un-alt3 initrd.img -> initrd-4.9.72-mitx-un-alt3.img но старый dtb: tplatforms_mitx2.dtb -> tplatforms_mitx2-3.19.12-mitx-def-alt2.dtb хотя ссылка на новый имеется: dtb -> /lib/devicetree/4.9.72-mitx-un-alt3 Эта конфигурация не работает - при загрузке виснет с надписью: Starting kernel ... Далее описано, как я приводил конфигурацию в рабочее состояние. Заменю dtb на новый. Отредактировал cat /mnt/bootconf default: bootconf0 bootconf0 vmlinuz 0x80004000 0x80004000 dtb initrd.img ... После перезагрузки не найден dtb: Loading FDT: dtb ** File not found dtb ** Перезагрузил. Зашел в recovery. mkdir /tmp/sdb1 mkdir /tmp/sdb6 mount /dev/sdb1 /tmp/sdb1 mount /dev/sdb6 /tmp/sdb6 cp /tmp/sdb6/lib/devicetree/4.9.72-mitx-un-alt3 /tmp/sdb1 cp: omitting directory '/tmp/sdb6/lib/devicetree/4.9.72-mitx-un-alt3' ls -l /tmp/sdb6/lib/devicetree/4.9.72-mitx-un-alt3 total 16 -rw-r--r-- 1 root root 13163 Jul 9 21:55 baikal_mitx.dtb Ссылка dtb указывает на каталог cp /tmp/sdb6/lib/devicetree/4.9.72-mitx-un-alt3/baikal_mitx.dtb /tmp/sdb1 rm /tmp/sdb1/dtb ln -s baikal_mitx.dtb /tmp/sdb1/dtb reboot Повисла с надписью: Starting kernel ... Перезагрузил. Зашел в recovery. head /mnt/System.map-4.9.72-mitx-un-alt3 80100000 T _text ... ~ # head /mnt/System.map-3.19.12-mitx-def-alt2 80004000 T _text ... Этот адрес должен быть прописан в bootconf. Отредактировал: cat /mnt/bootconf default: bootconf0 bootconf0 vmlinuz 0x80100000 0x80100000 dtb initrd.img ... После этого Таволгу удалось загрузить.
Наверное, это не скрипт update-kernel должен делать, а postinst скрипт ядра ? Например, есть такой скрипт: /usr/lib/rpm/boot_kernel.filetrigger посмотрите что он делает и напишите такой же для arm Ещё есть такая команда как installkernel. Она вызывается из триггера для обновления загрузчика. Ещё тоже требуется адаптировать под Таволгу. А update-kernel просто запускает apt..
(В ответ на комментарий №1) > посмотрите что он делает и напишите такой же для arm Не для arm. Для таволги, конечно.
installkernel это пакет bootloader-utils
(In reply to comment #1) > Ещё есть такая команда как installkernel. Она вызывается из триггера для > обновления загрузчика. Да, понятно, что править нужно installkernel, update-kernel тут по большому счёту ни при чём.
(В ответ на комментарий №0) > После завершения получается следующая конфигурация: А процесс сам как выглядит? Там фигурирует что-то типа uimage-*/uinitrd-*? (В ответ на комментарий №4) > Да, понятно, что править нужно installkernel, update-kernel тут по большому > счёту ни при чём. installkernel нужно передавать ключик -u, если правильно понял. Там уже есть код для всех видов загрузчиков. Кстати, а на Таволге сейчас какой?
(В ответ на комментарий №1) > Например, есть такой скрипт: > /usr/lib/rpm/boot_kernel.filetrigger Видимо перед вызовом update-kernel д.б. экспортированы: UBOOT_KERNEL_LOAD_ADDRESS= UBOOT_INITRD_LOAD_ADDRESS=
Created attachment 7825 [details] Вывод утилиты update-kernel при обновлении ядра Таволги
(В ответ на комментарий №5) > (В ответ на комментарий №0) > > После завершения получается следующая конфигурация: > > А процесс сам как выглядит? Там фигурирует что-то типа uimage-*/uinitrd-*? Насколько я понимаю, нет. Все, что выводил update-kernel в приложенном файле Tavolga-update-kernel.
uboot в Таволгах приготовлен несколько необычно, поэтому в первом приближении я решил обрабатывать Таволгу отдельно и добавил немного кода в installkernel: http://git.altlinux.org/people/iv/packages/bootloader-utils.git?p=bootloader-utils.git;a=commitdiff;h=4d31db3b5806e5404d6dcb8380fcdf4945b448b0 В целом работает как задумано, но у меня есть ещё пара вопросов к тому, что этот код должен делать на самом деле.