Как избежать “не удается получить доступ к tty; управление заданиями отключено” при загрузке в initramfs

Вопрос или проблема

Я сейчас тестирую свой кастомный initramfs, но каждый раз в логе появляется

“не удается получить доступ к tty; управление заданиями отключено”.

В /dev в initramfs есть четыре файла: null, sda1, ttyS0.
Параметр ядра ‘console=ttyS0’.

Также я тестировал ctrl+c, все работает нормально. Как могла возникнуть эта проблема?
В документации busybox,

Почему я продолжаю получать ошибки “sh: не удается получить доступ к tty; управление заданиями отключено”? Почему Control-C не работает в моей оболочке? Это не совсем вопрос uClibc, но я все равно отвечу на него здесь. Управление заданиями будет отключено, поскольку ваша оболочка не может получить управляющий терминал. Это обычно происходит, когда вы запускаете оболочку на /dev/console. Ядро не предоставит управляющий терминал на устройстве /dev/console. Вам следует запускать свою оболочку на обычном tty, таком как tty1 или ttyS0, и тогда все будет работать идеально. Если вы СОВСЕМ хотите, чтобы ваша оболочка работала на /dev/console, тогда вы можете изменить свое ядро (если вам это интересно), изменив drivers/char/tty_io.c, чтобы изменить строки, где устанавливается “noctty = 1;” на “0”. Я рекомендую вам вместо этого запустить оболочку на настоящем консоли…

Я ввожу tty, и он выдает мне /dev/console вместо /dev/ttyS0.

Вот вся информация об этой проблеме, надеюсь, кто-то сможет мне помочь:-)

Как указал pizdelect, вот решение: https://raw.githubusercontent.com/brgl/busybox/master/shell/cttyhack.c.

Для меня я просто использую ::respawn:/bin/cttyhack /bin/sh.

Перекодирование cttyhack.c слишком хлопотно, просто оберните /bin/sh в оболочку:

setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1'

будет работать.

Вот более короткое решение:

exec setsid sh </dev/tty1 >/dev/tty1 2>&1

Если вы просто хотите запустить agetty, то это еще короче:

exec setsid agetty tty1 </dev/tty1 >/dev/tty1 2>&1

Ответ или решение

Как избежать ошибки "can’t access tty; job control turned off" при загрузке в initramfs

Ошибка "can’t access tty; job control turned off" возникает в среде initramfs, когда оболочка не может получить доступ к управляющему терминалу. Это сообщеется, что ваша оболочка, скорее всего, запускается на /dev/console, что не допускает активного управления заданиями.

Причины возникновения проблемы

  1. Запуск на ненадлежащем терминале:

    • По всей видимости, оболочка ищет терминал, но вместо /dev/ttyS0, она привязывается к /dev/console. В результате контроля за процессами не осуществляется.
  2. Параметры ядра:

    • Вы указали параметр console=ttyS0, однако он не является достаточным для обеспечения работы оболочки. Оболочка должна запускаться на реальном терминале (обычно tty1 или ttyS0), чтобы обеспечить управление заданиями.

Решения проблемы

  1. Использование cttyhack:

    • Один из подходов — использовать cttyhack, который позволяет оболочке работать, словно она подключена к управляющему терминалу. Для этого следуйте следующей команде:
      ::respawn:/bin/cttyhack /bin/sh
  2. Оборачивание командной оболочки:

    • Если повторная компиляция cttyhack.c вызывает трудности, попробуйте обернуть вызов вашей оболочки в следующую команду:
      exec setsid sh -c 'exec sh < /dev/tty1 > /dev/tty1 2>&1'

      Это создаст новую сессию и перенаправит стандартный ввод/вывод вашей оболочки на /dev/tty1, что позволит избежать проблемы с недоступностью tty.

  3. Использование agetty:

    • Если вы хотите просто использовать agetty для управления вводом-выводом, ваша команда будет еще проще:
      exec setsid agetty tty1 < /dev/tty1 > /dev/tty1 2>&1

Подводя итог

Ошибка "can’t access tty; job control turned off" может быть успешно устранена путем правильного указания терминала для вашей оболочки в среде initramfs. Возможны несколько подходов для решения этой проблемы, включая использование cttyhack, оборачивание оболочки в команды или обращение к agetty. Эти шаги помогут обеспечить корректное управление процессами и полноценную работу системы.

Если вы столкнетесь с дополнительными трудностями или у вас возникнут другие вопросы, не стесняйтесь обращаться за помощью в профессиональные сообщества или на специализированные форумы.

Оцените материал
Добавить комментарий

Капча загружается...