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...