作為misc裝置驅動的乙個例項,我選擇最簡單的led的驅動。下面簡要記錄下led驅動的編寫和實驗過程。
1、建立資料夾led
2、在led資料夾下編寫led驅動程式leds.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define device_name "wjbleds"
static unsigned long led_table = ;
static unsigned int led_cfg_table = ;
static int sbc2440_leds_ioctl(
struct inode *inode,
struct file *file,
unsigned int cmd,
unsigned long arg)
s3c2410_gpio_setpin(led_table[arg], !cmd);
return 0;
default:
return -einval;}}
static struct file_operations dev_fops = ;
static struct miscdevice misc = ;
static int __init dev_init(void)
ret = misc_register(&misc);
printk(device_name"/tinitialized/n");
return ret;
}static void __exit dev_exit(void)
module_init(dev_init);
module_exit(dev_exit);
module_license("gpl");
module_author("wjb");
3、makefile檔案
同樣在led資料夾下編寫makefile檔案如下:
ifneq ($(kernelrelease), )
obj-m := leds.o
else
kdir := /usr/src/linux-2.6.32.2
all:
make -c $(kdir) m=$(pwd) modules arch=arm cross_compile=arm-linux-
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif
4、執行make
這時候,會在led資料夾下生成leds.ko檔案。
5、編寫應用程式
#include
#include
#include
#include
main(int argc, char **argv)
fd = open("/dev/wjbleds", 0);
if(fd < 0)
ioctl(fd, on, led_no);
close(fd);
return 0;
}6、編譯應用程式
7、在開發板測試
2)使用insmod leds.ko註冊我們的led驅動。這時候,會發現「wjbleds initialized」被列印出來了。在/dev/目錄下也會發現我們的裝置wjbleds已經存在了。這時候通過cat /proc/misc命令,我們發現wjbleds裝置已經作為misc裝置存在了。
3)禁掉系統本身的led服務。因為啟動起來後,系統本身會啟動乙個服務,使四個led不斷地迴圈閃爍,這個服務影響了我們對自己的led驅動的測試,所以測試led驅動前,需要將其關閉。關閉方法為:#/etc/rc.d/init.d/leds stop
字元裝置驅動之LED 混雜裝置驅動(misc)
misc led.c include include include include include include include include include include include static volatile unsigned long gpfcon volatile unsig...
misc雜項裝置驅動
linux裡面的misc雜項裝置是主裝置號為10的驅動裝置,它的註冊跟使用比較的簡單,所以比較適用於功能簡單的裝置。它有自己的裝置結構體 struct miscdevice 它在標頭檔案linux miscdevice.h裡面有定義,其中minor是misc裝置的副裝置號,misc裝置主要依賴min...
misc裝置驅動模型及例項解析
1 misc裝置驅動模型 本節我們來看一下misc裝置驅動模型的有關內容,首先是看看它的裝置結構體,定義在include linux miscdevice.h中 cpp view plain copy struct miscdevice 結構體中的部分成員我們是一目了然的,主要是來看看有疑惑的幾點 ...