字元裝置註冊例項

2021-10-23 04:41:14 字數 1610 閱讀 2244

實驗平台:s5pv210開發板 + kernel2.6

功能:驅動三顆led,led1 led2,共用乙個fops,led3單獨使用乙個fops。當open led1/led2 時,led1 和 led2 同時亮,open led3 時, led3亮;release 對應熄滅。

#include #include #include #include #include #include #include #define gpj0con    s5pv210_gpj0con

#define gpj0dat s5pv210_gpj0dat

#define rgpj0con *((volatile unsigned int *)gpj0con)

#define rgpj0dat *((volatile unsigned int *)gpj0dat)

#define led1_off (1 << 3)

#define led2_off (1 << 4)

#define led3_off (1 << 5)

unsigned int major_led1,major_led2;

struct cdev led1;

struct cdev led2;

static int led_01_open(struct inode *inode, struct file *file)

static int led_01_release(struct inode *inode, struct file *file)

struct file_operations led_01_fops = ;

static int lll_open(struct inode *inode, struct file *file)

static int lll_release(struct inode *inode, struct file *file)

struct file_operations lll_fops = ;

int led_gpio_init(void)

int led_register(struct cdev *led, unsigned int *major, unsigned count,const char *name,struct file_operations *led_fops)

int __init hello_init(void)

void __exit hello_exit(void)

module_init(hello_init);

module_exit(hello_exit);

module_license("gpl");

測試函式

#include #include #include #include #include int main(int argc, char const *ar**)

fd = open(ar**[1], o_rdwr);

if(0 > fd)

sleep(5);

close(fd);

return 0;

}

接下來將實現裝置節點自動建立、在/sys目錄下建立資料夾並新增檔案。

linux字元裝置註冊相關函式

本文介紹linux字元裝置註冊相關的四個函式 cdev alloc cdev init cdev add和cdev del。這四個函式在檔案 fs char dev.c中定義,在標頭檔案include linux cdev.h中宣告。其中cdev alloc和cdev init是一對 互斥 函式,以...

Linux 驅動之字元裝置註冊

目的 給空模組新增驅動殼子 核心工作量 file operations及其元素填充 註冊驅動。腦海裡先有框架,知道自己要幹嘛 細節 不需要乙個字乙個字敲,可以到核心中去尋找參考 複製過來改 寫下的所有 必須心裡清楚明白,不能似懂非懂。先定義file operations結構體變數 自定義乙個file...

linux 動態靜態字元裝置註冊

雜項裝置的主裝置號是固定的 是10,當不想固定時,需要自己去申請是靜態裝置註冊,動態的是系統分配 首先來說靜態註冊 include 包含初始化巨集定義的標頭檔案,中的module init和module exit在此檔案中 include 包含初始化載入模組的標頭檔案,中的module licens...