Minnowboard: The grand unification
v2 cover Minnowboard: The grand unification
Following Arnout comments, here's a patchset that first unifies the Minnowboard board support, and then adds a "graphics & audio, yet minimum" defconfig.
The idea with this graphical_defconfig is to provide an X-based system, with ALSA audio and OpenGL enabled, at its minimum expression.
Regarding the Minnowboard board support unification, it's worth mentioning that it's possible to use the same kernel on both. However, a couple reasons made me retain the current choices:
* It is desirable to use upstream, when possible. Hence, we use upstream v4.4 for the Minnowboard MAX.
* The original Minnowboard has some GPIO keys that are not supported upstream. Using out-of-tree patches sucks because we need to carry them over when bumping, so I decided to just stick with the v3.8 yocto kernel.
There's a changelog on each patch, with some more detailed changes.
Ezequiel Garcia (4):
board/minnowboard: Rework to generate SD card image board/minnowboard: Unify Minnowboard and Minnowboard MAX boards board/minnowboard-max: Add more peripherals and features to the kernel board/minnowboard-max: Add a X-based graphical defconfig
board/minnowboard-max/post-build.sh | 2 -
board/minnowboard-max/readme.txt | 25 ---
.../fs-overlay-graphical/etc/asound.conf | 4 +
.../minnowboard/fs-overlay-graphical/root/.xinitrc | 1 +
.../fs-overlay-graphical/usr/bin/startx | 248 +++++++++++++++++++++
.../{minnowboard-max => minnowboard}/genimage.cfg | 0
.../grub-minnowboard-max.cfg} | 0
.../minnowboard/{grub.cfg => grub-minnowboard.cfg} | 0
.../linux.config => minnowboard/linux-4.4.config} | 10 +
board/minnowboard/post-build.sh | 5 +-
.../{minnowboard-max => minnowboard}/post-image.sh | 2 +-
board/minnowboard/readme.txt | 39 ++--
configs/minnowboard_defconfig | 10 +
configs/minnowboard_max-graphical_defconfig | 79 +++++++
configs/minnowboard_max_defconfig | 7 +-
15 files changed, 375 insertions(+), 57 deletions(-)
delete mode 100755 board/minnowboard-max/post-build.sh
delete mode 100644 board/minnowboard-max/readme.txt
create mode 100644 board/minnowboard/fs-overlay-graphical/etc/asound.conf
create mode 100644 board/minnowboard/fs-overlay-graphical/root/.xinitrc
create mode 100755 board/minnowboard/fs-overlay-graphical/usr/bin/startx
rename board/{minnowboard-max => minnowboard}/genimage.cfg (100%)
rename board/{minnowboard-max/grub.cfg => minnowboard/grub-minnowboard-max.cfg} (100%)
rename board/minnowboard/{grub.cfg => grub-minnowboard.cfg} (100%)
rename board/{minnowboard-max/linux.config => minnowboard/linux-4.4.config} (79%)
rename board/{minnowboard-max => minnowboard}/post-image.sh (84%)
create mode 100644 configs/minnowboard_max-graphical_defconfigSignature · 1 line
2.7.0
PATCH v2 1/4 board/minnowboard: Rework to generate SD card image
Let's rework the board and config files to use genimage to generate the SD card image directly.
--
Changes from v1:
* host-mtools is needed too, as noted by Peter.
--- board/minnowboard/genimage.cfg | 34 ++++++++++++++++++++++++++++++++++ board/minnowboard/post-image.sh | 13 +++++++++++++ board/minnowboard/readme.txt | 39 ++++++++++++--------------------------- configs/minnowboard_defconfig | 9 +++++++++ 4 files changed, 68 insertions(+), 27 deletions(-) create mode 100644 board/minnowboard/genimage.cfg create mode 100755 board/minnowboard/post-image.sh
board/minnowboard/genimage.cfg new file +34 -0
@@ -0,0 +1,34 @@ +# Create an image of the efi partition +image efi-part.vfat { + vfat { + file startup.nsh { + image = "efi-part/startup.nsh" + } + file EFI { + image = "efi-part/EFI" + } + file bzImage { + image = "bzImage" + } + } + size=10M +} + +# Create the sdcard image, pulling in +# * the image created by buildroot +# * the efi-partition created above +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xEF + image = "efi-part.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +}
board/minnowboard/post-image.sh new file +13 -0
@@ -0,0 +1,13 @@ +#!/bin/sh -e + +GENIMAGE_CFG="board/minnowboard/genimage.cfg" +GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp" + +rm -rf "${GENIMAGE_TMP}" + +genimage \ + --rootpath "${TARGET_DIR}" \ + --tmppath "${GENIMAGE_TMP}" \ + --inputpath "${BINARIES_DIR}" \ + --outputpath "${BINARIES_DIR}" \ + --config "${GENIMAGE_CFG}"
board/minnowboard/readme.txt +12 -27
@@ -1,40 +1,25 @@ -Prepare the SD card for the Minnow Board +How to get started with the MinnowBoard ======================================== - 1. Partition the SD card with a GPT partition table +1. Build - sudo cgdisk /dev/mmcblk0 + Apply the defconfig: - Create two partitions: + $ make minnowboard_defconfig - a) First partition of a few dozens of megabytes, which will be - used to store the bootloader and the kernel image. Type must - be EF00 (EFI partition). + Add any additional packages required and build: - b) Second partition of any size, which will be used to store the - root filesystem. Type must be 8300 (Linux filesystem) + $ make - 2. Prepare the boot partition +2. Write the SD card - We will format it, mount it, copy the EFI data generated by - Buildroot, and the kernel image. + The build process will create a SD card image in output/images. + Write the image to an mSD card, insert into the MinnowBoard + and power the board on. - sudo mkfs.vfat -F 32 -n boot /dev/mmcblk0p1 - sudo mount /dev/mmcblk0p1 /mnt - sudo cp -a output/images/efi-part/* /mnt/ - sudo cp output/images/bzImage /mnt/ - sudo umount /mnt + $ dd if=output/images/sdcard.img of=/dev/mmcblk0; sync - 3. Prepare the root partition - - We will format it, mount it, and extract the root filesystem. - - sudo mkfs.ext3 -L root /dev/mmcblk0p2 - sudo mount /dev/mmcblk0p2 /mnt - sudo tar -C /mnt -xf output/images/rootfs.tar - sudo umount /mnt - - 4. Enjoy +3. Enjoy Additional information about this board can be found at http://www.minnowboard.org/.
configs/minnowboard_defconfig +9 -0
@@ -5,9 +5,13 @@ BR2_x86_atom=y # Misc BR2_TARGET_GENERIC_GETTY_PORT="ttyPCH0" BR2_ROOTFS_POST_BUILD_SCRIPT="board/minnowboard/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/minnowboard/post-image.sh" # Linux headers same as kernel, a 3.8 series BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_3_8=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y # Linux kernel BR2_LINUX_KERNEL=y
@@ -20,3 +24,8 @@ BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/minnowboard/linux-3.8.config" # Bootloader BR2_TARGET_GRUB2=y BR2_TARGET_GRUB2_I386_EFI=y + +# Filesystem image +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set
Signature · 1 line
2.7.0
PATCH v2 2/4 board/minnowboard: Unify Minnowboard and Minnowboard MAX boards
In reply to Ezequiel GarciaGiven Minnowboard and Minnowboard MAX boards are very similar, it's desirable to unify the support for them.
This commit does the following:
1) Remove Minnowboard MAX's genimage.cfg, post-build.sh and post-image.sh. These are identical to Minnowboard's.
2) Move Minnowboard MAX's linux config, and rename it.
It would be lovely to have a single kernel config file. The kernel size penalty involved in adding support for all the peripherals on both boards is small enough to justify this.
However, the original Minnowboard has some GPIO buttons that need to be registered by the kernel. This is not upstreamed, and hence we need to use the yocto v3.8 kernel to have this support.
3) Rename each grub config to grub-{board}.cfg.
4) Modify (the now unique) post-build script to use a different grub config, according to the board.
5) Update both defconfigs, as per the above changes.
6) Finally, update the readme.txt.
--
Changes from v1:
* New patch, not present in v1.
---
board/minnowboard-max/genimage.cfg | 34 ----------------------
board/minnowboard-max/post-build.sh | 2 --
board/minnowboard-max/post-image.sh | 13 ---------
board/minnowboard-max/readme.txt | 25 ----------------
.../grub-minnowboard-max.cfg} | 0
.../minnowboard/{grub.cfg => grub-minnowboard.cfg} | 0
.../linux.config => minnowboard/linux-4.4.config} | 0
board/minnowboard/post-build.sh | 5 +++-
board/minnowboard/readme.txt | 4 +++
configs/minnowboard_defconfig | 1 +
configs/minnowboard_max_defconfig | 7 +++--
11 files changed, 13 insertions(+), 78 deletions(-)
delete mode 100644 board/minnowboard-max/genimage.cfg
delete mode 100755 board/minnowboard-max/post-build.sh
delete mode 100755 board/minnowboard-max/post-image.sh
delete mode 100644 board/minnowboard-max/readme.txt
rename board/{minnowboard-max/grub.cfg => minnowboard/grub-minnowboard-max.cfg} (100%)
rename board/minnowboard/{grub.cfg => grub-minnowboard.cfg} (100%)
rename board/{minnowboard-max/linux.config => minnowboard/linux-4.4.config} (100%)board/minnowboard-max/genimage.cfg deleted +0 -34
@@ -1,34 +0,0 @@ -# Create an image of the efi partition -image efi-part.vfat { - vfat { - file startup.nsh { - image = "efi-part/startup.nsh" - } - file EFI { - image = "efi-part/EFI" - } - file bzImage { - image = "bzImage" - } - } - size=10M -} - -# Create the sdcard image, pulling in -# * the image created by buildroot -# * the efi-partition created above -image sdcard.img { - hdimage { - } - - partition boot { - partition-type = 0xEF - image = "efi-part.vfat" - } - - partition rootfs { - partition-type = 0x83 - image = "rootfs.ext4" - size = 512M - } -}
board/minnowboard-max/post-build.sh deleted +0 -2
@@ -1,2 +0,0 @@ -#!/bin/sh -cp board/minnowboard-max/grub.cfg ${BINARIES_DIR}/efi-part/EFI/BOOT/grub.cfg
board/minnowboard-max/post-image.sh deleted +0 -13
@@ -1,13 +0,0 @@ -#!/bin/sh -e - -GENIMAGE_CFG="board/minnowboard-max/genimage.cfg" -GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp" - -rm -rf "${GENIMAGE_TMP}" - -genimage \ - --rootpath "${TARGET_DIR}" \ - --tmppath "${GENIMAGE_TMP}" \ - --inputpath "${BINARIES_DIR}" \ - --outputpath "${BINARIES_DIR}" \ - --config "${GENIMAGE_CFG}"
board/minnowboard-max/readme.txt deleted +0 -25
@@ -1,25 +0,0 @@ -How to get started with the Minnow Board MAX -============================================ - -1. Build - - Apply the defconfig: - - $ make minnowboard_max_defconfig - - Add any additional packages required and build: - - $ make - -2. Write the SD card - - The build process will create a SD card image in output/images. - Write the image to an mSD card, insert into the Minnowboard MAX - and power the board on. - - $ dd if=output/images/sdcard.img of=/dev/mmcblk0; sync - -3. Enjoy - -Additional information about this board can be found at -http://www.minnowboard.org/ or http://wiki.minnowboard.org/MinnowBoard_MAX
board/minnowboard/grub-minnowboard-max.cfg renamed from board/minnowboard-max/grub.cfg +0 -0
board/minnowboard/grub-minnowboard.cfg renamed from board/minnowboard/grub.cfg +0 -0
board/minnowboard/linux-4.4.config renamed from board/minnowboard-max/linux.config +0 -0
board/minnowboard/post-build.sh +4 -1
@@ -1,2 +1,5 @@ #!/bin/sh -cp board/minnowboard/grub.cfg ${BINARIES_DIR}/efi-part/EFI/BOOT/grub.cfg +# args from BR2_ROOTFS_POST_SCRIPT_ARGS +# $2 board name + +cp -v board/minnowboard/grub-${2}.cfg ${BINARIES_DIR}/efi-part/EFI/BOOT/grub.cfg
board/minnowboard/readme.txt +4 -0
@@ -7,6 +7,10 @@ How to get started with the MinnowBoard $ make minnowboard_defconfig + Or, for the Minnowboard MAX board: + + $ make minnowboard_max_defconfig + Add any additional packages required and build: $ make
configs/minnowboard_defconfig +1 -0
@@ -6,6 +6,7 @@ BR2_x86_atom=y BR2_TARGET_GENERIC_GETTY_PORT="ttyPCH0" BR2_ROOTFS_POST_BUILD_SCRIPT="board/minnowboard/post-build.sh" BR2_ROOTFS_POST_IMAGE_SCRIPT="board/minnowboard/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="minnowboard" # Linux headers same as kernel, a 3.8 series BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_3_8=y
configs/minnowboard_max_defconfig +4 -3
@@ -4,8 +4,9 @@ BR2_x86_atom=y # Misc BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" -BR2_ROOTFS_POST_BUILD_SCRIPT="board/minnowboard-max/post-build.sh" -BR2_ROOTFS_POST_IMAGE_SCRIPT="board/minnowboard-max/post-image.sh" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/minnowboard/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/minnowboard/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="minnowboard-max" # Linux headers same as kernel, a 4.4 series BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_4=y
@@ -22,7 +23,7 @@ BR2_LINUX_KERNEL=y BR2_LINUX_KERNEL_CUSTOM_VERSION=y BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.4" BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y -BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/minnowboard-max/linux.config" +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/minnowboard/linux-4.4.config" # Bootloader BR2_TARGET_GRUB2=y
Signature · 1 line
2.7.0
PATCH v2 3/4 board/minnowboard-max: Add more peripherals and features to the kernel
In reply to Ezequiel GarciaThis commit enables support for:
* HDMI audio
* Support for user-provided EDID firmware
(useful to workaround broken monitors)
* Evdev interface
* System V IPC (required by ALSA)
The options make the system more useful.
--
Changes from v1:
* Since we dropped systemd usage, got rid of related options.
--- board/minnowboard/linux-4.4.config | 10 ++++++++++ 1 file changed, 10 insertions(+)
board/minnowboard/linux-4.4.config +10 -0
@@ -1,3 +1,4 @@ +CONFIG_SYSVIPC=y CONFIG_NO_HZ=y CONFIG_SMP=y CONFIG_X86_INTEL_LPSS=y
@@ -19,6 +20,7 @@ CONFIG_SATA_AHCI=y CONFIG_ATA_PIIX=y CONFIG_NETDEVICES=y CONFIG_R8169=y +CONFIG_INPUT_EVDEV=y CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_DW=y
@@ -33,7 +35,15 @@ CONFIG_GPIOLIB=y CONFIG_GPIO_SYSFS=y CONFIG_AGP=y CONFIG_DRM=y +CONFIG_DRM_LOAD_EDID_FIRMWARE=y CONFIG_DRM_I915=y +CONFIG_SOUND=y +CONFIG_SND=y +# CONFIG_SND_DRIVERS is not set +CONFIG_SND_HDA_INTEL=y +CONFIG_SND_HDA_CODEC_HDMI=y +# CONFIG_SND_SPI is not set +# CONFIG_SND_USB is not set CONFIG_USB=y CONFIG_USB_XHCI_HCD=y CONFIG_NOP_USB_XCEIV=y
Signature · 1 line
2.7.0
PATCH v2 4/4 board/minnowboard-max: Add a X-based graphical defconfig
In reply to Ezequiel GarciaThis commit adds a new defconfig to build a X-based graphical system for the Minnowboard MAX board.
* The 'openbox' windows manager is chosen because it's simple and lightweigth.
* Basic X apps are enabled (such as xrandr, xterm), so we can at least get a console and change video mode.
* ALSA default configuration is provided, so HDMI audio works out-of-the-box.
* OpenGL is supported.
Tested on Minnoboard Turot (which is Minnowboard Max compatible).
--
Changes from v1:
* Use an overlay instead of post-build.sh to customize the rootfs.
* Remove systemd usage, so we provide a minimum "audio and graphics" setup.
--- .../fs-overlay-graphical/etc/asound.conf | 4 + .../minnowboard/fs-overlay-graphical/root/.xinitrc | 1 + .../fs-overlay-graphical/usr/bin/startx | 248 +++++++++++++++++++++ configs/minnowboard_max-graphical_defconfig | 79 +++++++ 4 files changed, 332 insertions(+) create mode 100644 board/minnowboard/fs-overlay-graphical/etc/asound.conf create mode 100644 board/minnowboard/fs-overlay-graphical/root/.xinitrc create mode 100755 board/minnowboard/fs-overlay-graphical/usr/bin/startx create mode 100644 configs/minnowboard_max-graphical_defconfig
board/minnowboard/fs-overlay-graphical/etc/asound.conf new file +4 -0
@@ -0,0 +1,4 @@ +# Customize ALSA: +# the HDMI PCM is at card=0, device=3 (i.e. hw:0,3) +defaults.pcm.card 0 +defaults.pcm.device 3
board/minnowboard/fs-overlay-graphical/root/.xinitrc new file +1 -0
@@ -0,0 +1 @@ +exec /usr/bin/openbox-session
board/minnowboard/fs-overlay-graphical/usr/bin/startx new file +248 -0
248 lines not on this page · raw message
configs/minnowboard_max-graphical_defconfig new file +79 -0
79 lines not on this page · raw message
Signature · 1 line
2.7.0
PATCH v2 4/4 board/minnowboard-max: Add a X-based graphical defconfig
Hello,
Quoted 1 line · Ezequiel Garcia
.../fs-overlay-graphical/usr/bin/startx | 248 +++++++++++++++++++++
This script looks really long and complicated. Where does it come from? Is it really specific to the Minnowboard?
Another open question is whether we should add some details in readme.txt about this configuration, like which demos are provided, example commands to run to test the whole thing, etc.
Thanks!
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com
PATCH v2 4/4 board/minnowboard-max: Add a X-based graphical defconfig
Quoted 9 lines · Thomas Petazzoni
Hello,
Quoted 1 line · Ezequiel Garcia
.../fs-overlay-graphical/usr/bin/startx | 248 +++++++++++++++++++++This script looks really long and complicated. Where does it come from? Is it really specific to the Minnowboard?
Nope, it's the standard startx script, provided by the xinit package. I'm pretty sure all distros bundle the same cumbersome startx script.
It is perfectly possible to write a much, much simpler script.
In fact, the juicy part is this:
xinit "$client" $clientargs -- "$server" $display $serverargs
I.e., It is possible to run xinit, with a couple params and it would work. The only change needed is running X on a different VT, which startx forces to be the controlling terminal.
The problem (or a related one?) is well described here:
https://bugs.freedesktop.org/show_bug.cgi?id=87762
BTW: now that I think of it, I'm not sure this script is needed, since it was somewhat related to systemd being used.
I will check again, and in any case, provide a simpler startx.
Quoted 3 lines
Another open question is whether we should add some details in readme.txt about this configuration, like which demos are provided, example commands to run to test the whole thing, etc.
Sure, that makes sense.
I'll cook a v3.
Signature · 2 lines
Ezequiel Garc?a, VanguardiaSur www.vanguardiasur.com.ar
PATCH v2 4/4 board/minnowboard-max: Add a X-based graphical defconfig
Hello,
Quoted 1 line · Ezequiel Garcia
Nope, it's the standard startx script, provided by the xinit package.
The big question now is why do you have this script in an overlay rather than using the one provided by the xinit package?
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com
PATCH v2 4/4 board/minnowboard-max: Add a X-based graphical defconfig
Quoted 9 lines · Thomas Petazzoni
Hello,
Quoted 1 line · Ezequiel Garcia
Nope, it's the standard startx script, provided by the xinit package.
The big question now is why do you have this script in an overlay rather than using the one provided by the xinit package?
Quoting the script itself:
+# Fixup startx so it doesn't start X on the controlling +# virtual console. Apparently, this is a bug and we are +# affected for our lack of a Display Manager.
+# See https://bugs.freedesktop.org/show_bug.cgi?id=87762
+#
+# I haven't found a way to do this without hacking startx +# itself. The only change we are doing here is setting +# serverargs to "vt1", see below.
Unless serverargs is set, calling "startx" without params will always use the controlling terminal, and X then fails to switch VT or something. Don't really recall the error, but it prevented X from starting.
Signature · 2 lines
Ezequiel Garc?a, VanguardiaSur www.vanguardiasur.com.ar