]> Zhao Yanbai Git Server - minix.git/commitdiff
if serial output is enabled in the boot monitor, on the first serial line,
authorBen Gras <ben@minix3.org>
Fri, 19 Dec 2008 13:21:42 +0000 (13:21 +0000)
committerBen Gras <ben@minix3.org>
Fri, 19 Dec 2008 13:21:42 +0000 (13:21 +0000)
enable serial debug output in the kernel too.

boot/boot.c
boot/bootimage.c
include/minix/const.h
kernel/start.c

index bd0b7754e513e2186db70ee47dd433b6fc303548..70fe452542aec70f9a77b7452803d1f3a860918c 100755 (executable)
@@ -48,6 +48,8 @@ char version[]=               "2.20";
 #define arraylimit(a)          ((a) + arraysize(a))
 #define between(a, c, z)       ((unsigned) ((c) - (a)) <= ((z) - (a)))
 
+int serial_line = -1;
+
 u16_t vid_port;                /* Video i/o port. */
 u32_t vid_mem_base;    /* Video memory base address. */
 u32_t vid_mem_size;    /* Video memory size. */
@@ -1389,13 +1391,14 @@ void boot_device(char *devname)
 void ctty(char *line)
 {
        if (line == nil) {
-               serial_init(-1);
-       } else
-       if (between('0', line[0], '3') && line[1] == 0) {
-               serial_init(line[0] - '0');
+               serial_line = -1;
+       } else if (between('0', line[0], '3') && line[1] == 0) {
+               serial_line = line[0] - '0';
        } else {
                printf("Bad serial line number: %s\n", line);
+               return;
        }
+       serial_init(serial_line);
 }
 
 #else /* DOS */
index 66354c173423a6742fa8ac7647995b448f2afd3a..dcec1200d0d0c446c3a51f55a5e0ded121c1ba24 100755 (executable)
@@ -29,6 +29,7 @@
 
 static int block_size = 0;
 
+extern int serial_line;
 extern u16_t vid_port;         /* Video i/o port. */
 extern u32_t vid_mem_base;     /* Video memory base address. */
 extern u32_t vid_mem_size;     /* Video memory size. */
@@ -748,6 +749,14 @@ void bootminix(void)
 
        if ((image= select_image(b_value("image"))) == nil) return;
 
+       if(serial_line >= 0) {
+               char linename[2];
+               linename[0] = serial_line + '0';
+               linename[1] = '\0';
+               b_setvar(E_VAR, SERVARNAME, linename);
+               printf("set %s to %s\n", SERVARNAME, linename);
+       }
+
        exec_image(image);
 
        switch (errno) {
@@ -763,6 +772,9 @@ void bootminix(void)
                /* No error or error already reported. */;
        }
        free(image);
+
+       if(serial_line >= 0) 
+               b_unset(SERVARNAME);
 }
 
 /*
index 93d4999583e23aec51a85ca26dfb00b95fd89585..153a40ca016b0030b49699ad3d621524f1f38608 100755 (executable)
 #define NO_ZONE                ((zone_t) 0)    /* absence of a zone number */
 #define NO_DEV                  ((dev_t) 0)    /* absence of a device numb */
 
+#define SERVARNAME             "cttyline"
+
 /* Bits for the system property flags in boot image processes. */
 #define PREEMPTIBLE     0x02    /* kernel tasks are not preemptible */
 #define BILLABLE        0x04    /* some processes are not billable */
index b2cb09a43f632042e43cd766c924d041dc1c2273..6af02814f395c53be907b0a5e5d76247a0da057c 100755 (executable)
@@ -71,6 +71,9 @@ U16_t parmoff, parmsize;      /* boot parameters offset and length */
        system_hz = atoi(value);
   if(!value || system_hz < 2 || system_hz > 50000)     /* sanity check */
        system_hz = DEFAULT_HZ;
+  value = get_value(params_buffer, "cttyline");
+  if(value && atoi(value) == 0)
+       do_serial_debug=1;
 
   /* Return to assembler code to switch to protected mode (if 286), 
    * reload selectors and call main().