日期:2014-05-16  浏览次数:20738 次

为什么linux会死机?
我由两个问题:

问题一:

在   《linux设备驱动程序》一书中,有个short的并口驱动的例子;

他采用   在write函数中,写0xff到base地址,(并口的9,   10已经短接)来产生

中断;我们知道并口中断是由10(ACK)引脚的上升沿来识别的;

书上的实现是:

ssize_t   short_i_write   (struct   file   *filp,   const   char   *buf,   size_t   count,
                                loff_t   *f_pos)
{
        int   written   =   0,   odd   =   *f_pos   &   1;
        unsigned   long   address   =   short_base;   /*   output   to   the   parallel   data   latch   */

        if   (use_mem)   {
while   (written   <   count)
        writeb(0xff   *   ((++written   +   odd)   &   1),   address);
        }   else   {
while   (written   <   count)
        outb(0xff   *   ((++written   +   odd)   &   1),   address);
        }

        *f_pos   +=   count;
        return   written;
}

这样我的并口中断程序可以正常测试中断的产生;

我的改动后的实现是:

ssize_t   short_i_write   (struct   file   *filp,   const   char   *buf,   size_t   count,
                                loff_t   *f_pos)
{
        int   written   =   0,   odd   =   *f_pos   &   1;
        unsigned   long   address   =   short_base;   /*   output   to   the   parallel   data   latch   */

        if   (use_mem)   {
while   (written   <   count)
        writeb(0xff   *   ((++written   +   odd)   &   1),   address);
        }   else   {
while   (written   <   count)
        outb(0xff,   address);
        }

        *f_pos   +=   count;
        return   written;
}

然后我在中断出来程序中,outb(0,   address);

但是这样做之后,每次测试中断的时候,都会死机,   为什么???


问题   二:

怎样查看死机的现场信息呢,因为我都不知道发生什么了啊。。。

我硬件重启后,进/var/log/messages的时候,与之前正常的时候不同,

提示我查看/var/log/.messages等几个选项,   不知道是什么意思?

请知情者,多多赐教!




------解决方案--------------------
/var/log/messages是附加写的,如果你启动输出太多,肯定会把前面写的东西给覆盖掉的。