* [Buildroot] [PATCH 0/5 v2] RPi: enable building a device-tree-enabled kernel (branch yem/rpi-dt)
@ 2015-01-09 22:46 Yann E. MORIN
2015-01-09 22:46 ` [Buildroot] [PATCH 1/5 v2] package/rpi-firmware: add DT-aware marking script Yann E. MORIN
` (5 more replies)
0 siblings, 6 replies; 10+ messages in thread
From: Yann E. MORIN @ 2015-01-09 22:46 UTC (permalink / raw)
To: buildroot
Hello All!
Recently, the Raspberry Pi fork of the kernel has gained support
for the device tree.
This series is an attempt at making it smoothly available in Buildroot:
- add the necessary infrastructure: install DTBs from rpi-firmware,
and install a script to mark the kernel (see below);
- update the board documentation;
- add a defconfig.
It is to be moted that the device tree support on the Raspberry Pi is
not trivially similar to how all other boards behave:
====
First, the bootloader needs to know if the kernel has DT support or not,
so it looks for a magic DTOK footer (a header at the end); if this header
is present, DT support is assumed, and the bootloader loads the DTB.
This is not very much like what is done on other boards...
====
Second, the bootloader knows what model of the RPi it boots on, and is
thus capable of loading the correct DTB. This is nice, because it means
that a single firmware will work on all RPI models, auto magically.
This requires the kernel image has the footer appended, of course.
===
Third, if the kernel does not have a DTOK footer, it is possible to
force-load a DTB, by adding a directive in the config.txt file (the
configuration of the bootloader).
In this case, the bootloader will force-load that file as a DTB before
booting the kernel.
But we loose the autodetection of the model we are running on, and
it is not longer possible to run the same firmware on all models.
===
Eventually, there is a not-so-simple perl script that is provided in
a separate RPi repository. Since this repository is rather huge, we
just copied that script and bundled it in Buildroot.
Notes: I've upstreamed a fix for that perl script, that has been
accepted. Round-trip: 2 hours! Yeah! :-)
===
This has been tested to work great with the currently-latest cset on
the rpi-3.18.y branch, at:
https://github.com/raspberrypi/linux/tree/rpi-3.18.y
b9c9f8fc69aaba236169798c18dc1590fccf7acd
Since this is not their stable branch, that specific commit may disapear
any time; just use the latest commit on rpi-3.18.y .
Changes v1 -> v2:
- do not force DT support in the kernel (thomas P., Peter)
- update the marking script
- update the board documentation
Regards,
Yann E. MORIN.
The following changes since commit 799c12ebe6c830338124f90a81d12feaa08de391:
xz-utils: needs threads (2015-01-09 13:26:27 +0100)
are available in the git repository at:
git://git.busybox.net/~ymorin/git/buildroot yem/rpi-dt
for you to fetch changes up to b65d009bf4aeb83b97e02a9fd03c14888b5f1ce2:
configs: add a DT-enabled Raspberry Pi defconfig (2015-01-09 23:27:28 +0100)
----------------------------------------------------------------
Yann E. MORIN (5):
package/rpi-firmware: add DT-aware marking script
package/rpi-firmware: install DTB blobs
boards/raspberrypi: don't document non-existent files
boards/raspberrypi: update readme with Device Tree instructions
configs: add a DT-enabled Raspberry Pi defconfig
board/raspberrypi/readme.txt | 33 ++++-
configs/raspberrypi_dt_defconfig | 12 ++
package/rpi-firmware/Config.in | 11 ++
package/rpi-firmware/mkknlimg | 227 +++++++++++++++++++++++++++++++++++
package/rpi-firmware/rpi-firmware.mk | 24 ++++
5 files changed, 301 insertions(+), 6 deletions(-)
create mode 100644 configs/raspberrypi_dt_defconfig
create mode 100755 package/rpi-firmware/mkknlimg
--
.-----------------.--------------------.------------------.--------------------.
| Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
| +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'
^ permalink raw reply [flat|nested] 10+ messages in thread* [Buildroot] [PATCH 1/5 v2] package/rpi-firmware: add DT-aware marking script 2015-01-09 22:46 [Buildroot] [PATCH 0/5 v2] RPi: enable building a device-tree-enabled kernel (branch yem/rpi-dt) Yann E. MORIN @ 2015-01-09 22:46 ` Yann E. MORIN 2015-01-09 22:46 ` [Buildroot] [PATCH 2/5 v2] package/rpi-firmware: install DTB blobs Yann E. MORIN ` (4 subsequent siblings) 5 siblings, 0 replies; 10+ messages in thread From: Yann E. MORIN @ 2015-01-09 22:46 UTC (permalink / raw) To: buildroot The Raspberry Pi can boot a kernel with device tree support. But at the same time, the RPi folks wante to keep the old-fashioned, ATAG-based way of booting (don't ask...). So, the bootloader needs to know whether the kernel it is loading has DT support or not. For that, it looks at the end of the kernel image for a magic footer. If found, it loads a device tree and sets the registers appropriately so that the kernel finds the DTB. If not found, it loads the kernel with the traditional ATAGS. Where it becomes a bit tricky, is that the DTB is different for models A/B and A+/B+ (that is A and B use the same DTB, while the A+ and B+ use a second DTB). The bootloader is capable to load the correct DTB from a specially named file. That is: - on A/B, it loads bcm2708-rpi-b.dtb - on A+/B+, it loads bcm2708-rpi-b-plus.dtb If the DTB is differently named, the bootloader won't find it, will not load any DTB at all, and revert to booting with ATAGS. It is possible to specify what DTB to load, by adding an new config option 'device_tree=file.dtb' in config.txt, but then the firmware on the SDcard is no longer bootable on both the original models and the Plus models. So, add a script that appends the appropriate footer to the kernel image. The script is vampirised from the RPi's tools repository, but a new package is *not* added just for that script: the whole repository is 300+ MiB, and a checkout is 600+ MiB; it is not pertinent to add this as a new package for a script that weights a few KiB... Install that script as a host utility, too. Notes: lots of information is available in this thread on the RPi forums: http://www.raspberrypi.org/forums/viewtopic.php?f=29&t=93015 Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> --- package/rpi-firmware/mkknlimg | 227 +++++++++++++++++++++++++++++++++++ package/rpi-firmware/rpi-firmware.mk | 10 ++ 2 files changed, 237 insertions(+) create mode 100755 package/rpi-firmware/mkknlimg diff --git a/package/rpi-firmware/mkknlimg b/package/rpi-firmware/mkknlimg new file mode 100755 index 0000000..f377947 --- /dev/null +++ b/package/rpi-firmware/mkknlimg @@ -0,0 +1,227 @@ +#!/usr/bin/env perl +# +# Originaly from: https://github.com/raspberrypi/tools/blob/master/mkimage/mkknlimg +# Original cset : 92a2df13b887f4799554bf92c4fc78d53668c868 + +use strict; +use integer; + +my $trailer_magic = 'RPTL'; + +my $tmpfile1 = "/tmp/mkknlimg_$$.1"; +my $tmpfile2 = "/tmp/mkknlimg_$$.2"; + +my $dtok = 0; + +while ($ARGV[0] =~ /^-/) +{ + my $arg = shift(@ARGV); + if ($arg eq '--dtok') + { + $dtok = 1; + } + else + { + print ("* Unknown option '$arg'\n"); + usage(); + } +} + +usage() if (@ARGV != 2); + +my $kernel_file = $ARGV[0]; +my $out_file = $ARGV[1]; + +my @wanted_config_lines = +( + 'CONFIG_BCM2708_DT' +); + +my @wanted_strings = +( + 'bcm2708_fb', + 'brcm,bcm2708-pinctrl', + 'brcm,bcm2835-gpio', + 'of_find_property' +); + +my $res = try_extract($kernel_file, $tmpfile1); + +$res = try_decompress('\037\213\010', 'xy', 'gunzip', 0, + $kernel_file, $tmpfile1, $tmpfile2) if (!$res); +$res = try_decompress('\3757zXZ\000', 'abcde', 'unxz --single-stream', -1, + $kernel_file, $tmpfile1, $tmpfile2) if (!$res); +$res = try_decompress('BZh', 'xy', 'bunzip2', 0, + $kernel_file, $tmpfile1, $tmpfile2) if (!$res); +$res = try_decompress('\135\0\0\0', 'xxx', 'unlzma', 0, + $kernel_file, $tmpfile1, $tmpfile2) if (!$res); +$res = try_decompress('\211\114\132', 'xy', 'lzop -d', 0, + $kernel_file, $tmpfile1, $tmpfile2) if (!$res); + +my $append_trailer; +my $trailer; + +if ($res) +{ + print("Version: $res->{''}\n"); + + $append_trailer = $dtok; + if (!$dtok) + { + if (config_bool($res, 'bcm2708_fb')) + { + $dtok ||= config_bool($res, 'CONFIG_BCM2708_DT'); + $dtok ||= config_bool($res, 'brcm,bcm2708-pinctrl'); + $dtok ||= config_bool($res, 'brcm,bcm2835-gpio'); + $append_trailer = 1; + } + else + { + print ("* This doesn't look like a Raspberry Pi kernel. In pass-through mode.\n"); + } + } +} +else +{ + print ("* Is this a valid kernel? In pass-through mode.\n"); +} + +if ($append_trailer) +{ + printf("DT: %s\n", $dtok ? "y" : "n"); + + my @atoms; + + push @atoms, [ $trailer_magic, pack('V', 0) ]; + push @atoms, [ 'KVer', $res->{''} ]; + push @atoms, [ 'DTOK', pack('V', $dtok) ]; + + $trailer = pack_trailer(\@atoms); + $atoms[0]->[1] = pack('V', length($trailer)); + + $trailer = pack_trailer(\@atoms); +} + +die "* Failed to open '$kernel_file'\n" if (!open(my $ifh, '<', $kernel_file)); +die "* Failed to create '$out_file'\n" if (!open(my $ofh, '>', $out_file)); + +my $copybuf; +my $total_len = 0; +while (1) +{ + my $bytes = sysread($ifh, $copybuf, 64*1024); + last if (!$bytes); + syswrite($ofh, $copybuf, $bytes); + $total_len += $bytes; +} + +if ($trailer) +{ + # Pad to word-alignment + syswrite($ofh, "\x000\x000\x000", (-$total_len & 0x3)); + syswrite($ofh, $trailer); +} + +close($ifh); +close($ofh); + +exit($trailer ? 0 : 1); + +END { + unlink($tmpfile1) if ($tmpfile1); + unlink($tmpfile2) if ($tmpfile2); +} + + +sub usage +{ + print ("Usage: mkknlimg [--dtok] <vmlinux|zImage|bzImage> <outfile>\n"); + exit(1); +} + +sub try_extract +{ + my ($knl, $tmp) = @_; + + my $ver = `strings "$knl" | grep -a -E "^Linux version [1-9]"`; + + return undef if (!$ver); + + chomp($ver); + + my $res = { ''=>$ver }; + my $string_pattern = '^('.join('|', @wanted_strings).')$'; + + my @matches = `strings \"$knl\" | grep -E \"$string_pattern\"`; + foreach my $match (@matches) + { + chomp($match); + $res->{$match} = 1; + } + + my $config_pattern = '^('.join('|', @wanted_config_lines).')=(.*)$'; + my $cf1 = 'IKCFG_ST\037\213\010'; + my $cf2 = '0123456789'; + + my $pos = `tr "$cf1\n$cf2" "\n$cf2=" < "$knl" | grep -abo "^$cf2"`; + if ($pos) + { + $pos =~ s/:.*[\r\n]*$//s; + $pos += 8; + my $err = (system("tail -c+$pos \"$knl\" | zcat > $tmp 2> /dev/null") >> 8); + if (($err == 0) || ($err == 2)) + { + if (open(my $fh, '<', $tmp)) + { + while (my $line = <$fh>) + { + chomp($line); + $res->{$1} = $2 if ($line =~ /$config_pattern/); + } + + close($fh); + } + } + } + + return $res; +} + + +sub try_decompress +{ + my ($magic, $subst, $zcat, $idx, $knl, $tmp1, $tmp2) = @_; + + my $pos = `tr "$magic\n$subst" "\n$subst=" < "$knl" | grep -abo "^$subst"`; + if ($pos) + { + chomp($pos); + $pos = (split(/[\r\n]+/, $pos))[$idx]; + $pos =~ s/:.*[\r\n]*$//s; + my $cmd = "tail -c+$pos \"$knl\" | $zcat > $tmp2 2> /dev/null"; + my $err = (system($cmd) >> 8); + return undef if (($err != 0) && ($err != 2)); + + return try_extract($tmp2, $tmp1); + } + + return undef; +} + +sub pack_trailer +{ + my ($atoms) = @_; + my $trailer = pack('VV', 0, 0); + for (my $i = $#$atoms; $i>=0; $i--) + { + my $atom = $atoms->[$i]; + $trailer .= pack('a*x!4Va4', $atom->[1], length($atom->[1]), $atom->[0]); + } + return $trailer; +} + +sub config_bool +{ + my ($configs, $wanted) = @_; + return (($configs->{$wanted} eq 'y') || ($configs->{$wanted} eq '1')); +} diff --git a/package/rpi-firmware/rpi-firmware.mk b/package/rpi-firmware/rpi-firmware.mk index 571a546..eb835ee 100644 --- a/package/rpi-firmware/rpi-firmware.mk +++ b/package/rpi-firmware/rpi-firmware.mk @@ -19,4 +19,14 @@ define RPI_FIRMWARE_INSTALL_IMAGES_CMDS $(INSTALL) -D -m 0644 package/rpi-firmware/cmdline.txt $(BINARIES_DIR)/rpi-firmware/cmdline.txt endef +# We have no host sources to get, since we already +# bundle the script we want to install. +HOST_RPI_FIRMWARE_SOURCE = +HOST_RPI_FIRMWARE_DEPENDENCIES = + +define HOST_RPI_FIRMWARE_INSTALL_CMDS + $(INSTALL) -D -m 0755 package/rpi-firmware/mkknlimg $(HOST_DIR)/usr/bin/mkknlimg +endef + $(eval $(generic-package)) +$(eval $(host-generic-package)) -- 1.9.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Buildroot] [PATCH 2/5 v2] package/rpi-firmware: install DTB blobs 2015-01-09 22:46 [Buildroot] [PATCH 0/5 v2] RPi: enable building a device-tree-enabled kernel (branch yem/rpi-dt) Yann E. MORIN 2015-01-09 22:46 ` [Buildroot] [PATCH 1/5 v2] package/rpi-firmware: add DT-aware marking script Yann E. MORIN @ 2015-01-09 22:46 ` Yann E. MORIN 2015-01-09 22:46 ` [Buildroot] [PATCH 3/5 v2] boards/raspberrypi: don't document non-existent files Yann E. MORIN ` (3 subsequent siblings) 5 siblings, 0 replies; 10+ messages in thread From: Yann E. MORIN @ 2015-01-09 22:46 UTC (permalink / raw) To: buildroot Add an option to install all the DTBs: - standard DTBs for standalon A/B and A+/B+ models; - overlay DTBs for the 'hats' addon boards. Install the DTBs as per the traditional layout expected by all RPi users, that is: - base DTBs alongside the other boot files; - overlay DTBs in a sub-directory. This requires the user provide a specially configured Linux defconfig file, as the default ones do not enable USE_OF. Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> --- package/rpi-firmware/Config.in | 11 +++++++++++ package/rpi-firmware/rpi-firmware.mk | 14 ++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/package/rpi-firmware/Config.in b/package/rpi-firmware/Config.in index cd45be4..80ba88a 100644 --- a/package/rpi-firmware/Config.in +++ b/package/rpi-firmware/Config.in @@ -45,4 +45,15 @@ config BR2_PACKAGE_RPI_FIRMWARE_BOOT default "_x" if BR2_PACKAGE_RPI_FIRMWARE_X default "_cd" if BR2_PACKAGE_RPI_FIRMWARE_CD +config BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTBS + bool "Install Device Tree Blobs (DTBs)" + help + Say 'y' here if you want to boot your kernel that has support + for the device tree. + + Note that the defconfig files in the Raspberry Pi fork of the + Linux kernel do not enable support for the Device Tree. You'll + have to provide your own Linux config or defconfig file with + device tree enabled, to make use of those DTBs. + endif # BR2_PACKAGE_RPI_FIRMWARE diff --git a/package/rpi-firmware/rpi-firmware.mk b/package/rpi-firmware/rpi-firmware.mk index eb835ee..04c6160 100644 --- a/package/rpi-firmware/rpi-firmware.mk +++ b/package/rpi-firmware/rpi-firmware.mk @@ -11,12 +11,26 @@ RPI_FIRMWARE_LICENSE_FILES = boot/LICENCE.broadcom RPI_FIRMWARE_INSTALL_TARGET = NO RPI_FIRMWARE_INSTALL_IMAGES = YES +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTBS),y) +RPI_FIRMWARE_DEPENDENCIES += host-rpi-firmware +# Override the version in this case. +RPI_FIRMWARE_VERSION = 09627457b9e15bf4ea4e6751d3c173a3fb65df07 +define RPI_FIRMWARE_INSTALL_DTB + $(INSTALL) -D -m 0644 $(@D)/boot/bcm2708-rpi-b.dtb $(BINARIES_DIR)/rpi-firmware/bcm2708-rpi-b.dtb + $(INSTALL) -D -m 0644 $(@D)/boot/bcm2708-rpi-b-plus.dtb $(BINARIES_DIR)/rpi-firmware/bcm2708-rpi-b-plus.dtb + for ovldtb in $(@D)/boot/overlays/*.dtb; do \ + $(INSTALL) -D -m 0644 $${ovldtb} $(BINARIES_DIR)/rpi-firmware/overlays/$${ovldtb##*/} || exit 1; \ + done +endef +endif + define RPI_FIRMWARE_INSTALL_IMAGES_CMDS $(INSTALL) -D -m 0644 $(@D)/boot/bootcode.bin $(BINARIES_DIR)/rpi-firmware/bootcode.bin $(INSTALL) -D -m 0644 $(@D)/boot/start$(BR2_PACKAGE_RPI_FIRMWARE_BOOT).elf $(BINARIES_DIR)/rpi-firmware/start.elf $(INSTALL) -D -m 0644 $(@D)/boot/fixup$(BR2_PACKAGE_RPI_FIRMWARE_BOOT).dat $(BINARIES_DIR)/rpi-firmware/fixup.dat $(INSTALL) -D -m 0644 package/rpi-firmware/config.txt $(BINARIES_DIR)/rpi-firmware/config.txt $(INSTALL) -D -m 0644 package/rpi-firmware/cmdline.txt $(BINARIES_DIR)/rpi-firmware/cmdline.txt + $(RPI_FIRMWARE_INSTALL_DTB) endef # We have no host sources to get, since we already -- 1.9.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Buildroot] [PATCH 3/5 v2] boards/raspberrypi: don't document non-existent files 2015-01-09 22:46 [Buildroot] [PATCH 0/5 v2] RPi: enable building a device-tree-enabled kernel (branch yem/rpi-dt) Yann E. MORIN 2015-01-09 22:46 ` [Buildroot] [PATCH 1/5 v2] package/rpi-firmware: add DT-aware marking script Yann E. MORIN 2015-01-09 22:46 ` [Buildroot] [PATCH 2/5 v2] package/rpi-firmware: install DTB blobs Yann E. MORIN @ 2015-01-09 22:46 ` Yann E. MORIN 2015-01-09 22:46 ` [Buildroot] [PATCH 4/5 v2] boards/raspberrypi: update readme with Device Tree instructions Yann E. MORIN ` (2 subsequent siblings) 5 siblings, 0 replies; 10+ messages in thread From: Yann E. MORIN @ 2015-01-09 22:46 UTC (permalink / raw) To: buildroot Those files were preiously installed, but that's no longer the case since we select in the menuconfig which version of the bootloader we install. Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> --- board/raspberrypi/readme.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/board/raspberrypi/readme.txt b/board/raspberrypi/readme.txt index 8532de4..a6d3dd4 100644 --- a/board/raspberrypi/readme.txt +++ b/board/raspberrypi/readme.txt @@ -55,9 +55,7 @@ After building, you should obtain this tree: +-- rpi-firmware | +-- bootcode.bin | +-- config.txt - | +-- fixup_cd.dat | +-- fixup.dat - | +-- start_cd.elf | `-- start.elf `-- zImage -- 1.9.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Buildroot] [PATCH 4/5 v2] boards/raspberrypi: update readme with Device Tree instructions 2015-01-09 22:46 [Buildroot] [PATCH 0/5 v2] RPi: enable building a device-tree-enabled kernel (branch yem/rpi-dt) Yann E. MORIN ` (2 preceding siblings ...) 2015-01-09 22:46 ` [Buildroot] [PATCH 3/5 v2] boards/raspberrypi: don't document non-existent files Yann E. MORIN @ 2015-01-09 22:46 ` Yann E. MORIN 2015-01-09 22:46 ` [Buildroot] [PATCH 5/5 v2] configs: add a DT-enabled Raspberry Pi defconfig Yann E. MORIN 2015-01-10 11:23 ` [Buildroot] [PATCH 0/5 v2] RPi: enable building a device-tree-enabled kernel (branch yem/rpi-dt) Thomas Petazzoni 5 siblings, 0 replies; 10+ messages in thread From: Yann E. MORIN @ 2015-01-09 22:46 UTC (permalink / raw) To: buildroot Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> --- board/raspberrypi/readme.txt | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/board/raspberrypi/readme.txt b/board/raspberrypi/readme.txt index a6d3dd4..725ad9d 100644 --- a/board/raspberrypi/readme.txt +++ b/board/raspberrypi/readme.txt @@ -23,6 +23,10 @@ work on this defconfig: $ make raspberrypi_defconfig +Alternatively, if you want to test support for the Device Tree: + + $ make raspberrypi_dt_defconfig + If you want to use a persistent rootfs, skip to "Build the rootfs", below. For a volatile rootfs, you have to slightly adjust the configuration: @@ -51,16 +55,22 @@ Result of the build After building, you should obtain this tree: output/images/ - +-- rootfs.tar - +-- rpi-firmware + +-- rootfs.tar [0] + +-- rpi-firmware/ + | +-- bcm2708-rpi-b.dtb [1] + | +-- bcm2708-rpi-b-plus.dtb [1] | +-- bootcode.bin | +-- config.txt | +-- fixup.dat | `-- start.elf `-- zImage -Note for Volatile: rootfs.tar will only be there if you kept -"tar the root filesystem" option selected in "Filesystem images". +[0] Note for Volatile: rootfs.tar will only be there if you kept + "tar the root filesystem" option selected in "Filesystem images". + +[1] The DTBs (Device Tree Blobs) will only be present if you setup + Buildroot to install the DTBs from the rpi-firmware package, and + will only be used if your kernel has support for the Device Tree. Prepare you SDCard ================== @@ -89,17 +99,30 @@ Install the binaries to the SDCard At the root of the boot partition, the RaspberryPi must find the following files: + * bcm2708-rpi-b.dtb [2] + * bcm2708-rpi-b-plus.dtb [2] * bootcode.bin * config.txt * fixup.dat * start.elf * zImage +[2] Only needed if your kernel has support for the Device Tree. + For example: $ cp output/images/rpi-firmware/* /mnt/mountpointboot + +If your kernel does *not* have support for the Device Tree, then install +it with: + $ cp output/images/zImage /mnt/mountpointboot +If your kernel *does* have support for the Device Tree, then install it +with: + + $ ./output/host/usr/bin/mkknlimg output/images/zImage /mnt/mountpointboot/zImage + Note: The kernel image file name is defined in config.txt like this: kernel=zImage -- 1.9.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Buildroot] [PATCH 5/5 v2] configs: add a DT-enabled Raspberry Pi defconfig 2015-01-09 22:46 [Buildroot] [PATCH 0/5 v2] RPi: enable building a device-tree-enabled kernel (branch yem/rpi-dt) Yann E. MORIN ` (3 preceding siblings ...) 2015-01-09 22:46 ` [Buildroot] [PATCH 4/5 v2] boards/raspberrypi: update readme with Device Tree instructions Yann E. MORIN @ 2015-01-09 22:46 ` Yann E. MORIN 2015-01-10 11:17 ` Thomas Petazzoni 2015-01-10 11:23 ` [Buildroot] [PATCH 0/5 v2] RPi: enable building a device-tree-enabled kernel (branch yem/rpi-dt) Thomas Petazzoni 5 siblings, 1 reply; 10+ messages in thread From: Yann E. MORIN @ 2015-01-09 22:46 UTC (permalink / raw) To: buildroot This is an example of a Device-Tree-enabled Raspberry Pi defconfig. We have to use a 3.18-based kernel for that, but there are a few limitations: - we can not use the minimalist RPi defconfig bundled with the kernel, namely bcmrpi_quick_defconfig, because it is not DT-enabled, and sets CONFIG_ARM_PATCH_PHYS_VIRT to 'n', which prompts a value for CONFIG_PHYS_OFFSET, as it as no default for the bcm familly; - we have to use the 'default' but bloated bcmrpi_defconfig, which makes for a very fat kernel with lots of modules, and takes ages to build; - most importantly, the rpi-3.18.y branch is constantly rebased, so there is no guarantee that the sha1 I use today will still be usable in the long term. Using the name of hte branch is not better either. To compensate for an already overly-long build time for such a minimalist system (18min 20s, as compared to 6min 30s when using bcmrpi_quick), I decided to use an external toolchain rather than build our own. Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> --- configs/raspberrypi_dt_defconfig | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 configs/raspberrypi_dt_defconfig diff --git a/configs/raspberrypi_dt_defconfig b/configs/raspberrypi_dt_defconfig new file mode 100644 index 0000000..188ece9 --- /dev/null +++ b/configs/raspberrypi_dt_defconfig @@ -0,0 +1,12 @@ +BR2_arm=y +BR2_arm1176jzf_s=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TARGET_GENERIC_GETTY_PORT="tty1" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_GIT=y +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="git://github.com/raspberrypi/linux.git" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="b9c9f8fc69aaba236169798c18dc1590fccf7acd" +BR2_LINUX_KERNEL_DEFCONFIG="bcmrpi" +BR2_LINUX_KERNEL_ZIMAGE=y +BR2_PACKAGE_RPI_FIRMWARE=y +BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTBS=y -- 1.9.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Buildroot] [PATCH 5/5 v2] configs: add a DT-enabled Raspberry Pi defconfig 2015-01-09 22:46 ` [Buildroot] [PATCH 5/5 v2] configs: add a DT-enabled Raspberry Pi defconfig Yann E. MORIN @ 2015-01-10 11:17 ` Thomas Petazzoni 2015-01-10 11:28 ` Thomas Petazzoni 0 siblings, 1 reply; 10+ messages in thread From: Thomas Petazzoni @ 2015-01-10 11:17 UTC (permalink / raw) To: buildroot Dear Yann E. MORIN, On Fri, 9 Jan 2015 23:46:23 +0100, Yann E. MORIN wrote: > - we can not use the minimalist RPi defconfig bundled with the kernel, > namely bcmrpi_quick_defconfig, because it is not DT-enabled, and > sets CONFIG_ARM_PATCH_PHYS_VIRT to 'n', which prompts a value for > CONFIG_PHYS_OFFSET, as it as no default for the bcm familly; > > - we have to use the 'default' but bloated bcmrpi_defconfig, which > makes for a very fat kernel with lots of modules, and takes ages to > build; > > - most importantly, the rpi-3.18.y branch is constantly rebased, so > there is no guarantee that the sha1 I use today will still be usable > in the long term. Using the name of hte branch is not better either. Well, you could alternatively decide to have a custom kernel defconfig in board/raspberrypi/, which would be the same as bcmrpi_quick, with just the modifications you need for DT. Sure it means it will have to be updated from time to time, but hopefully at some point in the future the official bcmrpi_quick defconfig will have DT support enabled. Thomas -- Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com ^ permalink raw reply [flat|nested] 10+ messages in thread
* [Buildroot] [PATCH 5/5 v2] configs: add a DT-enabled Raspberry Pi defconfig 2015-01-10 11:17 ` Thomas Petazzoni @ 2015-01-10 11:28 ` Thomas Petazzoni 0 siblings, 0 replies; 10+ messages in thread From: Thomas Petazzoni @ 2015-01-10 11:28 UTC (permalink / raw) To: buildroot Hello, On Sat, 10 Jan 2015 12:17:51 +0100, Thomas Petazzoni wrote: > > - we can not use the minimalist RPi defconfig bundled with the kernel, > > namely bcmrpi_quick_defconfig, because it is not DT-enabled, and > > sets CONFIG_ARM_PATCH_PHYS_VIRT to 'n', which prompts a value for > > CONFIG_PHYS_OFFSET, as it as no default for the bcm familly; > > > > - we have to use the 'default' but bloated bcmrpi_defconfig, which > > makes for a very fat kernel with lots of modules, and takes ages to > > build; > > > > - most importantly, the rpi-3.18.y branch is constantly rebased, so > > there is no guarantee that the sha1 I use today will still be usable > > in the long term. Using the name of hte branch is not better either. > > Well, you could alternatively decide to have a custom kernel defconfig > in board/raspberrypi/, which would be the same as bcmrpi_quick, with > just the modifications you need for DT. Sure it means it will have to > be updated from time to time, but hopefully at some point in the future > the official bcmrpi_quick defconfig will have DT support enabled. Another motivation would be to switch back to an internal toolchain. Using an external toolchain here is quite inefficient: for an ARMv6 such as the RPi, we will fallback to the CodeSourcery toolchain, which will generate ARMv5 soft-float code. Not nice for a VFP-using ARMv6. Thomas -- Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com ^ permalink raw reply [flat|nested] 10+ messages in thread
* [Buildroot] [PATCH 0/5 v2] RPi: enable building a device-tree-enabled kernel (branch yem/rpi-dt) 2015-01-09 22:46 [Buildroot] [PATCH 0/5 v2] RPi: enable building a device-tree-enabled kernel (branch yem/rpi-dt) Yann E. MORIN ` (4 preceding siblings ...) 2015-01-09 22:46 ` [Buildroot] [PATCH 5/5 v2] configs: add a DT-enabled Raspberry Pi defconfig Yann E. MORIN @ 2015-01-10 11:23 ` Thomas Petazzoni 2015-01-10 11:27 ` Yann E. MORIN 5 siblings, 1 reply; 10+ messages in thread From: Thomas Petazzoni @ 2015-01-10 11:23 UTC (permalink / raw) To: buildroot Dear Yann E. MORIN, On Fri, 9 Jan 2015 23:46:19 +0100, Yann E. MORIN wrote: > Yann E. MORIN (5): > package/rpi-firmware: add DT-aware marking script > package/rpi-firmware: install DTB blobs > boards/raspberrypi: don't document non-existent files Those ones applied. I just did a minor change on PATCH 2/5, to explain why we need to change the version when installing DTBs is enabled. > boards/raspberrypi: update readme with Device Tree instructions > configs: add a DT-enabled Raspberry Pi defconfig For those ones, I'm waiting for your input on using a custom defconfig instead of a default one that is too big. Thanks, Thomas -- Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com ^ permalink raw reply [flat|nested] 10+ messages in thread
* [Buildroot] [PATCH 0/5 v2] RPi: enable building a device-tree-enabled kernel (branch yem/rpi-dt) 2015-01-10 11:23 ` [Buildroot] [PATCH 0/5 v2] RPi: enable building a device-tree-enabled kernel (branch yem/rpi-dt) Thomas Petazzoni @ 2015-01-10 11:27 ` Yann E. MORIN 0 siblings, 0 replies; 10+ messages in thread From: Yann E. MORIN @ 2015-01-10 11:27 UTC (permalink / raw) To: buildroot Thomas, All, On 2015-01-10 12:23 +0100, Thomas Petazzoni spake thusly: > On Fri, 9 Jan 2015 23:46:19 +0100, Yann E. MORIN wrote: > > > Yann E. MORIN (5): > > package/rpi-firmware: add DT-aware marking script > > package/rpi-firmware: install DTB blobs > > boards/raspberrypi: don't document non-existent files > > Those ones applied. I just did a minor change on PATCH 2/5, to explain > why we need to change the version when installing DTBs is enabled. Thanks! :-) > > boards/raspberrypi: update readme with Device Tree instructions > > configs: add a DT-enabled Raspberry Pi defconfig > > For those ones, I'm waiting for your input on using a custom defconfig > instead of a default one that is too big. In fact, that's the way I originally went for; I do have such a minimalist defconfig, which is just bcmrpi_quick with DT enabled. But then I thought that it would be easier to maintain usign the bundled defconfig, even though it is much bigger. But if you prefer, I can just restore my minimalist defconfig before I respin. Regards, Yann E. MORIN. -- .-----------------.--------------------.------------------.--------------------. | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: | | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ | | +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no | | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. | '------------------------------^-------^------------------^--------------------' ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2015-01-10 11:28 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-01-09 22:46 [Buildroot] [PATCH 0/5 v2] RPi: enable building a device-tree-enabled kernel (branch yem/rpi-dt) Yann E. MORIN 2015-01-09 22:46 ` [Buildroot] [PATCH 1/5 v2] package/rpi-firmware: add DT-aware marking script Yann E. MORIN 2015-01-09 22:46 ` [Buildroot] [PATCH 2/5 v2] package/rpi-firmware: install DTB blobs Yann E. MORIN 2015-01-09 22:46 ` [Buildroot] [PATCH 3/5 v2] boards/raspberrypi: don't document non-existent files Yann E. MORIN 2015-01-09 22:46 ` [Buildroot] [PATCH 4/5 v2] boards/raspberrypi: update readme with Device Tree instructions Yann E. MORIN 2015-01-09 22:46 ` [Buildroot] [PATCH 5/5 v2] configs: add a DT-enabled Raspberry Pi defconfig Yann E. MORIN 2015-01-10 11:17 ` Thomas Petazzoni 2015-01-10 11:28 ` Thomas Petazzoni 2015-01-10 11:23 ` [Buildroot] [PATCH 0/5 v2] RPi: enable building a device-tree-enabled kernel (branch yem/rpi-dt) Thomas Petazzoni 2015-01-10 11:27 ` Yann E. MORIN
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox