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

Re: Debian on SGI Altix IA-64 (follow-up)



Package: rootskel

Reply below..

Stéphane Larose wrote:
> Hi,
> 
> At the end of December, I posted on this list about booting and running Debian 
> etch on SGI Altix 350. There was basically 3 things to modify on the netinst 
> cd to make it boot and install:
> - putting 'relocatable' in elilo.conf (done - thanks to Dann Frazier)
> - adding some modules to the d-i kernel (done - thanks to Dann Frazier)
> - modifying something with the console device since we lose the console output 
> when booting the cd (just when init - or busybox init starts)
> 
> The trick I found to get the console output after init starts was to comment 
> out this line:
> makedev 600 /dev/tts/"$i" c 4 "$(($i + 64))" 
> in /lib/debian-installer/init-udev-devices. I've done some research to know 
> exactly why this make the console output work. 
> 
> In kernel > 2.6.7, there is a new serial console driver for the Altix L1 
> (CONFIG_SERIAL_SGI_L1_CONSOLE=y) and the device is /dev/ttySG0. I think this 
> device gets associated with /dev/console in the d-i because, if I 
> create it (just before busybox init starts):
> mknod ttySG0 c 204 40
> and
> echo "something" > /dev/ttySG0 or
> echo "something" > /dev/console
> both will echo.
> 
> Then I looked at how busybox init was choosing the console and found out that 
> this part of code is being executed:
> ... (from busybox init.c source)
> if (ioctl(0, TIOCGSERIAL, &sr) == 0) {
>   /* this is a serial console */
>   snprintf(console, sizeof(console) - 1, SC_FORMAT, sr.line);
> ...
>  while ((fd = open(console, O_RDONLY | O_NONBLOCK)) < 0 && tried < 2) {
>        /* Can't open selected console -- try
>               logical system console and VT_MASTER */
>     safe_strncpy(console, (tried == 0 ? _PATH_CONSOLE : CURRENT_VC), 
> sizeof(console));
> ...
> 
> So sr.line is set to 0 which seems correct but the SC_FORMAT variable 
> is '/dev/tts/' (hard-coded) resulting in console=/dev/tts/0 instead 
> of /dev/ttySG0.
> 
> On the d-i CD, /dev/tts/0 is created by 
> the /lib/debian-installer/init-udev-devices script, so busybox will try to 
> open it and will succeed but this device is not the correct one on the Altix 
> so no more console output after busybox init.
> 
> If I delete /dev/tts/0 (or comment out the line to create this device in the 
> init-udev-devices script), the 'open' call of busybox will fail so busybox 
> will retry with console=_PATH_CONSOLE (which is defined as /dev/console) and 
> this will work since we effectively are on /dev/console (/dev/ttySG0) during 
> the Debian installation on Altix.
> 
> That is what I think creates the problem with console output when installing 
> on Altix. I don't know what is the best solution to correct this but maybe:
> 1- patching busybox so that SC_FORMAT would be /dev/ttySG on Altix (if kernel 
> > 2.6.7)
> 2- creating the /dev/ttySG0 device in the init-udev-devices script

I don't know how doable #1 is (would need some way for busybox to detect
this machine), so I'm focusing on #2.

However, I'm not sure why creating the /dev/ttySG0 device would work.
From your description it sounds like busybox init would still try to use
the hardcoded /dev/tts/0 device instead.

Seems like we could fix it by making init-udev-devices skip creation of
/dev/tts/0, if running on the altix. What would be a good way to detect
that machine?

-- 
see shy jo

Attachment: signature.asc
Description: Digital signature


Reply to: