Logo Search packages:      
Sourcecode: linux version File versions

dmesg.c

/*
 *  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);
}

Generated by  Doxygen 1.6.0   Back to index