1 /* 2 * linux/arch/m68k/tools/amiga/dmesg.c -- Retrieve the kernel messages stored 3 * in Chip RAM with the kernel command 4 * line option `debug=mem'. 5 * 6 * © Copyright 1996 by Geert Uytterhoeven <geert@linux-m68k.org> 7 * 8 * 9 * Usage: 10 * 11 * dmesg 12 * dmesg <CHIPMEM_END> 13 * 14 * 15 * This file is subject to the terms and conditions of the GNU General Public 16 * License. See the file COPYING in the main directory of the Linux 17 * distribution for more details. 18 */ 19 20 21 #include <stdio.h> 22 #include <stdlib.h> 23 #include <unistd.h> 24 25 26 #define CHIPMEM_START 0x00000000 27 #define CHIPMEM_END 0x00200000 /* overridden by argv[1] */ 28 29 #define SAVEKMSG_MAGIC1 0x53415645 /* 'SAVE' */ 30 #define SAVEKMSG_MAGIC2 0x4B4D5347 /* 'KMSG' */ 31 32 struct savekmsg { 33 u_long magic1; /* SAVEKMSG_MAGIC1 */ 34 u_long magic2; /* SAVEKMSG_MAGIC2 */ 35 u_long magicptr; /* address of magic1 */ 36 u_long size; 37 char data[0]; 38 }; 39 40 41 int main(int argc, char *argv[]) 42 { 43 u_long start = CHIPMEM_START, end = CHIPMEM_END, p; 44 int found = 0; 45 struct savekmsg *m = NULL; 46 47 if (argc >= 2) 48 end = strtoul(argv[1], NULL, 0); 49 printf("Searching for SAVEKMSG magic...\n"); 50 for (p = start; p <= end-sizeof(struct savekmsg); p += 4) { 51 m = (struct savekmsg *)p; 52 if ((m->magic1 == SAVEKMSG_MAGIC1) && (m->magic2 == SAVEKMSG_MAGIC2) && 53 (m->magicptr == p)) { 54 found = 1; 55 break; 56 } 57 } 58 if (!found) 59 printf("Not found\n"); 60 else { 61 printf("Found %ld bytes at 0x%08lx\n", m->size, (u_long)&m->data); 62 puts(">>>>>>>>>>>>>>>>>>>>"); 63 fflush(stdout); 64 write(1, &m->data, m->size); 65 fflush(stdout); 66 puts("<<<<<<<<<<<<<<<<<<<<"); 67 } 68 return(0); 69 } 70