[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[Debian]:initrd und intr



Hallo miteinander!

Folgendes Problem:

Ich moechte einen Kernel, z.B. "bzimage", mitsamt einem mini-root System,
z.B. "initrd.gz" von Diskette starten und ein paar bash bzw. ash-Skripte
laufen lassen (wie ueblich ueber linuxrc). linuxrc sieht wie folgt aus: 

-- linuxrc -- 
#!/bin/ash

export PATH=/sbin:/bin:/usr/sbin:/usr/bin

umask 022
mount -t proc -n proc /proc
trap 'echo klappt. ; exec bash' INT QUIT

for i in 1 2 3 4 5 
do 
  echo -n "$i "
  sleep 1
done

kill -2 $$
# statt exec bash

echo "klappt nicht."
exec bash
-- Skript Ende --

Starte ich jetzt von Diskette (oder was auch immer), so faehrt das System 
hoch und bootet von der Ramdisk:

-- snip --
Kernelmeldungen ...
1 2 3 4^H^H 5 klappt.
bash-2.03# 
-- snap --

ABER:  Die Tastenkombination "ctrl-c" bringt nix, z.B. ctrl-h sieht man am
Bildschirm (auch quit=^\ will nicht klappen). Aber "kill -2 $$" klappt sehr
wohl, wie man oben sieht. 

Vergleicht man das mit /etc/init.d/rcS -- also dem ersten Skript das von init
aufgerufen wird -- so funktioniert das dort ja einwandfrei (trap wird bereits
eingesetzt um QUIT INT abzufangen). Eine etwas genauere Analyse bei initrd
liefert: 

-- snip --
bash-2.03# pstree -ap
(swapper,1)
  |-bash(6)
  |  `pstree(12) -ap
  |-kflushd,2)
  |-(kpiod,4)
  |-(kswapd,5)
  |-(kupdate,3)
  `-(rpciod,9)
bash-2.03# stty -a
speed 38400 baud; rows 25; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-- snap --

Ich habe dann einfach mal ^H auf intr gemapt:

-- snip --
bash-2.03# stty intr ^H
bash-2.03# stty -a
speed 38400 baud; rows 25; columns 80; line = 0;
intr = ^H; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
bash-2.03# /linuxrc
1 2 ^C^C^C3 4 5 klappt.
-- snap --
                ^--- meint wieder das "kill -2 $$", nicht "intr=ctrl-h"

Ein "cat /proc/interrupts" ist auch wie gewohnt. Die ueblichen keystrokes wie
^a, ^l funktionieren ebenso. 

Nun die Preisfrage:  Auf dem Weg vom Keyboard zum Kernel und von dort weiter,
wo bleibt das "intr" stecken? Liegt's am swapper, d.h. an initrd??

Wenn jemand eine Aufklaerung fuer dieses (Noch-)Mysterium hat, wuerde ich
mich freuen! Falls sich jemand zwecks "Nachprobieren" das anschauen moechte,
kann ich ihm gerne die entsprechenden Dateien schicken. 

Gruss Jens
------------------------------------------------
Um sich aus der Liste auszutragen schicken Sie
bitte eine E-Mail an majordomo@jfl.de die im Body
"unsubscribe debian-user-de <deine emailadresse>"
enthaelt.
Bei Problemen bitte eine Mail an: Jan.Otto@jfl.de
------------------------------------------------
Anzahl der eingetragenen Mitglieder:     719


Reply to: