linux的platform中發現的一點技巧

2021-05-27 06:42:45 字數 1049 閱讀 8814

linux版本:2.6.25

在linux核心的platform匯流排中,有匯流排裝置,結構體如下:

struct platform_device ;

下面是platform_object的結構體:

struct platform_object ;

讓我們再看看記憶體的分配函式,如下:

struct platform_device *platform_device_alloc(const char *name, int id)

return pa ? &pa->pdev : null;}看

struct platform_device *platform_device_alloc(const char *name, int id)函式的這一行:

pa = kzalloc(sizeof(struct platform_object) + strlen(name), gfp_kernel);

在strlen中沒有加1的現象。這是為什麼呢?如果name後面沒有0結尾,不就是發生了找name字串的時候發生錯誤?

原因在於:

struct platform_object ;

中的char name[1];

多了乙個申請的時候特意多了乙個記憶體(至於記憶體是多少,看申請的對齊)。

如果結構體換成:

struct platform_object ;

將使得:pa = kzalloc(sizeof(struct platform_object) + strlen(name), gfp_kernel);

需要改為:pa = kzalloc(sizeof(struct platform_object) + strlen(name) + 1, gfp_kernel);

但是:

struct platform_object ; 與

struct platform_object ;

所占有的記憶體第乙個大於等於第二個,當char name[1];位元組對齊比指標的所占有的空間小的時候,是小的。等於的時候是相當的。

精明之處:少了1的記憶體使用!

Linux驅動中的platform

從linux2.6核心起,引入一套新的驅動管理和註冊機制 platform device 和 platform driver linux 中大部分的裝置驅動,都可以使用這套機制,裝置用 platform device 表示 驅動用 platform driver 進行註冊。linux platfor...

Linux驅動中的platform

從linux2.6核心起,引入一套新的驅動管理和註冊機制 platform device 和 platform driver linux 中大部分的裝置驅動,都可以使用這套機制,裝置用 platform device 表示 驅動用 platform driver 進行註冊。linux platfor...

Linux驅動中的platform

從linux2.6核心起,引入一套新的驅動管理和註冊機制 platform device 和platform driver linux 中大部分的裝置驅動,都可以使用這套機制,裝置用platform device 表示 驅動用platform driver 進行註冊。linux platform d...