[BusyBox 0001075]: getty breaks on ioctl on MPC850

bugs at busybox.net bugs at busybox.net
Mon Nov 6 10:52:53 UTC 2006


A NOTE has been added to this issue. 
====================================================================== 
http://busybox.net/bugs/view.php?id=1075 
====================================================================== 
Reported By:                RenHoek
Assigned To:                BusyBox
====================================================================== 
Project:                    BusyBox
Issue ID:                   1075
Category:                   Other
Reproducibility:            always
Severity:                   major
Priority:                   normal
Status:                     assigned
====================================================================== 
Date Submitted:             10-20-2006 06:00 PDT
Last Modified:              11-06-2006 02:52 PST
====================================================================== 
Summary:                    getty breaks on ioctl on MPC850
Description: 
I'm trying upgrade from busybox 1.00 (which works) to 1.2.1, but I'm
running into trouble with getty. I'm on an embedded Motorola platform.

When init tries to start getty I get this error and getty exits:


I traced this to this bit in loginutils/getty.c

        /*
         * The following ioctl will fail if stdin is not a tty, but also
when
         * there is noise on the modem control lines. In the latter case,
the
         * common course of action is (1) fix your cables (2) give the
modem more
         * time to properly reset after hanging up. SunOS users can
achieve (2)
         * by patching the SunOS kernel variable "zsadtrlow" to a larger
value;
         * 5 seconds seems to be a good value.
         */

        if (ioctl(0, TCGETA, tp) < 0)
                error("%s: ioctl: %m", tty);

When I comment it out, I get my login prompt. I fill in my username and
getty break again with this error:

getty: /dev/tts/0: ioctl: TCSETA: Invalid argument

Since 1.00 worked, I'll try and find out what has changed. I realise this
would be hard to reproduce for you guys since it's a custom platform, but
any tips are appreciated. :)
====================================================================== 

---------------------------------------------------------------------- 
 RenHoek - 10-20-06 06:02  
---------------------------------------------------------------------- 
Forgot to cut & paste the first error I get:

getty: /dev/tts/0: ioctl: Invalid argument 

---------------------------------------------------------------------- 
 RenHoek - 11-06-06 02:52  
---------------------------------------------------------------------- 
I've got some more time to look into it. I copied the v1.0 getty.c into the
new 1.21. busybox. After compiling an running it, I still get the hangup.
So it would seem to be something outside of getty.c that hangs it up. I'm
using the same uclibc on both version so that shouldn't be it.

An strace of the 1.0 busybox getty and the new one reveals:

old:

chdir("/dev")                           = 0
stat("/dev/tts/0", {st_dev=makedev(0, 6), st_ino=18, st_mode=S_IFCHR|0600,
st_nlink=1, st_uid=0, st_gid=0, st_blksize=1024, st_blocks=0,
st_rdev=makedev(4, 64), st_atime=0, st_mtime=0, st_ctime=0}) = 0
close(0)                                = 0
open("/dev/tts/0", O_RDWR|O_NONBLOCK)   = 0
dup(0)                                  = 1
dup(0)                                  = 2
ioctl(0, TCGETA, {c_iflags=0x300, c_oflags=0x3, c_cflags=0xcb00,
c_lflags=0x5cf, c_line=0,
c_cc="\x03\x1c\x7f\x15\x04\x01\x00\x00\x00\x00"}) = 0
chown("/dev/tts/0", 0, 0)               = 0
chmod("/dev/tts/0", 0622)               = 0
getpid()                                = 71
ioctl(0, TIOCSPGRP, [71])               = 0
ioctl(0, TCFLSH, 0x2)                   = 0
ioctl(0, TCSETA, {c_iflags=0, c_oflags=0, c_cflags=0xcb0d, c_lflags=0,
c_line=0, c_cc[_VMIN]=1, c_cc[_VTIME]=0,
c_cc="\x03\x1c\x7f\x15\x04\x01\x00\x00\x00\x00"}) = 0
fcntl(0, F_GETFL)                       = 0x802 (flags O_RDWR|O_NONBLOCK)
fcntl(0, F_SETFL, O_RDWR)               = 0

new:

chdir("/dev")                           = 0
stat("/dev/tts/0", {st_dev=makedev(0, 6), st_ino=18, st_mode=S_IFCHR|0600,
st_nlink=1, st_uid=0, st_gid=0, st_blksize=1024, st_blocks=0,
st_rdev=makedev(4, 64), st_atime=0, st_mtime=0, st_ctime=0}) = 0
close(0)                                = 0
open("/dev/tts/0", O_RDWR|O_NONBLOCK)   = 0
dup(0)                                  = 1
dup(0)                                  = 2
ioctl(0, TCGETS, 0x7fffecb0)            = -1 EINVAL (Invalid argument)


The old busybox uses the ioctl correctly, while the new busybox apparently
uses some ioctl number strace doesn't even recognize. I would presume such
ioctl numbers are located in uclibc and thus unchanged.

I will continue my investigations.. :) 

Issue History 
Date Modified   Username       Field                    Change               
====================================================================== 
10-20-06 06:00  RenHoek        New Issue                                    
10-20-06 06:00  RenHoek        Status                   new => assigned     
10-20-06 06:00  RenHoek        Assigned To               => BusyBox         
10-20-06 06:02  RenHoek        Note Added: 0001712                          
11-06-06 02:52  RenHoek        Note Added: 0001732                          
======================================================================




More information about the busybox-cvs mailing list