![](/img/trans.png)
[英]Man pages for alloc_chrdev_region(), register_chrdev() etc system calls
[英]Is there any significance of reserving 256 minor numbers when dynamically assigning a major number using register_chrdev?
使用register_chrdev函數為動態分配的主要編號分配256個次要編號是否有意義
要動態分配主編號,我使用內核中定義的register_chrdev函數
static inline int register_chrdev(unsigned int major, const char *name, const struct file_operations *fops) { return __register_chrdev(major, 0, 256, name, fops); }
如果作為參數傳遞的major的值為0,則__register_chrdev現在將分配一個動態主編號。此特定操作在內核中具有以下源代碼
if (major == 0) { for (i = ARRAY_SIZE(chrdevs)-1; i > 0; i--) { if (chrdevs[i] == NULL) break; }
chrdev是一個指向struct char_device_struct * chrdevs [CHRDEV_MAJOR_HASH_SIZE]的指針數組;
宏CHRDEV_MAJOR_HASH_SIZE的大小為255
5.ARRAY_SIZE(chrdevs)將返回* chrdevs數組的大小,結果為5334(原諒我錯誤的數學計算),考慮到struct char_device_struct的大小為84字節。
問題:這很好問題可能是一個愚蠢的問題但是有一個重要的原因是為什么會自動分配256個次要號碼?
以上源代碼剪切來自linux-3.6.7內核文件:fs / char_dev.c
Register_chrdev是較舊的接口,默認情況下用於提供256個未成年人。 這是從較舊的內核進行的,並保持用於后備兼容性。 在2.6以后的新內核中,您有register_chrdev_region或alloc_chrdev_region。 在此,您可以指定所需的未成年人數量。 這是更好的接口,而不是register_chrdev。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.