Bug 35390 - Обновление ядра на Таволге требует ручной доработки
Summary: Обновление ядра на Таволге требует ручной доработки
Status: ASSIGNED
Alias: None
Product: Sisyphus
Classification: Development
Component: bootloader-utils (show other bugs)
Version: unstable
Hardware: mipsel Linux
: P3 critical
Assignee: Ivan A. Melnikov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-09-13 12:00 MSK by jqt4
Modified: 2019-02-11 15:19 MSK (History)
17 users (show)

See Also:


Attachments
Вывод утилиты update-kernel при обновлении ядра Таволги (1.97 KB, text/plain)
2018-10-22 15:02 MSK, jqt4
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description jqt4 2018-09-13 12:00:59 MSK
Задача: обновить ядро на Таволге с 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 ...

После этого Таволгу удалось загрузить.
Comment 1 Anton Farygin 2018-10-19 15:39:30 MSK
Наверное, это не скрипт update-kernel должен делать, а postinst скрипт ядра ?
Например, есть такой скрипт:
/usr/lib/rpm/boot_kernel.filetrigger

посмотрите что он делает и напишите такой же для arm

Ещё есть такая команда как installkernel. Она вызывается из триггера для обновления загрузчика.

Ещё тоже требуется адаптировать под Таволгу.

А update-kernel просто запускает apt..
Comment 2 Anton Farygin 2018-10-19 15:40:28 MSK
(В ответ на комментарий №1)
> посмотрите что он делает и напишите такой же для arm

Не для arm. Для таволги, конечно.
Comment 3 Anton Farygin 2018-10-19 15:41:18 MSK
installkernel это пакет bootloader-utils
Comment 4 Ivan A. Melnikov 2018-10-19 15:45:21 MSK
(In reply to comment #1)
> Ещё есть такая команда как installkernel. Она вызывается из триггера для
> обновления загрузчика.

Да, понятно, что править нужно installkernel, update-kernel тут по большому счёту ни при чём.
Comment 5 Leonid Krivoshein 2018-10-19 17:45:56 MSK
(В ответ на комментарий №0)
> После завершения получается следующая конфигурация:

А процесс сам как выглядит? Там фигурирует что-то типа uimage-*/uinitrd-*?

(В ответ на комментарий №4)
> Да, понятно, что править нужно installkernel, update-kernel тут по большому
> счёту ни при чём.

installkernel нужно передавать ключик -u, если правильно понял. Там уже есть код для всех видов загрузчиков. Кстати, а на Таволге сейчас какой?
Comment 6 Leonid Krivoshein 2018-10-19 17:54:53 MSK
(В ответ на комментарий №1)
> Например, есть такой скрипт:
> /usr/lib/rpm/boot_kernel.filetrigger

Видимо перед вызовом update-kernel д.б. экспортированы:

UBOOT_KERNEL_LOAD_ADDRESS=
UBOOT_INITRD_LOAD_ADDRESS=
Comment 7 jqt4 2018-10-22 15:02:42 MSK
Created attachment 7825 [details]
Вывод утилиты update-kernel при обновлении ядра Таволги
Comment 8 jqt4 2018-10-22 15:04:22 MSK
(В ответ на комментарий №5)
> (В ответ на комментарий №0)
> > После завершения получается следующая конфигурация:
> 
> А процесс сам как выглядит? Там фигурирует что-то типа uimage-*/uinitrd-*?
Насколько я понимаю, нет. Все, что выводил update-kernel в приложенном файле
Tavolga-update-kernel.
Comment 9 Ivan A. Melnikov 2018-10-26 18:09:50 MSK
uboot в Таволгах приготовлен несколько необычно, поэтому в первом приближении я решил обрабатывать Таволгу отдельно и добавил немного кода в installkernel: 

http://git.altlinux.org/people/iv/packages/bootloader-utils.git?p=bootloader-utils.git;a=commitdiff;h=4d31db3b5806e5404d6dcb8380fcdf4945b448b0

В целом работает как задумано, но у меня есть ещё пара вопросов к тому, что этот код должен делать на самом деле.