I have a problem with the error described in the title.
I use Linux generated by buildroot.
During boot process automatically will be run startup_script.sh which will call the command:
/bin/cttyhack /bin/sh || /bin/sh -
Then i got error described in title.
It seems to me that I do not have a 'ttyS0' device, actually, I have no tty* devices.
/ # ls /dev/tty*
ls: /dev/tty*: No such file or directory
te code here
What hardware are you working on? Is it Raspberry Pi?
Buildroot - You may need to create device nodes yourself.
Take a look under /sys/class/tty....... what files or devices can you find? The kernel build might have put them there. Device nodes can exist anywhere on the system although, conventionally, we put them in /dev. What's important are the major and minor numbers of any device and, given those, we can create them with mknod command. The name of the device node e.g. ttyS0 is arbitary, it's the major/minor bus device it points to that is important. So device nodes will exist on the kernel you just need to locate them (where you want them).
At this stage I reckon that device nodes not existing is your whole problem.
//config:config CTTYHACK
//config: bool "cttyhack (2.4 kb)"
//config: default y
//config: help
//config: One common problem reported on the mailing list is the "can't
//config: access tty; job control turned off" error message, which typically
//config: appears when one tries to use a shell with stdin/stdout on
//config: /dev/console.
//config: This device is special - it cannot be a controlling tty.
//config:
//config: The proper solution is to use the correct device instead of
//config: /dev/console.
//config:
//config: cttyhack provides a "quick and dirty" solution to this problem.
//config: It analyzes stdin with various ioctls, trying to determine whether
//config: it is a /dev/ttyN or /dev/ttySN (virtual terminal or serial line).
//config: On Linux it also checks sysfs for a pointer to the active console.
//config: If cttyhack is able to find the real console device, it closes
//config: stdin/out/err and reopens that device.
//config: Then it executes the given program. Opening the device will make
//config: that device a controlling tty. This may require cttyhack
//config: to be a session leader.
//config:
//config: Example for /etc/inittab (for busybox init):
//config:
//config: ::respawn:/bin/cttyhack /bin/sh
//config:
//config: Starting an interactive shell from boot shell script:
//config:
//config: setsid cttyhack sh
//config:
//config: Giving controlling tty to shell running with PID 1:
//config:
//config: # exec cttyhack sh
//config:
//config: Without cttyhack, you need to know exact tty name,
//config: and do something like this:
//config:
//config: # exec setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1'
//config:
//config: Starting getty on a controlling tty from a shell script:
//config:
//config: # getty 115200 $(cttyhack)
It might be a good idea @blazic016 for you to provide all the details about the Linux operating system you are using and other relevant platform information.
@hicksd8 guesses it might be a PI and. asks you the same question.
As a reminder, when seeking this kind of system level assistance, it is very important to provide the system details.