nuc977 新字元驅動 led

2021-10-07 21:36:49 字數 3490 閱讀 7529

drv_newcharled.c

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // copy_from_user

#define newchrled_cnt 1 /* 裝置號個數 */

#define newchrled_name "newchrled" /* 名字 */

#define ledoff 0 /* 關燈 */

#define ledon 1 /* 開燈 */

/* newchrled 裝置結構體 */

struct newchrled_dev;

struct newchrled_dev newchrled; /* led 裝置 */

static int nuc977_led_open(struct inode *ino, struct file *file)

static int nuc977_led_release(struct inode *ino, struct file *file)

/*static long nuc977_led_ioctl(struct file *file, unsigned int command , unsigned long arg)

else

return 0; }

*/static long nuc977_led_ioctl( struct file *files, unsigned int cmd, unsigned long arg)

case ledon:

}return 0;}/*

102 * @description : 向裝置寫資料

103 * @param – filp : 裝置檔案,表示開啟的檔案描述符

104 * @param - buf : 要寫給裝置寫入的資料

105 * @param - cnt : 要寫入的資料長度

106 * @param – offt : 相對於檔案首位址的偏移

107 * @return : 寫入的位元組數,如果為負值,表示寫入失敗

108 */

static ssize_t nuc977_led_write(struct file *filp, const char __user *buf,size_t cnt, loff_t *offt)

ledstat = databuf[0]; /* 獲取狀態值 */

if(ledstat == ledon) else if(ledstat == ledoff)

return 0;

}/* 裝置操作函式 */

static struct file_operations newchrled_fops = ;

static int __init nuc977_led_init(void)

gpio_direction_output(nuc970_pb0,1);

/* 註冊字元裝置驅動 */

/* 1、建立裝置號 */

if (newchrled.major)

else

printk("newcheled major=%d,minor=%d\r\n",newchrled.major,newchrled.minor);

/* 2、初始化 cdev */

newchrled.cdev.owner = this_module;

cdev_init(&newchrled.cdev, &newchrled_fops);

/* 3、新增乙個 cdev */

cdev_add(&newchrled.cdev, newchrled.devid, newchrled_cnt);

/* 4、建立類 */

newchrled.class = class_create(this_module, newchrled_name);

if (is_err(newchrled.class))

/* 5、建立裝置 */

newchrled.device = device_create(newchrled.class, null,

newchrled.devid, null, newchrled_name);

if (is_err(newchrled.device))

printk(kern_info "nuc977_led_init module initialized\n");

return 0;

}static void __exit nuc977_led_exit(void)

module_init(nuc977_led_init);

module_exit(nuc977_led_exit);

module_license("gpl");

makefile

obj-m := drv_newcharled.o

pwd := $(shell pwd)

kdir ?= /home/hbin/nuc977_bsp/nuc970bsp/linux-3.10.x

all:

$(make) -c $(kdir) m=$(pwd)

clean:

rm -rf .*.cmd *.o *.mod.c *.ko

#include #include #include #include #include "sys/types.h"

#include "sys/stat.h"

#include "fcntl.h"

#include "string.h"

#define ledon 1

#define ledoff 0

int main(int argc, char *ar**)

filename=ar**[1];

fd = open(filename, o_rdwr); // 開啟裝置

if (fd < 0)

databuf[0] = atoi(ar**[2]); /* 要執行的操作:開啟或關閉 */

/* 向/dev/led 檔案寫入資料 */

retvalue = write(fd, databuf, sizeof(databuf));

if(retvalue < 0)

retvalue = close(fd); /* 關閉檔案 */

if(retvalue < 0)

return 0;

}

securecrt

~ # ifconfig eth0 192.168.0.4 up

nuc970-emac0 nuc970-emac0: eth0 is opened

~ # mount -t nfs -o nolock 192.168.0.199:/home/hbin/nfs /mnt

nuc977 新增EC20 4G 網絡卡

核心版本 linux 3.10 在 drivers usb serial option.c新增 static const struct usb device id option ids quectel uc15 quectel uc20 quectel ec20 quectel ec25 ec20 ...

LED字元裝置驅動

一 實驗環境 開發機環境 作業系統 ubuntu 10.10 交叉編譯環境 arm linux gcc 4.4.1,安裝位置 usr local arm 4.4.1 6410板子核心原始碼路徑 work linux 2.6.36.2 v1.05 目標板環境 ok6410 a linux2.6.36 ...

LED驅動字元模型

include include include include include include include include include include define device name leds 載入模式後,執行 cat proc devices 命令看到的裝置名稱 define led...