printk如何定向输出到UART的?

 

/*   * The console driver calls this routine during kernel initialization   * to register the console printing procedure with printk() and to   * print any messages that were printed by the kernel before the   * console driver was initialized.   *   * This can happen pretty early during the boot process (because of   * early_printk) - sometimes before setup_arch() completes - be careful   * of what kernel features are used - they may not be initialised yet.   *   * There are two types of consoles - bootconsoles (early_printk) and   * "real" consoles (everything which is not a bootconsole) which are   * handled differently.   *  - Any number of bootconsoles can be registered at any time.   *  - As soon as a "real" console is registered, all bootconsoles   *    will be unregistered automatically.   *  - Once a "real" console is registered, any attempt to register a   *    bootconsoles will be rejected   */   void register_console(struct console *newcon)   {       ............................       /*       *  See if this console matches one we selected on       *  the command line.       */        //看上面的注释我们也可以知道了command line中的定义在这里也起作用了        for (i = 0; i < MAX_CMDLINECONSOLES && console_cmdline[i].name[0];               i++) {           if (strcmp(console_cmdline[i].name, newcon->name) != 0)               continue;           if (newcon->index >= 0 &&               newcon->index != console_cmdline[i].index)               continue;           if (newcon->index < 0)               newcon->index = console_cmdline[i].index;   #ifdef CONFIG_A11Y_BRAILLE_CONSOLE            if (console_cmdline[i].brl_options) {               newcon->flags |= CON_BRL;               braille_register_console(newcon,                       console_cmdline[i].index,                       console_cmdline[i].options,                       console_cmdline[i].brl_options);               return;           }   #endif            if (newcon->setup &&               newcon->setup(newcon, console_cmdline[i].options) != 0)/////在这里可以看到setup的过程了                break;           newcon->flags |= CON_ENABLED;           newcon->index = console_cmdline[i].index;           if (i == selected_console) {               newcon->flags |= CON_CONSDEV;               preferred_console = selected_console;           }           break;       }             if (!(newcon->flags & CON_ENABLED))//其他的console driver屏蔽掉            return;         ........................................   }  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwzydj.html