Как заставить оболочку отображаться в моем собственном дистрибутиве (linux)?

Я интересуюсь Linux и копаю его на некоторое время. Я только что научился компилировать ядро ​​Linux из источника и загружать его с Grub, который приземляет вас с оболочкой ядра.

Теперь, как только ядро ​​загружается в память, он ищет init для его загрузки. Моя задача – открыть оболочку (которую обычный пользователь может использовать – например, bash ).

Итак, как я могу привести его?

Нужно ли настраивать init для загрузки оболочки bash или есть что-то, что я мог бы сделать?

Я создаю свой собственный дистрибутив, и мне просто нужно, чтобы дистрибутив имел оболочку (bash) и ничего больше.

Хм. Это не должно быть сложно, но это тоже очень сложно 🙂

Вы можете просто сделать то, что предложил Александр ( init=/bin/bash ), и все будет хорошо.

Процесс init – это то, что ядро ​​вызывает, и оно запускает все ваше пользовательское пространство. Вход в терминал включен. Если ваш init только порождает этот баш-терминал, вы в порядке. Но если этот терминал выйдет из строя или выйдет, init должен очистить. Если некоторые из процессов, которые вы запускаете с терминала, умирают, вам нужно очистить. Если они умрут, то их детям нужен новый процесс parrent, это будет ваш init.

Я очень рекомендую посвятить 10 минут, чтобы прочитать это, очень дружелюбный обзор того, что делает init :

http://tilde.town/~elly/userland.txt

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

Соответствующая часть этой ссылки говорит:

Нам нужно только одно: предоставить начальный двоичный файл для запуска на любом из этих путей: / sbin / init, / etc / init, / bin / init или / bin / sh. Этот процесс (init) запускается как pid 1.

Процесс init должен делать две вещи:

  • Никогда не выходите (если init выходит, паника ядра)

  • Реактивные зомби-процессы

Остальная часть текста реализует простой init.

«терминал» (физический компьютер) и «bash» (оболочка) совершенно разные. Я не совсем уверен, что вы просите, но вы можете добавить init=/bin/bash в командную строку ядра, чтобы загрузиться прямо в bash.

bash не является терминалом, является оболочкой.

Процесс init , как только процесс загрузки завершен, и если машина работает в текстовом уровне (так что без X Windows), вызовы в конечном итоге getty который, в свою очередь, вызывает login . Это процесс, ответственный за представление приглашения для входа и возможность входа в систему. Это то, что происходит во всех дистрибутивах Linux.

То, что вы хотите сделать, это просто определить bash как стандартную оболочку входа для пользователей (при условии, что вы хотите использовать многопользовательскую среду).