readlink not found/ sh:can't access tty

Rahul Jain rahul at schmizz.net
Fri Aug 1 12:14:54 UTC 2008


So, after reading some mail archives
(http://busybox.net/lists/busybox/2004-September/012585.html and
http://marc.info/?l=busybox&m=109605435104958&w=2) it turns out that
the problem is related to not logging on the correct terminal.
So, according to my platform I have the following devices available.

dev:f1: ttyAMA0 at MMIO map 0x101f1000 mem 0xc880c000 (irq = 12) is a AMBA/PL011
dev:f2: ttyAMA1 at MMIO map 0x101f2000 mem 0xc880e000 (irq = 13) is a AMBA/PL011
dev:f3: ttyAMA2 at MMIO map 0x101f3000 mem 0xc8810000 (irq = 14) is a AMBA/PL011

Then, what I did was create a startup script called /etc/rcS.d/S59configs.sh
Via that script, I created a dev /dev/ttyAMA0 with the following command.

mknod -m 0620 /dev/ttyAMA0 c 204 17
chown root:tty /dev/ttyAMA0
The permissions and owners were modified to match with /dev/tty0.

I first tested it without inittab to confirm whether this device was
being created or not. And yes, it was created.

# ls -l /dev/ttyAMA0
crw--w----    1 root     tty      204,  17 Jan  1 00:00 /dev/ttyAMA0

# ls -l /dev/tty0
crw--w----    1 root     tty        4,   0 Mar 11  2007 /dev/tty0

So, the permissions are the same. The only difference is the major and
the minor number about which I have no clue.

Next, I created an inittab file.

This is my inittab file.

::sysinit:/etc/init.d/rcS

ttyAMA0::askfirst:-/bin/bash

Everything boots up fine, but when it comes to the login, it gives me
this error:

Bummer, can't open /dev/ttyAMA0

So, that is it. If anyone has an idea as to how to resolve this,
please tell me.

Thanks
Rahul

On Fri, Aug 1, 2008 at 10:40 AM, Rahul Jain <rahul at schmizz.net> wrote:
> Yeahhh! The readlink problem is solved and it was rather strange. I
> specified the full path to readlink in the script and now it works.
> So the only remaining problem is that about the job control. As I
> mentioned earlier, there is no /etc/inittab file in my ramdisk. Could
> the problem be related to that?
>
> Cheers
> Rahul
>
> On Fri, Aug 1, 2008 at 9:59 AM, Rahul Jain <rahul at schmizz.net> wrote:
>> On Thu, Jul 31, 2008 at 3:30 PM, Luciano Rocha <strange at nsk.no-ip.org> wrote:
>>> On Thu, Jul 31, 2008 at 03:16:29PM +0200, Rahul Jain wrote:
>>>> Hello all,
>>>>
>>>> I used MontaVista Dev Rocket to build a ramdisk. During the boot
>>>> process, I get a couple of errors. As these errors concern binaries
>>>> (or rather symlinks to busybox), I thought it wise to ask on this list
>>>> for some information about these errors. Below is the summary of the
>>>> entire boot process:
>>>>
>>>> # Linux version 2.6.18_pro500-versatile926ejs (rahul at flensburger) (gcc version 4
>>> <snip>
>>>> VFS: Mounted root (ext3 filesystem).
>>>> Freeing init memory: 4K
>>>> /etc/rc.d/rcS.d/S03mountvirtfs-early: /etc/rc.d/rcS.d/S03mountvirtfs-early: 151:
>>>>  readlink: not found
>>>
>>> Do you have /proc mounted by now?
>>
>> No proc is not mounted by now. But as far as I understand, the
>> function of these two scripts mountvirtfs and mountvirtfs-early (which
>> are actually a copy of each other) is to mount the virtual filesystems
>> (which would mean proc).
>> I added some echo statements before the line no. 151.
>> The first test that I did was a ls /usr/bin and readlink is listed
>> there. So, why is it complaining of readlink not being found?
>> Second, as I did ls /proc/ which returned nothing, thus proc not mounted.
>>
>> For reference, I am attaching a copy of the script mountvirtfs, maybe
>> there is something wrong there:
>>
>> #! /bin/sh
>> #
>> # Name: mountvirtfs
>> # Date: 2005-01-12
>> # Author: MontaVista Software, Inc. <source at mvista.com>
>> # Copyright: Copyright 1999-2005 MontaVista Software, Inc.
>> # License: 2003-2005 (c) MontaVista Software, Inc. This file is licensed
>> #          under the terms of the GNU General Public License version 2.
>> #          This program is licensed "as is" without any warranty of any
>> #          kind, whether express or implied.
>> #
>> # Copyright(C) 2002, 2003, 2004, 2005 Sony Corporation
>> # Copyright(C) 2002, 2003, 2004, 2005 Matsushita Electric Industrial Co., Ltd.
>> #
>> # The code is based on original, written by Miquel Van Smoorenburg
>> #
>> # mountvirtfs   Mount all the virtual filesystems the kernel
>> #               provides and that are required by default.
>> #
>> #               This script can be called several times without
>> #               damage; it tries to mount the virtual filesystems
>> #               only if not mounted yet, and only updates /etc/mtab
>> #               if it is writable and there is a need to.
>> #
>> #               This functionality was previously provided by
>> #               mountkernfs from the glibc package.
>> #
>> # chkconfig: S 9 0
>> #
>> # Version:      @(#)mountvirtfs  2.85-23  29-Jul-2004  miquels
>> #
>>
>> # Script needs to be robust and continue when parts fail,
>> # so we're not setting the "-e" flag.
>> #set -e
>>
>> PATH=/lib/init:/bin:/sbin
>>
>> TTYGRP=5
>> TTYMODE=620
>>
>> # Load init script configuration
>> [ -f /etc/default/devpts ] && . /etc/default/devpts
>>
>> TMPFS_SIZE=
>> [ -f /dev/default/tmpfs ] && . /etc/default/tmpfs
>>
>> # Source the init script functions
>> . /etc/init.d/init-functions
>>
>> KERNEL=`uname -s`
>> umask 022
>>
>> dir_writable () {
>>        if [ -d "$1/" ] && [ -w "$1/" ] && touch -a "$1/" 2>/dev/null
>>        then
>>                return 0
>>        fi
>>        return 1
>> }
>>
>> mountpoint () {
>>        grep -qs $2 /proc/mounts
>>        return $?
>> }
>>
>> domount () {
>>
>>        # Directory present ?
>>        if [ ! -d $3 ]
>>        then
>>                return
>>        fi
>>
>>        # Do we support this filesystem type ?
>>        TYPE=
>>        if [ $1 = proc ]
>>        then
>>                case "$KERNEL" in
>>                        Linux|GNU)
>>                                TYPE=proc
>>                                ;;
>>                        *)
>>                                TYPE=procfs
>>                                ;;
>>                esac
>>        elif egrep -qs "$1\$" /proc/filesystems 2> /dev/null
>>        then
>>                TYPE=$1
>>        elif egrep -qs "$2\$" /proc/filesystems 2>/dev/null
>>        then
>>                TYPE=$2
>>        fi
>>        if [ "$TYPE" = "" ]
>>        then
>>                return
>>        fi
>>
>>        #
>>        #       Get the options from /etc/fstab.
>>        #
>>        OPTS=
>>        if [ -f /etc/fstab ]
>>        then
>>                exec 9<&0 0</etc/fstab
>>                while read FDEV FDIR FTYPE FOPTS REST
>>                do
>>                        case "$FDEV" in
>>                                ""|\#*)
>>                                        continue
>>                                        ;;
>>                        esac
>>                        if [ "$3" != "$FDIR" ] || [ "$TYPE" != "$FTYPE" ]
>>                        then
>>                                continue
>>                        fi
>>                        case "$FOPTS" in
>>                                noauto|*,noauto|noauto,*|*,noauto,*)
>>                                        ;;
>>                                ?*)
>>                                        OPTS="-o$FOPTS"
>>                                        ;;
>>                        esac
>>                        break
>>                done
>>                exec 0<&9 9<&-
>>        fi
>>
>>        # See if anything is mounted yet
>>        if ! mountpoint -q $3
>>        then
>>                # No, do it now
>>                mount $MOUNT_N -t $TYPE $OPTS $4 $TYPE $3
>>        else
>>                # Need to update mtab only ?
>>                if [ -n "$DO_MTAB" ] &&
>>                   ! egrep -sq "^([^ ]+) +$3 +" /etc/mtab
>>                then
>>                                mount -f -t $TYPE $OPTS $4 $TYPE $3
>>                fi
>>        fi
>> }
>>
>> #
>> #       We only create/modify /etc/mtab if the location where it is
>> #       stored is writable.  If /etc/mtab is a symlink into /proc/
>> #       then it is not writable.
>> #
>> DO_MTAB=
>> MOUNT_N=-n
>> MTAB_PATH="`readlink /etc/mtab || :`"
>> case "$MTAB_PATH" in
>>        /proc/*)
>>                ;;
>>        /*)
>>                if dir_writable ${MTAB_PATH%/*}
>>                then
>>                        DO_MTAB=Yes
>>                        MOUNT_N=
>>                fi
>>                ;;
>> esac
>>
>> if [ -n "$DO_MTAB" ] && [ ! -f /etc/mtab ]
>> then
>>        :> /etc/mtab
>> fi
>>
>> # Mount standard /proc, /sys and /tmp.
>> domount proc "" /proc
>> domount sysfs "" /sys
>> domount tmpfs "" /tmp
>>
>> # Mount /dev/pts. Create master ptmx node if needed.
>> #
>> # As of 2.5.68, devpts is not automounted when using devfs. So we
>> # mount devpts if it is compiled in (older devfs didn't require it
>> # to be compiled in at all).
>> #
>> if [ "$KERNEL" = Linux ]
>> then
>>        #
>>        #       Since kernel 2.5.something, devfs doesn't include
>>        #       a standard /dev/pts directory anymore. So if devfs
>>        #       is mounted on /dev we need to create that directory
>>        #       manually.
>>        #
>>        if ! grep -qci '/dev/pts' /proc/mounts &&
>>           grep -qci 'devpts' /proc/filesystems &&
>>           mkdir -p /dev/.test 2>/dev/null
>>        then
>>                #
>>                #       Create mountpoint and multiplexor device.
>>                #
>>                [ -d /dev/pts ] || mkdir --mode=755 /dev/pts
>>                [ -c /dev/ptmx ] || mknod -m 666 /dev/ptmx c 5 2
>>
>>                #
>>                #       Mount /dev/pts if needed.
>>                #
>>
>>                domount devpts "" /dev/pts -ogid=$TTYGRP,mode=$TTYMODE
>>
>>                RET=$?
>>                if [ ! $RET -eq 0 ]; then
>>                        log_failure_msg " failed ($RET: $ERROR)."
>>                        return 1
>>                fi
>>                rm -rf /dev/.test
>>        fi
>> fi
>>
>> # Mount tmpfs.
>> #
>> # Around kernel version 2.3.3x, a memory based filesystem was
>> # introduced to support POSIX shared memory, called shmfs.
>> # Later this filesystem was extended for general usage -
>> # provided you set the CONFIG_TMPFS compile option and mount
>> # it as type tmpfs.
>> #
>> # Early in the 2.4 kernel series, shmfs was renamed to tmpfs, but
>> # you could mount it using both type shmfs and tmpfs. Starting
>> # at kernel version 2.5.44, the shmfs alias was dropped.
>> #
>> # Confusingly, in kernels 2.3.x - 2.5.43 where both shmfs and
>> # tmpfs are present, disabling CONFIG_TMPFS actually removes
>> # support for shmfs, but tmpfs is still listed in /proc/filesystems
>> # to support SYSV and POSIX shared memory, and it should still be
>> # mounted under /dev/shm.
>> #
>> # Recommendation: always enable CONFIG_TMPFS and always mount
>> # using the tmpfs type. Forget about shmfs.
>> #
>> # Tmpfs can be used as memory filesystem, so you can limit tmpfs
>> # max size using /etc/default/tmpfs to prevent tmpfs from using
>> # up all system memory.
>> #
>> if [ -n "$TMPFS_SIZE" ]
>> then
>>        tmpfs_opt="-osize=${TMPFS_SIZE}"
>> fi
>> domount tmpfs shmfs /dev/shm $tmpfs_opt
>>
>> # Mount usbfs/usbdevfs if /proc/bus/usb is present.
>> #
>> # Usbfs/usbdevfs is used for USB related binaries/libraries.
>> # "usbfs" and "usbdevfs" are the exact same filesystem.
>> # "usbdevfs" was renamed to "usbfs" by linux usb developers,
>> # because people sometimes mistook it as a part of devfs. Usbfs
>> # will be superseded by other filesystems (e.g. sysfs), and when
>> # it becomes obsolete the mount action below should be removed.
>> #
>> if [ -d /proc/bus/usb ]
>> then
>>        domount usbfs usbdevfs /proc/bus/usb
>> fi
>>
>> Also, could someone tell me what is with the no job control issue. My
>> ramdisk right now, is without an /etc/inittab. Could it be something
>> related to that.
>>
>> Thanks
>> Rahul
>>
>> P.S. I also know that the developers have more important things to
>> deal with than my problem. However, there are users om this list as
>> well, and I had hoped (and still do) that someone would be able to
>> point out the correct solution to me. :)
>>>
>>> --
>>> lfr
>>> 0/0
>>>
>>
>



More information about the busybox mailing list