歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux Kernel的函數與抽象層

在數學領域,函數是一種關系,這種關系使一個集合裡的每一個元素對應到另一個(可能相同的)集合裡的唯一元素。

在C語言中函數也有這種聯系。自變量影響著因變量。

在linux內核驅動編程經常會有抽象層的概念。硬件抽象層是位於操作系統內核與硬件電路之間的接口層,其目的在於將硬件抽象化。它隱藏了特定平台的硬件接口細節,為操作系統提供虛擬硬件平台,使其具有硬件無關性,可在多種平台上進行移植。內核提供了簡單的內核符號表機制(可以理解為全局函數/變量指針),模塊或者源程序向其他程序導出符號,則使用下面的宏:EXPORT_SYMBOL(name);

模塊層疊技術在復雜的項目中非常有用。如果以設備驅動的形式實現一個新的軟件抽象,則可以為硬件相關的實現提供一個“插頭”。例如video-for-linux驅動程序組劃分出一個通用的模塊,它導出的符號可以供下層具體硬件相關的驅動程序使用。根據所安裝的硬件的不同,我們加載通用的video模塊和硬件相關的特定模塊。在《linux device driverⅢ》中這樣描述符號導出的作用:

Modulestacking is useful in complex projects. If a new abstraction is implemented in theform of a device driver, it might offer a plug for hardware-specificimplementa-tions. For example, the video-for-linux set of drivers is split intoa generic module that exports symbols used by lower-level device drivers forspecific hardware. According to your setup, you load the generic video moduleand the specific module for your installed hardware.

抽象層的函數提供給底層的驅動,底層驅動利用這些函數傳入與硬件相關的參數(一般是結構體,結構體中需要底層的各種操作函數指針)。抽象層是這一類驅動的共同部分,抽象部分,做了封裝,這樣和具體硬件相關的驅動一起作為完整的驅動。

更多關於Linux Kernel的詳細信息,或者下載地址請點這裡

Copyright © Linux教程網 All Rights Reserved