LINUX.ORG.RU

Device Tree overlay

 


0

2

Посоны, кто-нибудь заставил их работать? Чё-т у меня не получается.

Вроде бы собрал и dtb и dtbo с -@, но когда пытаюсь загрузить его в ядро, то оплучаю

[ 1885.082733] OF: resolver: overlay phandle fixup failed: -22
[ 1885.088290] create_overlay: Failed to resolve tree

Если же использовать target-path вместо target, то ловлю kernel panic, когда ведро пытается мою прошивку загрузить...

★★★★★

Ответ на: комментарий от Dark_SavanT

dts

arch/arm/boot/dts/socfpga_cyclone5.dtsi почти с небольшими поправками

и оверлей

/dts-v1/;
/plugin/;

/ {
        fragment@0 {
                target = <&base_fpga_region>;
                /* target-path = "/soc/base_fpga_region"; */
                #address-cells = <1>;
                #size-cells = <1>;
                __overlay__ {
                        #address-cells = <1>;
                        #size-cells = <1>;
                        firmware-name = "my.rbf";

                        fpga-bridges = <&fpga_bridge0 &fpga_bridge1>;
                        ranges = <0 0xff2c000 0x10000>;
                };
        };
};

Ядро ванильное?

Почти. С патчем для configfs, иначе overlay не работает. Плюс небольшие фиксы для платы. Плату собсно по dts видно =)

Собираю вот так make dtbs V=1 DTC_FLAGS="-@"

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

в случае с target - у тебя лоадер не может отресолвить base_fpga_region. Я не помню как ресолвятся ссылки на phandle, там помнится с этим в рантайме было непросто.

Если же использовать target-path вместо target, то ловлю kernel panic, когда ведро пытается мою прошивку загрузить...

ковыряй драйвер fpga-region, судя по dts. судя по тому что валится при загрузке фирмвари, fragment применился.

Как вариант выгрузить этот модуль, применить оверлей, воткнуть модуль обратно.

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

ranges = <0 0xff2c000 0x10000>;

а, эти адреса огонь?

#size-cells = <1>;

у тебя в ranges три значения. разве в size cells не должно быть 2 в таком случае?

Блин, я давно с этим ковырялся, запутался уже. Короче address-cells и size-cells определяют как разбирать список этих значений.

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

ковыряй драйвер fpga-region,

Уж несколько дней как =)

судя по dts. судя по тому что валится при загрузке фирмвари, fragment применился.

Только вот судя по крашу, валится он в довольно странном месте...

[10103.463290] [<c022d420>] (set_root) from [<c022d974>] (path_init+0x1b0/0x2dc)
[10103.470397] [<c022d974>] (path_init) from [<c02316e0>] (path_openat+0x50/0x1078)
[10103.477764] [<c02316e0>] (path_openat) from [<c023350c>] (do_filp_open+0x60/0xc4)
[10103.485217] [<c023350c>] (do_filp_open) from [<c0221d10>] (file_open_name+0xe0/0x110)
[10103.493014] [<c0221d10>] (file_open_name) from [<c0221d68>] (filp_open+0x28/0x48)
[10103.500469] [<c0221d68>] (filp_open) from [<c0229bb0>] (kernel_read_file_from_path+0x30/0x7c)
[10103.508961] [<c0229bb0>] (kernel_read_file_from_path) from [<c03de460>] (_request_firmware+0x3d4/0x58c)
[10103.518314] [<c03de460>] (_request_firmware) from [<c03de654>] (request_firmware+0x3c/0x54)
[10103.526635] [<c03de654>] (request_firmware) from [<c04a0024>] (fpga_mgr_firmware_load+0x44/0xa4)
[10103.535386] [<c04a0024>] (fpga_mgr_firmware_load) from [<c04a1d38>] (of_fpga_region_notify+0x464/0x504)
[10103.544743] [<c04a1d38>] (of_fpga_region_notify) from [<c013be6c>] (notifier_call_chain+0x44/0x84)

А в set_root происходит NULL pointer dereference. Тут я теряюсь в догадках, где ошибка...

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

Убрал вообще ranges к хренам. Теперь валится в том же месте при загрузке прошивки :)

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

У тебя случаем каких-нибудь шатаний рута не происходит при этом?

Можно поподбробнее об этом? )

А куда он ломится за файлом? в /lib/firmware?

https://01.org/linuxgraphics/gfx-docs/drm/driver-api/firmware/fw_search_path....

По первому ломится, /lib/firmware/updates/UTS_RELEASE/. Судя по логике несуществующий путь должен проигнорироваться, но этого почему-то не происходит.

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

Можно поподбробнее об этом? )

типа монтирования поверх рута overlayfs или перехода с initramfs к руту на флеше.

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