diff options
author | Brian Behlendorf <[email protected]> | 2012-07-26 15:37:13 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2012-07-26 15:37:17 -0700 |
commit | 4ab8a725ce8a2bcf26a9df6902f8ee893e62fe6e (patch) | |
tree | 6d0a0ac214722eebcfb4675ce37d56e4b67f8877 /copy-builtin | |
parent | 739a1a82e0f366923e8d9bc8f9ad4b1c680a780b (diff) | |
parent | f09398cec665259a4c2f96726680fbd3b0a3bac3 (diff) |
Merge branch 'builtin-clean'
Support in-tree builtin module building.
These commits add support for compiling the ZFS module as a built-in
kernel module by copying the module code into the kernel source tree.
Here's the procedure:
- Create your kernel configuration (`.config` file) as usual. This
has to be done first so that ZFS's configure script is able to
detect kernel features correctly.
- Run `make prepare scripts` inside the kernel source tree.
- Run `./configure --enable-linux-builtin --with-linux=/usr/src/linux-...`
inside the ZFS directory.
- Run `./copy-builtin /usr/src/linux-...` inside the ZFS directory.
- In the kernel source tree, enable the `CONFIG_ZFS` option (e.g. using
`make menuconfig`). Note that this option depends on `CONFIG_SPL`
(see zfsonlinux/spl@744038069d3dc65e721b5b8cc5c37d8c7fcbd8c0).
- Build the kernel as usual.
ZFS module parameters can be set at boot time using the following syntax
on the kernel command line: `zfs.parameter_name=parameter_value`.
Note that you also need to rebuild the userspace tools (see
zfsonlinux/zfs@f09398cec665259a4c2f96726680fbd3b0a3bac3).
Signed-off-by: Brian Behlendorf <[email protected]>
Issue #851
Diffstat (limited to 'copy-builtin')
-rwxr-xr-x | copy-builtin | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/copy-builtin b/copy-builtin new file mode 100755 index 000000000..a053fd8a3 --- /dev/null +++ b/copy-builtin @@ -0,0 +1,121 @@ +#!/bin/bash + +set -e + +usage() +{ + echo "usage: $0 <kernel source tree>" >&2 + exit 1 +} + +[ "$#" -eq 1 ] || usage +KERNEL_DIR="$(readlink --canonicalize-existing "$1")" + +MODULES=() +for MODULE_DIR in module/* +do + [ -d "$MODULE_DIR" ] || continue + MODULES+=("${MODULE_DIR##*/}") +done + +if ! [ -e 'zfs_config.h' ] +then + echo >&2 + echo " $0: you did not run configure, or you're not in the ZFS source directory." >&2 + echo " $0: run configure with --with-linux=$KERNEL_DIR and --enable-linux-builtin." >&2 + echo >&2 + exit 1 +fi + +make clean || true + +rm -rf "$KERNEL_DIR/include/zfs" "$KERNEL_DIR/fs/zfs" +cp --recursive include "$KERNEL_DIR/include/zfs" +cp --recursive module "$KERNEL_DIR/fs/zfs" +cp zfs_config.h "$KERNEL_DIR/" + +adjust_obj_paths() +{ + local FILE="$1" + local LINE OBJPATH + + while IFS='' read -r LINE + do + OBJPATH="${LINE#\$(MODULE)-objs += }" + if [ "$OBJPATH" = "$LINE" ] + then + echo "$LINE" + else + echo "\$(MODULE)-objs += ${OBJPATH##*/}" + fi + done < "$FILE" > "$FILE.new" + mv "$FILE.new" "$FILE" +} + +for MODULE in "${MODULES[@]}" +do + adjust_obj_paths "$KERNEL_DIR/fs/zfs/$MODULE/Makefile" +done + +cat > "$KERNEL_DIR/fs/zfs/Kconfig" <<"EOF" +config ZFS + tristate "ZFS" + depends on SPL + help + This is the ZFS filesystem from the ZFS On Linux project. + + See http://zfsonlinux.org/ + + To compile this file system support as a module, choose M here. + + If unsure, say N. +EOF + +{ + cat <<-"EOF" + ZFS_MODULE_CFLAGS = -I$(srctree)/include/zfs -I$(srctree)/include/spl + ZFS_MODULE_CFLAGS += -include $(srctree)/spl_config.h -include $(srctree)/zfs_config.h + export ZFS_MODULE_CFLAGS + + obj-$(CONFIG_ZFS) := + EOF + + for MODULE in "${MODULES[@]}" + do + echo 'obj-$(CONFIG_ZFS) += ' "$MODULE/" + done +} > "$KERNEL_DIR/fs/zfs/Kbuild" + +add_after() +{ + local FILE="$1" + local MARKER="$2" + local NEW="$3" + local LINE + + while IFS='' read -r LINE + do + echo "$LINE" + + if [ -n "$MARKER" -a "$LINE" = "$MARKER" ] + then + echo "$NEW" + MARKER='' + if IFS='' read -r LINE + then + [ "$LINE" != "$NEW" ] && echo "$LINE" + fi + fi + done < "$FILE" > "$FILE.new" + + mv "$FILE.new" "$FILE" +} + +add_after "$KERNEL_DIR/fs/Kconfig" 'if BLOCK' 'source "fs/zfs/Kconfig"' +add_after "$KERNEL_DIR/fs/Makefile" 'endif' 'obj-$(CONFIG_ZFS) += zfs/' + +echo >&2 +echo " $0: done." >&2 +echo " $0: now you can build the kernel with ZFS support." >&2 +echo " $0: make sure you enable ZFS support (CONFIG_ZFS) before building." >&2 +echo >&2 |