miscdevice說明
miscdevice:混雜設備,是linux字符設備驅動中的一種,主要變量和函數有
struct miscdevice、misc_register、misc_deregister
miscdevice結構體定義如下:
struct miscdevice {
int minor;
const char *name;
const struct file_operations *fops;
struct list_head list;
struct device *parent;
struct device *this_device;
const char *nodename;
mode_t mode;
};
主要用到的成員有minor name fops。minor變量取值有宏定義:
#define PSMOUSE_MINOR 1
#define MS_BUSMOUSE_MINOR 2
#define ATIXL_BUSMOUSE_MINOR 3
/*#define AMIGAMOUSE_MINOR 4 FIXME OBSOLETE */
#define ATARIMOUSE_MINOR 5
#define SUN_MOUSE_MINOR 6
#define APOLLO_MOUSE_MINOR 7
#define PC110PAD_MINOR 9
/*#define ADB_MOUSE_MINOR 10 FIXME OBSOLETE */
#define WATCHDOG_MINOR 130 /* Watchdog timer */
#define TEMP_MINOR 131 /* Temperature Sensor */
#define RTC_MINOR 135
#define EFI_RTC_MINOR 136 /* EFI Time services */
#define SUN_OPENPROM_MINOR 139
#define DMAPI_MINOR 140 /* DMAPI */
#define NVRAM_MINOR 144
#define SGI_MMTIMER 153
#define STORE_QUEUE_MINOR 155
#define I2O_MINOR 166
#define MICROCODE_MINOR 184
#define TUN_MINOR 200
#define MWAVE_MINOR 219 /* ACP/Mwave Modem */
#define MPT_MINOR 220
#define MPT2SAS_MINOR 221
#define UINPUT_MINOR 223
#define HPET_MINOR 228
#define FUSE_MINOR 229
#define KVM_MINOR 232
#define BTRFS_MINOR 234
#define AUTOFS_MINOR 235
#define MAPPER_CTRL_MINOR 236
#define MISC_DYNAMIC_MINOR 255
看最後一個MISC_DYNAMIC_NIMOR,minor賦值該宏時,表示該設備的次設備號由系統動態分配。
與linux內核驅動比較
在標準linux內核中misc驅動註冊misc設備時,需要提供miscdevice結構體變量,這一點安卓也一樣。但標準linux所需提供的miscdevice變量中成員minor若未賦值,默認爲MISC_DYNAMIC_MINOR,但在android中,需顯式賦值,否則misc_register會註冊失敗。這一點我在寫misc驅動時納悶了半天,怎麼linux上加載好好的驅動,跑到android上就提示加載失敗。