Top.Mail.Ru
Ответы

Делаю небольшую ос на ядре linux

Привет, есть среди вас шарящие за ОС? Я делаю свою ОС (текстовую) из tiny core linux 17, поменял начальное окно теперь там приветствие моей ОС, хочу добавить вместо терминала после приветствия своё меню из: terminal, programs, power off. Вот уже два дня ищу способ добавить такие текстовые кнопки.

По дате
По рейтингу
Аватар пользователя
Ученик
3нед

В Tiny Core Linux при загрузке происходит следующее:

  1. Загружается ядро и initrd.

  2. Выполняются системные скрипты инициализации.

  3. Запускается программа для входа в систему — getty (обычно это rungetty или agetty на первой виртуальной консоли /dev/tty1).

  4. Эта программа предлагает ввести логин/пароль (или делает автовход), а затем запускает шелл (обычно sh или bash).

Твоя задача — заменить стандартный шелл на свою программу-меню.

🔧 Вариант 1 (если тебе нужно меню после входа)

Самый простой способ — сохранить стандартный процесс входа, но вместо шелла запускать твою программу.

Шаг 1. Напиши свою программу-меню

Тебе нужен исполняемый файл, который будет рисовать меню и обрабатывать выбор. Напишем простой bash-скрипт, так как это проще всего.

Создай файл, например, /home/tc/myos_menu.sh:

bash

12345678910111213141516171819202122232425262728293031323334353637
#!/bin/sh
# myos_menu.sh - Главное меню твоей ОС

while true; do
    clear
    echo "======================================"
    echo "    Добро пожаловать в МОЮ ОС!"
    echo "======================================"
    echo "1. Запустить терминал"
    echo "2. Программы (будет позже)"
    echo "3. Выключить питание"
    echo "======================================"
    printf "Твой выбор [1-3]: "
    read choice

    case $choice in
        1)
            echo "Запуск терминала..."
            # Запускаем шелл. После выхода из шелла вернемся в меню
            sh
            ;;
        2)
            echo "Раздел 'Программы' пока в разработке."
            echo "Нажми Enter, чтобы вернуться в меню."
            read dummy
            ;;
        3)
            echo "Выключение..."
            sudo poweroff
            exit 0
            ;;
        *)
            echo "Неверный выбор. Нажми Enter."
            read dummy
            ;;
    esac
done

Сделай его исполняемым:

bash

1
chmod +x /home/tc/myos_menu.sh

Тестируем: прямо в терминале запусти ./myos_menu.sh — меню должно работать.

Шаг 2. Настрой автовход и запуск меню

Теперь нужно сделать так, чтобы при загрузке система автоматически логинилась и запускала это меню вместо обычного шелла.

  1. Включи автовход. Для этого нужно отредактировать файл /etc/inittab. Найди в нем строку, которая отвечает за tty1. В Tiny Core она часто выглядит так:
    tty1::respawn:/sbin/getty -n -l /bin/sh 38400 tty1
    или так (с rungetty):
    tty1::respawn:/sbin/rungetty --autologin tc tty1

    Тебе нужно заменить стандартную команду запуска шелла (/bin/sh) на запуск твоего скрипта. Например, строка может стать такой:
    tty1::respawn:/sbin/rungetty --autologin tc /home/tc/myos_menu.sh tty1
    Или, если используется getty, можно создать скрипт-обертку.

  2. Сделай изменения постоянными. Tiny Core живет в RAM, поэтому все изменения нужно сохранить.
    Добавь измененный файл /etc/inittab в список для бэкапа. Открой файл /opt/.filetool.lst и добавьте туда строку:

    text

    1
    etc/inittab

    Также добавь туда свой скрипт:

    text

    1
    home/tc/myos_menu.sh
  3. Сохрани изменения. Выполни команду:

    bash

    1
    filetool.sh -b

    Теперь при следующей загрузке система должна автоматически войти и показать твое меню .

🚀 Вариант 2 (Профессиональный — замена программы входа)

Если хочешь сделать всё красиво и по-взрослому, ты можешь заменить сам getty на свою программу. Это сложнее, но дает полный контроль.

  • Суть: Нужно в файле /etc/inittab полностью заменить строку для tty1 на вызов твоей программы.
    tty1::respawn:/home/tc/myos_menu.sh

  • Особенность: Твоя программа должна будет сама решать все вопросы, связанные с работой в качестве "оболочки" для консоли, но для простого текстового меню этот вариант тоже подходит.

💡 Важные дополнения и советы

  1. Команда выключения: В Tiny Core Linux корректное выключение делается через sudo poweroff или sudo exitcheck.sh shutdown . Второй вариант более "родной", так как сохраняет настройки.

  2. Сохранение изменений: Это ключевой момент! После каждого важного изменения структуры файлов не забывай делать filetool.sh -b, иначе после перезагрузки всё вернется как было .

  3. Если меню не запускается:

    • Проверь пути до скрипта. В /etc/inittab нужно писать абсолютные пути.

    • Убедись, что скрипт начинается с #!/bin/sh.

    • Проверь, что у скрипта есть права на исполнение (chmod +x).

    • Посмотри логи загрузки. Убери quiet из параметров ядра при загрузке, чтобы увидеть все сообщения.

  4. Программы (раздел 2): Когда дойдешь до реализации второго пункта меню, подумай, что ты хочешь там видеть. Это может быть просто список установленных пакетов (tce-load -l), или запуск какого-то конкретного приложения.



Видео по теме