底板核心板
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...