linux 裏的一些英文縮寫含義

GIC: General Interrupt Controller

clockevents_register_device:註冊系統中的時鐘事件設備

MACHINE_START:主要是定義了"struct machine_desc"的類型,放在 section(".arch.info.init"),是初始化數據,Kernel 起來之後將被丟棄。
其餘各個成員函數在setup_arch()中被賦值到內核結構體,在不同時期被調用:
1. .init_machine 在 arch/arm/kernel/setup.c 中被 customize_machine 調用,放在 arch_initcall() 段裏面,會自動按順序被調用。
2. .init_irq在start_kernel() --> init_IRQ() --> init_arch_irq()中被調用
3. .map_io 在 setup_arch() --> paging_init() --> devicemaps_init()中被調用
4. .timer是定義系統時鐘,定義TIMER4爲系統時鐘,在arch/arm/plat-s3c/time.c中體現。在start_kernel() --> time_init()中被調用。
5. .boot_params是bootloader向內核傳遞的參數的位置,這要和bootloader中參數的定義要一致。
6. 其他主要都在 setup_arch() 中用到。

Linux內核訪問外設I/O資源的方式:

一、動態映射(ioremap)方式

動態映射方式是大家使用了比較多的,也比較簡單。即直接通過內核提供的ioremap函數動態創建一段外設I/O內存資源到內核虛擬地址的映射表,從而可以在內核空間中訪問這段I/O資源。

二、靜態映射(map_desc)方式

通過map_desc結構體靜態創建I/O資源映射表。


request_irq和setup_irq區別:

request_irq的大致流程爲先對申請的中斷線進行安全檢測,然後根據request_irq傳進來的參數,動態創建該中斷對應的irqaction結構體,最後通過setup_irq函數將該irqaction註冊進內核適當的位置。

系統時鐘驅動(GP Timer Driver)的中斷處理函數不能用request_irq註冊是因爲request_irq內會調用kmalloc動態分配內存創建timer的 irqaction結構體。而kmalloc也是使用的slab內存分配機制,使用kmalloc前必須先對kernel的slab以及mem data structure進行初始化。而這部分初始化工作是在系統時鐘驅動初始化之後才進行的,所以造成kmalloc失敗,從而造成系統時鐘驅動的中斷未註冊 成功,進而內核掛掉。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章