From: Christian Hesse <mail@earthworm.de>
To: coywolf@lovecn.org
Cc: Adrian Bunk <bunk@stusta.de>, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] Kernel .patches support
Date: Fri, 24 Jun 2005 22:48:39 +0200 [thread overview]
Message-ID: <200506242248.46690.mail@earthworm.de> (raw)
In-Reply-To: <2cd57c90050624015768bb570e@mail.gmail.com>
[-- Attachment #1.1: Type: text/plain, Size: 773 bytes --]
On Friday 24 June 2005 10:57, Coywolf Qi Hunt wrote:
> On 6/24/05, Adrian Bunk <bunk@stusta.de> wrote:
> > On Thu, Jun 23, 2005 at 11:58:27PM +0200, Christian Hesse wrote:
> > > --- linux-2.6.12+/include/linux/patches.h 1970-01-01
> > > 01:00:00.000000000 +0100 +++
> > > linux-2.6.12+-patches/include/linux/patches.h 2005-06-23
> > > 23:10:15.278685000 +0200 @@ -0,0 +1,6 @@
> > > +#ifndef _LINUX_PATCHES_H
> > > +#define _LINUX_PATCHES_H
> > > +
> > > +#include <linux/autoconf.h>
> > > +
> > > +#endif
> > >...
> >
> > What do you need this file for?
>
> I think it should be <linux/config.h>.
Stupid me. It was too late last night. :)
You're right, I removed the file and included linux/config.h in
kernel/patches.c.
--
Christian
[-- Attachment #1.2: patches.patch --]
[-- Type: text/x-diff, Size: 6165 bytes --]
diff -Nur linux-2.6.12+/init/Kconfig linux-2.6.12+-patches/init/Kconfig
--- linux-2.6.12+/init/Kconfig 2005-06-23 23:16:40.748685000 +0200
+++ linux-2.6.12+-patches/init/Kconfig 2005-06-23 23:10:16.928685000 +0200
@@ -226,6 +226,25 @@
This option enables access to the kernel configuration file
through /proc/config.gz.
+config IKPATCHES
+ bool "Kernel .patches support"
+ ---help---
+ This option enables the complete Linux kernel ".patches" file
+ contents to be saved in the kernel. It provides documentation
+ of which kernel patches are applied in a running kernel. This
+ information can be extracted from the kernel image file with
+ the script scripts/extract-ikpatches and used as input to
+ rebuild the current kernel or to build another kernel.
+ It can also be extracted from a running kernel by reading
+ /proc/patches.gz if enabled (below).
+
+config IKPATCHES_PROC
+ bool "Enable access to .patches through /proc/patches.gz"
+ depends on IKPATCHES && PROC_FS
+ ---help---
+ This option enables access to the kernel patches file
+ through /proc/patches.gz.
+
config CPUSETS
bool "Cpuset support"
depends on SMP
diff -Nur linux-2.6.12+/kernel/Makefile linux-2.6.12+-patches/kernel/Makefile
--- linux-2.6.12+/kernel/Makefile 2005-06-23 23:17:13.248685000 +0200
+++ linux-2.6.12+-patches/kernel/Makefile 2005-06-23 23:10:17.218685000 +0200
@@ -21,6 +21,8 @@
obj-$(CONFIG_CPUSETS) += cpuset.o
obj-$(CONFIG_IKCONFIG) += configs.o
obj-$(CONFIG_IKCONFIG_PROC) += configs.o
+obj-$(CONFIG_IKPATCHES) += patches.o
+obj-$(CONFIG_IKPATCHES_PROC) += patches.o
obj-$(CONFIG_STOP_MACHINE) += stop_machine.o
obj-$(CONFIG_AUDIT) += audit.o
obj-$(CONFIG_AUDITSYSCALL) += auditsc.o
@@ -52,3 +54,17 @@
targets += config_data.h
$(obj)/config_data.h: $(obj)/config_data.gz FORCE
$(call if_changed,ikconfiggz)
+
+$(obj)/patches.o: $(obj)/patches_data.h
+
+# patches_data.h contains the same information as ikpatches.h but gzipped.
+# Info from patches_data can be extracted from /proc/patches*
+targets += patches_data.gz
+$(obj)/patches_data.gz: .patches FORCE
+ $(call if_changed,gzip)
+
+quiet_cmd_ikpatchesgz = IKPTC $@
+ cmd_ikpatchesgz = (echo "static const char kernel_patches_data[] = MAGIC_START"; cat $< | scripts/bin2c; echo "MAGIC_END;") > $@
+targets += patches_data.h
+$(obj)/patches_data.h: $(obj)/patches_data.gz FORCE
+ $(call if_changed,ikpatchesgz)
diff -Nur linux-2.6.12+/kernel/patches.c linux-2.6.12+-patches/kernel/patches.c
--- linux-2.6.12+/kernel/patches.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.12+-patches/kernel/patches.c 2005-06-23 23:10:17.608685000 +0200
@@ -0,0 +1,115 @@
+/*
+ * kernel/patches.c
+ * Echo the kernel .patches file used to build the kernel
+ *
+ * Copyright (C) 2005 Christian Hesse <Christi@n-Hesse.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
+ * NON INFRINGEMENT. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <linux/config.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/proc_fs.h>
+#include <linux/seq_file.h>
+#include <linux/init.h>
+#include <asm/uaccess.h>
+
+/**************************************************/
+/* the actual current patchesfile */
+
+/*
+ * Define kernel_patches_data and kernel_patches_data_size, which contains the
+ * wrapped and compressed patches file. The file is first compressed
+ * with gzip and then bounded by two eight byte magic numbers to allow
+ * extraction from a binary kernel image:
+ *
+ * IKPTC_ST
+ * <image>
+ * IKPTC_ED
+ */
+#define MAGIC_START "IKPTC_ST"
+#define MAGIC_END "IKPTC_ED"
+#include "patches_data.h"
+
+
+#define MAGIC_SIZE (sizeof(MAGIC_START) - 1)
+#define kernel_patches_data_size \
+ (sizeof(kernel_patches_data) - 1 - MAGIC_SIZE * 2)
+
+#ifdef CONFIG_IKPATCHES_PROC
+
+/**************************************************/
+/* globals and useful constants */
+
+static ssize_t
+ikpatches_read_current(struct file *file, char __user *buf,
+ size_t len, loff_t * offset)
+{
+ loff_t pos = *offset;
+ ssize_t count;
+
+ if (pos >= kernel_patches_data_size)
+ return 0;
+
+ count = min(len, (size_t)(kernel_patches_data_size - pos));
+ if (copy_to_user(buf, kernel_patches_data + MAGIC_SIZE + pos, count))
+ return -EFAULT;
+
+ *offset += count;
+ return count;
+}
+
+static struct file_operations ikpatches_file_ops = {
+ .owner = THIS_MODULE,
+ .read = ikpatches_read_current,
+};
+
+/***************************************************/
+/* ikpatches_init: start up everything we need to */
+
+static int __init ikpatches_init(void)
+{
+ struct proc_dir_entry *entry;
+
+ /* create the current patches file */
+ entry = create_proc_entry("patches.gz", S_IFREG | S_IRUGO,
+ &proc_root);
+ if (!entry)
+ return -ENOMEM;
+
+ entry->proc_fops = &ikpatches_file_ops;
+ entry->size = kernel_patches_data_size;
+
+ return 0;
+}
+
+/***************************************************/
+/* ikpatches_cleanup: clean up our mess */
+
+static void __exit ikpatches_cleanup(void)
+{
+ remove_proc_entry("patches.gz", &proc_root);
+}
+
+module_init(ikpatches_init);
+module_exit(ikpatches_cleanup);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Christian Hesse");
+MODULE_DESCRIPTION("Echo the kernel .patch file that lists applied patches");
+
+#endif /* CONFIG_IKPATCHES_PROC */
[-- Attachment #2: Type: application/pgp-signature, Size: 190 bytes --]
next prev parent reply other threads:[~2005-06-24 21:03 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-06-23 21:58 [PATCH] Kernel .patches support Christian Hesse
2005-06-23 22:38 ` Karim Yaghmour
2005-06-24 6:02 ` Ian Campbell
2005-06-24 7:36 ` Adrian Bunk
2005-06-24 8:57 ` Coywolf Qi Hunt
2005-06-24 20:48 ` Christian Hesse [this message]
2005-06-24 21:03 ` Christian Hesse
2005-06-24 22:31 ` Adrian Bunk
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200506242248.46690.mail@earthworm.de \
--to=mail@earthworm.de \
--cc=bunk@stusta.de \
--cc=coywolf@lovecn.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.