Welcome 微信登录

首页 / 操作系统 / Linux / Linux驱动:内核延时测试

环境:主机:Fedora 12目标板:MINI6410目标板LINUX内核版本:2.6.38
实现功能:延迟2S 方法1:利用系统全局变量jiffiesjiffies记录系统节拍,每一次节拍,内核时钟中断函数会将jiffies加1.HZ在ARM中为100,表示1S被分为100份,系统每个节拍为10ms.修改上篇《Linux驱动编写:LED驱动测试》(见 http://www.linuxidc.com/Linux/2012-01/51818.htm)中的ioctl函数,测试延时[cpp]
  1. <span style="font-family:"Arial Black";font-size:18px;">//功能:ioctl操作函数   
  2. //返回值:成功返回0   
  3. static long led_driver_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)  
  4. {  
  5.     unsigned int temp = 0;  
  6.     unsigned long t = 0;  
  7.       
  8.     temp = readl(S3C64XX_GPKDAT);  
  9.     if (cmd == 0)  
  10.     {  
  11.         temp &= ~(1 << (arg + 3));  
  12.     }  
  13.     else  
  14.     {  
  15.         temp |= 1 << (arg + 3);  
  16.     }  
  17.   
  18.     //等待2S   
  19.     t = jiffies;  
  20.     while (time_after(jiffies,t + 2 * HZ) != 1);  
  21.     writel(temp,S3C64XX_GPKDAT);  
  22.   
  23.     printk (DEVICE_NAME" jdh:led_driver cmd=%d arg=%d jiffies = %d ",cmd,arg,jiffies);  
  24.       
  25.     return 0;  
  26. }</span>  
这个方法会使内核忙等待,会影响系统效率. 2.利用宏ndelay(n),延时nsudelay(n),延时usmdelay(n),延时ms这个简单,不做介绍