요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
최소 version과 확인 명령
changes.rst:17-68| Program | 최소 version | 확인 명령 |
|---|---|---|
| GNU C | 8.1 | gcc --version |
| Clang/LLVM · optional | 15.0.0 | clang --version |
| Rust · optional | 1.78.0 | rustc --version |
| bindgen · optional | 0.65.1 | bindgen --version |
| GNU make | 4.0 | make --version |
| bash | 4.2 | bash --version |
| binutils | 2.30 | ld -v |
| flex | 2.5.35 | flex --version |
| bison | 2.0 | bison --version |
| pahole | 1.16 | pahole --version |
| util-linux | 2.10o | mount --version |
| kmod | 13 | depmod -V |
| e2fsprogs | 1.41.4 | e2fsck -V |
| jfsutils | 1.1.3 | fsck.jfs -V |
| xfsprogs | 2.6.0 | xfs_db -V |
| squashfs-tools | 4.0 | mksquashfs -version |
| btrfs-progs | 0.18 | btrfs --version |
| pcmciautils | 004 | pccardctl -V |
| quota-tools | 3.09 | quota -V |
| PPP | 2.4.0 | pppd --version |
| nfs-utils | 1.0.5 | showmount --version |
| procps | 3.2.0 | ps --version |
| udev | 081 | udevd --version |
| grub | 0.93 | grub --version 또는 grub-install --version |
| mcelog | 0.6 | mcelog --version |
| iptables | 1.4.2 | iptables -V |
| openssl과 libcrypto | 1.0.0 | openssl version |
| bc | 1.06.95 | bc --version |
| Sphinx | 3.4.3 | sphinx-build --version |
| GNU tar | 1.28 | tar --version |
| gtags · optional | 6.6.5 | gtags --version |
| mkimage · optional | 2017.01 | mkimage --version |
| Python | 3.9.x | python3 --version |
| GNU AWK · optional | 5.1.0 | gawk --version |
Sphinx는 kernel documentation을 build할 때만 필요하다. Optional tool도 해당 feature를 enable하거나 관련 target을 실행하면 필수가 된다.
Compiler와 language tool
changes.rst:70-102- GCC: CPU architecture에 따라 실제 요구 version이 달라질 수 있다.
- Clang/LLVM: 최신 정식 release를 지원하며 오래된 release용 workaround는 제거될 수 있다.
- Rust: 최근 compiler가 필요하고 make rustavailable로 toolchain을 찾지 못하는 이유를 확인할 수 있다.
- bindgen: kernel C side의 Rust binding을 생성하며 libclang에 의존한다.
Kernel build 도구
changes.rst:104-205- GNU make 4.0 이상과 bash 4.2 이상이 필요하다.
- binutils 2.30 이상이 assembler·linker 작업에 필요하다.
- pkg-config는 Kconfig tool 설치 여부와 make gconfig/xconfig flag를 찾는다.
- Linux 4.16부터 build 중 lexer와 parser를 생성하므로 flex 2.5.35, bison 2.0 이상이 필요하다.
- CONFIG_DEBUG_INFO_BTF를 사용하면 DWARF에서 BTF를 만들기 위해 pahole 1.16 이상이 필요하다.
- Build script는 Perl 5와 Getopt::Long, Getopt::Std, File::Basename, File::Find module을 사용한다.
- Python은 arm/arm64 defconfig, CONFIG_LTO_CLANG, 일부 DRM option, kernel-doc와 Sphinx build 등에 필요하다.
- Kernel 3.10 이상 build에는 bc가 필요하다.
- Module signing과 external certificate는 OpenSSL program과 crypto library를 사용한다.
- CONFIG_IKHEADERS로 sysfs에서 kernel header를 제공하려면 GNU tar가 필요하다.
- make gtags에는 GNU GLOBAL 6.6.5 이상이 필요하다.
- ARM에서 흔한 FIT image를 만들 때 mkimage를 사용하며 u-boot-tools에서 얻거나 U-Boot source로 build할 수 있다.
- CONFIG_BUILTIN_MODULE_RANGES의 builtin module address range 생성에는 GNU AWK가 필요하다.
System utility와 file system 도구
changes.rst:207-322DevFS는 udev로 대체되었고 function 문서는 source definition 근처의 structured comment와 ReST를 결합해 Sphinx로 HTML, PDF, ePUB 등으로 만든다.
- util-linux: 큰 disk, 새로운 mount option과 partition type 지원을 제공한다.
- ksymoops: CONFIG_KALLSYMS가 없는 옛 환경에서 Oops를 decode할 수 있지만 현재는 readable dump를 만드는 KALLSYMS build가 권장된다.
- mkinitrd: /lib/modules layout 변경에 맞는 version이 필요하다.
- e2fsprogs: ext file system의 fsck와 debugfs bug fix를 포함한다.
- jfsutils: fsck.jfs, mkfs.jfs와 JFS utility를 제공한다.
- xfsprogs: mkfs.xfs, xfs_db, xfs_repair 등을 제공한다.
- pcmciautils: pcmcia-cs를 대체하고 boot 때 socket 설정과 16-bit device module loading을 처리한다.
- quota-tools: 새 version 2 quota format의 32-bit uid/gid를 지원한다.
- Intel microcode: udev를 쓰지 않는 옛 system은 /dev/cpu/microcode character device가 필요할 수 있다.
- udev: 실제 존재하는 device만 /dev에 동적으로 만들고 persistent naming을 제공한다.
- FUSE: libfuse 2.4.0 이상을 권장하며 2.3.0에서는 direct_io와 kernel_cache가 동작하지 않는다.
Networking user-space 요구사항
changes.rst:324-386- 고급 network 설정에는 iproute2 tool을 권장한다.
- Packet filter와 NAT는 iptables를 사용하며 옛 ipchains와 ipfwadm compatibility module을 포함한다.
- PPP는 multilink와 여러 media layer를 지원하도록 재구성되었으므로 pppd 2.4.0 이상이 필요하다. udev가 없으면 /dev/ppp major 108 minor 0 device를 만든다.
- 현대 NFS server는 unknown host request가 오면 kernel이 mountd에 export 정보를 요청해 낡은 rmtab 의존성을 없앨 수 있다. exportfs나 mountd 전에 nfsd file system을 /proc/fs/nfsd에 mount한다.
- NFS service는 가능한 경우 internet 전체에서 firewall로 보호해야 한다.
- x86 CONFIG_X86_MCE에서는 CPU가 보고한 machine-check event를 처리·기록하기 위해 mcelog가 필요하다.
mount -t nfsd nfsd /proc/fs/nfsd
mknod /dev/ppp c 108 0
문서 생성 도구
changes.rst:388-401Kernel ReST documentation build에는 Sphinx가 필요하다. Rust code documentation은 rustdoc으로 생성하며 세부 조건은 Rust general-information 문서에서 확인한다.
Software를 구하는 위치
changes.rst:403-569원문의 마지막 절은 GCC, LLVM, Rust, bindgen, make, bash, binutils, flex, bison, OpenSSL과 각 system utility의 upstream download·repository를 나열한다. 설치할 때는 distribution package를 우선 사용하고, 요구 version이 없을 때 각 upstream project의 공식 release를 확인한다.
- Kernel.org: binutils, util-linux, kmod, xfsprogs, iproute2와 kernel tool archive
- GNU project: GCC, make, bash, bison
- GitHub 또는 project site: flex, libfuse, PPP, JFS, quota-tools
- Netfilter: iptables
- Sphinx official site: documentation build tool
- Documentation/rust/quick-start.rst: Rust와 bindgen setup
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
.. _changes:
Minimal requirements to compile the Kernel
++++++++++++++++++++++++++++++++++++++++++
Intro
=====
This document is designed to provide a list of the minimum levels of
software necessary to run the current kernel version.
This document is originally based on my "Changes" file for 2.0.x kernels
and therefore owes credit to the same people as that file (Jared Mauch,
Axel Boldt, Alessandro Sigala, and countless other users all over the
'net).
Current Minimal Requirements
****************************
Upgrade to at **least** these software revisions before thinking you've
encountered a bug! If you're unsure what version you're currently
running, the suggested command should tell you.
Again, keep in mind that this list assumes you are already functionally
running a Linux kernel. Also, not all tools are necessary on all
systems; obviously, if you don't have any PC Card hardware, for example,
you probably needn't concern yourself with pcmciautils.
====================== =============== ========================================
Program Minimal version Command to check the version
====================== =============== ========================================
GNU C 8.1 gcc --version
Clang/LLVM (optional) 15.0.0 clang --version
Rust (optional) 1.78.0 rustc --version
bindgen (optional) 0.65.1 bindgen --version
GNU make 4.0 make --version
bash 4.2 bash --version
binutils 2.30 ld -v
flex 2.5.35 flex --version
bison 2.0 bison --version
pahole 1.16 pahole --version
util-linux 2.10o mount --version
kmod 13 depmod -V
e2fsprogs 1.41.4 e2fsck -V
jfsutils 1.1.3 fsck.jfs -V
xfsprogs 2.6.0 xfs_db -V
squashfs-tools 4.0 mksquashfs -version
btrfs-progs 0.18 btrfs --version
pcmciautils 004 pccardctl -V
quota-tools 3.09 quota -V
PPP 2.4.0 pppd --version
nfs-utils 1.0.5 showmount --version
procps 3.2.0 ps --version
udev 081 udevd --version
grub 0.93 grub --version || grub-install --version
mcelog 0.6 mcelog --version
iptables 1.4.2 iptables -V
openssl & libcrypto 1.0.0 openssl version
bc 1.06.95 bc --version
Sphinx\ [#f1]_ 3.4.3 sphinx-build --version
GNU tar 1.28 tar --version
gtags (optional) 6.6.5 gtags --version
mkimage (optional) 2017.01 mkimage --version
Python 3.9.x python3 --version
GNU AWK (optional) 5.1.0 gawk --version
====================== =============== ========================================
.. [#f1] Sphinx is needed only to build the Kernel documentation
Kernel compilation
******************
GCC
---
The gcc version requirements may vary depending on the type of CPU in your
computer.
Clang/LLVM (optional)
---------------------
The latest formal release of clang and LLVM utils (according to
`releases.llvm.org <https://releases.llvm.org>`_) are supported for building
kernels. Older releases aren't guaranteed to work, and we may drop workarounds
from the kernel that were used to support older versions. Please see additional
docs on :ref:`Building Linux with Clang/LLVM <kbuild_llvm>`.
Rust (optional)
---------------
A recent version of the Rust compiler is required.
Please see Documentation/rust/quick-start.rst for instructions on how to
satisfy the build requirements of Rust support. In particular, the ``Makefile``
target ``rustavailable`` is useful to check why the Rust toolchain may not
be detected.
bindgen (optional)
------------------
``bindgen`` is used to generate the Rust bindings to the C side of the kernel.
It depends on ``libclang``.
Make
----
You will need GNU make 4.0 or later to build the kernel.
Bash
----
Some bash scripts are used for the kernel build.
Bash 4.2 or newer is needed.
Binutils
--------
Binutils 2.30 or newer is needed to build the kernel.
pkg-config
----------
The build system, as of 4.18, requires pkg-config to check for installed
kconfig tools and to determine flags settings for use in
'make {g,x}config'. Previously pkg-config was being used but not
verified or documented.
Flex
----
Since Linux 4.16, the build system generates lexical analyzers
during build. This requires flex 2.5.35 or later.
Bison
-----
Since Linux 4.16, the build system generates parsers
during build. This requires bison 2.0 or later.
pahole
------
Since Linux 5.2, if CONFIG_DEBUG_INFO_BTF is selected, the build system
generates BTF (BPF Type Format) from DWARF in vmlinux, a bit later from kernel
modules as well. This requires pahole v1.16 or later.
It is found in the 'dwarves' or 'pahole' distro packages or from
https://fedorapeople.org/~acme/dwarves/.
Perl
----
You will need perl 5 and the following modules: ``Getopt::Long``,
``Getopt::Std``, ``File::Basename``, and ``File::Find`` to build the kernel.
Python
------
Several config options require it: it is required for arm/arm64
default configs, CONFIG_LTO_CLANG, some DRM optional configs,
the kernel-doc tool, and docs build (Sphinx), among others.
BC
--
You will need bc to build kernels 3.10 and higher
OpenSSL
-------
Module signing and external certificate handling use the OpenSSL program and
crypto library to do key creation and signature generation.
You will need openssl to build kernels 3.7 and higher if module signing is
enabled. You will also need openssl development packages to build kernels 4.3
and higher.
Tar
---
GNU tar is needed if you want to enable access to the kernel headers via sysfs
(CONFIG_IKHEADERS).
gtags / GNU GLOBAL (optional)
-----------------------------
The kernel build requires GNU GLOBAL version 6.6.5 or later to generate
tag files through ``make gtags``. This is due to its use of the gtags
``-C (--directory)`` flag.
mkimage
-------
This tool is used when building a Flat Image Tree (FIT), commonly used on ARM
platforms. The tool is available via the ``u-boot-tools`` package or can be
built from the U-Boot source code. See the instructions at
https://docs.u-boot.org/en/latest/build/tools.html#building-tools-for-linux
GNU AWK
-------
GNU AWK is needed if you want kernel builds to generate address range data for
builtin modules (CONFIG_BUILTIN_MODULE_RANGES).
System utilities
****************
Architectural changes
---------------------
DevFS has been obsoleted in favour of udev
(https://www.kernel.org/pub/linux/utils/kernel/hotplug/)
32-bit UID support is now in place. Have fun!
Linux documentation for functions is transitioning to inline
documentation via specially-formatted comments near their
definitions in the source. These comments can be combined with ReST
files the Documentation/ directory to make enriched documentation, which can
then be converted to PostScript, HTML, LaTex, ePUB and PDF files.
In order to convert from ReST format to a format of your choice, you'll need
Sphinx.
Util-linux
----------
New versions of util-linux provide ``fdisk`` support for larger disks,
support new options to mount, recognize more supported partition
types, and similar goodies.
You'll probably want to upgrade.
Ksymoops
--------
If the unthinkable happens and your kernel oopses, you may need the
ksymoops tool to decode it, but in most cases you don't.
It is generally preferred to build the kernel with ``CONFIG_KALLSYMS`` so
that it produces readable dumps that can be used as-is (this also
produces better output than ksymoops). If for some reason your kernel
is not build with ``CONFIG_KALLSYMS`` and you have no way to rebuild and
reproduce the Oops with that option, then you can still decode that Oops
with ksymoops.
Mkinitrd
--------
These changes to the ``/lib/modules`` file tree layout also require that
mkinitrd be upgraded.
E2fsprogs
---------
The latest version of ``e2fsprogs`` fixes several bugs in fsck and
debugfs. Obviously, it's a good idea to upgrade.
JFSutils
--------
The ``jfsutils`` package contains the utilities for the file system.
The following utilities are available:
- ``fsck.jfs`` - initiate replay of the transaction log, and check
and repair a JFS formatted partition.
- ``mkfs.jfs`` - create a JFS formatted partition.
- other file system utilities are also available in this package.
Xfsprogs
--------
The latest version of ``xfsprogs`` contains ``mkfs.xfs``, ``xfs_db``, and the
``xfs_repair`` utilities, among others, for the XFS filesystem. It is
architecture independent and any version from 2.0.0 onward should
work correctly with this version of the XFS kernel code (2.6.0 or
later is recommended, due to some significant improvements).
PCMCIAutils
-----------
PCMCIAutils replaces ``pcmcia-cs``. It properly sets up
PCMCIA sockets at system startup and loads the appropriate modules
for 16-bit PCMCIA devices if the kernel is modularized and the hotplug
subsystem is used.
Quota-tools
-----------
Support for 32 bit uid's and gid's is required if you want to use
the newer version 2 quota format. Quota-tools version 3.07 and
newer has this support. Use the recommended version or newer
from the table above.
Intel IA32 microcode
--------------------
A driver has been added to allow updating of Intel IA32 microcode,
accessible as a normal (misc) character device. If you are not using
udev you may need to::
mkdir /dev/cpu
mknod /dev/cpu/microcode c 10 184
chmod 0644 /dev/cpu/microcode
as root before you can use this. You'll probably also want to
get the user-space microcode_ctl utility to use with this.
udev
----
``udev`` is a userspace application for populating ``/dev`` dynamically with
only entries for devices actually present. ``udev`` replaces the basic
functionality of devfs, while allowing persistent device naming for
devices.
FUSE
----
Needs libfuse 2.4.0 or later. Absolute minimum is 2.3.0 but mount
options ``direct_io`` and ``kernel_cache`` won't work.
Networking
**********
General changes
---------------
If you have advanced network configuration needs, you should probably
consider using the network tools from ip-route2.
Packet Filter / NAT
-------------------
The packet filtering and NAT code uses the same tools like the previous 2.4.x
kernel series (iptables). It still includes backwards-compatibility modules
for 2.2.x-style ipchains and 2.0.x-style ipfwadm.
PPP
---
The PPP driver has been restructured to support multilink and to
enable it to operate over diverse media layers. If you use PPP,
upgrade pppd to at least 2.4.0.
If you are not using udev, you must have the device file /dev/ppp
which can be made by::
mknod /dev/ppp c 108 0
as root.
NFS-utils
---------
In ancient (2.4 and earlier) kernels, the nfs server needed to know
about any client that expected to be able to access files via NFS. This
information would be given to the kernel by ``mountd`` when the client
mounted the filesystem, or by ``exportfs`` at system startup. exportfs
would take information about active clients from ``/var/lib/nfs/rmtab``.
This approach is quite fragile as it depends on rmtab being correct
which is not always easy, particularly when trying to implement
fail-over. Even when the system is working well, ``rmtab`` suffers from
getting lots of old entries that never get removed.
With modern kernels we have the option of having the kernel tell mountd
when it gets a request from an unknown host, and mountd can give
appropriate export information to the kernel. This removes the
dependency on ``rmtab`` and means that the kernel only needs to know about
currently active clients.
To enable this new functionality, you need to::
mount -t nfsd nfsd /proc/fs/nfsd
before running exportfs or mountd. It is recommended that all NFS
services be protected from the internet-at-large by a firewall where
that is possible.
mcelog
------
On x86 kernels the mcelog utility is needed to process and log machine check
events when ``CONFIG_X86_MCE`` is enabled. Machine check events are errors
reported by the CPU. Processing them is strongly encouraged.
Kernel documentation
********************
Sphinx
------
Please see :ref:`sphinx_install` in :ref:`Documentation/doc-guide/sphinx.rst <sphinxdoc>`
for details about Sphinx requirements.
rustdoc
-------
``rustdoc`` is used to generate the documentation for Rust code. Please see
Documentation/rust/general-information.rst for more information.
Getting updated software
========================
Kernel compilation
******************
gcc
---
- <ftp://ftp.gnu.org/gnu/gcc/>
Clang/LLVM
----------
- :ref:`Getting LLVM <getting_llvm>`.
Rust
----
- Documentation/rust/quick-start.rst.
bindgen
-------
- Documentation/rust/quick-start.rst.
Make
----
- <ftp://ftp.gnu.org/gnu/make/>
Bash
----
- <ftp://ftp.gnu.org/gnu/bash/>
Binutils
--------
- <https://www.kernel.org/pub/linux/devel/binutils/>
Flex
----
- <https://github.com/westes/flex/releases>
Bison
-----
- <ftp://ftp.gnu.org/gnu/bison/>
OpenSSL
-------
- <https://www.openssl.org/>
System utilities
****************
Util-linux
----------
- <https://www.kernel.org/pub/linux/utils/util-linux/>
Kmod
----
- <https://www.kernel.org/pub/linux/utils/kernel/kmod/>
- <https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git>
Ksymoops
--------
- <https://www.kernel.org/pub/linux/utils/kernel/ksymoops/v2.4/>
Mkinitrd
--------
- <https://code.launchpad.net/initrd-tools/main>
E2fsprogs
---------
- <https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/>
- <https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/>
JFSutils
--------
- <https://jfs.sourceforge.net/>
Xfsprogs
--------
- <https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git>
- <https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/>
Pcmciautils
-----------
- <https://www.kernel.org/pub/linux/utils/kernel/pcmcia/>
Quota-tools
-----------
- <https://sourceforge.net/projects/linuxquota/>
Intel P6 microcode
------------------
- <https://downloadcenter.intel.com/>
udev
----
- <https://www.freedesktop.org/software/systemd/man/udev.html>
FUSE
----
- <https://github.com/libfuse/libfuse/releases>
mcelog
------
- <https://www.mcelog.org/>
Networking
**********
PPP
---
- <https://download.samba.org/pub/ppp/>
- <https://git.ozlabs.org/?p=ppp.git>
- <https://github.com/paulusmack/ppp/>
NFS-utils
---------
- <https://sourceforge.net/project/showfiles.php?group_id=14>
- <https://nfs.sourceforge.net/>
Iptables
--------
- <https://netfilter.org/projects/iptables/index.html>
Ip-route2
---------
- <https://www.kernel.org/pub/linux/utils/net/iproute2/>
OProfile
--------
- <https://oprofile.sf.net/download/>
Kernel documentation
********************
Sphinx
------
- <https://www.sphinx-doc.org/>
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
Current kernel을 위한 최소 software version
1-68이 문서는 current kernel version을 실행하고 compile하는 데 필요한 software의 최소 수준을 정리한다. 원래 2.0.x kernel용 Changes file을 기반으로 하며 Jared Mauch, Axel Boldt, Alessandro Sigala와 수많은 internet user의 기여를 이어받았다.
Kernel bug라고 판단하기 전에 적어도 아래 revision까지 upgrade해야 한다. Current version을 모르면 표의 command로 확인한다. 이 목록은 이미 Linux kernel이 정상적으로 실행되는 system을 전제로 한다. 모든 system에 모든 tool이 필요한 것은 아니며 PC Card hardware가 없다면 pcmciautils를 신경 쓸 필요가 없는 식이다.
| Program | Minimum | Version 확인 command |
|---|---|---|
| GNU C | 8.1 | gcc --version |
| Clang/LLVM (optional) | 15.0.0 | clang --version |
| Rust (optional) | 1.78.0 | rustc --version |
| bindgen (optional) | 0.65.1 | bindgen --version |
| GNU make | 4.0 | make --version |
| bash | 4.2 | bash --version |
| binutils | 2.30 | ld -v |
| flex | 2.5.35 | flex --version |
| bison | 2.0 | bison --version |
| pahole | 1.16 | pahole --version |
| util-linux | 2.10o | mount --version |
| kmod | 13 | depmod -V |
| e2fsprogs | 1.41.4 | e2fsck -V |
| jfsutils | 1.1.3 | fsck.jfs -V |
| xfsprogs | 2.6.0 | xfs_db -V |
| squashfs-tools | 4.0 | mksquashfs -version |
| btrfs-progs | 0.18 | btrfs --version |
| pcmciautils | 004 | pccardctl -V |
| quota-tools | 3.09 | quota -V |
| PPP | 2.4.0 | pppd --version |
| nfs-utils | 1.0.5 | showmount --version |
| procps | 3.2.0 | ps --version |
| udev | 081 | udevd --version |
| grub | 0.93 | grub --version || grub-install --version |
| mcelog | 0.6 | mcelog --version |
| iptables | 1.4.2 | iptables -V |
| openssl & libcrypto | 1.0.0 | openssl version |
| bc | 1.06.95 | bc --version |
| Sphinx | 3.4.3 | sphinx-build --version |
| GNU tar | 1.28 | tar --version |
| gtags (optional) | 6.6.5 | gtags --version |
| mkimage (optional) | 2017.01 | mkimage --version |
| Python | 3.9.x | python3 --version |
| GNU AWK (optional) | 5.1.0 | gawk --version |
Sphinx는 kernel documentation을 build할 때만 필요하다. Minimum version과 command는 Linux v6.18.37 원문 표를 그대로 보존했다.
GCC, Clang/LLVM과 Rust toolchain
70-103필요한 GCC version은 system CPU type에 따라 달라질 수 있다.
Kernel build는 releases.llvm.org 기준 최신 formal release의 Clang과 LLVM utility를 지원한다. 더 오래된 release는 동작을 보장하지 않으며 kernel에서 old version용 workaround를 제거할 수 있다. 자세한 내용은 Building Linux with Clang/LLVM 문서를 본다.
Rust support에는 recent Rust compiler가 필요하다. Documentation/rust/quick-start.rst에 build requirement 충족 방법이 있으며 Makefile의 rustavailable target은 Rust toolchain이 detect되지 않는 이유를 확인하는 데 유용하다.
make rustavailable
bindgen은 kernel C side에 대한 Rust binding을 생성하며 libclang에 의존한다.
Build system의 기본 tool
104-162- GNU make 4.0 이상이 kernel build에 필요하다.
- Kernel build의 일부 Bash script를 위해 Bash 4.2 이상이 필요하다.
- Binutils 2.30 이상이 필요하다.
- Linux 4.18부터 build system은 installed kconfig tool을 확인하고 make {g,x}config flag를 결정하기 위해 pkg-config를 요구한다. 이전에도 사용했지만 검증하거나 문서화하지 않았다.
- Linux 4.16부터 build 중 lexical analyzer를 생성하므로 flex 2.5.35 이상이 필요하다.
- Linux 4.16부터 parser를 생성하므로 bison 2.0 이상이 필요하다.
Linux 5.2부터 CONFIG_DEBUG_INFO_BTF를 선택하면 build system이 vmlinux의 DWARF에서 BTF(BPF Type Format)를 생성하고 이후 kernel module에도 생성한다. Pahole 1.16 이상이 필요하며 distribution의 dwarves 또는 pahole package나 upstream location에서 구할 수 있다.
Kernel build에는 Perl 5와 Getopt::Long, Getopt::Std, File::Basename, File::Find module이 필요하다.
Python은 arm·arm64 default config, CONFIG_LTO_CLANG, 일부 DRM optional config, kernel-doc tool, Sphinx documentation build 등 여러 config option에서 필요하다.
bc, OpenSSL, tar, gtags, mkimage와 GNU AWK
164-205Kernel 3.10 이상을 build하려면 bc가 필요하다.
Module signing과 external certificate 처리는 OpenSSL program과 crypto library를 사용해 key와 signature를 만든다. Module signing을 enable한 kernel 3.7 이상에는 openssl이 필요하고 kernel 4.3 이상 build에는 openssl development package도 필요하다.
CONFIG_IKHEADERS로 sysfs를 통해 kernel header에 접근하게 하려면 GNU tar가 필요하다.
make gtags로 tag file을 만들려면 GNU GLOBAL 6.6.5 이상이 필요하다. Gtags의 -C 또는 --directory flag를 사용하기 때문이다.
Mkimage는 ARM platform에서 흔히 쓰는 Flat Image Tree(FIT)를 build할 때 사용한다. u-boot-tools package로 설치하거나 U-Boot source에서 build할 수 있다.
CONFIG_BUILTIN_MODULE_RANGES를 켜 kernel build가 builtin module의 address range data를 생성하게 하려면 GNU AWK가 필요하다.
System utility와 architecture 변화
207-250DevFS는 obsolete되어 udev로 대체되었고 32-bit UID support가 들어왔다.
Linux function documentation은 source definition 근처의 특별한 형식 comment를 이용한 inline documentation으로 전환 중이다. 이 comment를 Documentation/의 ReST file과 결합해 enriched documentation을 만들고 PostScript, HTML, LaTeX, ePUB, PDF로 변환할 수 있다. ReST를 원하는 format으로 변환하려면 Sphinx가 필요하다.
새 util-linux는 더 큰 disk를 위한 fdisk support, 새 mount option, 더 많은 partition type 인식 등을 제공하므로 upgrade하는 편이 좋다.
Kernel oops가 발생하면 ksymoops로 decode해야 할 수 있지만 대부분의 경우는 필요 없다. CONFIG_KALLSYMS를 켜면 그대로 사용할 수 있는 readable dump를 만들고 ksymoops보다 나은 출력을 제공하므로 이 방법을 선호한다. CONFIG_KALLSYMS 없이 build했고 해당 option으로 rebuild·reproduce할 수 없다면 ksymoops로 기존 Oops를 decode할 수 있다.
/lib/modules file tree layout 변경에 맞춰 mkinitrd도 upgrade해야 한다.
Filesystem utility 요구 사항
252-294최신 e2fsprogs는 fsck와 debugfs의 여러 bug를 고치므로 upgrade하는 것이 좋다.
jfsutils에는 filesystem utility가 들어 있다. fsck.jfs는 transaction log replay를 시작하고 JFS partition을 검사·수리한다. mkfs.jfs는 JFS partition을 생성하며 package에는 다른 filesystem utility도 있다.
xfsprogs에는 XFS용 mkfs.xfs, xfs_db, xfs_repair 등이 있다. Architecture-independent하며 2.0.0 이후 version은 이 XFS kernel code와 정상 동작해야 하지만 중요한 개선 때문에 2.6.0 이상을 권장한다.
PCMCIAutils는 pcmcia-cs를 대체한다. System startup 때 PCMCIA socket을 올바르게 설정하고 kernel이 modularized되어 hotplug subsystem을 사용하면 16-bit PCMCIA device에 맞는 module을 load한다.
새 version 2 quota format을 사용하려면 32-bit uid·gid support가 필요하다. Quota-tools 3.07 이상이 이를 지원하며 위 표의 권장 version 이상을 사용한다.
Microcode device, udev와 FUSE
296-322Intel IA32 microcode를 normal misc character device를 통해 update하는 driver가 추가되었다. Udev를 사용하지 않으면 root로 다음 device node를 만들어야 할 수 있으며 user-space microcode_ctl utility도 필요하다.
mkdir /dev/cpu
mknod /dev/cpu/microcode c 10 184
chmod 0644 /dev/cpu/microcode
udev는 실제로 존재하는 device entry만 /dev에 동적으로 만드는 user-space application이다. Devfs의 기본 기능을 대체하면서 persistent device naming도 허용한다.
FUSE에는 libfuse 2.4.0 이상이 필요하다. 절대 minimum은 2.3.0이지만 direct_io와 kernel_cache mount option이 동작하지 않는다.
Networking user-space tool
324-386고급 network configuration이 필요하면 ip-route2 network tool을 사용하는 것이 좋다.
Packet filtering과 NAT code는 이전 2.4.x kernel series와 같은 iptables tool을 사용한다. 2.2.x style ipchains와 2.0.x style ipfwadm용 backward-compatibility module도 여전히 포함한다.
PPP driver는 multilink와 다양한 media layer에서 동작하도록 재구성되었다. PPP를 사용하면 pppd 2.4.0 이상으로 upgrade한다. Udev를 사용하지 않으면 root로 /dev/ppp device file을 만든다.
mknod /dev/ppp c 108 0
오래된 2.4 이전 kernel의 NFS server는 NFS file에 접근할 client를 미리 알아야 했다. Client mount 시 mountd가, system startup 때 exportfs가 이 정보를 kernel에 전달했고 exportfs는 /var/lib/nfs/rmtab에서 active client 정보를 읽었다.
Rmtab 정확성에 의존하는 이 방식은 fragile하며 fail-over에서 특히 어렵다. 정상 system에서도 제거되지 않은 old entry가 많이 쌓인다. Modern kernel은 unknown host request를 kernel이 mountd에 알리고 mountd가 적절한 export 정보를 되돌려 줄 수 있다. Rmtab dependency가 사라지고 kernel은 current active client만 알면 된다.
새 기능을 enable하려면 exportfs 또는 mountd를 실행하기 전에 nfsd filesystem을 mount한다. 가능하면 firewall로 모든 NFS service를 public internet에서 보호하는 것이 좋다.
mount -t nfsd nfsd /proc/fs/nfsd
x86 kernel에서 CONFIG_X86_MCE를 enable하면 CPU가 보고한 error인 machine check event를 처리하고 기록하는 mcelog utility가 필요하다. 이 event 처리를 강하게 권장한다.
Kernel documentation tool
388-401Sphinx 요구 사항의 자세한 내용은 Documentation/doc-guide/sphinx.rst의 sphinx_install 절을 참고한다.
rustdoc은 Rust code documentation을 생성한다. 추가 정보는 Documentation/rust/general-information.rst에 있다.
Compiler와 build tool update 위치
403-457- GCC
ftp://ftp.gnu.org/gnu/gcc/ - Make
ftp://ftp.gnu.org/gnu/make/ - Bash
ftp://ftp.gnu.org/gnu/bash/ - Binutils
https://www.kernel.org/pub/linux/devel/binutils/ - Flex releases
https://github.com/westes/flex/releases - Bison
ftp://ftp.gnu.org/gnu/bison/ - OpenSSL
https://www.openssl.org/
Clang/LLVM은 Getting LLVM 문서를, Rust와 bindgen은 Documentation/rust/quick-start.rst를 따른다.
System utility update 위치
459-529- util-linux
https://www.kernel.org/pub/linux/utils/util-linux/ - kmod release
https://www.kernel.org/pub/linux/utils/kernel/kmod/ - kmod Git
https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git - ksymoops
https://www.kernel.org/pub/linux/utils/kernel/ksymoops/v2.4/ - mkinitrd
https://code.launchpad.net/initrd-tools/main - e2fsprogs release
https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/ - e2fsprogs Git
https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/ - jfsutils
https://jfs.sourceforge.net/ - xfsprogs Git
https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git - xfsprogs release
https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/ - pcmciautils
https://www.kernel.org/pub/linux/utils/kernel/pcmcia/ - quota-tools
https://sourceforge.net/projects/linuxquota/ - Intel microcode
https://downloadcenter.intel.com/ - udev
https://www.freedesktop.org/software/systemd/man/udev.html - FUSE releases
https://github.com/libfuse/libfuse/releases - mcelog
https://www.mcelog.org/
Networking과 documentation tool update 위치
531-568- PPP release
https://download.samba.org/pub/ppp/ - PPP Git
https://git.ozlabs.org/?p=ppp.git - PPP GitHub
https://github.com/paulusmack/ppp/ - NFS-utils files
https://sourceforge.net/project/showfiles.php?group_id=14 - NFS project
https://nfs.sourceforge.net/ - iptables
https://netfilter.org/projects/iptables/index.html - ip-route2
https://www.kernel.org/pub/linux/utils/net/iproute2/ - OProfile
https://oprofile.sf.net/download/ - Sphinx
https://www.sphinx-doc.org/
문서의 목적
changes.rst:3-15이 문서는 현재 kernel version을 compile하고 관련 기능을 실행하는 데 필요한 software의 최소 version을 제시한다. Bug를 의심하기 전에 toolchain과 utility가 최소 요구사항을 만족하는지 확인해야 한다.
이미 정상적으로 Linux kernel을 실행하고 있다는 전제의 목록이며 모든 system에 모든 도구가 필요한 것은 아니다. 사용하지 않는 hardware나 기능의 utility는 설치할 필요가 없다.