Линукс с нуля: как прикрепить программы к чистому ядру?
Здравствуйте. Решил немного помучить себя и собрать мелкий дистрибутив.
Толком, все что мне нужно это Bash, GCC, да и блокнот, что еще нужно для счастья?
С настройкой и компиляцией ядра не возникло проблем, но уже с креплением Bash, GRUB и GCC, у меня скажем так начали возникать вопросы.
Собственно, как прикрепить это все к ядру? Как это должно выглядеть?
К примеру GRUB, как же прописать в него свой дистрибутив? Да и в общем, как его туда запихнуть?
Bash к примеру я скомпилировал, закинул в tools, соседнюю папку, папки с ядром, это чтоли все что нужно? Или что-то еще нужно сделать, чтобы ядро определило Bash, как стандартную оболочку sh?
Ну и собственно GCC, с ним так же, как с Bash?
Я бы посоветовал разобраться как это делается в готовом дистрибутиве - дебиан, генту. Последнее вообще очень хороший конструктор, но очень сложный и интересный
Собирал как-то себе дистрибутив для pos терминалов, хватило прочитать доки с сайта www.linuxfromscratch.org
И написать инсталяшку автоматическую.
Либо берем gentoo в минимальной так сказать комплектации, устанавливаем нужные компоненты, делаем архив и инсталяшку, так же такой вариант я делал в свое время.
Непосредственно к ядру (на самом низком уровне) программы крепятся с помощью системных вызовов ядра. Там всё-всё делается непосредственно, там нет никаких радостей жизни вроде printf() или scanf() и прочего stdio. Для этого надо хорошо изучить Linux kernel API. Для облегчения освоения этой сложной темы можно начать с многочисленных туториалов «Writing a Linux driver», постепенно переходя к более сложным вещам.
Но так вообще-то практически никто не делает, даже эмбеддеры. Для «крепления» программ к ядру существует базовая Си-библиотека, научиться конфигурировать и собирать которую -- гораздо более общественно-полезное дело, чем собирать ядро, тупо тыкая мышью нужные опции. Именно базовая Си-библиотека и даёт нам ту самую невыразимую «линуксовость» системного окружения.
Для обычных дистрибутивов применяется GNU C library, более известная как glibc, с которой линкуются все программы, она-то и обеспечивает все радости жизни stdio, с ней в комплекте всякие низкие инициализации crt0.o, crt1.o, итп. и динамический компоновщик. Для специальных применений применяются альтернативные базовые Си-библиотеки, например uClibc, dietlibc, alibc. Если уж так хочется пользоваться непосредственно функциями ядра -- можно поизучать их исходники.