2016-04-21 57 views
1

我想了解Linux如何打印甚至在它的ARM通用西非行解壓縮本身在通用ARM執行putc將最新的內核4.6

"Uncompressing Linux....... done, booting the kernel" 

消息。

從這個File函數decompress_kernel正在通過putstr()函數寫入消息,該函數inturn具有寫入硬件寄存器uart的putc函數。

putc將在this文件中實現的,putc將直接寫入AMBA_UART_DR寄存器和這些寄存器是不同的體系結構不同,並且還跨越不同的芯片不同了。

但是在最新的kernel-4.6 this已被棄用。 當我在最新的內核檢查putc將implemetation爲ARM通用西非行及其被棄用所以

他們在最新的內核4.6如何實現,其中作爲machine-specific代碼其餘部分還存在嗎?

How kernel is printing the banner in latest kernel? 

回答

3

多功能電路板支持代碼已轉換爲多平臺內核模型(ARCH_MULTIPLATFORM)。就像其他板子支持相同類型的代碼一樣,現在需要arch/arm/include/debug/uncompress.h中的putc()原型。

相反,putc()的實際實現是編碼到arch/arm/boot/compressed/debug.S的通用匯編函數。通常,debug.S引用幾個宏(addruart,waituart,senduart,busyuart)來獲取有關實際UART硬件的信息。這些宏在由CONFIG_DEBUG_LL_INCLUDE(搜索arch/arm/Kconfig.debug爲它選擇)的包含文件中定義。在多功能板CONFIG_DEBUG_LL_INCLUDE被定義爲arch/arm/include/debug/pl01x.S的情況下,實際上你可以找到這些宏。

+0

謝謝你,我看到了ARCH_MULTIPLATFORM的補丁,但我知道它是如何以通用方式實現的,現在我明白了。 –

+0

關於這個問題的任何輸入http://stackoverflow.com/questions/36621505/debugging-linux-kernel-using-gdb-in-qemu-unable-to-hit-function-or-given-adress –