linux下LED驅動開發(簡單明瞭)

2021-06-29 14:44:50 字數 1935 閱讀 4563

很久以前搞的東西,現在寫一下,當儲存一下。

先是驅動檔案led_drv.c

#include#include#include#include#include#include#include #include#define gpio5_oe 0x49056034

volatile unsigned long *gpio5_oe = null;

volatile unsigned long *gpio5_datain = null;

volatile unsigned long *gpio5_dataout = null;

int major;

static struct class *myclass;

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

static ssize_t myled_read(struct file *file, char __user *buf,

size_t count, loff_t * ppos)

static ssize_t myled_write(struct file *file, const char __user *buf,

size_t count, loff_t * ppos)

else

return 0; }

static const struct file_operations myled_fops =

;static int __init myled_init(void)

static void __exit myled_cleanup (void)

module_init(myled_init);

module_exit(myled_cleanup);

module_license("gpl");

makefile 生成模組

kernel_dir = /home/tenyee/omap_prj/psp/linux-2.6.37-psp04.02.00.07.sdk

pwd := $(shell pwd)

all:

make -c $(kernel_dir) m=$(pwd) modules

obj-m := first_drv.o

clean:

rm -rf ./*o*

執行命令:insmod first_drv.ko 

就把模組裝到系統中了!

這裡提一下,對於裸機微控制器,也有操作io,而且很簡單,而在這裡,其實也很簡單。微控制器與作業系統進行io操作有什麼不一樣?記住下面一點:

微控制器是直接操作實體地址的,而系統是操作虛擬位址的,所以,如果你想通過系統來操作乙個實體地址,那就得先把物理位址對映到系統的虛擬位址中去,很簡單,乙個函式就好:iomap(),然後你操作返回的位址就相當於操作實體地址了,這一部分和微控制器就是一樣的了!!!!!

測試檔案:

//#include#include#include#include#include/*

usage:

./first_drv */

int main(int argc,char *argv)

printf("open succeed\n");

if (argc != 2)

if (0 == strcmp(argv[1],"on"))

val = 1;

else

val = 0;

write(fd, &val, sizeof(val));

close(fd);

return 0;

}

編譯:arm-none-linux-gnueabi-gcc -static -o main main.c

驅動開發3 簡單的led驅動

一 字元裝置驅動框架 字元裝置驅動的編寫主要就是驅動對應的open close read。其實就是file operations結構體的成員變數的實現。二 驅動模組的載入與解除安裝 1 linux驅動程式有兩種存在形式 編譯到kernel裡面,也就是zimage 編譯為模組,ko。tip 1 編譯驅...

Linux驅動開發 LED流水燈驅動示例

include include include include include include include include include include include include include include define device name flowled define led ...

linux驅動之 led驅動

練手,第乙個字元驅動.用模組載入方法 華清遠見 嵌入式linux裝置驅動開發詳解 的 拿來改的.編譯過程發現很多錯誤.最後發現 這本書帶的驅動 都是基於linux2.4的.目前我用的linux2.6,部分需要做修改.我的板子是 友善之臂的 2410.vmware ubuntu nfs交叉編譯 首先 ...