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...