2017-04-02 1340 views
1

在目標板的啓動過程中,我們看到uboot(bootloader)在控制檯上打印一些信息,如圖像名稱,圖像類型,加載地址,驗證校驗和等。它使用哪種打印機制?它是否使用類似printk的東西,或者甚至在內核啓動之前它有自己的打印信息定義?我在哪裏可以找到它的打印實施代碼?uboot如何在主板上打印信息

+0

基本上,U-Boot通過UART將消息輸出到串行控制檯。它有內部API來這樣做。當然,在寫入UART之前,U-Boot需要首先初始化(配置)它。這與內核幾乎相同。爲了更好地理解內部,你可以看看我縮小(最小)的U-Boot版本,它只能寫入UART:https://gitlab.com/joeskb7/dra7xx-hello/tree/master –

+0

@samprotsenko感謝你的uboot代碼。但我的UART是ttyHS,波特率是757000.我可以在內核中使用你的uboot代碼來在內核中進行早期打印功能嗎? – karthikpj

+0

該代碼僅供參考。不,您不能使用它,因爲它嚴格依賴於架構(僅適用於一個平臺,可能與您的平臺不一樣)。基本上,我只是想向您展示如何在U-Boot中實現打印。您可以爲您的平臺尋找串行控制檯驅動程序(在U-Boot中),並調查它的工作原理。像'debug()'和'printf()'這樣的函數在所有體系結構中都是常見的,但最終它們都依賴於串行控制檯驅動程序,這是您的平臺特有的。 –

回答

1

在正常的U-boot啓動過程中,將有限的信息打印到控制檯。它使用與C編程中使用的相同類型的函數來打印信息。

的u-boot使用printfputs打印控制檯上的信息。你可以在u-boot源代碼中找到相同的函數實現(u-boot boardfile和drivers)。

有很多命令可以從u-boot命令提示符中嘗試獲取更多信息。

爲了讓更多的信息,您可以:

  • 使用debug_cond (cond, fmt, args...):如果你定義一些COND,一旦滿足,U-Boot的將打印出此消息。
  • 使用debug(fmt, args...):可以定義在文件中DEBUG的u-boot- include/configs/<boardfile>_common.h(就像我的情況mx6_common.h),一旦做到這一點,重新編譯代碼,U-Boot的將打印出所有調試信息

注意:如果您對代碼進行了太多調試,可能會導致u-boot掛起。

0

如果您想要關於uBoot的信息(例如打印到的位置或其值的變量),可以使用'printenv'命令並更改,您可以在啓動時(中斷內核啓動時)輸入uBoot他們用'setenv'命令。