/* * linux/arch/m68k/tools/amiga/dmesg.c -- Retrieve the kernel messages stored * in Chip RAM with the kernel command * line option `debug=mem'. * * © Copyright 1996 by Geert Uytterhoeven <geert@linux-m68k.org> * * * 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); } |