Patchwork [01/12] Add kernel header update script

login
register
mail settings
Submitter Jan Kiszka
Date June 8, 2011, 2:10 p.m.
Message ID <b7e14da2dbade9affee696a5997db1df5019ce43.1307542247.git.jan.kiszka@siemens.com>
Download mbox | patch
Permalink /patch/99443/
State New
Headers show

Comments

Jan Kiszka - June 8, 2011, 2:10 p.m.
This helper pulls the required kernel headers for KVM and vhost into a
specified directory. The update is triggered via

    scripts/update-linux-headers.sh LINUX_PATH

and will place the output under linux-headers/linux and linux-headers/asm-*.
It also imports the COPYING to care for headers without an explicit license.

CC: Alexander Graf <agraf@suse.de>
CC: Christoph Hellwig <hch@lst.de>
CC: Peter Maydell <peter.maydell@linaro.org>
CC: Andreas Färber <andreas.faerber@web.de>
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 linux-headers/README            |    2 +
 scripts/update-linux-headers.sh |   55 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 57 insertions(+), 0 deletions(-)
 create mode 100644 linux-headers/README
 create mode 100755 scripts/update-linux-headers.sh
Peter Maydell - June 8, 2011, 2:33 p.m.
On 8 June 2011 15:10, Jan Kiszka <jan.kiszka@siemens.com> wrote:
> --- /dev/null
> +++ b/scripts/update-linux-headers.sh
> @@ -0,0 +1,55 @@
> +#!/bin/sh -e
> +#

> +if [ -z "$output" ]; then
> +    output=$PWD
> +fi

> +    mkdir -p $output/linux-headers/asm-$arch

This script is rather lacking in quoting throughout. As a random
example, this looks like it will break if you run the script from
a directory with a space in the path.

> +tmpdir=$TMPDIR/.tmp-hdrs-$$

Better (safer) to use mktemp, I think.

> if [ -z "$linux" -o ! -d "$linux" ]; then

test -o is obsolescent in POSIX; use
 if [ -z "$linux" ] || ! [ -d "$linux" ] ; then
instead.

-- PMM
Jan Kiszka - June 8, 2011, 2:39 p.m.
On 2011-06-08 16:33, Peter Maydell wrote:
> On 8 June 2011 15:10, Jan Kiszka <jan.kiszka@siemens.com> wrote:
>> --- /dev/null
>> +++ b/scripts/update-linux-headers.sh
>> @@ -0,0 +1,55 @@
>> +#!/bin/sh -e
>> +#
> 
>> +if [ -z "$output" ]; then
>> +    output=$PWD
>> +fi
> 
>> +    mkdir -p $output/linux-headers/asm-$arch
> 
> This script is rather lacking in quoting throughout. As a random
> example, this looks like it will break if you run the script from
> a directory with a space in the path.

True.

> 
>> +tmpdir=$TMPDIR/.tmp-hdrs-$$
> 
> Better (safer) to use mktemp, I think.

Is that portable? I don't think so.

> 
>> if [ -z "$linux" -o ! -d "$linux" ]; then
> 
> test -o is obsolescent in POSIX; use
>  if [ -z "$linux" ] || ! [ -d "$linux" ] ; then
> instead.
> 

OK.

Thanks,
Jan
Peter Maydell - June 8, 2011, 2:51 p.m.
2011/6/8 Jan Kiszka <jan.kiszka@siemens.com>:
> On 2011-06-08 16:33, Peter Maydell wrote:
>> On 8 June 2011 15:10, Jan Kiszka <jan.kiszka@siemens.com> wrote:
>>> +tmpdir=$TMPDIR/.tmp-hdrs-$$
>>
>> Better (safer) to use mktemp, I think.
>
> Is that portable? I don't think so.

We don't expect every random end user to run this script, though,
right? We already use mktemp in scripts/refresh-pxe-roms.sh, for
instance.

-- PMM
Peter Maydell - June 8, 2011, 5:30 p.m.
On 8 June 2011 17:22, Jan Kiszka <jan.kiszka@siemens.com> wrote:
> This helper pulls the required kernel headers for KVM and vhost into a
> specified directory. The update is triggered via
>
>    scripts/update-linux-headers.sh LINUX_PATH

> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
> ---
>
> Changes in v3:
>  - remove bashism

Thanks; can't see any problems in this version.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

-- PMM

Patch

diff --git a/linux-headers/README b/linux-headers/README
new file mode 100644
index 0000000..5c9026b
--- /dev/null
+++ b/linux-headers/README
@@ -0,0 +1,2 @@ 
+Automatically imported Linux kernel headers.
+Only use scripts/update-linux-headers.sh to update!
diff --git a/scripts/update-linux-headers.sh b/scripts/update-linux-headers.sh
new file mode 100755
index 0000000..e5f45b2
--- /dev/null
+++ b/scripts/update-linux-headers.sh
@@ -0,0 +1,55 @@ 
+#!/bin/sh -e
+#
+# Update Linux kernel headers QEMU requires from a specified kernel tree.
+#
+# Copyright (C) 2011 Siemens AG
+#
+# Authors:
+#  Jan Kiszka        <jan.kiszka@siemens.com>
+#
+# This work is licensed under the terms of the GNU GPL version 2.
+# See the COPYING file in the top-level directory.
+
+tmpdir=$TMPDIR/.tmp-hdrs-$$
+linux=$1
+output=$2
+
+if [ -z "$linux" -o ! -d "$linux" ]; then
+    cat << EOF
+usage: update-kernel-headers.sh LINUX_PATH [OUTPUT_PATH]
+
+LINUX_PATH      Linux kernel directory to obtain the headers from
+OUTPUT_PATH     output directory, usually the qemu source tree (default: $PWD)
+EOF
+    exit 1
+fi
+
+if [ -z "$output" ]; then
+    output=$PWD
+fi
+
+for arch in x86 powerpc s390; do
+    make -C $linux INSTALL_HDR_PATH=$tmpdir SRCARCH=$arch headers_install
+
+    rm -rf $output/linux-headers/asm-$arch
+    mkdir -p $output/linux-headers/asm-$arch
+    for header in kvm.h kvm_para.h; do
+        cp $tmpdir/include/asm/$header $output/linux-headers/asm-$arch
+    done
+    if [ $arch == x86 ]; then
+        cp $tmpdir/include/asm/hyperv.h $output/linux-headers/asm-x86
+    fi
+done
+
+rm -rf $output/linux-headers/linux
+mkdir -p $output/linux-headers/linux
+for header in kvm.h kvm_para.h vhost.h virtio_config.h virtio_ring.h; do
+    cp $tmpdir/include/linux/$header $output/linux-headers/linux
+done
+if [ -L $linux/source ]; then
+    cp $linux/source/COPYING $output/linux-headers
+else
+    cp $linux/COPYING $output/linux-headers
+fi
+
+rm -rf $tmpdir