Linux �� SCSI ��ȯ�Ԥ����ϡ��Ť������ɤ��äƤ����Ƥ���Ȥϸ¤�ޤ��� �������äơ��������줿�ǿ��� Linux �����ͥ�ʳ��Ǥ� (MCC��SLS�� Yggdrasil �ʤɤΥѥå������Ϻǿ������ͥ뤫��1�Ĥ���12�Ĥ�Ť���礬 ����ޤ�) �����褬�Բ�ǽ�ʾ�礬����ޤ��� �Ǥ����顢�Х���ݡ��Ȥ��������ˡ��������줿�ǿ��Υ����ͥ�Ǥ� �������꤬�����뤫�ɤ����Τ���Ʋ�������
�����ͥ��С�����åפ�����Ǥ⡢�ޤ�����ʸ���褯�ɤ����Ǥ⡢ �ޤ��Х���¸�ߤ���ȿ���������ˤϡ�Linux ���� �ꥹ�Ȥ� SCSI ����ͥ�˥Х���ݡ��Ȥ����äƤ��������� �����ˤ� Linux SCSI �ɥ饤�Фκ����˶��Ϥ��Ƥ���¿���ο͡������ä��Ƥ��ޤ���
�Х���ݡ��Ȥˤϡ� �ϡ��ɥ������������֡��Ȼ��� Linux ��ɽ���������Τʥ�å������� ���顼��ȯ�������硢����˥��顼��¸�ߤ��륽���������ɤΰ��� �ʤɡ��ʤ�٤�¿���ξ����Ƥ��������� ��å������μ��� �� <tt>panic()</tt> �ΰ��֤����ꤹ�� �˵��Ҥ���Ƥ����³���˽��äƤ���������
����¤ξ�������ʤ��ȡ���ȯ�Ԥ��������äƿ��Ǥ����ꡢ ¾������������뤳�Ȥ������פ���Ƚ�Ǥ��뤳�ȤˤʤäƤ��ޤ����� ����ޤ���
�פ���ˡ��桹���Х���Ƹ������뤳�Ȥ��Ǥ��ʤ���硢 �ɤ������������Τ������Ū�˻�Ŧ���Ƥ���ʤ���С� �Х��������뤳�ȤϤǤ��ʤ��Ȥ������ȤǤ���
�����ͥ��å��������������ƥ��¹Ԥ��Ƥ��ʤ����:
/proc
�ե����륷���ƥब�ޥ���Ȥ���Ƥ��뤳�Ȥ�Τ����
����������
grep proc /etc/mtab
/proc
�ե����륷���ƥब�ޥ���Ȥ���Ƥ��ʤ���С��ޥ����
���Ƥ���������
mkdir /proc
chmod 755 /proc
mount -t proc /proc /proc
�����ͥ�ΥС������ȥ�å�����������ե�����˥��ԡ����ޤ���
cat /proc/version > /tmp/log
cat /proc/kmsg >> /tmp/log
1�ä���2�ø�� CNTRL-C ���ǤäƤ���������
���������ƥ��¹Ԥ��Ƥ����硢Ŭ���ʥ����ե����� (�����ե������
����� /etc/syslog.conf
�ˤ���ޤ�) ����������
dmesg
���ޥ�ɤ���Ѥ��Ƥ���������
Linux ����ư���Ƥ��ʤ���硢DOS ��ǥե��åԡ��ǥ�������ե����ޥå�
���Ƥ���������RAM �ɥ饤�֤ǤϤʤ����롼�ȥǥ������åȤ�ľ�ܥޥ����
����ѥå�������ȤäƤ�����ˤϡ��롼�ȤȤ��ƥޥ���Ȥ����ɥ饤��
�ʳ����ɤ߽�ǽ�ʥǥ������åȤ��Ѱդ��뤫��
ramdisk
�֡��ȥ��ץ����λ��Ѥ�ɬ�פǤ��뤳�Ȥ�
���դ��Ʋ�������
Linux ��ѥå������Υ֡��ȥե��åԡ�����֡��Ȥ��ޤ����Ǥ���Х��� �桼���⡼�ɤ� RAM �ɥ饤�֤�롼�ȤȤ��ƥޥ���Ȥ��Ƥ��������������ơ�
mkdir /tmp/dos
�Ȥ������ä��ե����ޥåȤ����ǥ������åȤ����������ޥ���Ȥ��Ƥ���������
mount -t msdos /dev/fd0 /tmp/dos
���뤤��
mount -t msdos /dev/fd1 /tmp/dos
�Ȥ��ޤ���
�����ե������ե��åԡ��˥��ԡ����ޤ���
cp /tmp/log /tmp/dos/log
DOS �ե��åԡ���ޥ���Ȥ��ޤ���
umount /tmp/dos
������ Linux ��åȥ����ޤ���
shutdown now
��֡��Ȥ��� DOS ��ư�������ߤ��̿����եȤ�Ȥäƥ����ե������ ��뤷�Ƥ���������
panic()
�ΰ��֤����ꤹ��
¾�� Unix ��Ʊ���褦�ˡ�Linux ����̿Ū�ʥ��顼��������ȥ����ͥ��
panic()
�ؿ���ƤӽФ��ޤ���¾�� Unix �Ȥϰ�äơ�Linux ��
������åפ��뤤�ϥ���ץǥХ����˥���פ��Ƽ�ưŪ�˥�֡���
���뤳�ȤϤ���ޤ��������ꡢ�桼������ǽ̤����Ȥ��Ǥ���
�褦��ͭ�Ѥʥ��ơ��Ⱦ���Υ��ޥ꤬ɽ������ޤ���
Unable to handle kernel NULL pointer dereference at virtual address c0000004
current->tss,cr3 = 00101000, %cr3 = 00101000
*pde = 00102027
*pte = 00000027
Oops: 0000
EIP: 0010:0019c905
EFLAGS: 00010002
eax: 0000000a ebx: 001cd0e8 ecx: 00000006 edx: 000003d5
esi: 001cd0a8 edi: 00000000 ebp: 00000000 esp: 001a18c0
ds: 0018 es: 0018 fs: 002b gs: 002b ss: 0018
Process swapper (pid: 0, process nr: 0, stackpage=001a09c8)
Stack: 0019c5c6 00000000 0019c5b2 00000000 0019c5a5 001cd0a8 00000002 00000000
001cd0e8 001cd0a8 00000000 001cdb38 001cdb00 00000000 001ce284 0019d001
001cd004 0000e800 fbfff000 0019d051 001cd0a8 00000000 001a29f4 00800000
Call Trace: 0019c5c6 0019c5b2 0018c5a5 0019d001 0019d051 00111508 00111502
0011e800 0011154d 00110f63 0010e2b3 0010ef55 0010ddb7
Code: 8b 57 04 52 68 d2 c5 19 00 e8 cd a0 f7 ff 83 c4 20 8b 4f 04
Aiee, killing interrupt handler
kfree of non-kmalloced memory: 001a29c0, next= 00000000, order=0
task[0] (swapper) killed: unable to recover
Kernel panic: Trying to free up swapper memory space
In swapper task - not syncing
EIP: �Ԥ�16�ʿ� (���ξ�� 19c905) ���α�ᡢ
/usr/src/linux/zSystem.map
��õ���Ƥ��Υ��ɥ쥹�ʲ��ǺǤ��礭��
�����Ĥ��Ƥ���������
0019a000 T _fix_pointers
0019c700 t _intr_scsi
0019d000 t _NCR53c7x0_intr
����ˤ�äƤɤδؿ���¹���� panic()
���ƤФ줿����ʬ����ޤ���
���δؿ���ޤॽ�����ե������ǥХå����ץ����Ĥ��ǥ���ѥ��뤷ľ������
/usr/src/linux/Makefile
���Խ����� -g
���ץ�����
CFLAGS
��������ɲä��ƥ����ͥ����Τ�ѥ��뤷ľ���Ƥ���������
#
# standard CFLAGS
#
�Ĥޤꡢ���ιԤ�
CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -pipe
���Τ褦���ѹ����ޤ���
CFLAGS = -g -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -pipe
�����ͥ��ƹ��ۤ��ޤ���
make clean
make
/etc/lilo.conf
�˥���ȥ��������ƥ����ͥ��֡��ȤǤ���褦��
���ޤ���
image = /usr/src/linux/zImage
label = experimental
������ root �� LILO ��Ƽ¹Ԥ��뤫���֡��ȥե��åԡ���������ޤ���
make zImage
��֡��Ȥ������顼ȯ������ EIP ��Ͽ���ޤ���
script
�����ȡ��뤵��Ƥ����硢�����ư����
�ʲ��ΥǥХå��ε�Ͽ���ץ�����ץȥե�����˵�Ͽ����
�����Τ��ɤ��Ǥ��礦��
���Τ褦�� gdb
��¹Ԥ��ޤ���
gdb /usr/src/linux/tools/zSystem
�����Ƽ��Τ褦�����Ϥ��ޤ���
info line *<your EIP>
�㤨�аʲ��Τ褦�ˡ�
info line *0x19c905
��������� gdb
�ϼ��Τ褦�ʾ������Ϥ��ޤ���
(gdb) info line *0x19c905
Line 2855 of "53c7,8xx.c" starts at address 0x19c905 <intr_scsi+641&>
and ends at 0x19c913 <intr_scsi+655>.
���ξ����Ͽ���Ʋ����������줫��ʲ��Τ褦�����Ϥ��ޤ���
list <line number>
���Τ褦�ʽ��Ϥ�������Ǥ��礦��
(gdb) list 2855
2850 /* printk("scsi%d : target %d lun %d unexpected disconnect\n",
2851 host->host_no, cmd->cmd->target, cmd->cmd->lun); */
2852 printk("host : 0x%x\n", (unsigned) host);
2853 printk("host->host_no : %d\n", host->host_no);
2854 printk("cmd : 0x%x\n", (unsigned) cmd);
2855 printk("cmd->cmd : 0x%x\n", (unsigned) cmd->cmd);
2856 printk("cmd->cmd->target : %d\n", cmd->cmd->target);
2857 if (cmd) {;
2858 abnormal_finished(cmd, DID_ERROR << 16);
2859 }
2860 hostdata->dsp = hostdata->script + hostdata->E_schedule /
2861 sizeof(long);
2862 hostdata->dsp_changed = 1;
2863 /* SCSI PARITY error */
2864 }
2865
2866 if (sstat0_sist0 & SSTAT0_PAR) {
2867 fatal = 1;
2868 if (cmd && cmd->cmd) {
2869 printk("scsi%d : target %d lun %d parity error.\n",
quit
�����Ϥ��� gdb
����ȴ���ޤ���
��ξ���Ͽ���Ƥ�����������ȯ�ԤΥ����ͥ뤬���ʤ��Υ����ͥ�Ȱ�ä� ���������Ω�ĥ���ƥ����Ⱦ��������ޤ���