All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
To: "Rafał Miłecki" <zajec5@gmail.com>
Cc: "Rafał Miłecki" <rafal@milecki.pl>, buildroot@buildroot.org
Subject: Re: [Buildroot] [PATCH] board/broadcom: add support for Northstar platform devices
Date: Thu, 19 Aug 2021 23:39:48 +0200	[thread overview]
Message-ID: <20210819233948.0ef06e41@windsurf> (raw)
In-Reply-To: <20210810131236.18022-1-zajec5@gmail.com>

Hello Rafał,

Thanks for this proposal!

On Tue, 10 Aug 2021 15:12:36 +0200
Rafał Miłecki <zajec5@gmail.com> wrote:

> From: Rafał Miłecki <rafal@milecki.pl>
> 
> Broadcom Northstar family of SoCs is most commonly used for home
> routers. It's an ARM platform with Cortex-A9 CPU(s).
> 
> All known Northstar devices come with CFE bootloader which almost always
> expects a TRX firmware format (with exception for the D-Link). Some
> vendors (like Luxul and Netgear) wrap TRX in their own containers.
> 
> For above reason a plain kernel and rootfs are useless for flashing
> purposes. CFE requires TRX(-like) format and there isn't any CFE
> replacement. Another issue is lack for DTS support in CFE.
> That's why for this board there is post-image script building device
> specific images. It takes care of appending DTB to the kernel and
> putting everything in a TRX image.

Is this also the reason why an initramfs is used, instead of a separated
rootfs?

> board/broadcom/ns/linux.config                | 115 ++++++++++++++++++
> board/broadcom/ns/post-image.sh               |  43 +++++++
> .../ns/rootfs_overlay/etc/init.d/S39network   |   6 +
> .../etc/network/interfaces.luxul,xap-1610-v1  |  24 ++++
> .../etc/network/interfaces.luxul,xwr-3150-v1  |  49 ++++++++
> .../etc/network/interfaces.smartrg,sr400ac    |  49 ++++++++
> configs/broadcom_ns_defconfig                 |  22 ++++
> 7 files changed, 308 insertions(+)

We also need board/broadcom/ns/readme.txt that explains how to use this
defconfig (see other readme.txt files in board/). And we also need an
update to the DEVELOPERS file to associate you with this defconfig and
board/broadcom/ns/ folder.

> diff --git a/board/broadcom/ns/linux.config b/board/broadcom/ns/linux.config
> new file mode 100644
> index 0000000000..1737e1d81a
> --- /dev/null
> +++ b/board/broadcom/ns/linux.config
> @@ -0,0 +1,115 @@
> +CONFIG_KERNEL_XZ=y
> +CONFIG_BLK_DEV_INITRD=y
> +CONFIG_INITRAMFS_SOURCE="${BR_BINARIES_DIR}/rootfs.cpio"

This should not be needed, as it's added by Buildroot.


> diff --git a/board/broadcom/ns/post-image.sh b/board/broadcom/ns/post-image.sh
> new file mode 100755
> index 0000000000..34856991a6
> --- /dev/null
> +++ b/board/broadcom/ns/post-image.sh
> @@ -0,0 +1,43 @@
> +#!/bin/sh
> +
> +# $1: images directory path
> +# $2: device dts filename
> +# $3: board id
> +build_lxl() {
> +	local images="$1"
> +	local device="$2"
> +	local board="$3"
> +
> +	lzma-alone e $images/zImage.$device $images/zImage.$device.lzma -d16

I don't have lzma-alone on my system, so it means that this tool should
probably be built by a Buildroot host package, as it's not necessarily
installed on the developer machine.

> +	rm -f $images/zImage.$device
> +	$HOST_DIR/bin/otrx create $images/$device.trx -f $images/zImage.$device.lzma
> +	rm -f $images/zImage.$device.lzma
> +	$HOST_DIR/bin/lxlfw create $images/$device.lxl -i $images/$device.trx -b "$board"
> +}
> +
> +# $1: images directory path
> +# $2: device dts filename
> +build_trx() {
> +	local images="$1"
> +	local device="$2"
> +
> +	lzma-alone e $images/zImage.$device $images/zImage.$device.lzma -d16
> +	rm -f $images/zImage.$device
> +	$HOST_DIR/bin/otrx create $images/$device.trx -f $images/zImage.$device.lzma
> +	rm -f $images/zImage.$device.lzma
> +}
> +
> +devices="$(sed -n 's/^BR2_LINUX_KERNEL_INTREE_DTS_NAME="\([a-z0-9 \-]*\)"$/\1/p' ${BR2_CONFIG})"
> +for device in $devices; do
> +	case "$device" in
> +		"bcm4708-smartrg-sr400ac")
> +			build_trx "$1" "$device"
> +			;;
> +		"bcm47094-luxul-xap-1610")
> +			build_lxl "$1" "$device" "XAP-1610"
> +			;;
> +		"bcm47094-luxul-xwr-3150-v1")
> +			build_lxl "$1" "$device" "XWR-3150"
> +			;;
> +	esac
> +done

