免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3009 | 回复: 10
打印 上一主题 下一主题

printk的问题 [复制链接]

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-03 15:59 |只看该作者 |倒序浏览
30可用积分
printk可以在进程“上下文”和中断“上下文”使用。
什么叫中断上下文呢?进程中关(软)中断,算什么上下文?
不废话了。说点实际的,printk的输出的最少保证条件是什么?输出到哪里?关硬中断或软中断的情况下,信息能输出到串口终端吗?

最佳答案

查看完整内容

说点实际的,printk的输出的最少保证条件是什么?输出到哪里?关硬中断或软中断的情况下,信息能输出到串口终端吗?==================================A: printk输出的最少保证条件是你有输出设备且系统没挂掉。它可以输出到VGA framebuffer也可以通过串口输出。硬软中断的关闭是否能输出到串口,要视你串口的驱动是否使用了中断功能。 30分,拿来吧,美女

论坛徽章:
0
2 [报告]
发表于 2012-02-03 15:59 |只看该作者
说点实际的,printk的输出的最少保证条件是什么?输出到哪里?关硬中断或软中断的情况下,信息能输出到串口终端吗?

==================================
A: printk输出的最少保证条件是你有输出设备且系统没挂掉。它可以输出到VGA framebuffer也可以通过串口输出。硬软中断的关闭是否能输出到串口,要视你串口的驱动是否使用了中断功能。 30分,拿来吧,美女

论坛徽章:
0
3 [报告]
发表于 2012-02-04 10:01 |只看该作者

printk可以在进程“上下文”和中断“上下文”使用。
什么叫中断上下文呢?进程中关(软)中断,算什么上下文?
不废话了。说点实际的,printk的输出的最少保证条件是什么?输出到哪里?关硬中断或软中断的情况下,信息能输出到串口终端吗?
这个问题做个试验就可以验证了哇,下面给出我给你的验证过程:只截取了部分代码,

在中断上下文中使用:
  1.     if (request_irq(virq, Uart_int_irq, 0, "Serial_com_irq", NULL)) {  //申请中断处理函数
  2.         printk(KERN_ERR "Serial_com: Serial_com_irq allocation failed\n");
  3.     }
复制代码
  1. static irqreturn_t Uart_int_irq(int irq,void *data)
  2. {
  3. printk(KERN_ALERT"recv_data=%u",tmp8);//每次中断的时候打印出接受到的数据,我在调试的时候可以打印出来,当进入到中断处理函数的时候就成为中断上下文
  4. }
复制代码
在进程上下文中使用:
  1. static struct file_operations serial_com_fops = {
  2.         ioctl: serial_com_ioctl,
  3.     llseek: NULL,
  4.     read: serial_com_read,
  5.     write: serial_com_write,//提供给用户一个写设备的接口
  6.     mmap: NULL,
  7.     poll:serial_com_poll,
  8.     open: serial_com_open,
  9.     release: serial_com_release,
  10. };
复制代码
  1. static ssize_t serial_com_write(struct file * file, const char * buf, size_t count, loff_t *ppos)
  2. {
  3.         dev_minor=*(int *)(file->private_data);
  4.         printk("write dev_minor=%d\n",dev_minor);//打印出设备号,这就是在进程上下文,当你调用驱动提供的这个写接口的时候,陷入到内核态的时候其实用的就是当前进程的上下文
  5. }
复制代码
对于关中断下当然也可以使用,举个最简单的例子:
  1. raw_local_irq_disable();//关中断,有实时补丁的情况下关当前处理器的中断
  2. printk(KERN_ALERT"start to update .......\n");//调用printk,显示是可以打印,这个我在以前的驱动中也用过
  3. raw_local_irq_restore();//开中断
复制代码

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
4 [报告]
发表于 2012-02-04 11:31 |只看该作者
回复 2# chenrvmldd


    额, 我是说在关了之后没开的情况下。并且假设一直不开。
一个类似的例子,关(软)中断后访问空指针。

论坛徽章:
0
5 [报告]
发表于 2012-02-04 12:21 |只看该作者
回复 3# smalloc


    一样的。。。。

论坛徽章:
0
6 [报告]
发表于 2012-02-04 12:23 |只看该作者
回复 3# smalloc


    我写的那个内核模块是个特殊的模块,就是一直处于关中断状态,调用了N多的printk语句,都可以。。。。

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
7 [报告]
发表于 2012-02-04 13:13 |只看该作者
回复 5# chenrvmldd


    一般芯片通信都是要使用中断的。除非只使用IO指令的还差不多,否则根本不可能有打印信息,
怀疑你的信息是开中断之后才冒出来的。

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
8 [报告]
发表于 2012-02-04 22:37 |只看该作者
本帖最后由 amarant 于 2012-02-04 22:56 编辑

两位的头像都很好看
说说我的见解,只凭印象,不一定对。
我记得关了中断就跟电脑卡住了一样,是不会有响应的。
printk是把要打印的内容放在一个缓存区里面,等待适当的时机触动IO打印出来

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
9 [报告]
发表于 2012-02-04 22:38 |只看该作者
printk是直接写到console的buffer里去,写的过程不需要中断。至于显示的时候要不要中断,可以看看console_init()有没有register中断。我的印象好像是不需要中断。新一点的平台,其外设都能在没有cpu的干预情况下独立工作

论坛徽章:
0
10 [报告]
发表于 2012-02-06 16:23 |只看该作者
chenrvmldd 发表于 2012-02-04 12:23
回复 3# smalloc


我写的那个内核模块是个特殊的模块,就是一直处于关中断状态,调用了N多的printk语句,都可以。。。。
===================
你可以的,如果是单处理器,你这样暴力,系统还能响应吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP