1. 程式人生 > >字元裝置驅動控制led燈

字元裝置驅動控制led燈

開發板:龍芯1B

PC:ubuntu13.10

本程式為字元裝置驅動,提供控制led燈功能,如要實現控制需要自己寫應用程式,開啟驅動檔案就可控制led燈,led燈通過gpio控制

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <asm/uaccess.h>
#include <linux/device.h>
#include <linux/types.h>
#include <linux/ioctl.h>
#include <linux/vmalloc.h>
#include <linux/slab.h>
#include <linux/ctype.h>
#include <linux/fcntl.h>
#include <linux/cdev.h>

#define LED_MAJOR 100
#define LED_MINOR 0
#define SET_GPIO (*(volatile unsigned *)0xbfd010C4)
#define SET_OUT (*(volatile unsigned *)0xbfd010D4)
#define SET_LED (*(volatile unsigned *)0xbfd010F4)

struct led_dev
{
	struct cdev cdev;
};

static int my_start (struct inode *, struct file *);
//static ssize_t left (struct file *, char __user *, size_t, loff_t *);

struct class *led_class;
struct led_dev *led_devices;

static struct file_operations led_fops =
{
	.owner = THIS_MODULE,
	.open = my_start,
//	.read = left,
};

static int my_start(struct inode * node, struct file * fil)
{
	SET_GPIO = (SET_GPIO | 0x000000C0);
	SET_OUT = (SET_OUT & ~(0x000000C0));
	SET_LED = (SET_LED & ~(0x000000c0));
	printk("Here is open\n");
	return 0;
}

static int __init led_init(void)
{
	int ret;
	dev_t dev = 0;
	dev = MKDEV(LED_MAJOR, LED_MINOR);
	ret = register_chrdev_region(dev, 1, "led");
	if(ret)
	{
		printk("register_fail\n");
	}else{
		printk("register_succeed\n");
	}
	led_devices = kmalloc(sizeof(struct led_dev), GFP_KERNEL);
	if(led_devices == NULL)
	{
		printk("malloc_fail\n");
	}else{
		printk("malloc_succeed\n");
	}
	memset(led_devices, 0, sizeof(struct led_dev));
	cdev_init(&led_devices->cdev, &led_fops);
	led_devices->cdev.owner = THIS_MODULE;
	led_devices->cdev.ops = &led_fops;
	ret = cdev_add(&led_devices->cdev, dev, 1);

	if(ret)
	{
		printk("add_fail\n");
	}else{
		printk("add_succeed\n");
	}
	led_class = class_create(THIS_MODULE, "led_class");
	device_create(led_class, NULL, dev, NULL, "led");
	return ret;
}

static void __exit led_exit(void)
{
	dev_t devno = MKDEV(LED_MAJOR, LED_MINOR);
	unregister_chrdev_region(devno,1);
	device_destroy(led_class, devno);
	printk("exit_succeed\n");
	class_destroy(led_class);
}

module_init(led_init);
module_exit(led_exit);
MODULE_LICENSE("GPL");

相關推薦

字元裝置驅動控制led

開發板:龍芯1B PC:ubuntu13.10 本程式為字元裝置驅動,提供控制led燈功能,如要實現控制需要自己寫應用程式,開啟驅動檔案就可控制led燈,led燈通過gpio控制 #include <linux/init.h> #include <lin

FL2440字元裝置驅動LED

今天開始我們來學習linux驅動的開發,驅動分為字元裝置驅動,塊裝置,網路裝置驅動,講這個之前我說一下我用的虛擬機器版本和LInux核心版本,開始我用的redhat 9.0  開始用的好好的,到後來自己編譯busybox的時候總是出錯誤,這個期間我嘗試了很多次,在網上也找到

字元裝置驅動----LED驅動程式

一. 概念介紹 一般使用者在應用程式裡呼叫的 open, read, write 函式是 c 庫的函式, 這些函式會觸發 swi val異常,從而引發系統呼叫,進入到核心空間, 核心通過VFS(virtual Filesystem)來實現呼叫不同的驅動函式

CC2530學習路線-基礎實驗-GPIO 控制LED亮滅(1)

內部 執行 了解 toc 平時 如果 繼續 技術 發光二極管 目錄 1.前期預備知識 1.1 新大陸ZigBee模塊LED燈電路 1.2 CC2530相關寄存器 1.3 寄存器操作技巧 1.4 CPU空轉延時 1.4 操作流程圖 2.程序代碼 The End 1.前

字元裝置驅動程式的三種寫法

驅動工程師如何去寫驅動程式? 要看原理圖。確定如何去操作硬體。 對於點亮led燈來說,確定引腳,檢視晶片手冊,確定如何去操作引腳,要設定哪些暫存器,如何設定這些暫存器才可以讓這個引腳輸出高電平或者低電平。 寫驅動程式 驅動程式起封裝作用,如何封裝。應用程式要操作硬體需要o

java操作樹莓派GPIO控制LED--結合springboot實現介面呼叫

1、概述 本文使用java結合springboot實現了對樹莓派GPIO介面的操作以達到控制LED燈的功能 2、pom檔案如下: <project xmlns="http://maven.apache.org/POM/4.0.0"      &nb

rk3399平臺下的字元裝置驅動

最近在搞一款瑞芯微平臺的板子,型號:rk3399 ,這幾天剛剛上手,前幾天一直在搞環境,熟悉這個板子,這個板子跑的Android7.1的系統。在網上開到這塊的東西不是很多,自己也想做個記錄。然後,開始吧:我目前用的板子是葡萄雨科技的,因為這家公司給的資料 很少,之前一直在熟悉這個板子的目錄結構,

arduino學習系列——按鍵控制LED

一、器材 arduino UNO、麵包板、按鍵、連線線 二、連線圖 按鍵的兩邊一邊接地,另一邊與引腳2相連 三、程式碼 #define LED 13 #define INPUT_KEY 2 int val = 0; void setup(){ pinMode(LED,OUTPU

基礎 字元裝置驅動框架

  #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/fs.h> #include <lin

字元裝置驅動(二)按鍵點燈

目錄 字元裝置驅動(二)按鍵點燈 資料互動 實體地址訪問 查詢方式按鍵 測試 title: 字元裝置驅動(二)按鍵點燈 tags: linux date: 2018-11-21 18:06:37 toc: true --- 字元裝置驅動(二)按

字元裝置驅動(一)框架

目錄 字元裝置驅動(一)框架 命令速記 框架結構 資料結構 介面實現 驅動註冊 驅動解除安裝 程式設計 (一)手動建立主裝置號 (二)自動分配主裝置號 (三)自

字元裝置驅動(三)中斷框架

目錄 字元裝置驅動(三)中斷框架 引入 彙編處理 拷貝向量表 向量表巨集解析 跳轉函式 C函式處理 asm_do_IRQ __set_irq_handler s3c24

字元裝置驅動(五)按鍵優化休眠

目錄 字元裝置驅動(五)按鍵優化 按鍵值讀取 休眠讀取 程式設計 測試 title: 字元裝置驅動(五)按鍵優化 tags: linux date: 2018-11-23 17:56:57 toc: true ---

字元裝置驅動(四)按鍵中斷

目錄 字元裝置驅動(四)按鍵中斷 硬體IO 程式設計 中斷配置 中斷關閉 中斷函式 共享中斷號 測試 完整的程式 title: 字元裝置驅動(四)按鍵中斷 tags: linu

《5.linux驅動開發-第3部分-5.3.字元裝置驅動高階》

《5.linux驅動開發-第3部分-5.3.字元裝置驅動高階》 第一部分、章節目錄 5.3.1.註冊字元裝置驅動新介面1 5.3.2.註冊字元裝置驅動新介面2 5.3.3.註冊字元裝置驅動新介面3 5.3.4.註冊字元裝置驅動新介面4 5.3.5.字元裝置驅動註冊程式碼分析1 5.3.6

《5.linux驅動開發-第2部分-5.2.字元裝置驅動基礎》

《5.linux驅動開發-第2部分-5.2.字元裝置驅動基礎》 第一部分、章節目錄 5.2.1.開啟驅動開發之路 5.2.2.最簡單的模組原始碼分析1 5.2.3.最簡單的模組原始碼分析2 5.2.4.最簡單的模組原始碼分析3 5.2.5.用開發板來除錯模組 5.2.6.字元裝置驅動工作

字元裝置驅動(七)按鍵非同步通知

目錄 按鍵驅動方式對比 程序間發訊號 目標 如何讓驅動通知應用 程式編寫 驅動程式 應用程式 完整程式碼如下 測試 title: 字元裝置驅動(七)按鍵非同步通知 tags: linux date: 2018-11-24 16:39:

字元裝置驅動(六)按鍵poll機制

title: 字元裝置驅動(六)按鍵poll機制 tags: linux date: 2018-11-23 18:57:40 toc: true --- 字元裝置驅動(六)按鍵poll機制 引入 在字元裝置驅動(五)按鍵休眠中的App中雖然使用了休眠,但是如果Read沒有返回的話會一直死等,類似阻塞

20 字元裝置驅動相關的函式和引數及實現(虛擬檔案)

字元裝置驅動相關的函式和引數及實現(虛擬檔案) 使用者程序呼叫函式順序: open ---> kernel ---> cdev.ops->open(..) read ---> kernel ---> cdev.ops->read(

19 字元裝置驅動基礎

字元裝置驅動基礎 裝置驅動通常是給使用者程序來呼叫的 最常用的是裝置驅動裡實現字元裝置驅動,實現後在”/dev/”目錄裡提供一個裝置檔案,然後使用者程序就可以通過操作該裝置檔案來呼叫驅動 如pc上的uart裝置檔案: crw-rw—- 1 root dial