LINUX.ORG.RU
ФорумAdmin

Coreboot: проблема запуска сборки для ASUS P5GC-MX на QEMU под Ubuntu (которая, в свою очередь, работает на VirtualBox)

 , ,


1

2

Собсна, пилили сабж. Сделали гит-клон, потом сделали гит-чекаут с соответствующим материнке хэшем. Собрали (кое-какие бубны доставать пришлось, но в целом получилось). Далее пытаемся запустить qemu-system-x86_64 -bios build/coreboot.rom -serial stdio Появляется qemu с черным экраном. Заливка на чип и установка в физическую железку так же не дало результатов. Буду благодарен, если хотя бы пнёте в нужную сторону, а то вообще нет идей.

P.S.: железка P5GC-MX есть физически, но это всего лишь попытка «поиграться», ибо основная задача - собрать и запустить coreboot на совершенно новую железку, под которую нет никаких биосов.

P.P.S.: вообще, на форум зарегистрироваться пришлось, чтобы пообщаться с юзером SakuraKun, вроде как он смотрящий тут по этой теме, но возможности личных сообщений не обнаружилось..

но возможности личных сообщений не обнаружилось

Всё правильно, их нет

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

Ну, ничего страшного - нам от товарищей скрывать нечего!) Публично - оно ведь и хорошо: и решение вместе найти легче, и потом пригодиться может кому-то (если все-таки решим). Извиняюсь, не знаю как «призвать» данного юзера сюда. Вроде как есть и такая функция тут.

Hundredson
() автор топика

сделали гит-чекаут с соответствующим материнке хэшем

Зачем? Всегда лучше использовать актуальный master.

Собрали

Конфиг в студию.

Если вы запускаете в QEMU, тогда при чем тут ASUS P5GC-MX? Если запускаете в QEMU, то и плата в конфиге должна быть выбрана «Emulation», «QEMU x86 i440fx/piix4».

Заливка на чип и установка в физическую железку так же не дало результатов

Конкретно про эту плату ничего не могу сказать, но в любом случае надо смотреть логи. Либо через serial, либо usbdebug, либо на крайняк spiconsole. Но сначала - конфиг.

основная задача - собрать и запустить coreboot на совершенно новую железку, под которую нет никаких биосов

Это так не работает. Если он не портирован под эту «новую железку», или как минимум нет поддержки чипсета, чтобы дальше можно было портировать, то ничего не будет работать. Что за железка?

вроде как он смотрящий тут по этой теме

Мы вдвоем, наверное.

@SakuraKun

ch1p
()
Последнее исправление: ch1p (всего исправлений: 1)
Ответ на: комментарий от ch1p

Я хочу заранее извиниться за все, что напишу ниже (вероятно, там будет очень много глупостей).

Зачем? Всегда лучше использовать актуальный master

Вот здесь можно подробнее? Я думал, что мы чекаутнули - это и есть актуальная ветка.

Конфиг в студию.

Ниже ссылка на файл config.txt (надеюсь, это и есть оно) тык

Если вы запускаете в QEMU, тогда при чем тут ASUS P5GC-MX? Если запускаете в QEMU, то и плата в конфиге должна быть выбрана «Emulation», «QEMU x86 i440fx/piix4».

Что же тогда эмулирует QEMU, если на нем нельзя запустить и «погонять» прошивки для различных плат? Я думал, он для того и существует…

Это так не работает. Если он не портирован под эту «новую железку», или как минимум нет поддержки чипсета, чтобы дальше можно было портировать, то ничего не будет работать. Что за железка?

А как это работает? Каким образом портируют? Мы не собираемся эту сборку заливать на нашу железку. Просто наши знания на данном этапе настолько ограничены, что мы даже не умеем правильно собирать уже отработанные прошивки. А так мы пытаемся ковырять исходники, будем пробовать по спецификациям и даташитам платы и проца пилить свою сборку. Названия платы у меня нет. Да я и уверен, что вы ее не найдете - это изделие для промышленников.

Мы вдвоем, наверное.

Искренне рад, что людей, разбирающихся в этой теме, больше чем один

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

Что же тогда эмулирует QEMU, если на нем нельзя запустить и «погонять» прошивки для различных плат?

Он эмулирует generic чипсет(i440fx или q35), а не железо конкретной матплаты.

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

А как это работает? Каким образом портируют?

Очевидный ответ - имея железку и снимая данные отладки с COM/Firewire(для старых девайсов) или прямо с PCI Express

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

