2005-04-16 15:20:36 -07:00
/*
* linux / arch / m68k / tools / amiga / dmesg . c - - Retrieve the kernel messages stored
* in Chip RAM with the kernel command
* line option ` debug = mem ' .
*
2007-10-19 23:21:04 +02:00
* © Copyright 1996 by Geert Uytterhoeven < geert @ linux - m68k . org >
2005-04-16 15:20:36 -07:00
*
*
* Usage :
*
* dmesg
* dmesg < CHIPMEM_END >
*
*
* This file is subject to the terms and conditions of the GNU General Public
* License . See the file COPYING in the main directory of the Linux
* distribution for more details .
*/
# include <stdio.h>
# include <stdlib.h>
# include <unistd.h>
# define CHIPMEM_START 0x00000000
# define CHIPMEM_END 0x00200000 /* overridden by argv[1] */
# define SAVEKMSG_MAGIC1 0x53415645 /* 'SAVE' */
# define SAVEKMSG_MAGIC2 0x4B4D5347 /* 'KMSG' */
struct savekmsg {
u_long magic1 ; /* SAVEKMSG_MAGIC1 */
u_long magic2 ; /* SAVEKMSG_MAGIC2 */
u_long magicptr ; /* address of magic1 */
u_long size ;
char data [ 0 ] ;
} ;
int main ( int argc , char * argv [ ] )
{
u_long start = CHIPMEM_START , end = CHIPMEM_END , p ;
int found = 0 ;
struct savekmsg * m = NULL ;
if ( argc > = 2 )
end = strtoul ( argv [ 1 ] , NULL , 0 ) ;
printf ( " Searching for SAVEKMSG magic... \n " ) ;
for ( p = start ; p < = end - sizeof ( struct savekmsg ) ; p + = 4 ) {
m = ( struct savekmsg * ) p ;
if ( ( m - > magic1 = = SAVEKMSG_MAGIC1 ) & & ( m - > magic2 = = SAVEKMSG_MAGIC2 ) & &
( m - > magicptr = = p ) ) {
found = 1 ;
break ;
}
}
if ( ! found )
printf ( " Not found \n " ) ;
else {
printf ( " Found %ld bytes at 0x%08lx \n " , m - > size , ( u_long ) & m - > data ) ;
puts ( " >>>>>>>>>>>>>>>>>>>> " ) ;
fflush ( stdout ) ;
write ( 1 , & m - > data , m - > size ) ;
fflush ( stdout ) ;
puts ( " <<<<<<<<<<<<<<<<<<<< " ) ;
}
return ( 0 ) ;
}