Linux驅動 訊號量同步測試

2021-08-26 13:50:24 字數 2012 閱讀 6595

linux驅動:訊號量同步測試

環境:

主機:fedora12

目標板:mini6410

目標板linux核心版本:2.6.38

訊號量主要函式:

//定義訊號量

struct semaphore sem;

//初始化訊號量

void sema_init(struct semaphore *sem,int val);

//獲得訊號量,會導致睡眠,不可在中斷中使用

void down(struct semaphore *sem);

//獲得訊號量,能被訊號打斷,返回0表示正常返回,返回-eintr表示被訊號打斷

intdown_interruptible(struct semaphore *sem);

//嘗試獲得訊號量sem,如果能夠立即獲得,返回0,否則返回非0值,它不會導致呼叫者睡眠,可以在中斷上下文使用

intdown_trylock(struct semaphore *sem);

//釋放訊號,喚醒等待者

void up(struct semaphore *sem);

測試**:

#include #include #include //#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define device_name "led_driver" #define t_majors 700 static struct cdev fun_cdev; static dev_t dev; static struct class *led_class; struct semaphore sem; //功能:初始化io static void init_led(void) //功能:ioctl操作函式 //返回值:成功返回0 static long led_driver_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) temp = readl(s3c64xx_gpkdat); if (cmd == 0) else //等待2s //t = jiffies; //while (time_after(jiffies,t + 2 * hz) != 1); init_waitqueue_head(&wait); sleep_on_timeout(&wait,2 * hz); writel(temp,s3c64xx_gpkdat); printk (device_name"\tjdh:led_driver cmd=%d arg=%d jiffies = %d\n",cmd,arg,jiffies); //釋放訊號量 up(&sem); return 0; } static struct file_operations io_dev_fops = ; static int __init dev_init(void) device_create(led_class, null, dev, null, "led_driver"); //初始化訊號量 sema_init(&sem,1); return ret; } static void __exit dev_exit(void) module_init(dev_init); module_exit(dev_exit); module_license("gpl"); module_author("jdh");

測試

用/article/details/7178741中的測試程式進行測試:

開啟兩個程式,同時開啟,雙程序同時操作led

同步 訊號量

include stdafx.h include includeusing namespace std int number 1 定義全域性變數 handle hsemaphore 定義訊號量控制代碼 unsigned long stdcall threadproc1 void lp long co...

Linux 訊號量同步程式設計

前一篇文章概述了linux 系統中訊號量互斥程式設計,這篇文章正好是前一篇的姊妹篇 訊號量同步。說它們是姊妹篇是因為它們都是利用了核心的訊號量機制實現了程序間的通訊。因為兩者所解決的問題不同,因此它們使用的場景就會有所區別。訊號量互斥主要解決的問題是 程序間需要同時訪問某種資源,但是它們對資源的操作...

Linux 執行緒同步 訊號量

linux 執行緒同步訊號量 訊號量用於多執行緒多工同步,乙個執行緒完成了某乙個動作後就通過訊號量告訴其他執行緒再進行某些動作,其他執行緒在等待某乙個執行緒時會阻塞。init sem t sem sem init sem,0,0 函式原型如下 int sem init sem t sem,intps...