我在引用下面的內容將我的嵌入式Arm linux板中使用的所有驅動程序描述爲平臺設備,需要澄清一些問題。請在這些建議。定義平臺設備 - Linux內核
http://thomas.enix.org/pub/conf/rmll2010/kernel-architecture-for-drivers.pdf
===============定義平臺驅動==================
static struct platform_driver serial_imx_driver = {
.probe = serial_imx_probe,
.remove = serial_imx_remove,
.driver = {
.name = "imx-uart",
.owner = THIS_MODULE,
},
};
=================定義平臺設備================
static struct platform_device imx_uart1_device = {
.name = "imx-uart",
.id = 0,
.num_resources = ARRAY_SIZE(imx_uart1_resources),
.resource = imx_uart1_resources,
.dev = {
.platform_data = &uart_pdata,
}
};
==== ====內核啓動代碼位置 - /arch/arm/mach-imx/mx1ads.c ===========
static struct platform_device *devices[] __initdata = {
&cs89x0_device,
&imx_uart1_device,
&imx_uart2_device,
};
static void __init mx1ads_init(void)
{
[...]
platform_add_devices(devices, ARRAY_SIZE(devices));
[...]
}
MACHINE_START(MX1ADS, "Freescale MX1ADS")
[...]
.init_machine = mx1ads_init,
MACHINE_END
===============================
在LINUX /司機/文件夾,如果我有10個文件夾爲10個不同的平臺驅動。我想只有6個驅動程序被包含在內核源代碼中? 那麼我的內核怎麼會知道哪個驅動包含在內?
將平臺驅動程序編譯爲模塊還是靜態編譯到內核中?
當我們調用platform_add_devices()
系統調用時會發生什麼?
在調用platform_add_devices()系統調用之前,包含在內核中的所有平臺驅動程序是否都加載到ram中?
內核源代碼中的哪個路徑/文件可以定義在我的嵌入式linux系統中使用的所有平臺設備(表示所有在板上使用的平臺設備都被描述)?
所以在現代系統板文件中包含設備樹或設備樹是由uboot傳遞給內核的? ...你也告訴選擇使用make menuconfig的驅動程序...假設平臺驅動程序不在內核中,我必須添加它,所以在這種情況下,我將不得不在內核源代碼中通過修改makefiles來靜態執行它。 ? – Katoch
使用設備樹方法,基本上有兩個文件:內核映像和設備樹blob('* .dtb')。這兩個文件都將由u-boot加載。對於添加內核驅動程序,請參見[答案](http://stackoverflow.com/questions/11710022/adding-new-driver-code-to-linux-source-code)。 – yegorich