Jump to content

    
Aleksei_Rostov

Buildroot with custom DTS file

Recommended Posts

Добрый день! Может есть специалисты по Buildroot, подскажите пожалуйста как в конфиг Buildroot'a правильно прописать внешний dts файл с dtsi инклюдами.

Сейчас использую:

 

BR2_LINUX_KERNEL_DTS_SUPPORT=y
BR2_LINUX_KERNEL_USE_CUSTOM_DTS=y
BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="$(BR2_EXTERNAL_TRENZ_PATH)/board/trenz_mp/kernel.dts"

В kernel.dts есть include'ы для файлов .dtsi и чтобы скомпилировать kernel.dts пути для dtsi приходится задавать абсолютные, но необходимо относительные. 

Как правильно указать Buildroot'у где находятся dtsi файлы, которые читает kernel.dts?

 

Share this post


Link to post
Share on other sites
6 minutes ago, aaarrr said:

Может, просто во внешнем скрипте при сборке вызвать dtc? Сколько использую buildroot, избегаю собирать им ядро/u-boot - неудобства сплошные.

u-boot я тоже не собираю buildroot'ом. По kernel вопросов нет, путь к конфигу ядра прописан, кроме того в конфиге buildroot'а задаю версию ядра. 

Решение пока нашел что называется "в лоб": убрал все инклюды и добавил все в один файл kernel.dts. Это не очень хорошо, т.к. в каждом инклюде был определенный DT (например для PL части Zynq Ultrascale+ или отдельно все что касается памяти)

Share this post


Link to post
Share on other sites
On 12/21/2020 at 1:40 PM, Aleksei_Rostov said:

В kernel.dts есть include'ы для файлов .dtsi и чтобы скомпилировать kernel.dts пути для dtsi приходится задавать абсолютные

вообще - нет, buildroot копирует внешние DTS-ы в дерево исходников ядра перед компиляцией

define LINUX_BUILD_CMDS
	$(call KCONFIG_DISABLE_OPT,CONFIG_GCC_PLUGINS)
	$(foreach dts,$(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_DTS_PATH)), \
>>>>		cp -f $(dts) $(LINUX_ARCH_PATH)/boot/dts/
	)
	$(LINUX_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) all
	$(LINUX_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) $(LINUX_TARGET_NAME)
	$(LINUX_BUILD_DTB)
	$(LINUX_APPEND_DTB)
endef

https://git.busybox.net/buildroot/tree/linux/linux.mk?h=2020.11.x#n432

 

Share this post


Link to post
Share on other sites
18 hours ago, sasamy said:

вообще - нет, buildroot копирует внешние DTS-ы в дерево исходников ядра перед компиляцией


define LINUX_BUILD_CMDS
	$(call KCONFIG_DISABLE_OPT,CONFIG_GCC_PLUGINS)
	$(foreach dts,$(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_DTS_PATH)), \
>>>>		cp -f $(dts) $(LINUX_ARCH_PATH)/boot/dts/
	)
	$(LINUX_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) all
	$(LINUX_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) $(LINUX_TARGET_NAME)
	$(LINUX_BUILD_DTB)
	$(LINUX_APPEND_DTB)
endef

https://git.busybox.net/buildroot/tree/linux/linux.mk?h=2020.11.x#n432

 

За ссылку спасибо, у меня dtsi файлы, на них команды cp нет. Я переименовал dtsi в dts, но все равно не видит инклюды

 DTC     arch/arm64/boot/dts/kernel.dtb
arch/arm64/boot/dts/kernel.dts:9:22: fatal error: zynqmp.dts: No such file or directory
compilation terminated.
scripts/Makefile.lib:299: recipe for target 'arch/arm64/boot/dts/kernel.dtb' failed
make[3]: *** [arch/arm64/boot/dts/kernel.dtb] Error 1
Makefile:1243: recipe for target 'kernel.dtb' failed
make[2]: *** [kernel.dtb] Error 2
package/pkg-generic.mk:247: recipe for target '/home/zynq/trenz-us/build/linux-xilinx-v2020.1/.stamp_built' failed
make[1]: *** [/home/zynq/trenz-us/build/linux-xilinx-v2020.1/.stamp_built] Error 2
Makefile:23: recipe for target '_all' failed
make: *** [_all] Error 2

файл kernel.dts

/*
 * CAUTION: This file is automatically generated by Xilinx.
 * Version:  
 * Today is: Sat Dec 19 18:33:06 2020
 */


