簡單字元裝置驅動程式 以及 相應測試程式

2021-05-22 08:54:04 字數 2332 閱讀 6810

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define device_name "embedsky-leds"  /* 載入模式後,執行」cat /proc/devices」命令看到的裝置名稱 */

#define led_major 231   /* 主裝置號 */

/* 應用程式執行ioctl(fd, cmd, arg)時的第2個引數 */

#define ioctl_led_on 1

#define ioctl_led_off 0

/* 用來指定led所用的gpio引腳 */

static unsigned long led_table =

;/* 用來指定gpio引腳的功能:輸出 */

static unsigned int led_cfg_table =

;/* 應用程式對裝置檔案/dev/embedsky-leds執行open(...)時,

* 就會呼叫embedsky_leds_open函式

*/static int embedsky_leds_open(struct inode *inode, struct file *file)

return 0;

}/* 應用程式對裝置檔案/dev/embedsky-leds執行ioclt(...)時,

* 就會呼叫embedsky_leds_ioctl函式

*/static int embedsky_leds_ioctl( struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)

switch(cmd)

}/* 這個結構是字元裝置驅動程式的核心

* 當應用程式操作裝置檔案時所呼叫的open、read、write等函式,

* 最終會呼叫這個結構中指定的對應函式

*/static struct file_operations embedsky_leds_fops =

;static char __initdata banner = "tq2440/sky2440 leds, (c) 2008,2009 www.embedsky.net/n";

static struct class *led_class;

/** 執行「insmod embedsky_leds.ko」命令時就會呼叫這個函式

*/static int __init embedsky_leds_init(void)

//註冊乙個類,使mdev可以在"/dev/"目錄下面建立裝置節點

led_class = class_create(this_module, device_name);

if(is_err(led_class))

//建立乙個裝置節點,節點名為device_name

class_device_create(led_class, null, mkdev(led_major, 0), null, device_name);

printk(device_name " initialized/n");

return 0;}/*

* 執行」rmmod embedsky_leds.ko」命令時就會呼叫這個函式

*/static void __exit embedsky_leds_exit(void)

/* 這兩行指定驅動程式的初始化函式和解除安裝函式 */

module_init(embedsky_leds_init);

module_exit(embedsky_leds_exit);

/* 描述驅動程式的一些資訊,不是必須的 */

module_author(http://hi.baidu.com/shenlei);  // 驅動程式的作者

module_description("tq2440/sky2440 led driver"); // 一些描述資訊

module_license("gpl");     // 遵循的協議

相應的測試程式

#include

#include

#include

#include

int main(int argc, char **argv)

fd = open("/dev/gpio-control", 0);

if (fd < 0)

ioctl(fd, on, (led_no-1));

close(fd);

return 0;

}

簡單字元驅動程式

mycdev.c include include include include include include include include include include module license gpl define mycdev major 231 cat proc devices檢視...

簡單字元驅動程式mycdev c

root bogon 桌面 gedit mycdev.c include include include include include include module author me module license gpl define mycdev major 231 給定的主裝置號 defin...

linux裝置驅動程式 字元裝置驅動程式

先留個 有一起學習驅動程式的加qq295699450 字元裝置驅動 這篇比較惱火。載入成功,但是讀不出來資料,有知道怎麼回事的,留個言,一起討論下 資料結構 struct scull mem struct scull dev dev 整個驅動程式 如下 include include include...