android miscdevice(混雜設備)驅動編寫注意

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上就提示加載失敗。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章