lkml.org 
[lkml]   [2008]   [May]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCHv2 27/28] firmware: Add CONFIG_BUILTIN_FIRMWARE option
    Date
    This allows arbitrary firmware files to be included in the static kernel
    where the firmware loader can find them without requiring userspace to
    be alive.

    Signed-off-by: David Woodhouse <dwmw2@infradead.org>
    ---
    Makefile | 2 +-
    drivers/base/Kconfig | 12 ++++++++++
    firmware/Makefile | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++
    3 files changed, 71 insertions(+), 1 deletions(-)
    create mode 100644 firmware/Makefile

    diff --git a/Makefile b/Makefile
    index 20b3235..ac2ab7e 100644
    --- a/Makefile
    +++ b/Makefile
    @@ -450,7 +450,7 @@ scripts: scripts_basic include/config/auto.conf

    # Objects we will link into vmlinux / subdirs we need to visit
    init-y := init/
    -drivers-y := drivers/ sound/
    +drivers-y := drivers/ sound/ firmware/
    net-y := net/
    libs-y := lib/
    core-y := usr/
    diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig
    index d7da109..b856fe8 100644
    --- a/drivers/base/Kconfig
    +++ b/drivers/base/Kconfig
    @@ -34,6 +34,18 @@ config FW_LOADER
    require userspace firmware loading support, but a module built outside
    the kernel tree does.

    +config BUILTIN_FIRMWARE
    + string "Firmware blobs to build into the kernel binary"
    + depends on FW_LOADER
    + help
    + This option allows firmware to be built into the kernel, for the
    + cases where the user either cannot or doesn't want to provide it from
    + userspace at runtime (for example, when the firmware in question is
    + required for accessing the boot device, and the user doesn't want to
    + use an initrd). Multiple files should be separated with spaces, and
    + the required files should exist under the firmware/ directory in
    + the source tree.
    +
    config DEBUG_DRIVER
    bool "Driver Core verbose debug messages"
    depends on DEBUG_KERNEL
    diff --git a/firmware/Makefile b/firmware/Makefile
    new file mode 100644
    index 0000000..4243c5a
    --- /dev/null
    +++ b/firmware/Makefile
    @@ -0,0 +1,58 @@
    +#
    +# kbuild file for firmware/
    +#
    +
    +firmware-y :=
    +
    +firmware_bins := $(subst ",,$(CONFIG_BUILTIN_FIRMWARE))
    +firmware_srcs := $(patsubst %,$(obj)/%.S, $(firmware_bins))
    +firmware_objs := $(patsubst %,%.o, $(firmware_bins) $(firmware-y))
    +firmware_dirs := $(patsubst %,$(objtree)/$(obj)/%,$(dir $(firmware_objs)))
    +
    +quiet_cmd_mkdir = MKDIR $@
    + cmd_mkdir = mkdir -p $@
    +
    +ifdef CONFIG_64BIT
    +SM_WORD := .quad
    +SM_ALIGN := 3
    +else
    +ASM_WORD := .long
    +ASM_ALIGN := 2
    +endif
    +
    +quiet_cmd_fwbin = MK_FW $@
    + cmd_fwbin = FWNAME="$(patsubst firmware/%.S,%,$@)"; \
    + INCFILE="$(patsubst %.S,%,$@)"; \
    + FWSTR="$(subst /,_,$(subst .,_,$(patsubst \
    + firmware/%.S,%,$@)))"; \
    + echo "/* Generated by firmware/Makefile */" > $@;\
    + echo " .section .rodata" >>$@;\
    + echo " .align $(ASM_ALIGN)" >>$@;\
    + echo "_fw_$${FWSTR}_bin:" >>$@;\
    + echo " .incbin \"$$INCFILE\"" >>$@;\
    + echo "_fw_end:" >>$@;\
    + echo " .section .rodata.str,\"aMS\",@progbits,1" >>$@;\
    + echo " .align $(ASM_ALIGN)" >>$@;\
    + echo "_fw_$${FWSTR}_name:" >>$@;\
    + echo " .string \"$$FWNAME\"" >>$@;\
    + echo " .section .builtin_fw,\"a\",@progbits" >>$@;\
    + echo " .align $(ASM_ALIGN)" >>$@;\
    + echo " $(ASM_WORD) _fw_$${FWSTR}_name" >>$@;\
    + echo " $(ASM_WORD) _fw_$${FWSTR}_bin" >>$@;\
    + echo " $(ASM_WORD) _fw_end - _fw_$${FWSTR}_bin" >>$@;
    +
    +$(firmware_srcs): $(obj)/%.S: $(srctree)/$(obj)/% include/config/64bit.h
    + $(call cmd,fwbin)
    +
    +$(firmware_dirs):
    + $(call cmd,mkdir)
    +
    +$(patsubst %,$(obj)/%,$(firmware_objs)): $(firmware_dirs)
    +
    +obj-y := $(firmware_objs)
    +
    +targets := $(firmware_objs) $(patsubst $(obj)/%,%, $(firmware_srcs))
    +
    +# Without this, built-in.o won't be created when it's empty, and the
    +# final vmlinux link will fail.
    +obj-n := dummy
    --
    1.5.4.5


    \
     
     \ /
      Last update: 2008-05-25 12:31    [W:0.025 / U:30.980 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site