printk 中console

xiaoxiao2021-02-27  381

在printk.c 中有定义一个数组 static struct console_cmdline console_cmdline[MAX_CMDLINECONSOLES];其中MAX_CMDLINECONSOLES等于8,表示cmdline最多可以传递8个console 要填充这个数组有两种方式, 一种是在console driver中主动调用add_preferred_console 例如    add_preferred_console("hvc", index, NULL); 第二种是通过传递console 这个commmand line,这个参数可以传递多个,例如console=tty0,console=ttyS0等 static int __init console_setup(char *str) {     char buf[sizeof(console_cmdline[0].name) + 4]; /* 4 for "ttyS" */     char *s, *options, *brl_options = NULL;     int idx;     if (_braille_console_setup(&str, &brl_options))         return 1;     /*      * Decode str into name, index, options.      */     if (str[0] >= '0' && str[0] <= '9') {         strcpy(buf, "ttyS");         strncpy(buf + 4, str, sizeof(buf) - 5);     } else {         strncpy(buf, str, sizeof(buf) - 1);     }     buf[sizeof(buf) - 1] = 0;     options = strchr(str, ',');     if (options)         *(options++) = 0; #ifdef __sparc__     if (!strcmp(str, "ttya"))         strcpy(buf, "ttyS0");     if (!strcmp(str, "ttyb"))         strcpy(buf, "ttyS1"); #endif     for (s = buf; *s; s++)         if (isdigit(*s) || *s == ',')             break;     idx = simple_strtoul(s, NULL, 10);     *s = 0;     __add_preferred_console(buf, idx, options, brl_options);     console_set_on_cmdline = 1;     return 1; } 如果传递console的话,主要通过这个函数解析的,可以看到如果传递的是ttyS0的话,可以简写成console=0.这个数字是0~9 这个函数最终也是调用__add_preferred_console 将自己添加到console_cmdline 数组中。console_set_on_cmdline 这个参数只在suncore.c中有使用     if (!console_set_on_cmdline) {         con->index = line;         add_preferred_console(con->name, line, NULL);     }
转载请注明原文地址: https://www.6miu.com/read-2116.html

最新回复(0)