* [Buildroot] [PATCH for-next v4 2/3] linux: introduce BR2_KERNEL_DTB_KEEP_DIRNAME
2020-06-01 15:16 [Buildroot] [PATCH for-next v4 1/3] {linux, linux-headers}: add version 5.7 Michael Walle
@ 2020-06-01 15:17 ` Michael Walle
2020-06-04 21:41 ` Yann E. MORIN
2020-06-01 15:17 ` [Buildroot] [PATCH for-next v4 3/3] board: Add Kontron SMARC-sAL28 support Michael Walle
1 sibling, 1 reply; 4+ messages in thread
From: Michael Walle @ 2020-06-01 15:17 UTC (permalink / raw)
To: buildroot
In linux, newer architectures like ARM64 and RISC-V keep their device
tree sources organized by subdirectories. When these device trees are
installed by the kernel they will keep the directory names. But
buildroot strips the prefixes when installing them into /boot or the
images directory.
Sometimes the bootloader references the device tree by name (e.g.
u-boot has the environment variable 'fdtfile') which also includes
the prefix directory.
Make it possible to keep this prefix during installation, so we can
be compatible with other distributions and make it easier for the
user, because he doesn't have to change that environment variable.
Signed-off-by: Michael Walle <michael@walle.cc>
---
Hi,
formerly, this was a seperate patch. But because the sl28 board also needs
another patch now, I combined all of them into one patch series. So
actually, there is no v2, nor a v3 of this patch.
Changes since v3:
none
Changes since v2:
none
linux/Config.in | 7 +++++++
linux/linux.mk | 10 ++++++----
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/linux/Config.in b/linux/Config.in
index e335931575..814e6ceded 100644
--- a/linux/Config.in
+++ b/linux/Config.in
@@ -407,6 +407,13 @@ config BR2_LINUX_KERNEL_CUSTOM_DTS_PATH
You can provide a list of dts paths to copy and
build, separated by spaces.
+config BR2_KERNEL_DTB_KEEP_DIRNAME
+ bool "Keep the directory name of the Device Tree"
+ help
+ If enabled, the device tree blobs keep their
+ directory prefixes when they get copied to the
+ output image directory or the target directory.
+
config BR2_LINUX_KERNEL_DTB_OVERLAY_SUPPORT
bool "Build Device Tree with overlay support"
help
diff --git a/linux/linux.mk b/linux/linux.mk
index 60dc343efa..c6ad9e432e 100644
--- a/linux/linux.mk
+++ b/linux/linux.mk
@@ -377,10 +377,12 @@ endef
ifeq ($(BR2_LINUX_KERNEL_APPENDED_DTB),)
define LINUX_INSTALL_DTB
# dtbs moved from arch/<ARCH>/boot to arch/<ARCH>/boot/dts since 3.8-rc1
- cp $(addprefix \
- $(LINUX_ARCH_PATH)/boot/$(if $(wildcard \
- $(addprefix $(LINUX_ARCH_PATH)/boot/dts/,$(LINUX_DTBS))),dts/),$(LINUX_DTBS)) \
- $(1)
+ $(foreach dtb,$(LINUX_DTBS), \
+ install -D $(addprefix \
+ $(LINUX_ARCH_PATH)/boot/$(if $(wildcard \
+ $(addprefix $(LINUX_ARCH_PATH)/boot/dts/,$(dtb))),dts/),$(dtb)) \
+ $(1)/$(if $(BR2_KERNEL_DTB_KEEP_DIRNAME),$(dtb),$(notdir $(dtb)))
+ )
endef
endif # BR2_LINUX_KERNEL_APPENDED_DTB
endif # BR2_LINUX_KERNEL_DTB_IS_SELF_BUILT
--
2.20.1
^ permalink raw reply related [flat|nested] 4+ messages in thread* [Buildroot] [PATCH for-next v4 3/3] board: Add Kontron SMARC-sAL28 support
2020-06-01 15:16 [Buildroot] [PATCH for-next v4 1/3] {linux, linux-headers}: add version 5.7 Michael Walle
2020-06-01 15:17 ` [Buildroot] [PATCH for-next v4 2/3] linux: introduce BR2_KERNEL_DTB_KEEP_DIRNAME Michael Walle
@ 2020-06-01 15:17 ` Michael Walle
1 sibling, 0 replies; 4+ messages in thread
From: Michael Walle @ 2020-06-01 15:17 UTC (permalink / raw)
To: buildroot
Now that upstream supports this board add buildroot support for it, too.
This supports:
- latest upstream linux kernel. Since the support for this board and
its SoC is still in active development, we want to follow the
upstream kernel releases for now.
- building an image which can be installed to eMMC, SD card or USB
thumb drive.
- upstream u-boot patches are pending, therefore no support for
building a bootloader for now.
Signed-off-by: Michael Walle <michael@walle.cc>
Reviewed-by: Heiko Thiery <heiko.thiery@gmail.com>
Tested-by: Heiko Thiery <heiko.thiery@gmail.com>
---
Changes since v3:
- removed custom kernel version, instead use the latest 5.7 kernel
Changes since v2:
- added udev rules 71-smarc-networking.rules, to rename the network
interfaces according to the SMARC specification.
- removed arm-smmu.disable_bypass=n kernel paramter, since the real fix is
now upstream and will be included in 5.7
- use full path in PARTUUID="$($HOST_DIR/bin/uuidgen)" to be sure we are
using our own uuidgen
- mention fdtfile in readme.txt
- fixed typo in readme.txt
- mention non-working network with vendor's bootloader in readme.txt
- set BR2_KERNEL_DTB_KEEP_DIRNAME=y
Changes since v1:
- added readme.txt
- changed from u-boot boot script to extlinux.conf booting
- enable eudev and added udev rules to properly name network interfaces
- removed CONFIG_FSL_ENETC_HW_TIMESTAMPING=y
- added CONFIG_NET_SCH_CBS, CONFIG_NET_SCH_ETF, CONFIG_NET_SCH_TAPRIO,
CONFIG_FSL_ENETC_QOS and iproute2, as this it the main feature of this
board
- added var2 device tree
- generate PARTUUID in post-build.sh to be able to use the resulting image
on any block device which the board supports for booting
- (keep post-build.sh for consistency reasons)
DEVELOPERS | 2 +
board/kontron/smarc-sal28/extlinux.conf | 4 +
board/kontron/smarc-sal28/genimage.cfg | 11 +++
board/kontron/smarc-sal28/linux.fragment | 18 +++++
board/kontron/smarc-sal28/post-build.sh | 7 ++
board/kontron/smarc-sal28/readme.txt | 80 +++++++++++++++++++
.../udev/rules.d/70-enetc-networking.rules | 8 ++
.../udev/rules.d/70-felix-networking.rules | 6 ++
.../udev/rules.d/71-smarc-networking.rules | 19 +++++
configs/kontron_smarc_sal28_defconfig | 22 +++++
10 files changed, 177 insertions(+)
create mode 100644 board/kontron/smarc-sal28/extlinux.conf
create mode 100644 board/kontron/smarc-sal28/genimage.cfg
create mode 100644 board/kontron/smarc-sal28/linux.fragment
create mode 100755 board/kontron/smarc-sal28/post-build.sh
create mode 100644 board/kontron/smarc-sal28/readme.txt
create mode 100644 board/kontron/smarc-sal28/rootfs_overlay/etc/udev/rules.d/70-enetc-networking.rules
create mode 100644 board/kontron/smarc-sal28/rootfs_overlay/etc/udev/rules.d/70-felix-networking.rules
create mode 100644 board/kontron/smarc-sal28/rootfs_overlay/etc/udev/rules.d/71-smarc-networking.rules
create mode 100644 configs/kontron_smarc_sal28_defconfig
diff --git a/DEVELOPERS b/DEVELOPERS
index 04811b6288..15b0cbdc0c 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -1837,6 +1837,8 @@ F: package/jasper/
F: package/libstrophe/
N: Michael Walle <michael@walle.cc>
+F: board/kontron/smarc-sal28/
+F: configs/kontron_smarc_sal28_defconfig
F: package/libavl/
N: Micha? ?yszczek <michal.lyszczek@bofc.pl>
diff --git a/board/kontron/smarc-sal28/extlinux.conf b/board/kontron/smarc-sal28/extlinux.conf
new file mode 100644
index 0000000000..bf60bc3798
--- /dev/null
+++ b/board/kontron/smarc-sal28/extlinux.conf
@@ -0,0 +1,4 @@
+label buildroot
+ kernel /boot/Image
+ devicetreedir /boot
+ append root=PARTUUID=%PARTUUID% rootwait
diff --git a/board/kontron/smarc-sal28/genimage.cfg b/board/kontron/smarc-sal28/genimage.cfg
new file mode 100644
index 0000000000..9ef37de757
--- /dev/null
+++ b/board/kontron/smarc-sal28/genimage.cfg
@@ -0,0 +1,11 @@
+image sdcard-emmc.img {
+ hdimage {
+ gpt = true
+ }
+
+ partition rootfs {
+ offset = 2M
+ image = rootfs.ext4
+ partition-uuid = %PARTUUID%
+ }
+}
diff --git a/board/kontron/smarc-sal28/linux.fragment b/board/kontron/smarc-sal28/linux.fragment
new file mode 100644
index 0000000000..00bbcc0923
--- /dev/null
+++ b/board/kontron/smarc-sal28/linux.fragment
@@ -0,0 +1,18 @@
+CONFIG_NET_DSA=m
+CONFIG_NET_DSA_TAG_OCELOT=m
+CONFIG_NET_DSA_MSCC_FELIX=m
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_CBS=m
+CONFIG_NET_SCH_ETF=m
+CONFIG_NET_SCH_TAPRIO=m
+CONFIG_CAN_FLEXCAN=m
+CONFIG_FSL_ENETC=y
+CONFIG_FSL_ENETC_VF=m
+CONFIG_FSL_ENETC_QOS=y
+CONFIG_MSCC_OCELOT_SWITCH=m
+CONFIG_PCIE_DW_PLAT_HOST=y
+CONFIG_GPIO_MPC8XXX=y
+CONFIG_SND_SOC_FSL_SAI=m
+CONFIG_SND_SOC_WM8904=m
+CONFIG_RTC_DRV_RV8803=y
+CONFIG_COMMON_CLK_FSL_SAI=y
diff --git a/board/kontron/smarc-sal28/post-build.sh b/board/kontron/smarc-sal28/post-build.sh
new file mode 100755
index 0000000000..bf8861f6a9
--- /dev/null
+++ b/board/kontron/smarc-sal28/post-build.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+BOARD_DIR="$(dirname $0)"
+PARTUUID="$($HOST_DIR/bin/uuidgen)"
+
+install -d "$TARGET_DIR/boot/extlinux/"
+sed "s/%PARTUUID%/$PARTUUID/g" "$BOARD_DIR/extlinux.conf" > "$TARGET_DIR/boot/extlinux/extlinux.conf"
+sed "s/%PARTUUID%/$PARTUUID/g" "$BOARD_DIR/genimage.cfg" > "$BINARIES_DIR/genimage.cfg"
diff --git a/board/kontron/smarc-sal28/readme.txt b/board/kontron/smarc-sal28/readme.txt
new file mode 100644
index 0000000000..231c751b66
--- /dev/null
+++ b/board/kontron/smarc-sal28/readme.txt
@@ -0,0 +1,80 @@
+Kontron SMARC-sAL28
+===================
+
+How to build it
+===============
+
+Configure Buildroot:
+
+ $ make kontron_smarc_sal28_defconfig
+
+Change settings to fit your needs (optional):
+
+ $ make menuconfig
+
+Compile everything and build the rootfs image:
+
+ $ make
+
+Copying the image to a storage device
+=====================================
+
+Buildroot builds an image which can be written to the internal eMMC
+storage, a SD card or an USB thumb drive. You can use the following
+command on your host:
+
+ $ sudo dd if=output/images/sdcard-emmc.img of=/dev/sdx bs=1M
+
+Where /dev/sdx is the corresponding block device of your SD card or USB
+thumb drive. To flash it on your internal eMMC use the following command on
+the board:
+
+ # dd if=sdcard-emmc.img of=/dev/mmcblk1 bs=1M
+
+Be sure you have not booted from the internal eMMC in this case!
+
+Booting the board
+=================
+
+By default the bootloader will search for the first valid image, starting
+with the internal eMMC. Consult the vendor documentation on how to use the
+DIP switches to select specific boot devices. To use the bootloader
+environment set the boot_targets correspondingly. E.g.:
+
+ # setenv boot_targets usb0
+
+To boot from an USB thumb drive.
+
+The device tree is loaded according to the filename in fdtfile. The
+following command will set the default device tree, which works on almost
+all variants (with less features of course):
+
+ # setenv fdtfile freescale/fsl-ls1028a-kontron-sl28.dtb
+
+Set this to a device tree which fits your board variant.
+
+Connect your serial cable to SER1 and open your favorite terminal emulation
+program (baudrate 115200, 8n1). E.g.:
+
+ $ picocom -b 115200 /dev/ttyUSB0
+
+You will get a warning reported by fdisk when you examine the SD card.
+This is because the genimage.cfg file doesn't specify the SD card size
+(as people will naturally have different sized cards), so the
+secondary GPT header is placed after the rootfs rather than at the end
+of the disk where it is expected to be.
+
+You will see something like this at boot time:
+
+[ 4.552797] GPT:Primary header thinks Alt. header is not at the end of the disk.
+[ 4.560237] GPT:266272 != 7864319
+[ 4.563565] GPT:Alternate GPT header not at the end of the disk.
+[ 4.569596] GPT:266272 != 7864319
+[ 4.572925] GPT: Use GNU Parted to correct GPT errors.
+
+What does not work
+==================
+
+For reasons unknown, the network card doesn't work if you use the original
+vendor bootloader. Board support patches for upstream u-boot are currently
+pending. Stay tuned.
diff --git a/board/kontron/smarc-sal28/rootfs_overlay/etc/udev/rules.d/70-enetc-networking.rules b/board/kontron/smarc-sal28/rootfs_overlay/etc/udev/rules.d/70-enetc-networking.rules
new file mode 100644
index 0000000000..8774bc5581
--- /dev/null
+++ b/board/kontron/smarc-sal28/rootfs_overlay/etc/udev/rules.d/70-enetc-networking.rules
@@ -0,0 +1,8 @@
+ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.0", DRIVERS=="fsl_enetc", NAME="eno0"
+ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.1", DRIVERS=="fsl_enetc", NAME="eno1"
+ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.2", DRIVERS=="fsl_enetc", NAME="eno2"
+ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.6", DRIVERS=="fsl_enetc", NAME="eno3"
+ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:01.0", DRIVERS=="fsl_enetc_vf", NAME="eno0vf0"
+ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:01.1", DRIVERS=="fsl_enetc_vf", NAME="eno0vf1"
+ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:01.2", DRIVERS=="fsl_enetc_vf", NAME="eno1vf0"
+ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:01.3", DRIVERS=="fsl_enetc_vf", NAME="eno1vf1"
diff --git a/board/kontron/smarc-sal28/rootfs_overlay/etc/udev/rules.d/70-felix-networking.rules b/board/kontron/smarc-sal28/rootfs_overlay/etc/udev/rules.d/70-felix-networking.rules
new file mode 100644
index 0000000000..917c0244ab
--- /dev/null
+++ b/board/kontron/smarc-sal28/rootfs_overlay/etc/udev/rules.d/70-felix-networking.rules
@@ -0,0 +1,6 @@
+ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.5", DRIVERS=="mscc_felix", ATTR{phys_port_name}=="p0", NAME="swp0"
+ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.5", DRIVERS=="mscc_felix", ATTR{phys_port_name}=="p1", NAME="swp1"
+ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.5", DRIVERS=="mscc_felix", ATTR{phys_port_name}=="p2", NAME="swp2"
+ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.5", DRIVERS=="mscc_felix", ATTR{phys_port_name}=="p3", NAME="swp3"
+ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.5", DRIVERS=="mscc_felix", ATTR{phys_port_name}=="p4", NAME="swp4"
+ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.5", DRIVERS=="mscc_felix", ATTR{phys_port_name}=="p5", NAME="swp5"
diff --git a/board/kontron/smarc-sal28/rootfs_overlay/etc/udev/rules.d/71-smarc-networking.rules b/board/kontron/smarc-sal28/rootfs_overlay/etc/udev/rules.d/71-smarc-networking.rules
new file mode 100644
index 0000000000..8c946b05fe
--- /dev/null
+++ b/board/kontron/smarc-sal28/rootfs_overlay/etc/udev/rules.d/71-smarc-networking.rules
@@ -0,0 +1,19 @@
+# Map the GBE0 and GBE1 names from the SMARC standard to the network
+# interfaces. This depends on the variant of the board.
+
+# get the variant compatible string
+PROGRAM=="/bin/grep '^kontron,sl28-var[1-4]$' /sys/firmware/devicetree/base/compatible", ENV{sl28_compatible}="%c"
+
+# variant 1
+ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.1", DRIVERS=="fsl_enetc", ENV{sl28_compatible}=="kontron,sl28-var1", NAME="gbe0"
+
+# variant 2
+ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.5", DRIVERS=="mscc_felix", ATTR{phys_port_name}=="p0", ENV{sl28_compatible}=="kontron,sl28-var2", NAME="gbe0"
+ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.5", DRIVERS=="mscc_felix", ATTR{phys_port_name}=="p1", ENV{sl28_compatible}=="kontron,sl28-var2", NAME="gbe1"
+
+# variant 3
+ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.0", DRIVERS=="fsl_enetc", ENV{sl28_compatible}=="kontron,sl28-var3", NAME="gbe0"
+
+# variant 4
+ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.0", DRIVERS=="fsl_enetc", ENV{sl28_compatible}=="kontron,sl28-var4", NAME="gbe0"
+ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.1", DRIVERS=="fsl_enetc", ENV{sl28_compatible}=="kontron,sl28-var4", NAME="gbe1"
diff --git a/configs/kontron_smarc_sal28_defconfig b/configs/kontron_smarc_sal28_defconfig
new file mode 100644
index 0000000000..8c6a9f249f
--- /dev/null
+++ b/configs/kontron_smarc_sal28_defconfig
@@ -0,0 +1,22 @@
+BR2_aarch64=y
+BR2_cortex_a72=y
+BR2_TOOLCHAIN_BUILDROOT_WCHAR=y
+BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
+BR2_ROOTFS_OVERLAY="board/kontron/smarc-sal28/rootfs_overlay"
+BR2_ROOTFS_POST_BUILD_SCRIPT="board/kontron/smarc-sal28/post-build.sh"
+BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh"
+BR2_ROOTFS_POST_SCRIPT_ARGS="-c $(BINARIES_DIR)/genimage.cfg"
+BR2_LINUX_KERNEL=y
+BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y
+BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/kontron/smarc-sal28/linux.fragment"
+BR2_LINUX_KERNEL_DTS_SUPPORT=y
+BR2_LINUX_KERNEL_INTREE_DTS_NAME="freescale/fsl-ls1028a-kontron-sl28 freescale/fsl-ls1028a-kontron-sl28-var2 freescale/fsl-ls1028a-kontron-sl28-var3-ads2 freescale/fsl-ls1028a-kontron-sl28-var4 freescale/fsl-ls1028a-kontron-kbox-a-230-ls"
+BR2_KERNEL_DTB_KEEP_DIRNAME=y
+BR2_LINUX_KERNEL_INSTALL_TARGET=y
+BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
+BR2_PACKAGE_IPROUTE2=y
+BR2_TARGET_ROOTFS_EXT2=y
+BR2_TARGET_ROOTFS_EXT2_4=y
+BR2_TARGET_ROOTFS_EXT2_SIZE="128M"
+BR2_PACKAGE_HOST_GENIMAGE=y
+BR2_PACKAGE_HOST_UBOOT_TOOLS=y
--
2.20.1
^ permalink raw reply related [flat|nested] 4+ messages in thread