QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1340|回复: 3

printk output NOT in /var/log/

[复制链接]
发表于 2004-2-12 13:44:17 | 显示全部楼层 |阅读模式
I am debugging a module like below. I can get the printk output in
/var/log/messages when i insmod and rmmmod. But when i try to open or
ioctl the device, the output of printk doesn't appear in
/var/log/messages.

What did i do wrong? Thanks ahead!
Shu

Below is the code:

...

#define ix_ossl_message_log(arg_pFmtString,args...)
(printk(arg_pFmtString, ## args),IX_SUCCESS)

...

static struct file_operations ix_sa_fops = {
          ioctl: ix_sa_ioctl,
          open: ix_sa_open,
          release: ix_sa_close,
};      

int majorNumber = DEV_NUMBER_SAUTIL;

int init_module(void)
{

    ix_uint32 s_Result;

#ifdef IX_DEBUG
    ix_ossl_message_log("Loading sysapp_common module.\n");
#endif


    s_Result = register_chrdev(majorNumber, DEV_NAME_SAUTIL,
&ix_sa_fops );
    if(s_Result == 0)
    {
        ix_ossl_message_log("UtilDrv Module is registered with
major:%d\n",majorNumber);
            ix_ossl_message_log ("USAGE:\n");
            ix_ossl_message_log ("mknod /dev/%s c %d <minor>\n",
DEV_NAME_SAUTIL, majorNumber);
            ix_ossl_message_log ("with different minor numbers.\n\n");
            
        }
        else
        {
            ix_ossl_message_log( "sysapp_common module cannot be
registered!!!!.\n");
            ix_ossl_message_log("Registered to number
%d\n",majorNumber);
            return -1;
        }

    return 0;
}

void cleanup_module(void)
{
    ix_uint32 s_Result;

#ifdef IX_DEBUG
    ix_ossl_message_log("Unloading sysapp_common module.\n");
#endif

    s_Result = unregister_chrdev(majorNumber, DEV_NAME_SAUTIL);
    if(s_Result == 0)
    {
        ix_ossl_message_log("sysapp_common module cleaned
successfully...\n");
    }
    else
    {
        ix_ossl_message_log("sysapp_common Module COULD NOT BE CLEANED
UP !!!\n");
    }

    return;
}



int ix_sa_open(
    struct inode *sa_inode,
    struct file *sa_file)
{
#ifdef IX_DEBUG
    ix_ossl_message_log("ix_sa_open called.\n");
#endif
    return 0;

}




int ix_sa_close(
    struct inode *sa_inode,
    struct file *sa_file)
{
#ifdef IX_DEBUG
    ix_ossl_message_log("ix_sa_close called.\n");
#endif
    return 0;
}



int ix_sa_ioctl(
    struct inode *sa_inode,
    struct file * sa_file,
    unsigned int cmd,
    unsigned long arg_IoctlPtr)
{
    ix_uint32 s_Result;

#ifdef IX_DEBUG
    ix_ossl_message_log("ix_sa_ioctl called.\n");
#endif

    if (sa_inode == NULL)
    {
#ifdef IX_DEBUG
        ix_ossl_message_log("ix_sa_inode is NULL.\n");
#endif
        return -1;
    }
  
    if (sa_file == NULL)
    {
#ifdef IX_DEBUG
        ix_ossl_message_log("ix_sa_file is NULL.\n");
#endif
        return -1;
    }        

    switch(cmd)
    {
        case SA_START:
            s_Result = _ix_sa_entry((void *)arg_IoctlPtr);
            break;
        case SA_STOP:
            s_Result = ix_sa_shutdown(0);
            break;
          
        default:
#ifdef IX_DEBUG
            ix_ossl_message_log("Undefined ioctl command %d.\n", cmd);
#endif
            s_Result = -1;
            break;
    }

    if (s_Result != 0)
    {
#ifdef IX_DEBUG
        ix_ossl_message_log("ix_sa_ioctl failed.\n");
#endif
    }
    else
    {
#ifdef IX_DEBUG
        ix_ossl_message_log("ix_sa_ioctl succeeded.\n");
#endif
    }

    return s_Result;

}
发表于 2004-2-13 09:39:23 | 显示全部楼层
a. 打印消息受级别的限制,消息级别可以通过printk设置,如:
printk("<n>something"); /* 其中0<=n<=7 */
假设控制台的消息级别为m, 当n<m时消息打印到控制台,否则不打印。
这样一方面可以提高要打印消息本身的级别(数字越小级别越高),
另一方面可以改变控制台的消息级别(可从1到,如改为8可用以下命令:
# echo "8" > /proc/sys/kernel/printk
b. 用dmesg命令看。
c. 当系统运行klogd和syslogd时,内核消息就会由klogd分发到syslogd,
syslogd会根据配置文件/etc/syslog.conf作相应处理,具体可以查看syslogd
和syslog.conf的man页。
回复

使用道具 举报

 楼主| 发表于 2004-2-13 13:13:50 | 显示全部楼层
谢谢你的回答。这些我都检查过了。但我认为和你提的点都没关。

klogd和syslogd都在run;
/etc/syslog.conf也检查过;
printk的不同级别试过1,6,7;
都不行。:-(

注意我用的同样的macro在init_module, clearup_module, 和open, ioctl里。在init_module, clearup_module就打的出来,open, ioctl就打不出来。

我现在怀疑是否open和ioctl真的被call到了,但/dev下的设备文件确实被创建了。
回复

使用道具 举报

发表于 2004-2-15 09:39:41 | 显示全部楼层
你把ix_sa_fops按结构定义顺序重新定义一下,不提供函数的用NULL代替,试试看呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 02:31 , Processed in 0.126826 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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