设为首页 收藏本站
查看: 267|回复: 0

[经验分享] Linux驱动:内核延时测试

[复制链接]

尚未签到

发表于 2016-1-25 09:14:43 | 显示全部楼层 |阅读模式
Linux驱动:内核延时测试




本文博客链接:
http://blog.csdn.net/jdh99
,作者:jdh,转载请注明.



环境:

主机:Fedora12

目标板:MINI6410

目标板LINUX内核版本:2.6.38



实现功能:

延迟2S



方法1:利用系统全局变量jiffies

jiffies记录系统节拍,每一次节拍,内核时钟中断函数会将jiffies加1.

HZ在ARM中为100,表示1S被分为100份,系统每个节拍为10ms.

修改上篇《linux驱动编写:LED驱动测试》中的ioctl函数,测试延时


//功能:ioctl操作函数//返回值:成功返回0static long led_driver_ioctl(struct file *filp, unsigned int cmd, unsigned long arg){unsigned int temp = 0;unsigned long t = 0;temp = readl(S3C64XX_GPKDAT);if (cmd == 0){temp &= ~(1 << (arg + 3));}else{temp |= 1 << (arg + 3);}//等待2St = jiffies;while (time_after(jiffies,t + 2 * HZ) != 1);writel(temp,S3C64XX_GPKDAT);printk (DEVICE_NAME"\tjdh:led_driver cmd=%d arg=%d jiffies = %d\n",cmd,arg,jiffies);return 0;}这个方法会使内核忙等待,会影响系统效率.


2.利用宏ndelay(n),延时ns

udelay(n),延时us

mdelay(n),延时ms

这个简单,不做介绍



3.利用内核进行延时

long sleep_on_timeout(wait_queue_head 8q,long time_out);

long interruptible_sleep_on_timeout(wait_queue_head 8q,long time_out);

第2个与第1个相比差别在于会被中断唤醒。调用这两个函数,内核会阻塞当前进程,将其放入等待队列,等待时间到。

代码:


//功能:ioctl操作函数//返回值:成功返回0static long led_driver_ioctl(struct file *filp, unsigned int cmd, unsigned long arg){unsigned int temp = 0;//unsigned long t = 0;wait_queue_head_t wait;temp = readl(S3C64XX_GPKDAT);if (cmd == 0){temp &= ~(1 << (arg + 3));}else{temp |= 1 << (arg + 3);}//等待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);return 0;}


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-169063-1-1.html 上篇帖子: linux内存使用的困惑 下篇帖子: CentOS 5与6的启动流程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表