LINUX.ORG.RU

Помогите разобраться с u-boot

 


0

1

Предположим, что я хочу стартануть систему таким образом: bootm ${kernel_addr} ${ramdisk_addr} ${fdt_addr}

Это означает, что по указанным адресам уже должны лежать соответственно ядро, рамфс и dtb. Если в железке есть флэшка, в которой прошиты по соответствующим смещениям эти три компонента так, что в общем адресном пространстве они отображаются по указанным трем адресам, то по большому счету такая команда запустит систему. Я правильно понимаю?

Теперь вопрос, а зачем еще нужна команда fdt применительно к bootm? Ведь fdt addr ничего никуда не грузит, а только сообщает адрес dtb. Т.е. если я указываю в bootm адрес dtb, то fdt тут уже лишняя?

Следующий вопрос, правильно ли я понимаю порядок загрузки с внешних источников. В этом случае нужно загрузить в память по соответствующим адресам уже в ОЗУ ядро, рамфс и dtb. А затем опять соответственно запускать bootm только теперь с правильными адресами в ОЗУ. Верно?

зачем еще нужна команда fdt применительно к bootm?

Обычно не нужна. Конкретно какая подкоманда fdt?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Пишу тут то, что вижу собственными глазами.

Еще вопрос. Я правильно понимаю, что у встраиваемых железок на всяких arm-ах и mips-ах специфика такова, что ядро компилится таким образом, что оно должно будет размещаться и стартовать по фиксированному адресу, указываемому при компиляции?

zloy_starper ★★★
() автор топика

Теперь вопрос, а зачем еще нужна команда fdt применительно к bootm?

чтобы передать его ядру (через регистр r2 для arm), в старых ядрах там был указатель на ATAGS - убут сам формировал эти теги соответственно знал адрес.

anonymous
()
Ответ на: комментарий от anonymous

Невнимательно прочитал - сори.

Теперь вопрос, а зачем еще нужна команда fdt применительно к bootm? Ведь fdt addr ничего никуда не грузит, а только сообщает адрес dtb. Т.е. если я указываю в bootm адрес dtb, то fdt тут уже лишняя?

fdt позволяет налету менять параметры в бинаре dtb - например в убуте определяется тип LCD панели по i2c и в заисимости от этого надо изменить тайминги в dtb.

anonymous
()

Подскажите еще парочку моментов.

С помощью bootm запускается «обычное» ядро (т.е. vmlinux.bin), или запакованное? С помощью go можно стартовать vmlinux.bin?

А то что-то у меня ничего не стартует.

zloy_starper ★★★
() автор топика
13 февраля 2017 г.
Ответ на: комментарий от anonymous

Я вот раньше пользовался специфическим u-Boot для sunxi (AllWinner A10),а тут захотелось попробовать mainline u-Boot и вообще загрузку с использованием dtb-файла. Так вот,обнаружил,что одна копия dtb вкомпилируется внутрь самого u-Boot,а вторую предлагается подгружать командой FDT в конфиге. Задумался - а зачем так сделано? И если я захочу подправить dtb для своей платы то должен ли я править оба или только тот что отдельным файлом лежит и через команду в конфиге подгружается?

anonymous
()
Ответ на: комментарий от anonymous

в u-boot fdt подгружается для того чтобы не описывать всё в конфиге. И этот же fdt вообще говоря можно передать ядру.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от anonymous

Ну так выбор то есть. Можно вкомпилить dtb в ядро. Можно собрать образ u-Boot вместе с dtb. Ну и можно грузить dtb по сети, или с чего-то еще, с чем может работать u-Boot.

zloy_starper ★★★
() автор топика
Ответ на: комментарий от zloy_starper

Две ночи возился с u-boot и ядром. Во-первых оказалось,что официальное ядро от Дебиана не способно нормально работать с AllWinner. Ну то есть загрузить его можно,но hdmi не работает. В исходниках просто нет его поддержки для этого проца. То специфическое для Аллвиннера ядро которое я использовал (3.4.103) - не грузится в новом u-boot. Не совпадает передаваемый ядру machine id. Нашел где это поправить,загрузил. Потом решил попробовать 3.4.104,оно самое новое для AllWinner. В нем проблема с machine id уже исправлена. Но 3.4.104 не использует dtb,вместо этого у него свой специфический файл описания конфигурации плат (fex),то есть тут всё по-старому осталось. Но всё работает,так что без разницы вобщем-то. Тем более что сам fex куда как понятнее чем dtb. С u-boot было сложнее. Во-первых он теперь тоже через make menuconfig конфигурируется,вот только очень далеко не при любых сочетаниях «галочек» собирается. Довольно долго возился пока подобрал что надо включить чтобы собралось и заработало. Зато теперь и консоль на hdmi есть(ком-порт и второй комп не нужен) и ядро грузится с подключенного через SATA диска (ssd). Так что mmc карточка осталась только для самого u-boot,больше не ней ничего нет. А если получится засунуть u-boot в встроенный на плате nand(сходу пока не вышло,надо разбираться) - то и карточка не нужна будет. Получится почти как настоящий настольный комп с биосом. Собственно,именно в таком качестве плата и используется - сейчас с нее и пишу. У меня тут в деревне энергетика полностью автономная,так что маложручесть китайского проца очень даже к месту. Попутно выяснилось,что собранный для моей платы u-boot игнорирует файл uenv.txt,хотя для некоторых других плат он его использует. В моем же случае - ищет в каталоге /boot корневого устройства файл boot.scr и его исполняет. Вот еще попытаюсь в этом файле загрузочное меню написать и совсем хорошо будет - удобно ядра менять при экспериментах и возвращаться назад если не загрузится.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.