1. 程式人生 > >linux字元裝置驅動模板(新標準)

linux字元裝置驅動模板(新標準)

//////////////gpio驅動模板//////////////////////////////

static int major = 0;
static void gpio_setup_cdev(struct cdev *dev, int minor, struct file_operations *fops)
{
    int err, devno = MKDEV(major, minor);
    
    cdev_init(dev, fops);
    dev->owner = THIS_MODULE;
    dev->ops = fops;
    
    err = cdev_add(dev, devno, 1);
    
    if( err )
    {
        printk(KERN_NOTICE "Error %d adding gpio %d\n", err, minor);
    }
}

static struct file_operations gpio_fops =
{
    .owner = THIS_MODULE,
    .open  = gpio_open, /*進行初始化設定*/
    .release = gpio_release, /*釋放裝置*/
    .read  = gpio_read,
    .write = gpio_write,
    .ioctl = gpio_ioctl, /*實現主要控制功能*/
};

static struct cdev gpio_devs;
static int gpio_init(void)
{
    int result;
    dev_t dev = MKDEV(major, 0);
    
    if( major )
    {/*裝置號註冊*/
        result = register_chrdev_region(dev, 1, GPIO_DEVICE_NAME);
    }else
    {/*裝置號動態分配*/
        result = alloc_chrdev_region(&dev, 0, 1, GPIO_DEVICE_NAME);
        major = MAJOR(dev);
    }
    
    gpio_setup_cdev(&gpio_devs, 0, &gpio_fops);
    printk("The major of the gpio device is %d\n", major);
    return 0;
}

static void gpio_cleanup(void)
{
    cdev_del(&gpio_devs);/*字元裝置的登出*/
    unregister_chrdev_region(MKDEV(major, 0), 1);/*裝置號的登出*/
    printk("gpio device uninstalled\n");
}

module_init(gpio_init);
module_exit(gpio_cleanup);

