打印
[嵌入式linux]

初学驱动,遇到一点问题

[复制链接]
2346|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wanyiba|  楼主 | 2007-3-28 18:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    下面是测试程序,在调用open之后,就看不到printf函数的输出了,也就是说能看到输出的Before open,却看不到After open!,既然能打印出Before open,串口设置应该没问题。可是不知为什么调用open函数之后,就看不到printf的输出了。而且open函数中的printk("<1>Here is led_open "); 也只是打印出了"H?",而不是期望的"Here is led_open"。
    麻烦大虾帮忙分析一下啊。

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>


int main(void)
{
 int i=10,fd;
 rgdata=0xffffffff;
 printf("Before open ");
 if((fd=open("/dev/leddrv",O_RDWR))==-1) {
  printf("open error ");
  exit(1);
 }
 printf("After open! ");
 while(i--) {
  rgdata=~rgdata;
  sleep(1);
 }
 close(fd);
 return 0;
}

驱动程序中的open函数如下:
static int led_open(struct inode *inode,struct file *file)
{
 printk("<1>Here is led_open ");
 rPUPE = 0xffff; //Disable pullup resister
 rPCONE=0x500; //Set PE5,PE6 to output
 return 0;
}

相关帖子

沙发
wanyiba|  楼主 | 2007-3-29 16:39 | 只看该作者

无人能解吗?555555555555555

使用特权

评论回复
板凳
duanjiquan| | 2007-4-8 14:34 | 只看该作者

看看我写的

static int device_open(struct inode *inode, struct file *file)
  {
   static int counter = 0;
   if(is_device_open)
   return -EBUSY;
   is_device_open++;
   counter++;
   sprintf(msg,"i already told you %d times Hello World! n", counter-1);
   msg_ptr = msg;
   MOD_INC_USE_COUNT;
   return SUCCESS;
  }

使用特权

评论回复
地板
yuanjian79| | 2007-4-8 17:09 | 只看该作者

直接看模块printk输出。

echo 8>/proc/sys/kernel/printk
cat /proc/kmsg&

使用特权

评论回复
5
tp133| | 2007-4-8 20:13 | 只看该作者

是不是printk有问题呀

使用特权

评论回复
6
宇宙飞船| | 2007-4-11 09:21 | 只看该作者

如果用是用VI编辑器,一定是这该死的脚本问题,

俺也碰到过类似的情况,后来上网下了另一个自已喜欢的脚本。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

18

帖子

1

粉丝