linux系統之字元裝置驅動 點燈

2021-10-19 21:55:59 字數 3378 閱讀 2210

底板核心板

rgb-red

gpioa28

rgb-green

gpioe13

rgb-blue

gpiob12

驅動**程式led_dev.c

/*

* @author: your name

* @date: 2021-02-06 00:06:43

* @lastedittime: 2021-02-23 20:06:05

* @lasteditors: please set lasteditors

* @description: in user settings edit

* @filepath: \2-led\led_dev.c

*/#include

#include

#include

#include

#include

#include

#include

#include

#include

"led.h"

#define gpiono(m,n) (m*32+n)

#define gpioa28 gpiono(0,28)

#define gpiob12 gpiono(1,12)

#define gpioe13 gpiono(4,13)

#define name "rgb_io"

// 裝置節點名字

struct led_devleddevice;

int led_open (

struct inode *inode,

struct file *file)

int led_close (

struct inode *inode,

struct file *file)

long led_ioctl (

struct file *file,

unsigned

int cmd,

unsigned

long agrs)

return0;

}const

struct file_operations fops =

;static

int __init myrgb_init

(void

)// 2. 建立裝置驅動目錄

leddevice.class =

class_create

(this_module,

"cleddev");

if(is_err

(leddevice.class)

)// 3. 建立裝置驅動節點

leddevice.dev =

device_create

(leddevice.class,

null

,mkdev

(leddevice.major,0)

,null

, name);if

(is_err

(leddevice.dev)

)gpio_set_value

(gpioa28,0)

;gpio_set_value

(gpiob12,0)

;gpio_set_value

(gpioe13,0)

;printk

("%s, %s, myrgb_init succeed \n"

,__file__

,__func__);

return0;

err3:

class_destroy

(leddevice.class)

;err2:

unregister_chrdev

(leddevice.major, name)

;err1:

return ret;

}static

void __exit myrgb_exit

(void

)module_init

(myrgb_init)

;module_exit

(myrgb_exit)

;module_license

("gpl"

);

中間檔案led.h
/*

* @author: your name

* @date: 2021-02-23 20:01:02

* @lastedittime: 2021-02-23 20:01:35

* @lasteditors: please set lasteditors

* @description: in user settings edit

* @filepath: \2-led\led.h

*/#ifndef __led_h__

#define __led_h__

#define type 'l'

#define red_on _io(type, 0)

#define red_off _io(type, 1)

#define green_on _io(type, 2)

#define green_off _io(type, 3)

#define blue_on _io(type, 4)

#define blue_off _io(type, 5)

#endif

/* __led_h__ */

應用程式main.c
/*

* @author: your name

* @date: 2021-02-23 20:09:13

* @lastedittime: 2021-02-23 20:15:03

* @lasteditors: please set lasteditors

* @description: in user settings edit

* @filepath: \2-led\main.c

*/#include

#include

#include

#include

#include

#include

"led.h"

intmain

(int argc,

char

const

*ar**)

while(1

)close

(fd)

;return0;

}

紅、綠、藍三個燈交替閃爍。

Linux裝置驅動之《字元裝置驅動》

linux裝置中最大的特點就是裝置操作猶如檔案操作一般,在應用層看來,硬體裝置只是乙個裝置檔案。應用程式可以像操作檔案一樣對硬體裝置進行操作,如open close read write 等。下面是乙個字元裝置驅動程式的簡單實現test.c 模組分析 1.初始化裝置驅動的結構體 struct fil...

Linux裝置驅動之字元裝置驅動

一 linux裝置的分類 linux系統將裝置分成三種基本型別,每個模組通常實現為其中某一類 字元模組 塊模組或網路模組。這三種型別有 字元裝置 字元裝置是個能夠像位元組流 類似檔案 一樣被訪問的裝置,由字元裝置驅動程式來實現這種特性。字元裝置可以通過檔案系統節點來訪問,比如 dev tty1等。這...

Linux裝置驅動之字元裝置(三)

在linux裝置驅動之字元裝置 一 中學習了裝置號的構成,裝置號的申請與釋放。在linux裝置驅動之字元裝置 二 中學習了如何建立乙個字元裝置,初始化,已經註冊到系統中和最後釋放該字元裝置。本節將結合前兩節學到的知道,編寫乙個簡單的字元裝置驅動。最後總結一下字元裝置驅動的模型。include inc...