Рейтинг:0

Что делают "$ make" и "$ make modules" при компиляции/сборке ядра?

флаг ph

Я пытаюсь собрать настроенное ядро. Итак, мой коллега сказал мне ввести терминал

делать

потом потом

делать модули

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

флаг cn
Ray
Ваш вопрос не имеет ничего общего с Ubuntu — здесь вы допустили ошибку при поиске в Google. Начните с [здесь](https://en.wikipedia.org/wiki/Make_(software)) вместо этого.
waltinator avatar
флаг it
Прочтите «человек делает».
Рейтинг:0
флаг tj

Я собираюсь ответить на ваш фактический вопрос, но я собираюсь пойти окольным путем, чтобы добраться туда, чтобы у вас был лучший контекст.

tldr: пакет, который вам нужен, делать или же построить-необходимый. Вы должны находиться в том же каталоге, что и ваш исходный код Linux, и иметь настроенный файл .config (который, похоже, вы уже сделали). Затем запустите эти команды. Ключевые слова Google, которые могут помочь: «скомпилировать ядро ​​Linux».

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

Make позволяет объявлять «цели». Традиционно целью является имя файла, за которым следует, от каких файлов она зависит.

Итак, простой пример:

привет мир: helloworld.c helloworld.h
    gcc helloworld.c -o helloworld

Это будет сохранено в вызове файла Makefile и он сообщает make, что для создания файла helloworld (скомпилированного бинарного файла) вы запускаете gcc helloworld.c -o helloworld и если helloworld уже существует, ничего не делайте, пока не будут внесены изменения в helloworld.c или helloworld.h, которые новее, чем файл helloworld.

Если это единственное правило в make-файле, выполнение делать вызовет это правило (поскольку это первое правило) и попытается построить Привет, мир но его также можно явно вызвать, запустив сделай привет мир

Make-файлы обычно намного сложнее и могут выглядеть примерно так (это сильно надуманный пример, и я понимаю, что make-файл почти никогда не будет выглядеть так, но это полезно для объяснения):

привет: привет.о libhello.о
    gcc hello.o libhello.o -o привет

привет.о: привет.с привет.ч
    gcc -c привет.с -о привет.о

libhello.o: libhello.c libhello.h
    gcc -c libhello.c -o libhello.o

Итак, если вы запустите делать или же поздороваться этот файл make проверит hello.o и libhello.o, если они не существуют, он будет искать эти цели и, таким образом, узнает, как собрать hello.o и libhello.o, а ЗАТЕМ собрать двоичный файл hello, как вы просили. в первую очередь. Это позволяет вам указывать зависимости уровня за раз и выяснять, в каком порядке компилировать все, чтобы все заработало (это также может сэкономить время компиляции, если одна из ваших библиотек не изменилась, вам не нужно перекомпилировать этот объект ).

Вы можете указать цель без каких-либо зависимостей, в этом случае она будет работать, только если целевой файл не существует. Кроме того, ваша цель не обязательно должна быть файлом, созданным этим правилом. Например:

чистый:
   привет *.o

Это позволяет вам запускать сделать чистым и он удалит скомпилированный двоичный файл и объектные файлы. Поскольку на самом деле он не создает файл с именем чистый, каждый раз, когда вы бежите сделать чистым это правило выполняется и очищает ваш рабочий каталог. Это называется фальшивой целью, и они используются довольно часто. сделать установку это тот, который вы, вероятно, часто будете видеть, устанавливая программу, которую вы создали с помощью make.

Вернуться к исходному вопросу

Итак, ядро ​​Linux использует make для сборки. У него куча фальшивых целей, когда в корне исходника Linux запустим помочь чтобы показать вам цели. Обычно вы начинаете с одной из целей, которая запускает программу, помогающую вам построить .config файл. Это было бы сделать конфигурацию, сделать менюконфигурации, сделать xconfig, и ряд других.

делать запустит цель по умолчанию, которая компилирует ядро, используя параметры, указанные в файле .config. делать модули компилирует только биты, помеченные как модули в .config файл. Между этими двумя командами у вас должно получиться ядро ​​vmlinuz и набор бинарных файлов модуля ядра. Что представляет из себя ядро ​​Linux и что оно делает, выходит за рамки этого поста, но если коротко, то это программное обеспечение, центральное для операционной системы (если вся система — это орех, тогда ядро ​​будет центральным ядром, верно? ). Он работает с наивысшим уровнем привилегий на процессоре и является единственным программным обеспечением, которое напрямую взаимодействует с памятью и аппаратным обеспечением, а все остальное программное обеспечение в системе взаимодействует с ядром, чтобы получить доступ к аппаратному обеспечению. (в этом описании есть около 20 предостережений, но оно охватывает наиболее распространенные 80% того, как все работает).

Но, надеюсь, это дает вам достаточно контекста для поиска более полезной информации, если вы ищете «скомпилировать ядро ​​​​linux», вы должны найти полдюжины ресурсов на всех уровнях сложности. Официальное руководство находится по адресу linux.org, но он очень быстро проникает в сорняки и не очень полезен, если это ваш первый раз.

В Ubuntu (и большинстве дистрибутивов) make находится в делать пакет, поэтому он устанавливается с sudo apt установить сделать однако для сборки ядра вам потребуются и другие программы, поэтому, как правило, вы хотите установить цепочку инструментов сборки и аксессуары с помощью sudo apt install build-essential который включает в себя сделать.

флаг ph
Прямо в сердце. Большое спасибо!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.