diff options
Diffstat (limited to 'lfs-12.0-sysv/chapter05')
-rw-r--r-- | lfs-12.0-sysv/chapter05/binutils-pass1.html | 243 | ||||
-rw-r--r-- | lfs-12.0-sysv/chapter05/chapter05.html | 110 | ||||
-rw-r--r-- | lfs-12.0-sysv/chapter05/gcc-libstdc++.html | 214 | ||||
-rw-r--r-- | lfs-12.0-sysv/chapter05/gcc-pass1.html | 334 | ||||
-rw-r--r-- | lfs-12.0-sysv/chapter05/glibc.html | 361 | ||||
-rw-r--r-- | lfs-12.0-sysv/chapter05/introduction.html | 94 | ||||
-rw-r--r-- | lfs-12.0-sysv/chapter05/linux-headers.html | 315 |
7 files changed, 1671 insertions, 0 deletions
diff --git a/lfs-12.0-sysv/chapter05/binutils-pass1.html b/lfs-12.0-sysv/chapter05/binutils-pass1.html new file mode 100644 index 0000000..05ba68a --- /dev/null +++ b/lfs-12.0-sysv/chapter05/binutils-pass1.html @@ -0,0 +1,243 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> + <title> + 5.2. Binutils-2.41 - Проход 1 + </title> + <link rel="stylesheet" type="text/css" href="../stylesheets/lfs.css" /> + <meta name="generator" content="DocBook XSL Stylesheets V1.79.1" /> + <link rel="stylesheet" href="../stylesheets/lfs-print.css" type= + "text/css" media="print" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + </head> + <body class="lfs" id="lfs-12.0"> + <div class="navheader"> + <h4> + Линукс с нуля - Версия 12.0 + </h4> + <h3> + Глава 5. Сборка кросс-тулчейна + </h3> + <ul> + <li class="prev"> + <a accesskey="p" href="introduction.html" title= + "Введение">Пред.</a> + <p> + Введение + </p> + </li> + <li class="next"> + <a accesskey="n" href="gcc-pass1.html" title= + "GCC-13.2.0 - Проход 1">След.</a> + <p> + GCC-13.2.0 - Проход 1 + </p> + </li> + <li class="up"> + <a accesskey="u" href="chapter05.html" title= + "Глава 5. Сборка кросс-тулчейна">Наверх</a> + </li> + <li class="home"> + <a accesskey="h" href="../index.html" title= + "Линукс с нуля - Версия 12.0">Начало</a> + </li> + </ul> + </div> + <div class="wrap" lang="en" xml:lang="en"> + <h1 class="sect1"> + <a id="ch-tools-binutils-pass1" name= + "ch-tools-binutils-pass1"></a>5.2. Binutils-2.41 - Проход 1 + </h1> + <div class="package" lang="en" xml:lang="en"> + <p> + Пакет Binutils содержит компоновщик, ассемблер и другие инструменты + для работы с объектными файлами. + </p> + <div class="segmentedlist"> + <div class="seglistitem"> + <div class="seg"> + <strong class="segtitle">Приблизительное время сборки:</strong> + <span class="segbody">1 SBU</span> + </div> + <div class="seg"> + <strong class="segtitle">Требуемое дисковое + пространство:</strong> <span class="segbody">647 MB</span> + </div> + </div> + </div> + </div> + <div class="installation" lang="en" xml:lang="en"> + <h2 class="sect2"> + 5.2.1. Установка кросс-пакета Binutils + </h2> + <div class="admon note"> + <img alt="[Примечание]" src="../images/note.png" /> + <h3> + Примечание + </h3> + <p> + Вернитесь назад и перечитайте примечания в разделе <a class= + "xref" href="../partintro/generalinstructions.html" title= + "Общие инструкции по компиляции">Общие инструкции по + компиляции</a>. Понимание информации, помеченной как важная, + может впоследствии избавить вас от многих проблем. + </p> + </div> + <p> + Очень важно, чтобы Binutils был скомпилированным первым, потому что + и Glibc, и GCC выполняют различные тесты на доступных компоновщике + и ассемблере, чтобы определить, какие из их функций следует + включить. + </p> + <p> + В документации пакета Binutils рекомендуется выполнять сборку в + отдельном каталоге, создадим его: + </p> + <pre class="userinput"><kbd class="command">mkdir -v build +cd build</kbd></pre> + <div class="admon note"> + <img alt="[Примечание]" src="../images/note.png" /> + <h3> + Примечание + </h3> + <p> + Для того, чтобы значения SBU, перечисленные в остальной части + книги, были вам полезны, измерьте время, необходимое для сборки + этого пакета, начиная с настройки и заканчивая установкой. Чтобы + добиться этого, оберните команды сборки командой <span class= + "command"><strong>time</strong></span>: <strong class= + "userinput"><code>time { ../configure ... && make + && make install; }</code></strong>. + </p> + </div> + <p> + Теперь подготовьте Binutils к компиляции: + </p> + <pre class="userinput"><kbd class= + "command">../configure --prefix=$LFS/tools \ + --with-sysroot=$LFS \ + --target=$LFS_TGT \ + --disable-nls \ + --enable-gprofng=no \ + --disable-werror</kbd></pre> + <div class="variablelist"> + <p class="title"> + <strong>Значение параметров настройки:</strong> + </p> + <dl class="variablelist"> + <dt> + <span class="term"><em class= + "parameter"><code>--prefix=$LFS/tools</code></em></span> + </dt> + <dd> + <p> + Указывает сценарию configure подготовить к установке пакет + Binutils в каталог <code class="filename">$LFS/tools</code>. + </p> + </dd> + <dt> + <span class="term"><em class= + "parameter"><code>--with-sysroot=$LFS</code></em></span> + </dt> + <dd> + <p> + Для кросс-компляции указывает системе сборки искать в $LFS + библиотеки целевой системы, если необходимо. + </p> + </dd> + <dt> + <span class="term"><code class= + "envar">--target=$LFS_TGT</code></span> + </dt> + <dd> + <p> + Поскольку название машины в значении переменной <code class= + "envar">LFS_TGT</code> может отличаться от значения, которое + возвращает сценарий <span class= + "command"><strong>config.guess</strong></span>, этот аргумент + укажет сценарию <span class= + "command"><strong>configure</strong></span> как настроить + систему сборки пакета Binutils для создания + кросс-компоновщика. + </p> + </dd> + <dt> + <span class="term"><em class= + "parameter"><code>--disable-nls</code></em></span> + </dt> + <dd> + <p> + Этот параметр отключает интернационализацию, так как i18n не + требуется для временных инструментов. + </p> + </dd> + <dt> + <span class="term"><em class= + "parameter"><code>--enable-gprofng=no</code></em></span> + </dt> + <dd> + <p> + Этот параметр отключает сборку gprofng, который не нужен для + временного инструментария. + </p> + </dd> + <dt> + <span class="term"><em class= + "parameter"><code>--disable-werror</code></em></span> + </dt> + <dd> + <p> + Этот параметр предотвращает остановку сборки в случае + появления предупреждений от компилятора хоста. + </p> + </dd> + </dl> + </div> + <p> + Скомпилируйте пакет: + </p> + <pre class="userinput"><kbd class="command">make</kbd></pre> + <p> + Установите пакет: + </p> + <pre class="userinput"><kbd class="command">make install</kbd></pre> + </div> + <div class="content" lang="en" xml:lang="en"> + <p> + Подробная информация об этом пакете находится в <a class="xref" + href="../chapter08/binutils.html#contents-binutils" title= + "8.18.2. Содержимое пакета Binutils">Раздел 8.18.2, + «Содержимое пакета Binutils.»</a> + </p> + </div> + </div> + <div class="navfooter"> + <ul> + <li class="prev"> + <a accesskey="p" href="introduction.html" title= + "Введение">Пред.</a> + <p> + Введение + </p> + </li> + <li class="next"> + <a accesskey="n" href="gcc-pass1.html" title= + "GCC-13.2.0 - Проход 1">След.</a> + <p> + GCC-13.2.0 - Проход 1 + </p> + </li> + <li class="up"> + <a accesskey="u" href="chapter05.html" title= + "Глава 5. Сборка кросс-тулчейна">Наверх</a> + </li> + <li class="home"> + <a accesskey="h" href="../index.html" title= + "Линукс с нуля - Версия 12.0">Начало</a> + </li> + </ul> + </div> + </body> +</html> diff --git a/lfs-12.0-sysv/chapter05/chapter05.html b/lfs-12.0-sysv/chapter05/chapter05.html new file mode 100644 index 0000000..65f7c25 --- /dev/null +++ b/lfs-12.0-sysv/chapter05/chapter05.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> + <title> + Глава 5. Сборка кросс-тулчейна + </title> + <link rel="stylesheet" type="text/css" href="../stylesheets/lfs.css" /> + <meta name="generator" content="DocBook XSL Stylesheets V1.79.1" /> + <link rel="stylesheet" href="../stylesheets/lfs-print.css" type= + "text/css" media="print" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + </head> + <body class="lfs" id="lfs-12.0"> + <div class="navheader"> + <h4> + Линукс с нуля - Версия 12.0 + </h4> + <h3> + Часть III. Сборка кросс-компилятора и набора временных + инструментов + </h3> + <ul> + <li class="prev"> + <a accesskey="p" href="../partintro/generalinstructions.html" + title="Общие инструкции по компиляции">Пред.</a> + <p> + Общие инструкции по компиляции + </p> + </li> + <li class="next"> + <a accesskey="n" href="introduction.html" title= + "Введение">След.</a> + <p> + Введение + </p> + </li> + <li class="up"> + <a accesskey="u" href="../part3.html" title= + "Часть III. Сборка кросс-компилятора и набора временных инструментов"> + Наверх</a> + </li> + <li class="home"> + <a accesskey="h" href="../index.html" title= + "Линукс с нуля - Версия 12.0">Начало</a> + </li> + </ul> + </div> + <div class="chapter" lang="en" xml:lang="en"> + <h1 class="chapter"> + <a id="chapter-cross-tools" name="chapter-cross-tools"></a>5. Сборка + кросс-тулчейна + </h1> + <div class="toc"> + <h3> + Содержание + </h3> + <ul> + <li class="sect1"> + <a href="introduction.html">Введение</a> + </li> + <li class="sect1"> + <a href="binutils-pass1.html">Binutils-2.41 - Проход 1</a> + </li> + <li class="sect1"> + <a href="gcc-pass1.html">GCC-13.2.0 - Проход 1</a> + </li> + <li class="sect1"> + <a href="linux-headers.html">Заголовочные файлы Linux-6.4.12 + API</a> + </li> + <li class="sect1"> + <a href="glibc.html">Glibc-2.38</a> + </li> + <li class="sect1"> + <a href="gcc-libstdc++.html">Libstdc++ из GCC-13.2.0</a> + </li> + </ul> + </div> + </div> + <div class="navfooter"> + <ul> + <li class="prev"> + <a accesskey="p" href="../partintro/generalinstructions.html" + title="Общие инструкции по компиляции">Пред.</a> + <p> + Общие инструкции по компиляции + </p> + </li> + <li class="next"> + <a accesskey="n" href="introduction.html" title= + "Введение">След.</a> + <p> + Введение + </p> + </li> + <li class="up"> + <a accesskey="u" href="../part3.html" title= + "Часть III. Сборка кросс-компилятора и набора временных инструментов"> + Наверх</a> + </li> + <li class="home"> + <a accesskey="h" href="../index.html" title= + "Линукс с нуля - Версия 12.0">Начало</a> + </li> + </ul> + </div> + </body> +</html> diff --git a/lfs-12.0-sysv/chapter05/gcc-libstdc++.html b/lfs-12.0-sysv/chapter05/gcc-libstdc++.html new file mode 100644 index 0000000..aa90e3d --- /dev/null +++ b/lfs-12.0-sysv/chapter05/gcc-libstdc++.html @@ -0,0 +1,214 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> + <title> + 5.6. Libstdc++ из GCC-13.2.0 + </title> + <link rel="stylesheet" type="text/css" href="../stylesheets/lfs.css" /> + <meta name="generator" content="DocBook XSL Stylesheets V1.79.1" /> + <link rel="stylesheet" href="../stylesheets/lfs-print.css" type= + "text/css" media="print" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + </head> + <body class="lfs" id="lfs-12.0"> + <div class="navheader"> + <h4> + Линукс с нуля - Версия 12.0 + </h4> + <h3> + Глава 5. Сборка кросс-тулчейна + </h3> + <ul> + <li class="prev"> + <a accesskey="p" href="glibc.html" title="Glibc-2.38">Пред.</a> + <p> + Glibc-2.38 + </p> + </li> + <li class="next"> + <a accesskey="n" href="../chapter06/chapter06.html" title= + "Кросс-Компиляция временных инструментов">След.</a> + <p> + Кросс-Компиляция временных инструментов + </p> + </li> + <li class="up"> + <a accesskey="u" href="chapter05.html" title= + "Глава 5. Сборка кросс-тулчейна">Наверх</a> + </li> + <li class="home"> + <a accesskey="h" href="../index.html" title= + "Линукс с нуля - Версия 12.0">Начало</a> + </li> + </ul> + </div> + <div class="wrap" lang="en" xml:lang="en"> + <h1 class="sect1"> + <a id="ch-tools-libstdcpp" name="ch-tools-libstdcpp"></a>5.6. + Libstdc++ из GCC-13.2.0 + </h1> + <div class="package" lang="en" xml:lang="en"> + <p> + Libstdc++ — это стандартная библиотека C++. Она нужна для + компиляции кода C++ (часть GCC написана на C++), когда мы собирали + <a class="xref" href="gcc-pass1.html" title= + "5.3. GCC-13.2.0 - Проход 1">GCC-Проход 1</a>, нам пришлось + отложить её установку, потому что она зависит от библиотеки Glibc, + которой еще не было в целевом каталоге. + </p> + <div class="segmentedlist"> + <div class="seglistitem"> + <div class="seg"> + <strong class="segtitle">Приблизительное время сборки:</strong> + <span class="segbody">0.2 SBU</span> + </div> + <div class="seg"> + <strong class="segtitle">Требуемое дисковое + пространство:</strong> <span class="segbody">1.1 GB</span> + </div> + </div> + </div> + </div> + <div class="installation" lang="en" xml:lang="en"> + <h2 class="sect2"> + 5.6.1. Установка библиотеки Libstdc++ + </h2> + <div class="admon note"> + <img alt="[Примечание]" src="../images/note.png" /> + <h3> + Примечание + </h3> + <p> + <span class="application">Libstdc++</span> является частью + исходников GCC. Сначала вы должны распаковать архив GCC и перейти + в каталог <code class="filename">gcc-13.2.0</code>. + </p> + </div> + <p> + Создайте отдельный каталог сборки для libstdc++ и перейдите в него: + </p> + <pre class="userinput"><kbd class="command">mkdir -v build +cd build</kbd></pre> + <p> + Подготовьте libstdc++ к компиляции: + </p> + <pre class="userinput"><kbd class= + "command">../libstdc++-v3/configure \ + --host=$LFS_TGT \ + --build=$(../config.guess) \ + --prefix=/usr \ + --disable-multilib \ + --disable-nls \ + --disable-libstdcxx-pch \ + --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/13.2.0</kbd></pre> + <div class="variablelist"> + <p class="title"> + <strong>Значение параметров настройки:</strong> + </p> + <dl class="variablelist"> + <dt> + <span class="term"><em class= + "parameter"><code>--host=...</code></em></span> + </dt> + <dd> + <p> + Указывает, что кросс-компилятор, который мы только что + создали, должен использоваться вместо того, который находится + в <code class="filename">/usr/bin</code>. + </p> + </dd> + <dt> + <span class="term"><em class= + "parameter"><code>--disable-libstdcxx-pch</code></em></span> + </dt> + <dd> + <p> + Этот аргумент предотвращает установку предварительно + скомпилированных include-файлов, которые на данном этапе не + нужны. + </p> + </dd> + <dt> + <span class="term"><em class= + "parameter"><code>--with-gxx-include-dir=/tools/$LFS_TGT/include/c++/13.2.0</code></em></span> + </dt> + <dd> + <p> + Указывает каталог установки для include-файлов. Поскольку + libstdc++ является стандартной библиотекой C++ для LFS, этот + каталог должен соответствовать местоположению, в котором + компилятор C++ (<span class= + "command"><strong>$LFS_TGT-g++</strong></span>) будет искать + стандартные включаемые файлы C++. При обычной сборке эта + информация автоматически передается в Libstdc++ при + выполнении <span class= + "command"><strong>configure</strong></span> из каталога + верхнего уровня. В нашем случае эта информация должна быть + указана явно. Компилятор C++ добавит путь sysroot + <code class="filename">$LFS</code> (указанный при сборке GCC + Проход 1) к пути поиска include-файлов, поэтому фактически он + будет искать в <code class= + "filename">$LFS/tools/$LFS_TGT/include/c++/13.2.0</code>. + Комбинация переменной <em class= + "parameter"><code>DESTDIR</code></em> (в приведенной ниже + команде <span class="command"><strong>make + install</strong></span>) и этого аргумента обеспечивает + установку заголовочных файлов туда. + </p> + </dd> + </dl> + </div> + <p> + Скомпилируйте Libstdc++, выполнив: + </p> + <pre class="userinput"><kbd class="command">make</kbd></pre> + <p> + Установите библиотеку: + </p> + <pre class="userinput"><kbd class= + "command">make DESTDIR=$LFS install</kbd></pre> + <p> + Удалите архивные файлы libtool, поскольку они потенциально опасны + при кросс-компиляции: + </p> + <pre class="userinput"><kbd class= + "command">rm -v $LFS/usr/lib/lib{stdc++,stdc++fs,supc++}.la</kbd></pre> + </div> + <div class="content" lang="en" xml:lang="en"> + <p> + Подробная информация об этом пакете приведена в <a class="xref" + href="../chapter08/gcc.html#contents-gcc" title= + "8.27.2. Содержимое пакета GCC">Раздел 8.27.2, «Содержимое + пакета GCC.»</a> + </p> + </div> + </div> + <div class="navfooter"> + <ul> + <li class="prev"> + <a accesskey="p" href="glibc.html" title="Glibc-2.38">Пред.</a> + <p> + Glibc-2.38 + </p> + </li> + <li class="next"> + <a accesskey="n" href="../chapter06/chapter06.html" title= + "Кросс-Компиляция временных инструментов">След.</a> + <p> + Кросс-Компиляция временных инструментов + </p> + </li> + <li class="up"> + <a accesskey="u" href="chapter05.html" title= + "Глава 5. Сборка кросс-тулчейна">Наверх</a> + </li> + <li class="home"> + <a accesskey="h" href="../index.html" title= + "Линукс с нуля - Версия 12.0">Начало</a> + </li> + </ul> + </div> + </body> +</html> diff --git a/lfs-12.0-sysv/chapter05/gcc-pass1.html b/lfs-12.0-sysv/chapter05/gcc-pass1.html new file mode 100644 index 0000000..004a062 --- /dev/null +++ b/lfs-12.0-sysv/chapter05/gcc-pass1.html @@ -0,0 +1,334 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> + <title> + 5.3. GCC-13.2.0 - Проход 1 + </title> + <link rel="stylesheet" type="text/css" href="../stylesheets/lfs.css" /> + <meta name="generator" content="DocBook XSL Stylesheets V1.79.1" /> + <link rel="stylesheet" href="../stylesheets/lfs-print.css" type= + "text/css" media="print" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + </head> + <body class="lfs" id="lfs-12.0"> + <div class="navheader"> + <h4> + Линукс с нуля - Версия 12.0 + </h4> + <h3> + Глава 5. Сборка кросс-тулчейна + </h3> + <ul> + <li class="prev"> + <a accesskey="p" href="binutils-pass1.html" title= + "Binutils-2.41 - Проход 1">Пред.</a> + <p> + Binutils-2.41 - Проход 1 + </p> + </li> + <li class="next"> + <a accesskey="n" href="linux-headers.html" title= + "Заголовочные файлы Linux-6.4.12 API">След.</a> + <p> + Заголовочные файлы Linux-6.4.12 API + </p> + </li> + <li class="up"> + <a accesskey="u" href="chapter05.html" title= + "Глава 5. Сборка кросс-тулчейна">Наверх</a> + </li> + <li class="home"> + <a accesskey="h" href="../index.html" title= + "Линукс с нуля - Версия 12.0">Начало</a> + </li> + </ul> + </div> + <div class="wrap" lang="en" xml:lang="en"> + <h1 class="sect1"> + <a id="ch-tools-gcc-pass1" name="ch-tools-gcc-pass1"></a>5.3. + GCC-13.2.0 - Проход 1 + </h1> + <div class="package" lang="en" xml:lang="en"> + <p> + Пакет GCC содержит коллекцию компиляторов GNU, которая включает + компиляторы C и C++. + </p> + <div class="segmentedlist"> + <div class="seglistitem"> + <div class="seg"> + <strong class="segtitle">Приблизительное время сборки:</strong> + <span class="segbody">3.5 SBU</span> + </div> + <div class="seg"> + <strong class="segtitle">Требуемое дисковое + пространство:</strong> <span class="segbody">4.2 GB</span> + </div> + </div> + </div> + </div> + <div class="installation" lang="en" xml:lang="en"> + <h2 class="sect2"> + 5.3.1. Установка кросс-пакета GCC + </h2> + <p> + Для GCC требуются пакеты GMP, MPFR и MPC. Поскольку эти пакеты + могут отсутствовать в дистрибутиве вашего хоста, они будут собраны + с помощью GCC. Распакуйте каждый пакет в исходный каталог GCC и + переименуйте получившиеся каталоги, чтобы процедуры сборки GCC + использовали их автоматически: + </p> + <div class="admon note"> + <img alt="[Примечание]" src="../images/note.png" /> + <h3> + Примечание + </h3> + <p> + В этой главе часто возникают недоразумения, хотя применяются те + же процедуры, что и в любой другой главе, следуйте инструкции + которую получили ранее (<a class="xref" href= + "../partintro/generalinstructions.html#buildinstr">Инструкции по + сборке пакетов</a>). Сначала распакуйте пакет gcc-13.2.0 из + архива, а затем перейдите в созданный каталог. Только после этого + следует приступить к приведенным ниже инструкциям. + </p> + </div> + <pre class="userinput"><kbd class= + "command">tar -xf ../mpfr-4.2.0.tar.xz +mv -v mpfr-4.2.0 mpfr +tar -xf ../gmp-6.3.0.tar.xz +mv -v gmp-6.3.0 gmp +tar -xf ../mpc-1.3.1.tar.gz +mv -v mpc-1.3.1 mpc</kbd></pre> + <p> + На хостах x86_64 установите имя каталога по умолчанию для 64-битных + библиотек на <span class="quote">«<span class= + "quote">lib</span>»</span>: + </p> + <pre class="userinput"><kbd class="command">case $(uname -m) in + x86_64) + sed -e '/m64=/s/lib64/lib/' \ + -i.orig gcc/config/i386/t-linux64 + ;; +esac</kbd></pre> + <p> + В документации к GCC рекомендуется собирать GCC в отдельном + каталоге: + </p> + <pre class="userinput"><kbd class="command">mkdir -v build +cd build</kbd></pre> + <p> + Подготовьте GCC к компиляции: + </p> + <pre class="userinput"><kbd class= + "command">../configure \ + --target=$LFS_TGT \ + --prefix=$LFS/tools \ + --with-glibc-version=2.38 \ + --with-sysroot=$LFS \ + --with-newlib \ + --without-headers \ + --enable-default-pie \ + --enable-default-ssp \ + --disable-nls \ + --disable-shared \ + --disable-multilib \ + --disable-threads \ + --disable-libatomic \ + --disable-libgomp \ + --disable-libquadmath \ + --disable-libssp \ + --disable-libvtv \ + --disable-libstdcxx \ + --enable-languages=c,c++</kbd></pre> + <div class="variablelist"> + <p class="title"> + <strong>Значение параметров настройки:</strong> + </p> + <dl class="variablelist"> + <dt> + <span class="term"><em class= + "parameter"><code>--with-glibc-version=2.38</code></em></span> + </dt> + <dd> + <p> + Этот параметр указывает версию Glibc, которая будет + использоваться на целевой системе. Он не имеет отношения к + libc хост-дистрибутива, потому что все, скомпилированное в + этом разделе, будет выполняться в среде chroot, которая + изолирована от libc хост-дистрибутива. + </p> + </dd> + <dt> + <span class="term"><em class= + "parameter"><code>--with-newlib</code></em></span> + </dt> + <dd> + <p> + Поскольку работающая библиотека C еще недоступна, это + гарантирует, что константа inhibit_libc будет определена при + сборке libgcc. Это предотвращает компиляцию любого кода, + требующего поддержки libc. + </p> + </dd> + <dt> + <span class="term"><em class= + "parameter"><code>--without-headers</code></em></span> + </dt> + <dd> + <p> + При создании полного кросс-компилятора GCC требует наличия + стандартных заголовков, совместимых с целевой системой. Для + наших целей эти заголовки не понадобятся. Этот параметр + предотвращает их поиск GCC. + </p> + </dd> + <dt> + <span class="term"><em class= + "parameter"><code>--enable-default-pie и + --enable-default-ssp</code></em></span> + </dt> + <dd> + <p> + Эти параметры позволяют GCC по умолчанию компилировать + программы с некоторые функциями усиливающими безопасность + (более подробная информация о них приведена в <a class="xref" + href="../chapter08/gcc.html#pie-ssp-info">примечание о PIE и + SSP</a> в Главе 8). На данном этапе это не является строго + обязательным, поскольку компилятор будет создавать только + временные исполняемые файлы. Но лучше, чтобы временные пакеты + были максимально приближены к тем, что будут в готовой + системе LFS. + </p> + </dd> + <dt> + <span class="term"><em class= + "parameter"><code>--disable-shared</code></em></span> + </dt> + <dd> + <p> + Этот параметр заставляет GCC статически связывать свои + внутренние библиотеки. Он необходим потому что общие + библиотеки требуют Glibc, который еще не установлен в целевой + системе. + </p> + </dd> + <dt> + <span class="term"><em class= + "parameter"><code>--disable-multilib</code></em></span> + </dt> + <dd> + <p> + Для платформы x86_64, LFS пока не поддерживает конфигурацию + multilib. Этот аргумент ни как не повлияет, если установка + выполняется на платформе x86. + </p> + </dd> + <dt> + <span class="term"><em class= + "parameter"><code>--disable-threads, --disable-libatomic, + --disable-libgomp, --disable-libquadmath, --disable-libssp, + --disable-libvtv, --disable-libstdcxx</code></em></span> + </dt> + <dd> + <p> + Эти аргументы отключают поддержку расширений для работы с + многопоточностью, libatomic, libgomp, libquadmath, libssp, + libvtv и стандартной библиотеки C++ соответственно. Эти + функции могут не скомпилироваться при сборке + кросс-компилятора и не нужны для задач кросс-компиляции + временной libc + </p> + </dd> + <dt> + <span class="term"><em class= + "parameter"><code>--enable-languages=c,c++</code></em></span> + </dt> + <dd> + <p> + Этот параметр обеспечивает сборку только компиляторов C и + C++. Это единственные языки, которые нужны сейчас. + </p> + </dd> + </dl> + </div> + <p> + Скомпилируйте GCC, выполнив: + </p> + <pre class="userinput"><kbd class="command">make</kbd></pre> + <p> + Установите пакет: + </p> + <pre class="userinput"><kbd class="command">make install</kbd></pre> + <p> + Во время сборки GCC установил пару внутренних системных + заголовочных файлов. Обычно один из файлов <code class= + "filename">limits.h</code>, включает соответствующие системные + ограничения <code class="filename">limits.h</code>, в данном случае + <code class="filename">$LFS/usr/include/limits.h</code>. Однако во + время сборки GCC <code class= + "filename">$LFS/usr/include/limits.h</code> не существует, поэтому + только что установленный внутренний заголовочный файл является + частичным, автономным файлом и не включает расширенные функции + системного файла. Этого достаточно для сборки Glibc, но полный + внутренний заголовочный файл понадобится позже. Создайте полную + версию внутреннего заголовочного файла с помощью команды, + идентичной той, что система сборки GCC использует в обычных + обстоятельствах: + </p> + <div class="admon note"> + <img alt="[Примечание]" src="../images/note.png" /> + <h3> + Примечание + </h3> + <p> + В приведенной ниже команде показан пример подстановки вложенных + команд, используя два метода: обратные кавычки и конструкцию + <code class="literal">$()</code>. Его можно было бы переписать, + используя один и тот же метод для обеих замен, но сделано так, + чтобы продемонстрировать, как их можно использовать одновременно. + В целом метод <code class="literal">$()</code> предпочтительнее. + </p> + </div> + <pre class="userinput"><kbd class="command">cd .. +cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \ + `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include/limits.h</kbd></pre> + </div> + <div class="content" lang="en" xml:lang="en"> + <p> + Подробная информация об этом пакете находится в <a class="xref" + href="../chapter08/gcc.html#contents-gcc" title= + "8.27.2. Содержимое пакета GCC">Раздел 8.27.2, «Содержимое + пакета GCC.»</a> + </p> + </div> + </div> + <div class="navfooter"> + <ul> + <li class="prev"> + <a accesskey="p" href="binutils-pass1.html" title= + "Binutils-2.41 - Проход 1">Пред.</a> + <p> + Binutils-2.41 - Проход 1 + </p> + </li> + <li class="next"> + <a accesskey="n" href="linux-headers.html" title= + "Заголовочные файлы Linux-6.4.12 API">След.</a> + <p> + Заголовочные файлы Linux-6.4.12 API + </p> + </li> + <li class="up"> + <a accesskey="u" href="chapter05.html" title= + "Глава 5. Сборка кросс-тулчейна">Наверх</a> + </li> + <li class="home"> + <a accesskey="h" href="../index.html" title= + "Линукс с нуля - Версия 12.0">Начало</a> + </li> + </ul> + </div> + </body> +</html> diff --git a/lfs-12.0-sysv/chapter05/glibc.html b/lfs-12.0-sysv/chapter05/glibc.html new file mode 100644 index 0000000..fbfc139 --- /dev/null +++ b/lfs-12.0-sysv/chapter05/glibc.html @@ -0,0 +1,361 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> + <title> + 5.5. Glibc-2.38 + </title> + <link rel="stylesheet" type="text/css" href="../stylesheets/lfs.css" /> + <meta name="generator" content="DocBook XSL Stylesheets V1.79.1" /> + <link rel="stylesheet" href="../stylesheets/lfs-print.css" type= + "text/css" media="print" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + </head> + <body class="lfs" id="lfs-12.0"> + <div class="navheader"> + <h4> + Линукс с нуля - Версия 12.0 + </h4> + <h3> + Глава 5. Сборка кросс-тулчейна + </h3> + <ul> + <li class="prev"> + <a accesskey="p" href="linux-headers.html" title= + "Заголовочные файлы Linux-6.4.12 API">Пред.</a> + <p> + Заголовочные файлы Linux-6.4.12 API + </p> + </li> + <li class="next"> + <a accesskey="n" href="gcc-libstdc++.html" title= + "Libstdc++ из GCC-13.2.0">След.</a> + <p> + Libstdc++ из GCC-13.2.0 + </p> + </li> + <li class="up"> + <a accesskey="u" href="chapter05.html" title= + "Глава 5. Сборка кросс-тулчейна">Наверх</a> + </li> + <li class="home"> + <a accesskey="h" href="../index.html" title= + "Линукс с нуля - Версия 12.0">Начало</a> + </li> + </ul> + </div> + <div class="wrap" lang="en" xml:lang="en"> + <h1 class="sect1"> + <a id="ch-tools-glibc" name="ch-tools-glibc"></a>5.5. Glibc-2.38 + </h1> + <div class="package" lang="en" xml:lang="en"> + <p> + Пакет Glibc содержит основную библиотеку C. Эта библиотека + предоставляет основные процедуры для выделения памяти, поиска в + каталогах, открытия и закрытия файлов, чтения и записи файлов, + обработки строк, сопоставления с образцом, арифметики и так далее + </p> + <div class="segmentedlist"> + <div class="seglistitem"> + <div class="seg"> + <strong class="segtitle">Приблизительное время сборки:</strong> + <span class="segbody">1.6 SBU</span> + </div> + <div class="seg"> + <strong class="segtitle">Требуемое дисковое + пространство:</strong> <span class="segbody">858 MB</span> + </div> + </div> + </div> + </div> + <div class="installation" lang="en" xml:lang="en"> + <h2 class="sect2"> + 5.5.1. Установка пакета Glibc + </h2> + <p> + Во-первых, создайте символическую ссылку для соответствия + требованиям LSB. Кроме того, для совместимости с x86_64 создайте + символическую ссылку, необходимую для правильной работы загрузчика + динамической библиотеки: + </p> + <pre class="userinput"><kbd class="command">case $(uname -m) in + i?86) ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3 + ;; + x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64 + ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3 + ;; +esac</kbd></pre> + <div class="admon note"> + <img alt="[Примечание]" src="../images/note.png" /> + <h3> + Примечание + </h3> + <p> + Приведенная выше команда верна. Команда <span class= + "command"><strong>ln</strong></span> имеет несколько вариантов + синтаксиса, поэтому обязательно ознакомьтесь с <span class= + "command"><strong>info coreutils ln</strong></span> и + <code class="filename">ln(1)</code>, прежде чем сообщать об + ошибке. + </p> + </div> + <p> + Некоторые программы, использующие Glibc, применяют несовместимый с + FHS каталог <code class="filename">/var/db</code> для хранения + своих данных времени выполнения. Установите следующий патч, чтобы + такие программы хранили свои данные в местах, совместимых с FHS: + </p> + <pre class="userinput"><kbd class= + "command">patch -Np1 -i ../glibc-2.38-fhs-1.patch</kbd></pre> + <p> + В документации к Glibc рекомендуется собирать Glibc в отдельном + каталоге: + </p> + <pre class="userinput"><kbd class="command">mkdir -v build +cd build</kbd></pre> + <p> + Убедитесь, что утилиты <span class= + "command"><strong>ldconfig</strong></span> and <span class= + "command"><strong>sln</strong></span> установлены в <code class= + "filename">/usr/sbin</code>: + </p> + <pre class="userinput"><kbd class= + "command">echo "rootsbindir=/usr/sbin" > configparms</kbd></pre> + <p> + Затем подготовьте Glibc к компиляции: + </p> + <pre class="userinput"><kbd class= + "command">../configure \ + --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(../scripts/config.guess) \ + --enable-kernel=4.14 \ + --with-headers=$LFS/usr/include \ + libc_cv_slibdir=/usr/lib</kbd></pre> + <div class="variablelist"> + <p class="title"> + <strong>Значение параметров настройки:</strong> + </p> + <dl class="variablelist"> + <dt> + <span class="term"><em class="parameter"><code>--host=$LFS_TGT, + --build=$(../scripts/config.guess)</code></em></span> + </dt> + <dd> + <p> + Комбинация этих опций указывает на то, что система сборки + Glibc настраивается на кросс-компиляцию с использованием + кросс-компоновщика и кросс-компилятора в <code class= + "filename">$LFS/tools</code>. + </p> + </dd> + <dt> + <span class="term"><em class= + "parameter"><code>--enable-kernel=4.14</code></em></span> + </dt> + <dd> + <p> + Этот параметр позволяет Glibc выполнять компиляцию библиотеки + с поддержкой ядра 4.14 и более поздних версий. Поддержка + более старых ядер не включена. + </p> + </dd> + <dt> + <span class="term"><em class= + "parameter"><code>--with-headers=$LFS/usr/include</code></em></span> + </dt> + <dd> + <p> + Этот аргумент позволяет скомпилировать библиотеку с + заголовочными файлами, недавно установленными в каталоге + $LFS/usr/include, таким образом, пакету будет известно, какие + функции есть у ядра, чтобы оптимизировать себя. + </p> + </dd> + <dt> + <span class="term"><em class= + "parameter"><code>libc_cv_slibdir=/usr/lib</code></em></span> + </dt> + <dd> + <p> + Этот аргумент гарантирует, что библиотека будет установлена в + /usr/lib вместо стандартного /lib64 на 64-битных машинах. + </p> + </dd> + </dl> + </div> + <p> + На этом этапе может появиться следующее предупреждение: + </p> + <div class="blockquote"> + <blockquote class="blockquote"> + <pre class="screen"><code class= + "computeroutput">configure: WARNING: +*** These auxiliary programs are missing or +*** incompatible versions: msgfmt +*** some features will be disabled. +*** Check the INSTALL file for required versions.</code></pre> + </blockquote> + </div> + <p> + Отсутствующая или несовместимая программа <span class= + "command"><strong>msgfmt</strong></span>, как правило, безвредна. + <span class="command"><strong>msgfmt</strong></span> является + частью пакета Gettext, который должен предоставлять + хост-дистрибутив. + </p> + <div class="admon note"> + <img alt="[Примечание]" src="../images/note.png" /> + <h3> + Примечание + </h3> + <p> + Поступали сообщения о том, что этот пакет может не + компилироваться при "параллельной сборке". Если это произойдет, + повторно запустите команду make с параметром "-j1". + </p> + </div> + <p> + Скомпилируйте пакет: + </p> + <pre class="userinput"><kbd class="command">make</kbd></pre> + <p> + Установите пакет: + </p> + <div class="admon warning"> + <img alt="[Предупреждение]" src="../images/warning.png" /> + <h3> + Предупреждение + </h3> + <p> + Если переменная <code class="envar">LFS</code> настроена + неправильно, и, несмотря на рекомендации, вы выполняете сборку от + имени пользователя <code class="systemitem">root</code>, + следующая команда установит только что собранный Glibc в вашу + хост-систему, что, скорее всего, сделает её непригодной для + использования. Поэтому дважды проверьте, правильность настройки + среды и что вы вошли в систему не под учетной записью + <code class="systemitem">root</code>, прежде чем запускать + следующую команду. + </p> + </div> + <pre class="userinput"><kbd class= + "command">make DESTDIR=$LFS install</kbd></pre> + <div class="variablelist"> + <p class="title"> + <strong>Значение опции <span class="command"><strong>make + install</strong></span>:</strong> + </p> + <dl class="variablelist"> + <dt> + <span class="term"><em class= + "parameter"><code>DESTDIR=$LFS</code></em></span> + </dt> + <dd> + <p> + Переменная make <code class="envar">DESTDIR</code> + используется почти всеми пакетами для определения места + установки пакета. Если она не задана, по умолчанию для + установки используется корневой каталог (<code class= + "filename">/</code>). Здесь мы указываем, что пакет должен + быть установлен в $LFS, который станет корневым каталогом в + <a class="xref" href="../chapter07/chroot.html" title= + "7.4. Вход в окружение Chroot">Раздел 7.4, «Вход в + окружение Chroot»</a>. + </p> + </dd> + </dl> + </div> + <p> + Исправьте жестко запрограммированный путь к исполняемому загрузчику + в <span class="command"><strong>ldd</strong></span>: + </p> + <pre class="userinput"><kbd class= + "command">sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd</kbd></pre> + <div class="admon caution"> + <img alt="[Внимание]" src="../images/caution.png" /> + <h3> + Внимание + </h3> + <p> + На этом этапе необходимо остановиться и убедиться, что основные + функции (компиляция и компоновка) нового кросс-тулчейна работают + должным образом. Чтобы выполнить проверку работоспособности, + выполните следующие команды: + </p> + <pre class="userinput"><kbd class= + "command">echo 'int main(){}' | $LFS_TGT-gcc -xc - +readelf -l a.out | grep ld-linux</kbd></pre> + <p> + Если все работает правильно, ошибок быть не должно, и вывод + последней команды будет иметь вид: + </p> + <pre class="screen"><code class= + "computeroutput">[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]</code></pre> + <p> + Обратите внимание, что для 32-разрядных машин имя интерпретатора + будет <code class="filename">/lib/ld-linux.so.2</code>. + </p> + <p> + Если выходные данные отображаются не так, как указано выше, или + их вообще нет, значит, что-то сделано неправильно. Разберитесь с + проблемой и повторите шаги выше, чтобы исправить ее. Эта проблема + должна быть решена, прежде чем вы продолжите. + </p> + <p> + Как только все будет хорошо, удалите тестовый файл: + </p> + <pre class="userinput"><kbd class="command">rm -v a.out</kbd></pre> + </div> + <div class="admon note"> + <img alt="[Примечание]" src="../images/note.png" /> + <h3> + Примечание + </h3> + <p> + Сборка пакетов в следующей главе послужит дополнительной + проверкой правильности сборки временного кросс-тулчейна. Если + какой-либо пакет, особенно Binutils или GCC, не удается собрать, + это указывает на то, что что-то пошло не так с установленными + ранее Binutils, GCC, или Glibc. + </p> + </div> + </div> + <div class="content" lang="en" xml:lang="en"> + <p> + Подробная информация об этом пакете находится в <a class="xref" + href="../chapter08/glibc.html#contents-glibc" title= + "8.5.3. Содержимое пакета Glibc">Раздел 8.5.3, «Содержимое + пакета Glibc.»</a> + </p> + </div> + </div> + <div class="navfooter"> + <ul> + <li class="prev"> + <a accesskey="p" href="linux-headers.html" title= + "Заголовочные файлы Linux-6.4.12 API">Пред.</a> + <p> + Заголовочные файлы Linux-6.4.12 API + </p> + </li> + <li class="next"> + <a accesskey="n" href="gcc-libstdc++.html" title= + "Libstdc++ из GCC-13.2.0">След.</a> + <p> + Libstdc++ из GCC-13.2.0 + </p> + </li> + <li class="up"> + <a accesskey="u" href="chapter05.html" title= + "Глава 5. Сборка кросс-тулчейна">Наверх</a> + </li> + <li class="home"> + <a accesskey="h" href="../index.html" title= + "Линукс с нуля - Версия 12.0">Начало</a> + </li> + </ul> + </div> + </body> +</html> diff --git a/lfs-12.0-sysv/chapter05/introduction.html b/lfs-12.0-sysv/chapter05/introduction.html new file mode 100644 index 0000000..0d0f4d8 --- /dev/null +++ b/lfs-12.0-sysv/chapter05/introduction.html @@ -0,0 +1,94 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> + <title> + 5.1. Введение + </title> + <link rel="stylesheet" type="text/css" href="../stylesheets/lfs.css" /> + <meta name="generator" content="DocBook XSL Stylesheets V1.79.1" /> + <link rel="stylesheet" href="../stylesheets/lfs-print.css" type= + "text/css" media="print" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + </head> + <body class="lfs" id="lfs-12.0"> + <div class="navheader"> + <h4> + Линукс с нуля - Версия 12.0 + </h4> + <h3> + Глава 5. Сборка кросс-тулчейна + </h3> + <ul> + <li class="prev"> + <a accesskey="p" href="chapter05.html" title= + "Сборка кросс-тулчейна">Пред.</a> + <p> + Сборка кросс-тулчейна + </p> + </li> + <li class="next"> + <a accesskey="n" href="binutils-pass1.html" title= + "Binutils-2.41 - Проход 1">След.</a> + <p> + Binutils-2.41 - Проход 1 + </p> + </li> + <li class="up"> + <a accesskey="u" href="chapter05.html" title= + "Глава 5. Сборка кросс-тулчейна">Наверх</a> + </li> + <li class="home"> + <a accesskey="h" href="../index.html" title= + "Линукс с нуля - Версия 12.0">Начало</a> + </li> + </ul> + </div> + <div class="sect1" lang="en" xml:lang="en"> + <h1 class="sect1"> + <a id="ch-tools-introduction" name="ch-tools-introduction"></a>5.1. + Введение + </h1> + <p> + В этой главе дано описание, как создать кросс-компилятор и связанные + с ним инструменты. Несмотря на то, что на данном этапе + кросс-компиляция имитируется, принципы его работы те же, что и для + настоящего кросс-тулчейна. + </p> + <p> + Программы, скомпилированные в этой главе, будут установлены в каталог + <code class="filename">$LFS/tools</code>, чтобы они были отделены от + файлов, установленных в следующих главах. Библиотеки, же, + устанавливаются на свое постоянное место, поскольку они относятся к + системе, которую мы хотим создать. + </p> + </div> + <div class="navfooter"> + <ul> + <li class="prev"> + <a accesskey="p" href="chapter05.html" title= + "Сборка кросс-тулчейна">Пред.</a> + <p> + Сборка кросс-тулчейна + </p> + </li> + <li class="next"> + <a accesskey="n" href="binutils-pass1.html" title= + "Binutils-2.41 - Проход 1">След.</a> + <p> + Binutils-2.41 - Проход 1 + </p> + </li> + <li class="up"> + <a accesskey="u" href="chapter05.html" title= + "Глава 5. Сборка кросс-тулчейна">Наверх</a> + </li> + <li class="home"> + <a accesskey="h" href="../index.html" title= + "Линукс с нуля - Версия 12.0">Начало</a> + </li> + </ul> + </div> + </body> +</html> diff --git a/lfs-12.0-sysv/chapter05/linux-headers.html b/lfs-12.0-sysv/chapter05/linux-headers.html new file mode 100644 index 0000000..dd00222 --- /dev/null +++ b/lfs-12.0-sysv/chapter05/linux-headers.html @@ -0,0 +1,315 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> + <title> + 5.4. Заголовочные файлы Linux-6.4.12 API + </title> + <link rel="stylesheet" type="text/css" href="../stylesheets/lfs.css" /> + <meta name="generator" content="DocBook XSL Stylesheets V1.79.1" /> + <link rel="stylesheet" href="../stylesheets/lfs-print.css" type= + "text/css" media="print" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + </head> + <body class="lfs" id="lfs-12.0"> + <div class="navheader"> + <h4> + Линукс с нуля - Версия 12.0 + </h4> + <h3> + Глава 5. Сборка кросс-тулчейна + </h3> + <ul> + <li class="prev"> + <a accesskey="p" href="gcc-pass1.html" title= + "GCC-13.2.0 - Проход 1">Пред.</a> + <p> + GCC-13.2.0 - Проход 1 + </p> + </li> + <li class="next"> + <a accesskey="n" href="glibc.html" title="Glibc-2.38">След.</a> + <p> + Glibc-2.38 + </p> + </li> + <li class="up"> + <a accesskey="u" href="chapter05.html" title= + "Глава 5. Сборка кросс-тулчейна">Наверх</a> + </li> + <li class="home"> + <a accesskey="h" href="../index.html" title= + "Линукс с нуля - Версия 12.0">Начало</a> + </li> + </ul> + </div> + <div class="wrap" lang="en" xml:lang="en"> + <h1 class="sect1"> + <a id="ch-tools-linux-headers" name="ch-tools-linux-headers"></a>5.4. + Заголовочные файлы Linux-6.4.12 API + </h1> + <div class="package" lang="en" xml:lang="en"> + <p> + Заголовочные файлы Linux API (в linux-6.4.12.tar.xz) предоставляют + API ядра для использования Glibc. + </p> + <div class="segmentedlist"> + <div class="seglistitem"> + <div class="seg"> + <strong class="segtitle">Приблизительное время сборки:</strong> + <span class="segbody">менее 0.1 SBU</span> + </div> + <div class="seg"> + <strong class="segtitle">Требуемое дисковое + пространство:</strong> <span class="segbody">1.5 GB</span> + </div> + </div> + </div> + </div> + <div class="installation" lang="en" xml:lang="en"> + <h2 class="sect2"> + 5.4.1. Установка заголовочных файлов + </h2> + <p> + Ядро Linux должно предоставлять интерфейс прикладного + программирования (API) для использования системной библиотекой C + (Glibc в LFS). Это делается путем установки заголовочных файлов C, + которые поставляются в архиве с исходным кодом ядра Linux. + </p> + <p> + Убедитесь, что в пакете нет устаревших файлов: + </p> + <pre class="userinput"><kbd class="command">make mrproper</kbd></pre> + <p> + Теперь извлеките видимые пользователю заголовочные файлы ядра из + исходного кода. Рекомендуемый способ make <span class= + "quote">«<span class="quote">headers_install</span>»</span> + использовать нельзя, так как для этого требуется <span class= + "application">rsync</span>, который может быть недоступен. + Заголовочные файлы сначала помещаются в <code class= + "filename">/usr</code>, а затем копируются в нужное место. + </p> + <pre class="userinput"><kbd class="command">make headers +find usr/include -type f ! -name '*.h' -delete +</kbd><kbd class="command">cp -rv usr/include $LFS/usr</kbd></pre> + </div> + <div class="content" lang="en" xml:lang="en"> + <h2 class="sect2"> + <a id="contents-linux-headers" name= + "contents-linux-headers"></a>5.4.2. Содержимое заголовочных файлов + Linux API + </h2> + <div class="segmentedlist"> + <div class="seglistitem"> + <div class="seg"> + <strong class="segtitle">Установленные заголовочные + файлы::</strong> <span class="segbody">/usr/include/asm/*.h, + /usr/include/asm-generic/*.h, /usr/include/drm/*.h, + /usr/include/linux/*.h, /usr/include/misc/*.h, + /usr/include/mtd/*.h, /usr/include/rdma/*.h, + /usr/include/scsi/*.h, /usr/include/sound/*.h, + /usr/include/video/*.h, and /usr/include/xen/*.h</span> + </div> + <div class="seg"> + <strong class="segtitle">Созданные каталоги::</strong> + <span class="segbody">/usr/include/asm, + /usr/include/asm-generic, /usr/include/drm, /usr/include/linux, + /usr/include/misc, /usr/include/mtd, /usr/include/rdma, + /usr/include/scsi, /usr/include/sound, /usr/include/video, and + /usr/include/xen</span> + </div> + </div> + </div> + <div class="variablelist"> + <h3> + Краткое описание + </h3> + <table border="0" class="variablelist"> + <colgroup> + <col align="left" valign="top" /> + <col /> + </colgroup> + <tbody> + <tr> + <td> + <p> + <a id="asm" name="asm"></a><span class= + "term"><code class="filename">/usr/include/asm/*.h</code></span> + </p> + </td> + <td> + <p> + Заголовочные файлы Linux API ASM + </p> + </td> + </tr> + <tr> + <td> + <p> + <a id="asm-generic" name="asm-generic"></a><span class= + "term"><code class= + "filename">/usr/include/asm-generic/*.h</code></span> + </p> + </td> + <td> + <p> + Заголовочные файлы Linux API ASM Generic + </p> + </td> + </tr> + <tr> + <td> + <p> + <a id="drm" name="drm"></a><span class= + "term"><code class="filename">/usr/include/drm/*.h</code></span> + </p> + </td> + <td> + <p> + Заголовочные файлы Linux API DRM + </p> + </td> + </tr> + <tr> + <td> + <p> + <a id="linux" name="linux"></a><span class= + "term"><code class= + "filename">/usr/include/linux/*.h</code></span> + </p> + </td> + <td> + <p> + Заголовочные файлы Linux API Linux + </p> + </td> + </tr> + <tr> + <td> + <p> + <a id="misc" name="misc"></a><span class= + "term"><code class= + "filename">/usr/include/misc/*.h</code></span> + </p> + </td> + <td> + <p> + Заголовочные файлы Linux API Miscellaneous + </p> + </td> + </tr> + <tr> + <td> + <p> + <a id="mtd" name="mtd"></a><span class= + "term"><code class="filename">/usr/include/mtd/*.h</code></span> + </p> + </td> + <td> + <p> + Заголовочные файлы API MTD + </p> + </td> + </tr> + <tr> + <td> + <p> + <a id="rdma" name="rdma"></a><span class= + "term"><code class= + "filename">/usr/include/rdma/*.h</code></span> + </p> + </td> + <td> + <p> + Заголовочные файлы Linux API RDMA + </p> + </td> + </tr> + <tr> + <td> + <p> + <a id="scsi" name="scsi"></a><span class= + "term"><code class= + "filename">/usr/include/scsi/*.h</code></span> + </p> + </td> + <td> + <p> + Заголовочные файлы Linux API SCSI + </p> + </td> + </tr> + <tr> + <td> + <p> + <a id="sound" name="sound"></a><span class= + "term"><code class= + "filename">/usr/include/sound/*.h</code></span> + </p> + </td> + <td> + <p> + Заголовочные файлы Linux API Sound + </p> + </td> + </tr> + <tr> + <td> + <p> + <a id="video" name="video"></a><span class= + "term"><code class= + "filename">/usr/include/video/*.h</code></span> + </p> + </td> + <td> + <p> + Заголовочные файлы Linux API Video + </p> + </td> + </tr> + <tr> + <td> + <p> + <a id="xen" name="xen"></a><span class= + "term"><code class="filename">/usr/include/xen/*.h</code></span> + </p> + </td> + <td> + <p> + Заголовочные файлы Linux API Xen + </p> + </td> + </tr> + </tbody> + </table> + </div> + </div> + </div> + <div class="navfooter"> + <ul> + <li class="prev"> + <a accesskey="p" href="gcc-pass1.html" title= + "GCC-13.2.0 - Проход 1">Пред.</a> + <p> + GCC-13.2.0 - Проход 1 + </p> + </li> + <li class="next"> + <a accesskey="n" href="glibc.html" title="Glibc-2.38">След.</a> + <p> + Glibc-2.38 + </p> + </li> + <li class="up"> + <a accesskey="u" href="chapter05.html" title= + "Глава 5. Сборка кросс-тулчейна">Наверх</a> + </li> + <li class="home"> + <a accesskey="h" href="../index.html" title= + "Линукс с нуля - Версия 12.0">Начало</a> + </li> + </ul> + </div> + </body> +</html> |