[Buildroot] [PATCH v2] Add Device Tree and simpleImage support

Spenser Gilliland spenser309 at gmail.com
Sat Feb 25 10:30:52 UTC 2012


Alvaro,

Sorry I've been swamped and will be until Wednesday but everything I
have done so far is in github.com/Spenser309/buildroot.

There's a branch dts where I am working on this patch and a branch
microblaze where I am working on the microblaze patch.

Spenser

On Sat, Feb 25, 2012 at 3:34 AM, Alvaro Gamez <alvaro.gamez at hazent.com> wrote:
> Hi, Spenser
>
> Do you need some help solving this issues? If you don't have the time I can
> try and solve some of them, I just don't want to step on your job if you're
> already working at that.
>
> BTW, Arnout, I saw you ack'ed my previous patches for wget and xilinx's
> repositories, but I haven't seen them applied to the tree. Is there anything
> I can help with?
>
> Regards,
>
> 2012/2/20 Arnout Vandecappelle <arnout at mind.be>
>>
>> On Sunday 19 February 2012 21:41:00 Spenser Gilliland wrote:
>> > This patch adds device tree and simpleImage support to buildroot.  When
>> > the simpleImage Kernel binary image type is selected, the user has can
>> > select either an in tree device tree source file or an out of tree device
>> > tree source file.
>> >
>> > This triggers the kernel to build the simpleImage.<dt> target and copy
>> > the resulting binary to the output/images directory.  Additionally, if the
>> > install dtb option is selected the <dt>.dtb file is copied to the output
>> > directory.
>>
>>  Please wrap the commit message at 80 columns.
>>
>>  The simpleImage support should be split off from the DTS support in a
>> separate patch.
>>
>> > Signed-off-by: Spenser Gilliland <Spenser309 at gmail.com>
>> [snip]
>> > +#
>> > +# Device Tree Support
>> > +#
>> > +
>> > +choice
>> > +     prompt "Device Tree Blob"
>> > +     default BR2_LINUX_KERNEL_USE_DTS
>> > +     depends on BR2_LINUX_KERNEL_SIMPLEIMAGE
>>
>>  DTS is available for (almost) all architectures, so I don't think we
>> needs a depends here.  Certainly not on simpleImage.
>>
>> > +
>> > +config BR2_LINUX_KERNEL_USE_DTS
>> > +     bool "Use an in kernel device tree"
>> > +
>> > +config BR2_LINUX_KERNEL_USE_CUSTOM_DTS
>> > +     bool "Use a custom device tree"
>> > +
>> > +endchoice
>> > +
>> > +config BR2_LINUX_KERNEL_MAKE_DTB
>> > +     bool
>> > +     default y if BR2_LINUX_KERNEL_USE_DTS ||
>> > BR2_LINUX_KERNEL_USE_CUSTOM_DTS
>> > +
>> > +config BR2_LINUX_KERNEL_INSTALL_DTS
>> > +     bool "Copy device tree blob to the output directory"
>> > +     depends on BR2_LINUX_KERNEL_MAKE_DTB
>> > +     help
>> > +       This copies the device tree blob to the images
>> > +       directory.
>>
>>  I don't think this is necessary; the dtb is pretty small so you can just
>> copy it to the images directory unconditionally.
>>
>>  If you do keep this config, call it INSTALL_DTB and fix the description
>> to 'to the images directory'.
>>
>> > +
>> > +config BR2_LINUX_KERNEL_DTS
>> > +     string "Dts Name"
>> > +     depends on BR2_LINUX_KERNEL_USE_DTS
>> > +     help
>> > +       Name of device tree source file in tree to use
>> > +       without the trailing .dts
>>
>>  Maybe point out where it can be found: arch/<arch>/boot/dts/
>>
>> > +
>> > +config BR2_LINUX_KERNEL_CUSTOM_DTS
>> > +     string "Dts file path"
>> > +     depends on BR2_LINUX_KERNEL_USE_CUSTOM_DTS
>> > +     help
>> > +       Path to the custom dts file.
>> > +
>> > +
>> >  config BR2_LINUX_KERNEL_IMAGE_TARGET_NAME
>> >       string "Kernel image target name"
>> >       depends on BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM
>> > diff --git a/linux/linux.mk b/linux/linux.mk
>> > index ae236d4..1fb4ece 100644
>> > --- a/linux/linux.mk
>> > +++ b/linux/linux.mk
>> > @@ -67,6 +67,9 @@ else ifeq ($(BR2_LINUX_KERNEL_VMLINUX),y)
>> >  LINUX_IMAGE_NAME=vmlinux
>> >  else ifeq ($(BR2_LINUX_KERNEL_VMLINUZ),y)
>> >  LINUX_IMAGE_NAME=vmlinuz
>> > +else ifeq ($(BR2_LINUX_KERNEL_SIMPLEIMAGE),y)
>> > +# Image name is set once the dts is known
>>
>>  If you move the DTS stuff before these conditions, then you don't
>> need a special case for simpleImage here.
>>
>> > +LINUX_DEPENDENCIES+=host-uboot-tools
>> >  endif
>> >  endif
>> >
>> > @@ -118,6 +121,35 @@ endef
>> >  LINUX_POST_PATCH_HOOKS += LINUX_APPLY_PATCHES
>> >
>> >
>> > +ifneq ($(BR2_LINUX_KERNEL_CUSTOM_DTS),)
>> > +LINUX_KERNEL_CUSTOM_DTS = $(call qstrip,
>> > $(BR2_LINUX_KERNEL_CUSTOM_DTS))
>> > +DTS_NAME = $(shell export file=`basename $(LINUX_KERNEL_CUSTOM_DTS)` &&
>> > echo $${file%.*})
>>
>>  Doesn't this work?
>> DTS_NAME = $(patsubst %.dts,%,$(notdir $(LINUX_KERNEL_CUSTOM_DTS)))
>>
>> > +define LINUX_COPY_DTS
>> > +   echo "LINUX_KERNEL_CUSTOM_DTS=$(LINUX_KERNEL_CUSTOM_DTS) and
>> > DTS_NAME=$(DTS_NAME)" && \
>>
>>  I guess this line was there for debugging and is redundant now?
>>
>> > +     mkdir -p $(KERNEL_ARCH_PATH)/boot/dts && \
>> > +     cp $(BR2_LINUX_KERNEL_CUSTOM_DTS) $(KERNEL_ARCH_PATH)/boot/dts/
>> > +endef
>> > +endif
>> > +
>> > +ifeq ($(BR2_LINUX_KERNEL_USE_DTS),y)
>> > +DTS_NAME = $(call qstrip, $(BR2_LINUX_KERNEL_DTS))
>> > +endif
>> > +
>> > +ifeq ($(BR2_LINUX_KERNEL_MAKE_DTB),y)
>> > +define LINUX_MAKE_DTB
>> > +     $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D)
>> > scripts/dtc/ && \
>>
>>  Is that correct?  Shouldn't that be scripts/dtc/dtc ?
>>
>>  Also, there's no reason to use && to connect the steps here: make
>> implicitly terminates command execution if any command fails.
>>
>> > +    scripts/dtc/dtc -O dtb -o $(KERNEL_ARCH_PATH)/boot/$(DTS_NAME).dtb
>> > \
>>  There's something wrong with the indentation here.
>>
>> > +      -b 0 -p 1024 $(KERNEL_ARCH_PATH)/boot/dts/$(DTS_NAME).dts
>> > +endef
>> > +define LINUX_INSTALL_DTB
>> > +     cp $(KERNEL_ARCH_PATH)/boot/$(DTS_NAME).dtb $(BINARIES_DIR)
>> > +endef
>> > +endif
>> > +
>> > +ifeq ($(BR2_LINUX_KERNEL_SIMPLEIMAGE),y)
>> > +LINUX_IMAGE_NAME = simpleImage.$(DTS_NAME)
>> > +endif
>> > +
>> >  ifeq ($(BR2_LINUX_KERNEL_USE_DEFCONFIG),y)
>> >  KERNEL_SOURCE_CONFIG = $(KERNEL_ARCH_PATH)/configs/$(call
>> > qstrip,$(BR2_LINUX_KERNEL_DEFCONFIG))_defconfig
>> >  else ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG),y)
>> > @@ -125,6 +157,8 @@ KERNEL_SOURCE_CONFIG =
>> > $(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE)
>> >  endif
>> >
>> >  define LINUX_CONFIGURE_CMDS
>> > +     $(if $(BR2_LINUX_KERNEL_USE_CUSTOM_DTS),
>> > +             $(call LINUX_COPY_DTS))
>>  Why is this a $(call)?  You're not passing any parameters...  Also, the
>> $(if) is redundant since LINUX_COPY_DTS will just be empty if it's not
>> true.
>>
>> >       cp $(KERNEL_SOURCE_CONFIG)
>> > $(KERNEL_ARCH_PATH)/configs/buildroot_defconfig
>> >       $(TARGET_MAKE_ENV) $(MAKE1) $(LINUX_MAKE_FLAGS) -C $(@D)
>> > buildroot_defconfig
>> >       rm $(KERNEL_ARCH_PATH)/configs/buildroot_defconfig
>> > @@ -158,17 +192,22 @@ define LINUX_BUILD_CMDS
>> >       @if grep -q "CONFIG_MODULES=y" $(@D)/.config; then      \
>> >               $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D)
>> > modules ;       \
>> >       fi
>> > +     $(if $(BR2_LINUX_KERNEL_MAKE_DTB),
>> > +             $(call LINUX_MAKE_DTB))
>>
>>  Same here.
>>
>> >  endef
>> >
>> >
>> >  ifeq ($(BR2_LINUX_KERNEL_INSTALL_TARGET),y)
>> >  define LINUX_INSTALL_KERNEL_IMAGE_TO_TARGET
>> >       install -m 0644 -D $(LINUX_IMAGE_PATH)
>> > $(TARGET_DIR)/boot/$(LINUX_IMAGE_NAME)
>> > +
>>  No need to add an empty line here.
>> >  endef
>> >  endif
>> >
>> >  define LINUX_INSTALL_IMAGES_CMDS
>> >       cp $(LINUX_IMAGE_PATH) $(BINARIES_DIR)
>> > +     $(if $(BR2_LINUX_KERNEL_INSTALL_DTB),
>> > +             $(call LINUX_INSTALL_DTB))
>>
>>  Again redundant $(if) and $(call).
>>
>> >  endef
>> >
>> >  define LINUX_INSTALL_TARGET_CMDS
>> > @@ -215,6 +254,8 @@ $(LINUX_DIR)/.stamp_initramfs_rebuilt:
>> > $(LINUX_DIR)/.stamp_target_installed $(LI
>> >       $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D)
>> > $(LINUX_IMAGE_NAME)
>> >       # Copy the kernel image to its final destination
>> >       cp $(LINUX_IMAGE_PATH) $(BINARIES_DIR)
>> > +     # If there is a .ub file copy it to the final destination
>> > +     test -f $(LINUX_IMAGE_PATH).ub && cp $(LINUX_IMAGE_PATH).ub
>> > $(BINARIES_DIR)
>>
>>  Maybe add a comment here explaining with a .ub file is.
>>
>>  Is this only relevant for initramfs builds?
>>
>> >       $(Q)touch $@
>> >
>> >  # The initramfs building code must make sure this target gets called
>> >
>>
>>
>>  Regards,
>>  Arnout
>>
>> --
>> Arnout Vandecappelle                               arnout at mind be
>> Senior Embedded Software Architect                 +32-16-286540
>> Essensium/Mind                                     http://www.mind.be
>> G.Geenslaan 9, 3001 Leuven, Belgium                BE 872 984 063 RPR
>> Leuven
>> LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
>> GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
>> _______________________________________________
>> buildroot mailing list
>> buildroot at busybox.net
>> http://lists.busybox.net/mailman/listinfo/buildroot
>
>
>
>
> --
> Álvaro Gámez Machado
>



-- 
Spenser Gilliland
Computer Engineer
Illinois Institute of Technology



More information about the buildroot mailing list