Делаю небольшую ос на ядре linux
Привет, есть среди вас шарящие за ОС? Я делаю свою ОС (текстовую) из tiny core linux 17, поменял начальное окно теперь там приветствие моей ОС, хочу добавить вместо терминала после приветствия своё меню из: terminal, programs, power off. Вот уже два дня ищу способ добавить такие текстовые кнопки.
В Tiny Core Linux при загрузке происходит следующее:
Загружается ядро и initrd.
Выполняются системные скрипты инициализации.
Запускается программа для входа в систему — getty (обычно это rungetty или agetty на первой виртуальной консоли /dev/tty1).
Эта программа предлагает ввести логин/пароль (или делает автовход), а затем запускает шелл (обычно sh или bash).
Твоя задача — заменить стандартный шелл на свою программу-меню.
🔧 Вариант 1 (если тебе нужно меню после входа)
Самый простой способ — сохранить стандартный процесс входа, но вместо шелла запускать твою программу.
Шаг 1. Напиши свою программу-меню
Тебе нужен исполняемый файл, который будет рисовать меню и обрабатывать выбор. Напишем простой bash-скрипт, так как это проще всего.
Создай файл, например, /home/tc/myos_menu.sh:
bash
#!/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
chmod +x /home/tc/myos_menu.shТестируем: прямо в терминале запусти ./myos_menu.sh — меню должно работать.
Шаг 2. Настрой автовход и запуск меню
Теперь нужно сделать так, чтобы при загрузке система автоматически логинилась и запускала это меню вместо обычного шелла.
Включи автовход. Для этого нужно отредактировать файл /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, можно создать скрипт-обертку.Сделай изменения постоянными. Tiny Core живет в RAM, поэтому все изменения нужно сохранить.
Добавь измененный файл /etc/inittab в список для бэкапа. Открой файл /opt/.filetool.lst и добавьте туда строку:text
1etc/inittabТакже добавь туда свой скрипт:
text
1home/tc/myos_menu.shСохрани изменения. Выполни команду:
bash
1filetool.sh -bТеперь при следующей загрузке система должна автоматически войти и показать твое меню .
🚀 Вариант 2 (Профессиональный — замена программы входа)
Если хочешь сделать всё красиво и по-взрослому, ты можешь заменить сам getty на свою программу. Это сложнее, но дает полный контроль.
Суть: Нужно в файле /etc/inittab полностью заменить строку для tty1 на вызов твоей программы.
tty1::respawn:/home/tc/myos_menu.shОсобенность: Твоя программа должна будет сама решать все вопросы, связанные с работой в качестве "оболочки" для консоли, но для простого текстового меню этот вариант тоже подходит.
💡 Важные дополнения и советы
Команда выключения: В Tiny Core Linux корректное выключение делается через sudo poweroff или sudo exitcheck.sh shutdown . Второй вариант более "родной", так как сохраняет настройки.
Сохранение изменений: Это ключевой момент! После каждого важного изменения структуры файлов не забывай делать filetool.sh -b, иначе после перезагрузки всё вернется как было .
Если меню не запускается:
Проверь пути до скрипта. В /etc/inittab нужно писать абсолютные пути.
Убедись, что скрипт начинается с #!/bin/sh.
Проверь, что у скрипта есть права на исполнение (chmod +x).
Посмотри логи загрузки. Убери quiet из параметров ядра при загрузке, чтобы увидеть все сообщения.
Программы (раздел 2): Когда дойдешь до реализации второго пункта меню, подумай, что ты хочешь там видеть. Это может быть просто список установленных пакетов (tce-load -l), или запуск какого-то конкретного приложения.