linux 2 6核心程式設計 裝置驅動中的併發控制

2021-05-21 20:21:49 字數 2701 閱讀 7544

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