test bingfa program
#include
#include
#include
#include
#include
#include
#include
#include
int main()
;printf("11111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaa/n");
fd=open("/dev/bingfa_5",o_rdwr);
if(fd<0)
else
printf("open success/n");
nwrite=write(fd,buf,strlen(buf));
if(nwrite<0)
printf("/n/n/nnwrite=%d/n",nwrite);
nread=read(fd,read_buf,20);
if(nwrite<0)
else
printf("read is %s/n",read_buf);
//close(fd);
exit(0);}
bingfa program
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#undef lp_stats
#include
#include
#include
#include
//#include
module_license("gpl");
#define reg_name "bingfa_5"
static int global_var=0;
static int globalvar_count=0;
static struct semaphore sem;
static spinlock_t spin=spin_lock_unlocked;
unsigned int fs_major=0;
static ssize_t globalvar_read(struct file *, char *, size_t, loff_t*);
static ssize_t globalvar_write(struct file *, const char *, size_t, loff_t*);
static int globalvar_open(struct inode *inode,struct file *filp);
static int globalvar_release(struct inode *inode,struct file *filp);
struct file_operations globalvar_fops=
;//static int global_var = 0;
static struct semaphore sem;
static int __init globalvar_init(void)
else
return ret;
}static void __exit globalvar_exit(void)
static ssize_t globalvar_read(struct file *filp, char *buf, size_t len, loff_t *off)
//將global_var從核心空間複製到使用者空間
if (copy_to_user(buf, &global_var, sizeof(int)))
//釋放訊號量
up(&sem);
printk("/n/n釋放訊號量 out %d/n/n/n",__line__);
return sizeof(int);
}ssize_t globalvar_write(struct file *filp, const char *buf, size_t len, loff_t *off)
//將使用者空間的資料複製到核心空間的global_var
if (copy_from_user(&global_var, buf, sizeof(int)))
//釋放訊號量
up(&sem);
return sizeof(int);
}static int globalvar_open(struct inode *inode, struct file *filp)
globalvar_count++;
//釋放自選鎖
spin_unlock(&spin);
return 0;
}static int globalvar_release(struct inode *inode, struct file *filp)
module_init(globalvar_init);
module_exit(globalvar_exit);
linux2 6 裝置驅動編寫
從2.6版本開始引入了platform這個概念,在開發底層驅動程式時,首先要確認的就是裝置的資源資訊,例如裝置的位址,在2.6核心中將每個裝置的資源用結構platform device來描述,該結構體定義在kernel include linux platform device.h中,struct ...
Linux 2 6 核心驅動移植
隨著 linux 2.6的發布,由於2.6核心做了教的改動,各個裝置的 驅動程式在不同程度上要進行改寫。為了方便各位linux愛好者我把自己整理的這分文件share出來。該文當列舉了2.6核心同以前版本的絕大多數變化,可惜的是由於時間和精力有限沒有詳細列出各個函式的用法。1 使用新的入口 必須包含 ...
Linux2 6核心下簡單的字元裝置驅動及測試
linux2.6核心下的簡單字元裝置 1.自定裝置符結構體 struct virtualdisk 2.宣告函式 裝置驅動模組載入函式 int init virtualdisk init void 模組解除安裝函式 void exit virtualdisk exit void 初始化並註冊 stat...