lkml.org 
[lkml]   [2005]   [Jun]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    SubjectRe: [PATCH] Kernel .patches support
    Date
    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
    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 */[unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2005-06-24 23:09    [W:0.036 / U:30.036 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site