3

Это вопрос, который я недавно задал в комментарии на Slashdot. Я действительно не получил большой ответ, поэтому я решил, что я принесу его туда, куда я должен был пойти с ним изначально.

Я хотел бы собрать очень быструю загрузочную систему Linux, состоящую из минимума, необходимого для запуска чего-то вроде BusyBox. Я не из тех людей, которые много делают из времени загрузки, я в основном заинтересован с академической точки зрения и использую это, чтобы попытаться узнать немного больше о том, как работает Linux.

Я погуглил эту тему и нашел такие вещи, как Linux From Scratch, но, насколько я могу судить, у них, похоже, есть свое собственное программное обеспечение, на котором вы основываете то, что строите. У меня сложилось впечатление, что все, что вам нужно для загрузки, - это файловая система, ядро Linux, initrd, а затем пользовательское программное обеспечение для всего, что вы хотите запустить. Я читал, что initrd даже не нужен, если вы собираете драйверы SATA в ядро и, возможно, некоторые другие вещи. На самом деле, я бы сказал, что другой целью является загрузка без использования initrd, я только собираюсь использовать это на своем компьютере для развлечения.

Существуют ли веб-сайты с минимальным списком вещей, необходимых для загрузки Linux?

5 ответов5

6

На сайте DistroWatch есть много ссылок на дистрибутивы Linux.
Вы, кажется, заинтересованы в облегченной (менее загруженной) установке для изучения.
Редакция DamnSmallLinux может быть одним из вариантов.
Тем не менее, я бы посоветовал вам посмотреть дистрибутивы.

5

Для получения дополнительной информации о процессе загрузки компьютеров в целом и Linux в частности, посмотрите на эти посты Густаво Дуартес-

Как компьютеры загружаются и процесс загрузки ядра

Хотя это немного устарело, вы также можете получить копию "Понимания ядра Linux", чтобы получить более глубокое представление об архитектуре ядра, включая процесс загрузки.

1

Это правда, что initrd не требуется, если вы компилируете в драйверах HD.

но с другой стороны это веселее, используя только ядро и initrd, а не другой том.

Я делал это с busybox пару раз, потому что это был очень маленький ящик, и я хотел, чтобы он работал без HD, для кластера хранения, где каждый узел имел по 4 диска для хранения (PATA на тот момент, так что было трудно подключить более 4), я настроил PXE-сервер для предоставления ядра и initrd.

это очень весело и поучительно.

1

Вы можете взглянуть на встроенный Linux. Эта статья на linuxdevices и последующие статьи являются хорошим вступлением.

0

»...Linux to Boot "(вам может потребоваться уточнить это - Linux может" загружаться "вообще без инструментов пользователя)

базовый интерфейс командной строки: добавьте ash/dash/sh в /bin в initramfs и установите init = /bin /sh в командной строке ядра

простой init.c для перехода на рабочий стол из моего эксперимента здесь: http://murga-linux.com/puppy/viewtopic.php?p=590822#590822

#include <unistd.h>
#include <sys/mount.h>
#include <stdlib.h>

//these could be functions but gcc complains less this way 
#define EGGSACK(a)  ({if((fork())==0) execvp(a[0],a);})

int main(int argc, char** argv) {
static char **X={ "Xvesa", "-screen", "800x600x16", "-nolisten", "tcp", "-tst", NULL }
EGGSACK(X);

mount("/proc", "/proc", "proc", MS_MGC_VAL, NULL);
mount("/sys", "/sys", "sys", MS_MGC_VAL, NULL);
mount("/dev", "/dev", "devtmpfs", MS_MGC_VAL, NULL);
mount( "/dev/pts", "/dev/pts", "devpts", MS_MGC_VAL, NULL ); 
putenv("PATH=/bin");
putenv("HOME=/");
putenv("TERM=rxvt");
putenv("PS1=# ");
putenv("SHELL=/bin/sh");
putenv("DISPLAY=:0");

static char **jwm={ "jwm", "-display", ":0", NULL }
EGGSACK(jwm);

while(1) sleep(1); /*keep init alive*/
}

Примечания: /sys /proc и /devpts не являются абсолютно необходимыми, если вам не нужны mdev, top /ps и терминал соответственно. /dev должен вернуться к монтированию как dev вместо devtmpfs, если вы планируете использовать статическое дерево /dev (включенное в ссылку вместе с минимальным .config и файловой системой tarball для создания наших initramfs BUILTIN ). В большинстве случаев вам нужно только добавить материал в ядро, которое вы хотите поддерживать, а не удалять совсем - этот .config был минимумом для загрузки в среду X с поддержкой эмулятора терминала. Может быть более уместным выходить чисто, а не зацикливаться - я пытался минимизировать использование ресурсов, но было бы достаточно ожидания exec для jwm (или вашего любимого wm), а затем execvp из "sh".

/*here is a macro for a fork exec wait */
#define EGGSACKWEIGHT(a) ({int s,p;if((p=fork())==0){execvp(a[0],a);}else{while(wait(&s)!= p);}})

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .