#include
#include
#include
#include
#include
#include
#include
#include
// #include
#define led_major 200
#define led_name "new_led"
/*暫存器實體地址*/
#define ccm_ccgr1_base (0x020c406c)
#define sw_mux_gpio1_io03_base (0x020e0068)
#define sw_pad_gpio1_io03_base (0x020e02f4)
#define gpio1_dr_base (0x0209c000)
#define gpio1_gdir_base (0x0209c004)
/*虛擬位址指標*/
static
void __iomem *ccm_ccgr1;
static
void __iomem *sw_mux_gpio1_io03;
static
void __iomem *sw_pad_gpio1_io03;
static
void __iomem *gpio1_dr;
static
void __iomem *gpio1_gdir;
#define led_on 0
#define led_off 1
/*裝置結構體*/
struct new_led_devnew_led;
void
led_switch
(u8 data)
else
if(data == led_off)
}static ssize_t new_led_write (
struct file *file,
const
char __user *buf, size_t count, loff_t *ppos)
led_switch
(data_buf[0]
);return0;
}static
int new_led_release (
struct inode *inode,
struct file *file)
static
const
struct file_operations new_led_fops =
;/*驅動入口*/
static
int __init new_led_init
(void
)else
if(tmp <0)
printk
("led dev major id : %d minor : %d\r\n"
,new_led.major,new_led.minor)
;/*3.註冊字元裝置*/
new_led.cdev.owner = this_module;
cdev_init
(&new_led.cdev,
&new_led_fops)
;//將字元裝置操作集傳遞給cdev結構體中的fops
cdev_add
(&new_led.cdev,new_led.devid,1)
;//新增裝置到linux核心中
/*4.自動建立裝置節點*/
new_led.class =
class_create
(this_module,led_name)
;//建立乙個類if(
is_err
(new_led.class)
) new_led.device =
device_create
(new_led.class,
null
,new_led.devid,
null
,led_name)
;//建立乙個裝置節點if(
is_err
(new_led.device)
)return0;
}static
void __exit new_led_exit
(void
)/*註冊模組*/
module_init
(new_led_init)
;module_exit
(new_led_exit)
;module_license
("gpl");
module_author
("nb666"
);
linux驅動(一) linux驅動框架
編寫linux驅動先看一下驅動框架是什麼樣子的。驅動編寫和應用層編寫有什麼區別呢?一 首先 入口函式的問題。應用層編寫我們的入口就是main函式,但在驅動編寫時不是這樣的,有兩種情況,1 預設情況下 int init init module void 載入模組時的初始化函式,也就是驅動模組的入口函式...
Linux驅動框架 hwmon
寫在前面的話 對於框架,我覺得就是在一定規範的形式下去實現你要的功能。這裡就涉及到乙個變與不變的地方。你所要實現的功能會是千差萬別的 這就是變的地方,而所謂既定的規範,包括建立目錄和屬性檔案這是linux系統已經為我們做好了的,我們只需要直接拿來引用就ok了。那麼今天,我們就來看看hwmon框架是怎...
Linux 裝置驅動框架
1 驅動框架 linux將所有外部裝置看成是一類特殊檔案,稱之為 裝置檔案 如果說系統呼叫是linux核心和應用程式之間的介面,那麼裝置驅動程式則可以看成是linux核心與外部裝置之間的介面。裝置驅動程式向應用程式遮蔽了硬體在實現上的細節,使得應用程式可以像操作普通檔案一樣來操作外部裝置。在應用程式...