Hm, so this defconfig in fact targets a family of devices. Buildroot
defconfigs normally target a single device. But I see the point here,
so perhaps we should leave it as you propose.

> diff --git a/board/broadcom/ns/rootfs_overlay/etc/init.d/S39network b/board/broadcom/ns/rootfs_overlay/etc/init.d/S39network
> new file mode 100755
> index 0000000000..a8098d2ab4
> --- /dev/null
> +++ b/board/broadcom/ns/rootfs_overlay/etc/init.d/S39network
> @@ -0,0 +1,6 @@
> +#!/bin/sh
> +
> +machine="$(cat /proc/device-tree/compatible | tr '\0' '\t' | cut -f 1)"
> +
> +interfaces="/usr/local/etc/network/interfaces.$machine"
> +[ -f "$interfaces" ] && cp "$interfaces" /etc/network/interfaces
> diff --git a/board/broadcom/ns/rootfs_overlay/usr/local/etc/network/interfaces.luxul,xap-1610-v1 b/board/broadcom/ns/rootfs_overlay/usr/local/etc/network/interfaces.luxul,xap-1610-v1
> new file mode 100644
> index 0000000000..bf766044b4
> --- /dev/null
> +++ b/board/broadcom/ns/rootfs_overlay/usr/local/etc/network/interfaces.luxul,xap-1610-v1

[...]

> diff --git a/board/broadcom/ns/rootfs_overlay/usr/local/etc/network/interfaces.luxul,xwr-3150-v1 b/board/broadcom/ns/rootfs_overlay/usr/local/etc/network/interfaces.luxul,xwr-3150-v1

[...]

> diff --git a/board/broadcom/ns/rootfs_overlay/usr/local/etc/network/interfaces.smartrg,sr400ac b/board/broadcom/ns/rootfs_overlay/usr/local/etc/network/interfaces.smartrg,sr400ac

I am not sure how much we want those quite specific network
configuration files in Buildroot itself. Shouldn't we leave that up to
the user? Those example files use 0.0.0.0 as a static IP address for
all interfaces, which isn't going to be very useful in practice I guess.

> diff --git a/configs/broadcom_ns_defconfig b/configs/broadcom_ns_defconfig
> new file mode 100644
> index 0000000000..b68de2e093
> --- /dev/null
> +++ b/configs/broadcom_ns_defconfig
> @@ -0,0 +1,22 @@
> +BR2_arm=y
> +BR2_cortex_a9=y
> +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y
> +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y

Needed for ?

> +BR2_ROOTFS_OVERLAY="board/broadcom/ns/rootfs_overlay"
> +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/broadcom/ns/post-image.sh"
> +BR2_LINUX_KERNEL=y
> +BR2_LINUX_KERNEL_CUSTOM_VERSION=y
> +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.57"
> +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
> +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/broadcom/ns/linux.config"
> +BR2_LINUX_KERNEL_APPENDED_ZIMAGE=y
> +BR2_LINUX_KERNEL_XZ=y
> +BR2_LINUX_KERNEL_INTREE_DTS_NAME="bcm4708-smartrg-sr400ac bcm47094-luxul-xap-1610 bcm47094-luxul-xwr-3150-v1"
> +BR2_PACKAGE_MTD=y

Not needed.

> +BR2_PACKAGE_LINUX_FIRMWARE=y
> +BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM4366C0=y
> +BR2_PACKAGE_BRIDGE_UTILS=y

Most likely not needed if we drop the network configuration files.

> +BR2_PACKAGE_DROPBEAR=y

Not needed (we want defconfigs to be minimal)

> +BR2_TARGET_ROOTFS_INITRAMFS=y
> +# BR2_TARGET_ROOTFS_TAR is not set
> +BR2_PACKAGE_HOST_FIRMWARE_UTILS=y

Thanks!

Thomas
-- 
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot

      parent reply	other threads:[~2021-08-19 21:40 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-10 13:12 [Buildroot] [PATCH] board/broadcom: add support for Northstar platform devices Rafał Miłecki
2021-08-10 14:01 ` Baruch Siach
2021-08-10 14:04   ` Rafał Miłecki
2021-08-19 21:39 ` Thomas Petazzoni [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210819233948.0ef06e41@windsurf \
    --to=thomas.petazzoni@bootlin.com \
    --cc=buildroot@buildroot.org \
    --cc=rafal@milecki.pl \
    --cc=zajec5@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.