Якщо ви дійсно не хочете нічого, окрім ядра Linux, мереж та вашої програми, єдиний спосіб зробити це:
- Вам потрібно буде зробити ваш додаток модулем ядра - переконайтесь, що він налагоджений і добре перевірений. Цей модуль ядра повинен ініціалізувати речі, які зазвичай робляться через користувальницьку область, наприклад, встановити IP-адреси інтерфейсу та все, що добре.
- Вам потрібно буде завантажити та налаштувати (
make menuconfig) власне власне ядро та видалити всі функції, не пов’язані із запуском системи та мережею. Ви хочете відключити блокування шару, я не знаю, як це зробити на останніх ядрах make menuconfig.
- Потім потрібно включити ваш модуль до ядра, щоб він включався як частина ядра, а не модуль для завантаження. Ви, ймовірно, відключите завантажувані модулі на кроці вище. Якщо ви знаєте достатньо C / C ++ для створення модуля ядра, це повинно бути для вас просто.
- Вам потрібно змінити будь-яку частину ядра, яке панікує, якщо цього
initне зробити, або бути готовим жити з одним додатковим процесом користувальницького простору.
Я знаю, що можливо, щоб модулі ядра створювали процеси - прості ps auxпоказали б багато в типовій системі (вони всі в дужках). Ви, мабуть, хочете, щоб ваш модуль створив процес ядра. Щоб позбутися від усіх процесів, створених ядром, крім ваших, вам потрібно буде відключити потоки [ kthreadd], управління потужністю [ pm], шар подій [ events] та інші.
Якщо ви хочете більш практичної настройки процесу ядра + 1 в просторі користувача, це можливо.
У Linux є опція командного рядка ядра під назвою init=- це те, що ядро почнеться після завантаження. Програма повинна знаходитись на кореневому пристрої, який вказаний з root=initrd (або завантажений завантажувачем).
Якщо ця програма завершиться, Linux впаде в паніку, тому переконайтеся, що вона ніколи не вийде.
У багатьох сучасних дистрибутивах Linux це налаштовано, тому initпрограма в initrd робить додаткову ініціалізацію простору користувача перед запуском /sbin/initабо /sbin/systemd. Вам доведеться дізнатися, що робить ваш дистрибутив тут (інформація для Debian є тут ) і знайти, де ви можете вказати остаточну програму "handoff", а звідти ви можете сказати їй, щоб запустити свою програму замість initабо systemd.
systemdкерує безліччю основних функціональних можливостей, таких як побудова /dev, встановлення імені хоста та інші речі, тому, якщо ви гнучкі, ви можете замість цього розібратися в налаштуванні systemdдля нерестування одного процесу та, можливо, перезапустити його, якщо він не вдасться. Якщо я не помиляюся, це в основному робить це для однокористувацького або режиму відновлення - він запускає оболонку.
У вас будуть запущені два процеси ( systemdі ваша програма), але система не панікуватиме, якщо програма вийде з ладу або вийде з ладу.
Розглянемо також просто легку установку Debian - установка "netinst" не має нічого іншого, крім ядра, оболонки та декількох служб - або розгляньте OpenWRT / LEDE - у неї є веб-сервер для Luci, який працює за замовчуванням і пару інших послуг, але їх легко відключити.