Вот здесь можно подробнее? Я думал, что мы чекаутнули - это и есть актуальная ветка.

Эээ… Актуальная ветка - это master. Если плата официально поддерживается (а ASUS P5GC-MX поддерживается), то есть смержена в master, то никуда чекаутиться не надо. Вы, вероятно, откатились своим чекаутом на несколько лет назад и потеряли кучу нововведений/исправлений/etc.

Ниже ссылка на файл config.txt (надеюсь, это и есть оно) тык

Ой, сделайте лучше make savedefconfig, появится аккуратный файлик defconfig без лишнего мусора.

Что же тогда эмулирует QEMU

Выше верно ответили.

запустить и «погонять» прошивки для различных плат?

А как вы себе это представляете? :) В этом случае QEMU должен был бы уметь эмулировать все эти платы.

Я думал, он для того и существует…

Увы. На нем удобно отлаживать всякие не слишком низкоуровневые штуки, типа пейлоадов (SeaBIOS и тд), но разработка самого coreboot обычно выглядит примерно так: написал код, собрал, залил на чип программатором, включаешь, снимаешь отладчиком логи, читаешь, правишь код, собираешь, заливаешь на чип, включаешь… (Иногда чуть проще - если плата уже нормально поддерживается, можно софтварно прошивать.)

А как это работает? Каким образом портируют?

В идеале иметь документацию на железки, даташиты, схематику. Ну и конечно же саму плату (или парочку, на всякий случай). Например у Intel есть такая штука как BWG (BIOS Writer’s Guide), это набор документации на чипсеты, процессоры, мосты, ME, всякие Boot Guard и тд, в общем все что нужно разработчику биоса, доступная только под NDA (обычно для вендоров). (Впрочем, они иногда утекают, у меня тоже есть BWG.) Аналогичные доки есть у AMD, даже кое-что в открытом доступе, BKDG называется.

Если доков нет совсем, портирование может занять многие месяцы даже для опытных разработчиков. Например по этой причине в coreboot не поддержан i965 и вряд ли когда-то будет поддержан (ибо он старый и мало кому интересен уже). Запасаешься всякими отладчиками, jtag-ами и медленно реверсишь все это дело, + может помочь разобраться реверс стокового биоса.

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

Ой, сделайте лучше make savedefconfig, появится аккуратный файлик defconfig без лишнего мусора.

CONFIG_LOCALVERSION="RAPTOR-NORMAL"
CONFIG_CBFS_PREFIX="normal"
CONFIG_USE_OPTION_TABLE=y
CONFIG_COLLECT_TIMESTAMPS=y
CONFIG_VENDOR_ASUS=y
CONFIG_CBFS_SIZE=0x100000
CONFIG_VGA_BIOS=y
CONFIG_BOARD_ASUS_P5GC_MX=y
# CONFIG_POST_DEVICE is not set
CONFIG_COREBOOT_ROMSIZE_KB_8192=y
CONFIG_CPU_MICROCODE_CBFS_NONE=y
CONFIG_BOOTBLOCK_NORMAL=y
CONFIG_MAINBOARD_DO_NATIVE_VGA_INIT=y
# CONFIG_DRIVERS_INTEL_WIFI is not set
CONFIG_CONSOLE_POST=y
CONFIG_PAYLOAD_NONE=y
CONFIG_GDB_STUB=y
CONFIG_GDB_WAIT=y

Увы. На нем удобно отлаживать всякие не слишком низкоуровневые штуки, типа пейлоадов (SeaBIOS и тд), но разработка самого coreboot обычно выглядит примерно так: написал код, собрал, залил на чип программатором, включаешь, снимаешь отладчиком логи, читаешь, правишь код, собираешь, заливаешь на чип, включаешь… (Иногда чуть проще - если плата уже нормально поддерживается, можно софтварно прошивать.)

Извиняюсь, что есть в данном случае отладчик? Какая-то PCI-E-плата, которая куда-то пишет логи?

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

CONFIG_PAYLOAD_NONE=y

Вы не выбрали Payload. coreboot-у просто нечего загружать. Выберите SeaBIOS например.

Извиняюсь, что есть в данном случае отладчик? Какая-то PCI-E-плата, которая куда-то пишет логи?

