通過驅動模塊的加載在/dev下創建設備文件,在驅動模塊卸載時又自動的刪除在/dev下創建的設備文件非常方便。而這個過程就是通過device_create()和device_destroy()內核函數完成的,在Linux2.6.27之前是class_device_create()和class_device_destroy()。最近在開發過程中發現device_create()參數使用很靈活,一不小心就會導致加載時內核報oops錯誤(vsnprintf引起)。google上搜到的一些文章也有着問題。如如下使用就會出錯:
device_create(my_class, NULL, MKDEV(major,minor), "hello" "%d",0);
在"hello" "%d"之間加上","能解決insmod時oops錯誤,但是卻不能在/dev目錄下創建想要的設備文件。正確的調用方法如下:
device_create(my_class, NULL, MKDEV(major,minor), NULL,"hello%d",0);