一、printf函數調用關系
U-Boot源代碼下載地址 http://www.linuxidc.com/Linux/2011-07/38897.htm
1.1fputc和srial_putc的關系
- /*
- * Output a single byte to the serial port.
- */
- void serial_putc (const char c)//發送數據
- {
- S3C24X0_UART * const uart = S3C24X0_GetBase_UART(UART_NR);
- #ifdef CONFIG_MODEM_SUPPORT
- if (be_quiet)
- return;
- #endif
-
- /* wait for room in the tx FIFO */
- while (!(uart->UTRSTAT & 0x2));
-
- #ifdef CONFIG_HWFLOW
- /* Wait for CTS up */
- while(hwflow && !(uart->UMSTAT & 0x1))
- ;
- #endif
-
- uart->UTXH = c;
-
- /* If \n, also do \r */
- if (c == '\n')
- serial_putc ('\r');
- }
serial_putc函數是直接和控制相關的,通過UTXH寄存器發送數據。
- void fputc (int file, const char c)
- {
- if (file < MAX_FILES)
- stdio_devices[file]->putc (c);
- }
這是在console_init_r中設置stdio_devices[]後才有的,其他的是類似的。
1.2putc和fputc的關系
- void putc (const char c)
- {
- #ifdef CONFIG_SILENT_CONSOLE
- if (gd->flags & GD_FLG_SILENT)
- return;
- #endif
-
- if (gd->flags & GD_FLG_DEVINIT) {
- /* Send to the standard output */
- fputc (stdout, c);
- } else {
- /* Send directly to the handler */
- serial_putc (c);
- }
- }
這是console_init_r中設置gd->flags & GD_FLG_DEVINIT,也就是串口設備完全初始化之後才有這種關系,其他的函數是類似的。