/dts-v1/;
#include "/home/zynq/trenz_buildroot/board/trenz_mp/zynqmp.dts"
#include "/home/zynq/trenz_buildroot/board/trenz_mp/zynqmp-clk-ccf.dts"
#include "/home/zynq/trenz_buildroot/board/trenz_mp/pl.dts"
#include "/home/zynq/trenz_buildroot/board/trenz_mp/pcw.dts"
#include "/home/zynq/trenz_buildroot/board/trenz_mp/system-user.dts"
/ {
	chosen {
		bootargs = "earlycon clk_ignore_unused";
		stdout-path = "serial0:115200n8";
	};
	aliases {
		ethernet0 = &gem3;
		i2c0 = &axi_iic_sens1;
		i2c1 = &i2c0;
		i2c2 = &i2c1;
		serial0 = &uart0;
		spi0 = &qspi;
	};
	memory {
		device_type = "memory";
		reg = <0x0 0x0 0x0 0x7ff00000>;
	};
	cpus {
		/delete-node/ cpu@2 ;
		/delete-node/ cpu@3 ;
	};
};

 

Share this post


Link to post
Share on other sites
1 hour ago, Aleksei_Rostov said:

у меня dtsi файлы, на них команды cp нет. Я переименовал dtsi в dts, но все равно не видит инклюды

не знаю зачем вы их переименовывали и добавляли полный путь в инклудах в dts - естественно так ничего не будет работать, ничего этого не нужно - просто указываете их в конфиге "как есть" через пробел все, dts копируются и  компилируются а dtsi только копируются в дерево исходников ядра

Quote

# We keep only the .dts files, so that the user can specify both .dts
# and .dtsi files in BR2_LINUX_KERNEL_CUSTOM_DTS_PATH. Both will be
# copied to arch/<arch>/boot/dts, but only the .dts files will
# actually be generated as .dtb.

https://git.busybox.net/buildroot/tree/linux/linux.mk?h=2020.11.x#n171

Edited by sasamy

Share this post


Link to post
Share on other sites
6 minutes ago, sasamy said:

не знаю зачем вы их переименовывали и добавляли полный путь в инклудах в dts - естественно так ничего не будет работать, ничего этого не нужно - просто указываете их в конфиге "как есть" через пробел все, dts копируются и  компилируются а dtsi только копируются в дерево исходников ядра

https://git.busybox.net/buildroot/tree/linux/linux.mk?h=2020.11.x#n171

 

Тоже так делал - все равно ошибка. Может нужно все эти файлы (dts и все dtsi) в BR2_LINUX_KERNEL_CUSTOM_DTS_PATH прописать?

Сейчас у меня так

BR2_LINUX_KERNEL_DTS_SUPPORT=y
BR2_LINUX_KERNEL_USE_CUSTOM_DTS=y
BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="$(BR2_EXTERNAL_TRENZ_PATH)/board/trenz_mp/kernel.dts"

А сделать вот так

BR2_LINUX_KERNEL_DTS_SUPPORT=y
BR2_LINUX_KERNEL_USE_CUSTOM_DTS=y
BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="$(BR2_EXTERNAL_TRENZ_PATH)/board/trenz_mp/kernel.dts"
BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="$(BR2_EXTERNAL_TRENZ_PATH)/board/trenz_mp/first.dtsi"
BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="$(BR2_EXTERNAL_TRENZ_PATH)/board/trenz_mp/second.dtsi"
  ...
BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="$(BR2_EXTERNAL_TRENZ_PATH)/board/trenz_mp/n.dtsi"

 

Share this post


Link to post
Share on other sites

Через пробел - это значит между именами должен быть разделитель пробел - как слова отделяются в предложении, только в конфиге в одной строке без  переносов

Quote

BR2_LINUX_KERNEL_USE_CUSTOM_DTS=y
BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="$(BR2_EXTERNAL_TRENZ_PATH)/board/trenz_mp/kernel.dts    $(BR2_EXTERNAL_TRENZ_PATH)/board/trenz_mp/first.dtsi    $(BR2_EXTERNAL_TRENZ_PATH)/board/trenz_mp/second.dtsi ... $(BR2_EXTERNAL_TRENZ_PATH)/board/trenz_mp/n.dtsi"

 

 

BR2_LINUX_KERNEL_CUSTOM_DTS_PATH= .... - все в одной строке, это форумный движок перенос сделал

Edited by sasamy

Share this post


Link to post
Share on other sites
1 hour ago, sasamy said:

Через пробел - это значит между именами должен быть разделитель пробел - как слова отделяются в предложении, только в конфиге в одной строке без  переносов

 

BR2_LINUX_KERNEL_CUSTOM_DTS_PATH= .... - все в одной строке, это форумный движок перенос сделал

 

Спасибо! Получилось!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.