patch for 2.4.0 disable printk
Subsystems (9)
Hi guys,
thanks for the feedback. This is now the second try of my disable printk patch.
First i moved the option for disabling the prinbtk messages form the menu character devices to kernel hacking.
Second, i had change the macro so it calls now a inline funciton printk_inline which always return 0. So it should be now compatibel to the standard printk funciton.
I hope you like the patch...
Greetings,
Stefani
-----patch for 2.4.0 disable printk-----
diff -u --recursive --new-file linux/Documentation/Configure.help linux.noprintk/Documentation/Configure.help
Documentation/Configure.help +8 -0
@@ -12139,6 +12179,14 @@ If unsure, say Y, or else you won't be able to do much with your new shiny Linux system :-) + +Disable kernel messages +CONFIG_PRINTK + This option allows you to disable all kernel messages by overriding + the printk function with an empty macro. + On small embedded systems, this save a lot of rom and ram space. On + server or desktop systems you want human readable outputs, so it is + normally the best choice to say N to this option. Support for console on virtual terminal CONFIG_VT_CONSOLE
diff -u --recursive --new-file linux/include/asm-i386/spinlock.h linux.noprintk/include/asm-i386/spinlock.h
include/asm-i386/spinlock.h +2 -0
@@ -5,8 +5,10 @@#include <asm/rwlock.h> #include <asm/page.h> +#ifndef CONFIG_PRINTK extern int printk (const char * fmt, ...) __attribute__ ((format (printf,1 ,2 ))); +#endif /* It seems that people are forgetting to * initialize their spinlocks properly, tsk tsk.
diff -u --recursive --new-file linux/include/linux/kernel.h linux.noprintk/include/linux/kernel.h
include/linux/kernel.h +10 -0
@@ -68,8 +68,18 @@extern int session_of_pgrp (int pgrp); +#ifdef CONFIG_PRINTK +#define printk(x...) printk_inline() + +static inline int printk_inline (void ) __attribute__ ((const,unused)); + +static inline int printk_inline (void ) {return 0 ; } +#else + asmlinkage int printk(const char * fmt, ...) __attribute__ ((format (printf,1 ,2 ))); +#endif +extern int console_loglevel;
diff -u --recursive --new-file linux/kernel/ksyms.c linux.noprintk/kernel/ksyms.c
kernel/ksyms.c +2 -0
@@ -439,7 +440,9 @@/* misc */ EXPORT_SYMBOL (panic); +#ifndef CONFIG_PRINTK EXPORT_SYMBOL (printk); +#endif EXPORT_SYMBOL (sprintf);EXPORT_SYMBOL (vsprintf);EXPORT_SYMBOL (kdevname);
diff -u --recursive --new-file linux/kernel/printk.c linux.noprintk/kernel/printk.c
kernel/printk.c +17 -0
@@ -25,7 +25,9 @@#define LOG_BUF_LEN (16384)#define LOG_BUF_MASK (LOG_BUF_LEN-1) +#ifndef CONFIG_PRINTK static char buf[1024 ]; +#endif /* printk's without a loglevel use this.. */ #define DEFAULT_MESSAGE_LOGLEVEL 4/* KERN_WARNING */
@@ -251,6 +253,20 @@return do_syslog (type, buf, len); } + +#ifdef CONFIG_PRINTK +#undef printk + +#include <linux/module.h> + +asmlinkage int printk(const char *fmt, ...) +{ +return 0 ; +} + +EXPORT_SYMBOL_NOVERS (printk); + +#else asmlinkage int printk(const char *fmt, ...) {va_list args;
@@ -311,6 +322,7 @@wake_up_interruptible (&log_wait); return i; } +#endif void console_print (const char *s) {
CREDITS +8 -0
@@ -2395,6 +2395,14 @@ S: Oldenburg S: Germany +N: Stefani Seibold +E: [email protected] +D: Possibility to disable all kernel messages by overload printk with a +D: dummy macro (saves a lot of disk- and ramspace for embedded systems +D: and rescue disks) +S: Munich +S: Germany + N: Darren Senn E: [email protected] D: Whatever I notice needs doing (so far: itimers, /proc)
diff -u --recursive --new-file linux/arch/alpha/config.in linux.noprintk/arch/alpha/config.in
arch/alpha/config.in +1 -0
@@ -359,6 +359,7 @@ fi bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ +bool 'Disable kernel messages' CONFIG_PRINTK bool 'Legacy kernel start address' CONFIG_ALPHA_LEGACY_START_ADDRESS
diff -u --recursive --new-file linux/arch/arm/config.in linux.noprintk/arch/arm/config.in
arch/arm/config.in +1 -0
@@ -414,6 +414,7 @@ bool 'Verbose user fault messages' CONFIG_DEBUG_USER bool 'Include debugging information in kernel binary' CONFIG_DEBUG_INFO bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ +bool 'Disable kernel messages' CONFIG_PRINTK if [ "$CONFIG_CPU_26" = "y" ]; then bool 'Disable pgtable cache' CONFIG_NO_PGT_CACHE fi
diff -u --recursive --new-file linux/arch/i386/config.in linux.noprintk/arch/i386/config.in
arch/i386/config.in +1 -0
@@ -374,4 +374,5 @@ #bool 'Debug kmalloc/kfree' CONFIG_DEBUG_MALLOC bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ +bool 'Disable kernel messages' CONFIG_PRINTK endmenu
diff -u --recursive --new-file linux/arch/ia64/config.in linux.noprintk/arch/ia64/config.in
arch/ia64/config.in +1 -0
@@ -249,6 +249,7 @@ fi bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ +bool 'Disable kernel messages' CONFIG_PRINTK bool 'Early printk support (requires VGA!)' CONFIG_IA64_EARLY_PRINTK bool 'Turn on compare-and-exchange bug checking (slow!)'
CONFIG_IA64_DEBUG_CMPXCHG
bool 'Turn on irq debug checks (slow!)' CONFIG_IA64_DEBUG_IRQ
diff -u --recursive --new-file linux/arch/m68k/config.in linux.noprintk/arch/m68k/config.in
arch/m68k/config.in +1 -0
@@ -538,4 +538,5 @@ #bool 'Debug kmalloc/kfree' CONFIG_DEBUG_MALLOC bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ +bool 'Disable kernel messages' CONFIG_PRINTK endmenu
diff -u --recursive --new-file linux/arch/mips/config.in linux.noprintk/arch/mips/config.in
arch/mips/config.in +1 -0
@@ -397,4 +397,5 @@ bool 'Remote GDB kernel debugging' CONFIG_REMOTE_DEBUG fi bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ +bool 'Disable kernel messages' CONFIG_PRINTK endmenu
diff -u --recursive --new-file linux/arch/mips64/config.in linux.noprintk/arch/mips64/config.in
arch/mips64/config.in +1 -0
@@ -266,4 +266,5 @@ fi bool 'Remote GDB kernel debugging' CONFIG_REMOTE_DEBUG bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ +bool 'Disable kernel messages' CONFIG_PRINTK endmenu
diff -u --recursive --new-file linux/arch/parisc/config.in linux.noprintk/arch/parisc/config.in
arch/parisc/config.in +1 -0
@@ -204,5 +204,6 @@ #bool 'Debug kmalloc/kfree' CONFIG_DEBUG_MALLOC bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ +bool 'Disable kernel messages' CONFIG_PRINTK endmenu
diff -u --recursive --new-file linux/arch/ppc/config.in linux.noprintk/arch/ppc/config.in
arch/ppc/config.in +1 -0
@@ -324,6 +324,7 @@ comment 'Kernel hacking' bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ +bool 'Disable kernel messages' CONFIG_PRINTK bool 'Include kgdb kernel debugger' CONFIG_KGDB bool 'Include xmon kernel debugger' CONFIG_XMON endmenu
diff -u --recursive --new-file linux/arch/s390/config.in linux.noprintk/arch/s390/config.in
arch/s390/config.in +1 -0
@@ -77,5 +77,6 @@ bool 'Remote GDB kernel debugging' CONFIG_REMOTE_DEBUG fi # this does not work. bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ +bool 'Disable kernel messages' CONFIG_PRINTK endmenu
diff -u --recursive --new-file linux/arch/sh/config.in linux.noprintk/arch/sh/config.in
arch/sh/config.in +1 -0
@@ -260,6 +260,7 @@ comment 'Kernel hacking' bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ +bool 'Disable kernel messages' CONFIG_PRINTK bool 'Use LinuxSH standard BIOS' CONFIG_SH_STANDARD_BIOS if [ "$CONFIG_SH_STANDARD_BIOS" = "y" ]; then bool 'GDB Stub kernel debug' CONFIG_DEBUG_KERNEL_WITH_GDB_STUB
diff -u --recursive --new-file linux/arch/sparc/config.in linux.noprintk/arch/sparc/config.in
arch/sparc/config.in +1 -0
@@ -258,4 +258,5 @@ comment 'Kernel hacking' bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ +bool 'Disable kernel messages' CONFIG_PRINTK endmenu
diff -u --recursive --new-file linux/arch/sparc64/config.in linux.noprintk/arch/sparc64/config.in
arch/sparc64/config.in +1 -0
@@ -331,5 +331,6 @@ comment 'Kernel hacking' bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ +bool 'Disable kernel messages' CONFIG_PRINTK #bool 'ECache flush trap support at ta 0x72' CONFIG_EC_FLUSH_TRAP endmenu
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/
Quoted 4 lines · Stefani Seibold
Second, i had change the macro so it calls now a inline funciton
printk_inlinewhich always return 0. So it should be now compatibel to the standard printk funciton.
A #define is better.
You see, even if printk is a null inline function,
printk("foo");will still cause "foo" to appear in your output. Apparently very recent versions of gcc have fixed this.
BTW: Graham Stoney prepared a similar patch for 2.2 last year. You may be able to borrow some ideas from that work, and the followup discussion.
http://www.uwsg.iu.edu/hypermail/linux/kernel/0004.2/0709.html
-
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/
Hi Andrew,
thanks for your feddback, but... you are not right. Because i override the printk with a macro thats call a inline function printk_inline with no paramters and only return 0. So the compiler sill removes the paramters. If you try this patch, you will see, that none of the parameters appear in the output.
The inline function is the best choice, because it it full compatible to old old printk. No side effects are expeted.
Thanks also for the link. I had a look on it and i think i will add a extrac option to disable also the panic messages.
Greetings,
Stefani
Quoted 14 lines
Quoted 3 lines · Stefani Seibold
Second, i had change the macro so it calls now a inline funciton
printk_inlinewhich always return 0. So it should be now compatibel to the standard printk funciton.A #define is better.
You see, even if printk is a null inline function,
printk("foo");will still cause "foo" to appear in your output. Apparently very recent versions of gcc have fixed this.
Quoted 7 lines
BTW: Graham Stoney prepared a similar patch for 2.2 last year. You may be able to borrow some ideas from that work, and the followup discussion.
http://www.uwsg.iu.edu/hypermail/linux/kernel/0004.2/0709.html
-
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/
Quoted 2 lines · Stefani Seibold
The inline function is the best choice, because it it full compatible to old old printk. No side effects are expeted.
What is the difference?
I can't think of any difference between:
#define printk(format, args...) ((int) 0)
and:
static inline int printk_inline (void) { return 0; }
#define printk(format, args...) (printk_inline ())If you wanted to be fully compatible in the sense of evaluating the printk arguments, in case those have side effects, there would be:
#define printk(format, args...) ((0 , ## args), (int) 0)
By the way, CONFIG_NO_PRINTK or CONFIG_DISABLE_PRINTK would be better names. CONFIG_PRINTK suggests that enabling that option enabled printk.
enjoy,
-- Jamie
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/
Quoted 7 lines · Andrew Morton
Quoted 4 lines · Stefani Seibold
Second, i had change the macro so it calls now a inline funciton
printk_inlinewhich always return 0. So it should be now compatibel to the standard printk funciton.
Quoted 8 lines
A #define is better.
You see, even if printk is a null inline function,
printk("foo");will still cause "foo" to appear in your output. Apparently very recent versions of gcc have fixed this.
I missed earlier parts of this, so maybe I'm not even on the same page...
Here is part of an old patch I made to replace panic messages with a simple EIP that you could still look up in System.map to cut down on the text in the image for small kernels. One could use the same macro trickery for printk() which is what I think Andrew is recommending.
Paul.
include/linux/kernel.h renamed from mnt2/linux/include/linux/kernel.h +10 -2
@@ -34,8 +34,16 @@# define NORET_AND noreturn,extern void math_error (void ); -NORET_TYPE void panic(const char * fmt, ...) - __attribute__ ((NORET_AND format (printf, 1, 2))); + +NORET_TYPE void panic_at(const void *location) + ATTRIB_NORET; + +#define panic(fmt,arg...) \ +({ __label__ whoops; \ +whoops: \ + panic_at(&&whoops); \ +}) + NORET_TYPE void do_exit(long error_code)ATTRIB_NORET ;extern unsigned long simple_strtoul (const char *,char **,unsigned int );
kernel/panic.c renamed from mnt2/linux/kernel/panic.c +2 -9
@@ -19,50 +19,18 @@extern void do_unblank_screen (void );extern int C_A_D ; -NORET_TYPE void panic(const char * fmt, ...) +NORET_TYPE void panic_at(const void *location) { -static char buf[1024 ]; -va_list args; -int i; - -va_start (args, fmt); -vsprintf (buf, fmt, args); -va_end (args); -printk (KERN_EMERG "Kernel panic: %s\n" ,buf); +printk (KERN_EMERG "Kernel panic at: %p\n" ,location);if (current == task[0 ])printk (KERN_EMERG "In swapper task - not syncing\n" );else
_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/