Зависит от того, что имеется на портируемой плате. Может быть серийный порт, тогда совсем просто. Может быть PCI-E плата, может быть EHCI debug port (USB) - этот вариант на ноутбуках обычно используется, там можно читать логи через ft2232h например. Можно вообще прямо на флешку писать логи - называется SPI Flash Console. Есть даже какой-то экзотический способ вывода логов через динамик (супер медленный).

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

Вы не выбрали Payload. coreboot-у просто нечего загружать. Выберите SeaBIOS например.

Выставил SeaBIOS - нихт результат(

CONFIG_LOCALVERSION="RAPTOR-NORMAL"
CONFIG_CBFS_PREFIX="normal"
CONFIG_USE_OPTION_TABLE=y
CONFIG_COLLECT_TIMESTAMPS=y
CONFIG_VENDOR_ASUS=y
CONFIG_CBFS_SIZE=0x100000
CONFIG_VGA_BIOS=y
CONFIG_BOARD_ASUS_P5GC_MX=y
# CONFIG_POST_DEVICE is not set
CONFIG_COREBOOT_ROMSIZE_KB_8192=y
CONFIG_CPU_MICROCODE_CBFS_NONE=y
CONFIG_BOOTBLOCK_NORMAL=y
CONFIG_MAINBOARD_DO_NATIVE_VGA_INIT=y
# CONFIG_DRIVERS_INTEL_WIFI is not set
CONFIG_CONSOLE_POST=y
CONFIG_GDB_STUB=y
CONFIG_GDB_WAIT=y
Ставил новую убунту, собирал там по новой. Конфиг получился гораздо короче - не знаю почему, видимо что-то не так собрал
CONFIG_COLLECT_TIMESTAMPS=y
CONFIG_VENDOR_ASUS=y
CONFIG_CBFS_SIZE=0x00080000
CONFIG_BOARD_ASUS_P5GC_MX=y
CONFIG_COREBOOT_ROMSIZE_KB_8192=y
CONFIG_DEFAULT_CONSOLE_LOGLEVEL_7=y
Результат все тот же, плата как мёртвая, только крутилятор жужжит и все. Чип и железо рабочие, ибо с заводским биосом все запускается.

Если доков нет совсем, портирование может занять многие месяцы даже для опытных разработчиков....

Доки на проц есть, на плату будут позже (они тоже где-то есть 100%). Как вообще организовывается процесс портирования? Нужно тупо читать исходники и постепенно становиться сишным/плюсовым гуру?

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

Результат все тот же, плата как мёртвая, только крутилятор жужжит и все.

Раз крутит, значит все не так плохо. У этой платы по умолчанию включен serial output (а если нет - можно включить в конфиге в разделе Console, «Serial port console output»), вы можете подключиться и посмотреть логи?

Кстати на QEMU-то удалось запустить?

Как вообще организовывается процесс портирования? Нужно тупо читать исходники и постепенно становиться сишным/плюсовым гуру?

Вроде того. Плюсов нет, только С. Можно еще почитать что-нибудь: https://doc.coreboot.org/ https://lennartb.home.xs4all.nl/coreboot/coreboot.html

Много полезных статей осталось в старой вики https://www.coreboot.org/ACPI и хотя конечно ей не рекомендуют пользоваться, но много полезной информации оттуда все еще не пересено в новую документацию.

Есть еще кстати утилита autoport, она позволяет в почти автоматическом режиме портировать платы на sandybridge/ivybridge (на review.coreboot.org есть патчи для поддержки других платформ), но это тот случай, когда нужно поддержать только новую плату, а чипсет уже портирован. И вообще в util/ много полезных утилит. Например через inteltool можно из-под стокового биоса сдампить кучу всего полезного.

Что за чипсет то у вашей платы, если не секрет? Он поддерживается уже или нет?

ch1p
()
Последнее исправление: ch1p (всего исправлений: 1)
Ответ на: комментарий от ch1p

Кстати на QEMU-то удалось запустить?

Нет, на этапе make уже проблемы:

build/romstage/arch/x86/assembly_entry.o: In function `__main':
(.rom.text+0x380): undefined reference to `romstage_after_car'
src/arch/x86/Makefile.inc:264: recipe for target 'build/cbfs/fallback/romstage.debug' failed
make: *** [build/cbfs/fallback/romstage.debug] Error 1
<
Т.е. если выставить «Emulation» и «QEMU x86 i440fx/piix4», то вообще не собирается, только если выставить асус можно собрать. Коллега, кстати, вроде как запустил с помощью каких-то бубнов в эмуляторе сборку для этой матери, но я пока не понял что он имел ввиду и как это сделал, нужно будет досконально разузнать. По сценарию, который описал torm7 не собирается, появляются какие-то ошибки. Пришлось делать:
git checkout 9a848dde8b34a854af716670f5c993c49c1ab22e
Хэш взял следующим образом. На странице тык нашел нужную модель платы (последние коммиты там от 2017 года, как я понял), перешел в upstream tree Мы, конечно, уже обсуждали это выше, но мои компетенции в гите настолько низки, что я запутался и перестал понимать, о чем мы там вообще говорили... Рецепт чекаута хэша, кстати, я взял из старой вики.

Что за чипсет то у вашей платы, если не секрет? Он поддерживается уже или нет?

Пока нет информации.

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

Не надо делать никакие чекауты, вернитесь обратно в master: git checkout master. Перед сменой платы надо делать make distclean - возможно поэтому у вас ошибки.

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

Проблема со сборкой мастера таки решилась. Изначально появлялась ошибка

gcc: error: unrecognized command line option '-Wimplicit-fallthrough'
Оказалось, что дело было в версии компилятора gcc (для меня это было не очевидно) Помогла установка (установил сразу несколько) новой версии и прописывание ее по умолчанию
sudo apt install gcc-7 g++-7 gcc-8 g++-8 gcc-9 g++-9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 20
После этого все собралось без всяких чекаутов. Однако результат прежний - черный экран. Правда, при загрузке теперь эта сборка ведет себя как всамделишный биос - на мгновение запускает кулер, потом пауза пару секунд, и потом уже загрузка.

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

Давайте логи смотреть. Наверное, что-то с инициализацией графики, но надо логи.

Пока нет логов. Сможем по ком-порту подключиться, но позже (долго объяснять почему). Получается, coreboot во время загрузки должен будет посылать всю информацию о том, что происходит, в ком-порт в реальном времени?

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

Ага. По крайней мере, если включена соответствующая опция.

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

Если вы еще не скоро сможете к COM порту подключиться, попробуйте SPI Flash Console. Для этого зайдите в раздел Console, включите «SPI Flash console output», и выключите на всякий случай «Serial port console output» (а главное - никогда не включайте «spkmodem (console on speaker) console output» - с этой дичью он будет загружаться минут 10, наверное). Перед сборкой на всякий случай сделайте make clean. Соберите, залейте на флешку, запустите и подождите секунд 15-20. Потом выключайте, сделайте дамп флешки и через cbfstool (util/cbfstool) извлеките лог:

cbfstool rom.bin read -r CONSOLE -f console.log

Если coreboot хоть как-то работает, то в console.log будут не сплошные FF, а нормальный лог.

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

Мальчик Петя из старшей группы детского сада #7 пишет деду морозу

А сколько будет стоить полный саппорт корбутом для какого-нибудь проприетарного говна типа Asus GL702-ZC у человека с прямыми руками. Если я хочу прям полный саппорт всего на борту. Т.е. «железка в подарок» – не обсуждается, а по оплате времени?

Stil ★★★★★
()

Не знаю. Из известных мне случаев - Raptor Engineering портировал ASUS KGPE-D16 и KCMA-D8 за $90,000, а за Gigabyte GA-G41M-ES2L и Intel D510MO было заплачено 4,000 AUD. It, как говорится, depends. Ну и я такие заказы не беру.

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

ого. а у меня ушло 8+ месяцев на то чтобы с нуля разобраться как хакнуть Acer Spin 1 и поставить не убогую ебунту с REfind-ом, а чистокровный Дебиан с прекрасным и честным UEFI. ни до ни после возникновения у меня этой задачи гайда по этому вопросу не было в сети и нет. и я не выложил, разумеется. только гугл и чтение, только хардкор.

proxyfyer
()
Последнее исправление: proxyfyer (всего исправлений: 1)
Ответ на: комментарий от ch1p

Логи

Режим добровольно-принудительной самоизоляции не обошел и нас..

Коллега дома мучает плату, добился каких-то логов и прислал:

Connecting to COM5...
Connected.



coreboot-4.11-1831-gd4e9978 Thu Mar 26 18:15:04 UTC 2020 bootblock starting (log level: 7)...
FMAP: Found "FLASH" version 1.1 at 0x0.
FMAP: base = 0xfff80000 size = 0x80000 #areas = 3
FMAP: area COREBOOT found @ 200 (523776 bytes)
CBFS: Locating 'fallback/romstage'
CBFS: Found @ offset 80 size b21c
BS: bootblock times (exec / console): total (unknown) / 28 ms
PROG_RUN: Setting MTRR to cache XIP stage. base: 0xfff80000, size: 0x00010000


coreboot-4.11-1831-gd4e9978 Thu Mar 26 18:15:04 UTC 2020 romstage starting (log level: 7)...
SMBus controller enabled
Setting up static southbridge registers... done.
Disabling Watchdog reboot... done.

Intel(R) 82945GC Chipset
(G)MCH capable of up to DDR2-667
Setting up static northbridge registers... done.
Waiting for MCHBAR to come up...ok
Needs reset to configure CPU BSEL straps
full_reset() called!


coreboot-4.11-1831-gd4e9978 Thu Mar 26 18:15:04 UTC 2020 bootblock starting (log level: 7)...
FMAP: Found "FLASH" version 1.1 at 0x0.
FMAP: base = 0xfff80000 size = 0x80000 #areas = 3
FMAP: area COREBOOT found @ 200 (523776 bytes)
CBFS: Locating 'fallback/romstage'
CBFS: Found @ offset 80 size b21c
BS: bootblock times (exec / console): total (unknown) / 28 ms
PROG_RUN: Setting MTRR to cache XIP stage. base: 0xfff80000, size: 0x00010000


coreboot-4.11-1831-gd4e9978 Thu Mar 26 18:15:04 UTC 2020 romstage starting (log level: 7)...
SMBus controller enabled
Setting up static southbridge registers... done.
Disabling Watchdog reboot... done.

Intel(R) 82945GC Chipset
(G)MCH capable of up to DDR2-667
Setting up static northbridge registers... done.
Waiting for MCHBAR to come up...ok
Setting up RAM controller.
This mainboard supports Dual Channel Operation.
DDR II Channel 0 Socket 0: N/A
DDR II Channel 0 Socket 1: N/A
Reading SPD using i2c block operation.
DDR II Channel 1 Socket 0: x8DDS
DIMM 2 side 0 = 1024 MB
DIMM 2 side 1 = 1024 MB
DDR II Channel 1 Socket 1: N/A
Channel 0 has no memory populated.
Memory will be driven at 533MT with CAS=4 clocks
tRAS = 12 cycles
tRP  = 4 cycles
tRCD = 4 cycles
tWR  = 4 cycles
tRFC = 34 cycles
Refresh: 7.8us
Setting Memory Frequency... CLKCFG = 0x20000000, CLKCFG = 0x20000020, ok
Setting mode of operation for memory channels...Single Channel 1 only.
Programming Clock Crossing...MEM=533 FSB=1066... ok
Setting RAM size...
C0DRB = 0x00000000
C1DRB = 0x40404020
TOLUD = 0x0080
Setting row attributes...
C0DRA = 0x0000
C1DRA = 0x0033
one dimm per channel config..
Initializing System Memory IO...
Programming Dual Channel RCOMP
Table Index: 23
Programming DLL Timings...
Enabling System Memory IO...
jedec enable sequence: bank 4
jedec enable sequence: bank 5
bankaddr from bank size of rank 4
Could not find rising edge.
RAM initialization finished.
Setting up Egress Port RCRB
Loading port arbitration table ...ok
Wait for VC1 negotiation ...ok
Setting up DMI RCRB
Wait for VC1 negotiation ...done..
Internal graphics: enabled
Waiting for DMI hardware...ok
Setting up Root Complex Topology
Hundredson
() автор топика
Ответ на: комментарий от ch1p

Судя по другим логам с этой платы (в репозитории board_status), дальше там обычно идет что-нибудь такое:

CBMEM:
IMD: root @ 7f7ff000 254 entries.
IMD: root @ 7f7fec00 62 entries.
...

Если это и правда все, то предлагаю натыкать в это место побольше printk, можно хоть после каждой строчки, чтобы понять где именно оно зависает.

См. функцию i945_setup_root_complex_topology (src/northbridge/intel/i945/early_init.c:777), она в свою очередь вызывается из i945_late_initialization (early_init.c:898).

Надо понять, доходит ли оно до i945_prepare_resume и дальше до romstage_handoff_init.

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

И кстати, коммит 9a848dde8b34a854af716670f5c993c49c1ab22e пробовали снова собирать и запускать? Он тоже не работает? Есть вероятность, что за 3 года что-нибудь сломали, такое бывает. Хорошо бы в этом случае понять, что.

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