linux下平台裝置的識別

2021-09-30 09:57:32 字數 1888 閱讀 4847

在初學系統移植的時候,很多同學碰到這樣的問題,比如要新增lcd的支援,網上很多資料說要新增一些**,可是為什麼新增這些**缺不是很清楚。這裡我們分析一些這些**和驅動之間的關係。

比如我們這裡要新增lcd的支援,以s3c2410為例,我們會在arch/arm/mach-s3c2410/

mach-smdk2410.c中新增如下**:

static structs3c2410fb_display s3c2410_lcd_cfg __initdata = else {

printk(kern_err "nomemory for lcd platform data\n");

s3c_device_lcd.dev.platform_data= npd就是將我們用來描述lcd的物理資訊的結構體賦值給s3c_device_lcd的成員,s3c_device_lcd又是什麼定義呢,在那裡使用的呢?

static struct resource s3c_lcd_resource = {

[0] = {

.start = s3c24xx_pa_lcd,

.end   = s3c24xx_pa_lcd +s3c24xx_sz_lcd - 1,

.flags = ioresource_mem,

[1] = {

.start = irq_lcd,

.end   = irq_lcd,

.flags = ioresource_irq,

static u64 s3c_device_lcd_dmamask = 0xfffffffful;

struct platform_device s3c_device_lcd = {

.name                  = "s3c2410-lcd",

.id                = -1,

.num_resources         =array_size(s3c_lcd_resource),

.resource   = s3c_lcd_resource,

.dev              = {

.dma_mask               =&s3c_device_lcd_dmamask,

.coherent_dma_mask     = 0xfffffffful

這裡定義了s3c_device_lcd也就是我們的平台裝置,這個結構用來描述lcd的物理資訊,比如控制器的實體地址,及屏的物理資訊。那麼這個內容如何去操作我們的lcd呢。

這裡涉及到linux核心的設計思想,linux核心想把裝置與驅動完全分離,裝置是裝置,驅動是驅動。所以就出現了平台裝置(platform_deivce)和驅動(platform_driver),這兩個結果互不相干,乙個用來描述裝置,乙個是驅動,但是他們有共同的成員是bus_type通過是個東西進行關聯。上面我們定義了乙個平台裝置,並且在arch/arm/mach-s3c2410/

mach-smdk2410.c中將這個裝置註冊到我們的系統中去。

註冊流程為:

在s3c2410fb.c中驅動中定義了這麼乙個結構:

static struct platform_driver s3c2410fb_driver = {

.probe                =s3c2410fb_probe,

.remove            =__devexit_p(s3c2410fb_remove),

.suspend  = s3c2410fb_suspend,

.resume            =s3c2410fb_resume,

.driver                = {

.name       = "s3c2410-lcd",

.owner     = this_module,

我們看一下這個驅動的註冊流程吧:

linux平台驅動與平台裝置的實現

首先介紹一下註冊乙個驅動的步驟 1 定義乙個platform driver結構 2 初始化這個結構,指定其probe remove等函式,並初始化其中的driver變數 3 實現其probe remove等函式 看platform driver結構,定義於include linux platform...

Linux 平台裝置驅動模型

linux 平台裝置驅動模型 一。平台匯流排概述 1.平台匯流排 platform bus 是linux2.6核心加入的一種虛擬匯流排,其優勢在於採用了匯流排的模型對裝置與驅動進行了管理,這樣提高了程式的可移植性 二。平台裝置 1.平台裝置使用structplatform device來描述 str...

linux裝置樹的識別載入

主要內容 1.裝置樹檔案編譯 2.裝置樹檔案載入 3.裝置樹檔案解析 4.裝置樹上的節點如何與驅動繫結 device與driver如何呼叫probe 5.如掛在i2c上,則中間i2c如何插入,兩者之間如何與i2c互動 參考 該module的initcall等級相比核心核心的core module來說...