사용자가 커널 패닉의 원인을 화면에 표시할 수 있나요?
답변1
Linux는 화면 정의에 따라 화면에 패닉 덤프를 수행합니다.
Linux가 실제로 하는 일은 시스템 콘솔에 덤프하는 것뿐입니다. 일반적으로 이는 화면이지만 직렬 콘솔(또는 다른 곳)일 수도 있습니다.
그러나 대부분의 사람들은 데스크탑에서 X를 실행합니다. 이는 콘솔이아니요화면에는 프레임버퍼가 있습니다. 이 경우 Linux를 프레임 버퍼에 덤프해야 하는데, 이것이 실제로 당신이 찾고 있는 것이라고 생각됩니다.
당신은 하나를 가지고 있어서 행운입니다이에 전념하는 프로젝트우분투에서. 이 프로젝트가 얼마나 진행되었는지는 모르겠지만 유망해 보이며 여기서부터 시작해야 합니다.
답변2
면책조항: 귀하가 다음과 같이 말했기 때문에 이 답변을 게시했습니다.구함콘키. 오류 메시지 등이 아닌 실제 커널 패닉에 대해 이야기하는 경우 커널이 패닉에 너무 바빠서 다른 작업을 수행할 수 없기 때문에 이는 작동하지 않습니다.
conky
배포판 저장소에 있어야 하므로 설치가 간단합니다. 이 작업을 완료한 후에는 파일을 만들어야 합니다 ~/.conkyrc
. 내 것은 좀 더 복잡합니다. 다음은 .conkyrc
마지막 8줄을 멋진 형식으로 표시하는 최소한의 작업입니다.dmesg
double_buffer yes
background yes
update_interval 1
total_run_times 0
own_window yes
own_window_type desktop
own_window_transparent yes
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
minimum_size 230 5
maximum_width 230
gap_x 1365
gap_y 40
TEXT
${execpi 3 dmesg |tail -n8}
하지만 이것은 약간 보기 흉해 보이기 때문에 출력 형식을 지정하고 긴 줄을 축소하고 동일한 메시지에서 줄을 그룹화하기 위해 들여쓰기하는 스크립트가 있습니다. 이를 사용하려면 아래 스크립트를 다음과 같이 저장하고 ~/bin/conkyLogging
실행 가능하게 만든 다음 chmod a+x ~/bin/conkyLogging
마지막 줄을 다음과 같이 변경하십시오.
${execpi 3 dmesg |tail -n8 | /home/USERNAME/scripts/conkyLogging.pl}
스크립트는 다음과 같습니다
#!/usr/bin/env perl
my $lim=32;
my @a;
while(<>){/.*?\]\s*(.+)$/;
push @a,$1;
}
my $k;
for($n=$#a;$n>=0; $n--){
$_=$a[$n];
@c=split(/[\s]+/);
@b=split(//);
my $k=0;
my $kk=0;
print " ";
for($i=0;$i<=$#b; $i++){
$_=$b[$i];
if (/^\s+$/){
$k+=length($c[$kk+1]);
$kk++ ;
}
if($k>$lim){
s/([=,\-\s])/$1\n\t /;
$k=0;
}
print STDOUT;
}
print STDOUT "\n";
}
답변3
아마도 원인을 화면에 푸시한다는 것은 커널이 정보를 화면에 덤프하도록 강제한다는 의미일 것입니다.
아직 전문가는 아니지만 제가 아는 한 방법은 없습니다. 커널 패닉이 발생하면 정보를 콘솔에 덤프한 다음 충돌합니다. 이는 아무것도 실행되지 않기 때문에 패닉 이후에는 아무 것도 수행할 수 없음을 의미합니다.
xterm이 아닌 실제 tty를 사용하고 있다면 메시지가 표시될 것이라고 확신합니다. 하지만 그렇지 않으면 운이 좋지 않습니다."커널 패닉"이란 무엇입니까?이에 대한 정보가 있는 것 같습니다.
답변4
패닉이 여러 번 발생하는 경우 가장 좋은 방법은 다른(아마도 저전력) 장치를 연결하고 직렬 케이블을 통해 해당 장치에 로그인하는 것입니다.네트워크 콘솔. Netconsole은 이미 실행 중인 다른 장치를 사용할 수 있다는 확실한 이점이 있습니다(필요한 경우 홈 라우터에 로그인할 수도 있음).