MODULE_AUTHOR("transistor<
[email protected]
>");
MODULE_LICENSE("GPL");
///////////end gpio驅動模板//////////////////////////////////////////////

insmod *.ko #載入驅動
rmmod *.ko #解除安裝驅動

閱讀(1685) | 評論(3) | 轉發(0) | 給主人留下些什麼吧!~~
76_avatar_small.jpg

2011-02-15 09:13:30

transistor0: diytvgy如果還記得函式register_chrdev和unregister_chrdev的話。.....3.gif呵呵,那個已經是好幾年前的。我以為最近又有新標準。 回覆 | 舉報 02_avatar_small.jpg

2011-02-14 23:03:32

diytvgy: 恕我新手,看不出新在哪,請博主解釋一下.....diytvgy如果還記得函式register_chrdev和unregister_chrdev的話。 回覆
| 舉報 76_avatar_small.jpg

2011-02-14 10:40:49

恕我新手,看不出新在哪,請博主解釋一下

回覆 | 舉報 評論熱議

相關推薦

linux字元裝置驅動模板(標準)

//////////////gpio驅動模板//////////////////////////////static int major = 0;static void gpio_setup_cdev(struct cdev *dev, int minor, struct f

linux字元裝置驅動開發模板及Makefile

#include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/cdev.h> #include <linux/device.h> //

linux字元裝置驅動一般模板

#include <linux/miscdevice.h> //標頭檔案有很多,可以根據具體的情況新增刪除,這裡給一個例子。 #include <linux/delay.h> #include <asm/irq.h> #include

Linux字元裝置驅動模型--字元裝置的註冊

當我們編寫字元裝置驅動程式的時候,在進行字元裝置物件cdev的分配、初始化,裝置號的註冊這些初始化階段之後,就可以將它加入到系統中,這樣才能使用這個字元裝置。將一個字元裝置加入到系統中呼叫的函式時cdev_add,核心原始碼如下: int cdev_add(struct cdev *

Linux 字元裝置驅動結構(二)—— 自動建立裝置節點

      上一篇我們介紹到建立裝置檔案的方法,利用cat /proc/devices檢視申請到的裝置名,裝置號。 第一種是使用mknod手工建立:mknod filename type major minor 第二種是自動建立裝置節點:利用u

Linux 字元裝置驅動結構(一)—— cdev 結構體、裝置號相關知識解析

一、字元裝置基礎知識 1、裝置驅動分類       linux系統將裝置分為3類:字元裝置、塊裝置、網路裝置。使用驅動程式: 字元裝置:是指只能一個位元組一個位元組讀寫的裝置,不能隨機讀取裝置記憶體中的某一資料,讀取資料需要按照先後資料。

Linux字元裝置驅動註冊三種方法以及核心分析

       Linux驅動是使用者訪問底層硬體的橋樑,驅動有可以簡單分成三類:字元裝置、塊裝置、網路裝置。其中最多的是字元裝置,其中字元裝置的註冊方法主要有三種:雜項設備註冊、早期字元設備註冊、標準字元設備註冊。以及詳細介紹各類方法註冊。 開發環境: PC:WMwork

linux字元裝置驅動模型

一.雜項裝置驅動模型 雜項的主裝置號固定為10,只有255個次裝置號。可以直接生成驅動核心。 1.需要確定每個模型都會用到的檔案操作方法集合指標 2.確定核心的結構體 static struct miscdevice abc 確定三個引數,第一個為次裝置號,第二個是次裝

Linux字元裝置驅動

一、字元裝置基礎 字元裝置:是指只能一個位元組一個位元組進行讀寫操作的裝置,不能隨機讀取裝置中的某一資料、讀取資料要按照先後資料。字元裝置是面向流的裝置,常見的字元裝置有滑鼠、鍵盤、串列埠、控制檯和LED等。 一般每個字元裝置或者塊裝置都會在/dev目錄(可以是任意目錄,這樣是為了統一)下對應一個裝置檔案

1--linux字元裝置驅動

1. 編寫一個簡單的字元裝置框架 *****hello.c***** #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <

從零開始寫linux字元裝置驅動程式(一)(基於友善之臂tiny4412開發板)

從這篇博文開始,我將開始手把手教會大家寫linux裝置驅動程式這是開篇,如何來寫第一個字元裝置驅動程式。首先,寫一個最簡單的字元裝置驅動程式需要什麼?或者說我們需要了解什麼?1、每一個字元裝置至少需要有一個裝置號2、裝置號 = 主裝置號 + 次裝置號3、同一類裝置的主裝置號一

Linux 字元裝置驅動結構(三)—— file、inode結構體及chardevs陣列等相關知識解析

       先看下面這張圖,這是Linux 中虛擬檔案系統、一般的裝置檔案與裝置驅動程式值間的函式呼叫關係;         上面這張圖展現了一個應用程式呼叫字元裝置驅動的過程, 在裝置驅動程式的設計中,一般而言,會關心 file 和 inode 這兩個結構體  

linux字元裝置驅動程式scull例項

這個例子還是比較完整的講述了字元驅動開發的過程,尤其字元驅動程式的設計流程,包括測試在內。 【1.系統環境】 該驅動程式在UBUNTU10.04LTS編譯通過,系統核心為linux-2.6.32-24(可使用uname -r 命令來檢視當前核心的版本號) 由於安裝UBUNTU10.04LTS時,沒有安裝LI

Linux 字元裝置驅動開發--記憶體讀寫操作

學習Linux的累計時間已經有兩年多了,工作關係,學習的過程總是斷斷續續的,現在整理一下,下面要分享的是一個簡單的linux驅動程式,將記憶體當作一個虛擬的裝置去讀寫,沒有什麼實際的用處,像hello wold!程式一樣,我們簡單體會一下linux驅動程式的特點,Linux

深入理解Linux字元裝置驅動

文章從上層應用訪問字元裝置驅動開始,一步步地深入分析Linux字元裝置的軟體層次、組成框架和互動、如何編寫驅動、裝置檔案的建立和mdev原理,對Linux字元裝置驅動有全面的講解。本文整合之前發表的《L

Linux字元裝置驅動程式的一個簡單示例

一.原始碼: // memdev.c #define MEMDEV_MAJOR 254 /*預設的mem的主裝置號*/ #define MEMDEV_NR_DEVS 2 /*裝置數*/ #define MEMDEV_SIZE 4096 /*mem裝置描述結構體

Linux 字元裝置驅動結構(三)—— file、inode結構體及chardevs陣列等相關知識解析[轉載]

       先看下面這張圖,這是Linux 中虛擬檔案系統、一般的裝置檔案與裝置驅動程式值間的函式呼叫關係;        上面這張圖展現了一個應用程式呼叫字元裝置驅動的過程, 在裝置驅動程式的設計中,一般而言,會關心 file 和 inode 這兩個結構體       

Linux字元裝置驅動剖析

一、先看看裝置應用程式 1.很簡單,open裝置檔案,read、write、ioctl,最後close退出。如下: intmain(int argc ,char *argv[]){ unsigned char val[1] = 1; int fd =open("/

Linux 字元裝置驅動結構(一)—— cdev 結構體、裝置號相關知識解析[轉載]

一、字元裝置基礎知識1、裝置驅動分類      linux系統將裝置分為3類:字元裝置、塊裝置、網路裝置。使用驅動程式:字元裝置:是指只能一個位元組一個位元組讀寫的裝置,不能隨機讀取裝置記憶體中的某一資料,讀取資料需要按照先後資料。字元裝置是面向流的裝置,常見的字元裝置有滑鼠

Linux 字元裝置驅動結構(四)—— file_operations 結構體知識解析

        前面在 Linux 字元裝置驅動開發基礎 (三)—— 字元裝置驅動結構(中) ,我們已經介紹了兩種重要的資料結構 struct inode{...}與 struct file{...} ,下面來介紹另一個比較重要資料結構 struct _file_oper