linux驅動程式中的互斥體

2021-07-24 19:02:53 字數 2036 閱讀 4614

互斥體用於控制程序對臨界資源的訪問,

屬於程序級別,

互斥體保護的臨界區可以包含能夠引起程序阻塞的**。

struct mutex mutex; //定義

mutex_init(&mutex); //初始化

void mutex_lock(struct mutex *lock); //獲取互斥體,不能被訊號打斷。

int mutex_lock_interruptible(struct mutex *lock); //獲取互斥體,能被訊號打斷。

int mutex_trylock(struct mutex *lock); //不阻塞,立即返回。

void mutex_unlock(struct mutex *lock); //釋放互斥體

/*

* g_mtex.c

* * created on: 2023年11月21日

* author: chy

*/#include #include #include #include #include #include #include #include #include #include #include #include #include #define buff_size 1024

#define dev_num 2

struct g_mutex;

struct g_mutex *g_buf = null;

static int open_file(struct inode *node,struct file *g_file)

printk(kern_info"開啟檔案\n");

return ret;

}static int close_file(struct inode *node,struct file *g_file)

static ssize_t read_file(struct file *g_file,char __user *buf,size_t size,loff_t *offt)

mutex_unlock(&mutex->mutex); //釋放互斥鎖

return ret;

}static ssize_t write_file(struct file *g_file,const char __user *buf,size_t size,loff_t* offt)

mutex_unlock(&mutex->mutex); //釋放互斥鎖

return ret;

}static long g_ioctl(struct file *g_file,unsigned cmd,unsigned long ctl)

return 0;

}struct file_operations file_ops = ;

struct cdev dev = ;

dev_t dev_no;

struct class *dev_class = null;

static int g_mutex_init(void)

for(i = 0; i < dev_num; i++)

/*建立裝置檔案*/

dev_class = class_create(this_module,"mutex_device");

device_create(dev_class,0,mkdev(major(dev_no),0),0,"mutex_dev_0");

device_create(dev_class,0,mkdev(major(dev_no),1),0,"mutex_dev_1");

printk(kern_info"載入\n");

return ret;

}static void g_mutex_exit(void)

module_license("gpl v2");

module_init(g_mutex_init);

module_exit(g_mutex_exit);//解除安裝

linux 驅動程式 高階字元驅動程式

ioctl方法 驅動程式的原型實現 int ioctl struct inode inode,struct file filp,unsigned int cmd,unsigned long arg ioctl 命令選擇 位段結構 number direction ioc read ioc write...

Linux驅動程式中THIS MODULE 的定義

struct module 我們插入乙個核心模組,一般會使用工具insmod,該工具實際上呼叫了系統呼叫init module,在該系統呼叫函式中,首先呼叫load module,把使用者空間傳入的整個核心模組檔案建立成乙個核心模組,返回乙個struct module結構體。核心中便以這個結構體代表...

Linux中驅動程式的分析

核心中字元裝置結構體的定義 struct cdev linux核心對檔案操作file operations結構體的定義 struct file operations file operations 成員大部分是檔案指標,裝置不支援的指標置為null。驅動程式的檔案操作編寫如下 struct file...