Linux驅動學習(二)

2021-09-08 03:25:50 字數 1951 閱讀 2030

注:基於linux-2.6.38

還是/arch/arm/mach-s3c64xx/mach-mini6410.c這個檔案,前面有篇文章已經說了裡面的mini6410_machine_init()函式是什麼時候被呼叫的,因此在這裡不再重複,直接看這個函式裡面的內容:

1

static

void __init mini6410_machine_init(void)2

55if

(array_size(i2c_devs1))

5859

#ifdef config_s3c64xx_dev_fimc0

60s3c_fimc0_set_platdata(null);

61#endif

62#ifdef config_s3c64xx_dev_fimc1

63s3c_fimc1_set_platdata(null);

64#endif

6566

platform_add_devices(mini6410_devices, array_size(mini6410_devices));

6768

#ifdef config_video_samsung

69 create_proc_read_entry("

videomem

", 0

, null, s3c_media_read_proc, null);

70#endif

71 }

雖說有點長,但不難理解,都是對平台裝置相關資料的初始化還有一些暫存器的設定,重點看第66行的platform_add_devices()函式,該函式實現了平台裝置的註冊,第乙個引數是結構體陣列,第二個引數是該陣列的大小,去看看它的定義:

1

static

struct platform_device *mini6410_devices __initdata =;

嗯,該陣列裡存放了很多裝置,這些裝置都會隨著mini6410_machine_init()函式被呼叫而被初始化。接下來回到platform_add_devices(),它在drivers/base/platform.c裡定義:

1

int platform_add_devices(struct platform_device **devs, int

num)212

}1314return

ret;

15 }

在乙個for迴圈裡通過platform_device_register()將所有定義了的平台裝置逐個註冊進系統。看第6行platform_device_register()的定義:

1

int platform_device_register(struct platform_device *pdev)

2

1

int platform_device_add(struct platform_device *pdev)231

32if (p &&insert_resource(p, r)) 39}

4041 pr_debug("

registering platform device '%s'. parent at %s\n",

42 dev_name(&pdev->dev), dev_name(pdev->dev.parent));

4344 ret = device_add(&pdev->dev);

45if (ret == 0)46

return

ret;

4748

failed:

49while (--i >= 0

) 56

57return

ret;

58 }

Linux驅動學習 初識PCI驅動 二

寫在前面的話 我們從下面幾個方面來講述 一,初始化裝置模組 當linux 核心啟動並完成對所有 pci裝置進行掃瞄 登入和分配資源等初始化操作的同時,會建立起系統中所有 pci裝置的拓撲結構,此後當 pci驅動程式需要對裝置進行初始化時,一般都會呼叫如下的 static int init examp...

Linux驅動學習之路二

linux驅動學習之路二 上次我們寫了乙個最簡單的驅動程式,但是那個驅動程式中沒有介面可供linux上層應用程式呼叫 這次讓我們新增乙個linux呼叫驅動的介面,讓上層應用可以呼叫 1.首先讓咱們來了解一下linux 中file operations結構體,這個結構體在 include linux ...

linux驅動學習 二 核心模組

因為linux 核心的整體結構非常龐大,包含的元件非常多,如何使用需要的元件呢?有一種方法是把所有的元件都編譯進核心檔案 zimage 或bzimage 但是這樣會產生兩個問題 一是生成的核心檔案過大 二是如果要新增或刪除某乙個元件,需要重新刪除編譯整個核心。於是我們需找另外一種機制讓核心檔案本身不...