Линукс с нуля: как прикрепить программы к чистому ядру?

Здравствуйте. Решил немного помучить себя и собрать мелкий дистрибутив.
Толком, все что мне нужно это Bash, GCC, да и блокнот, что еще нужно для счастья?
С настройкой и компиляцией ядра не возникло проблем, но уже с креплением Bash, GRUB и GCC, у меня скажем так начали возникать вопросы.
Собственно, как прикрепить это все к ядру? Как это должно выглядеть?
К примеру GRUB, как же прописать в него свой дистрибутив? Да и в общем, как его туда запихнуть?
Bash к примеру я скомпилировал, закинул в tools, соседнюю папку, папки с ядром, это чтоли все что нужно? Или что-то еще нужно сделать, чтобы ядро определило Bash, как стандартную оболочку sh?
Ну и собственно GCC, с ним так же, как с Bash?
  • Вопрос задан
  • 3598 просмотров
Пригласить эксперта
Ответы на вопрос 5
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Если у вас есть вопросы по загрузке ядра и запуску юзерспейса, наверняка вам будет интересно прочитать следующее:
https://www.kernel.org/doc/Documentation/filesyste...
https://www.kernel.org/doc/Documentation/early-use...
https://www.kernel.org/doc/Documentation/x86/boot.txt
Ответ написан
Комментировать
jt3k
@jt3k
Фронтендер, люблю работать и получать удовольствия
Ответ написан
Комментировать
foxmuldercp
@foxmuldercp
Системный администратор, программист, фотограф
Я бы посоветовал разобраться как это делается в готовом дистрибутиве - дебиан, генту. Последнее вообще очень хороший конструктор, но очень сложный и интересный
Ответ написан
Комментировать
kenny_opennix
@kenny_opennix
Собирал как-то себе дистрибутив для pos терминалов, хватило прочитать доки с сайта www.linuxfromscratch.org
И написать инсталяшку автоматическую.
Либо берем gentoo в минимальной так сказать комплектации, устанавливаем нужные компоненты, делаем архив и инсталяшку, так же такой вариант я делал в свое время.
Ответ написан
Комментировать
@AquiHostStrider
Непосредственно к ядру (на самом низком уровне) программы крепятся с помощью системных вызовов ядра. Там всё-всё делается непосредственно, там нет никаких радостей жизни вроде printf() или scanf() и прочего stdio. Для этого надо хорошо изучить Linux kernel API. Для облегчения освоения этой сложной темы можно начать с многочисленных туториалов «Writing a Linux driver», постепенно переходя к более сложным вещам.

Но так вообще-то практически никто не делает, даже эмбеддеры. Для «крепления» программ к ядру существует базовая Си-библиотека, научиться конфигурировать и собирать которую -- гораздо более общественно-полезное дело, чем собирать ядро, тупо тыкая мышью нужные опции. Именно базовая Си-библиотека и даёт нам ту самую невыразимую «линуксовость» системного окружения.

Для обычных дистрибутивов применяется GNU C library, более известная как glibc, с которой линкуются все программы, она-то и обеспечивает все радости жизни stdio, с ней в комплекте всякие низкие инициализации crt0.o, crt1.o, итп. и динамический компоновщик. Для специальных применений применяются альтернативные базовые Си-библиотеки, например uClibc, dietlibc, alibc. Если уж так хочется пользоваться непосредственно функциями ядра -- можно поизучать их исходники.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы