← Documents Documentation/process/changes.rst GitHub 원문 ↗

Linux 6.18.37 · 개발 절차

Linux 6.18 커널 build 최소 요구사항

Compiler, build tool, system utility와 file-system·networking user-space 도구의 최소 version과 역할을 정리합니다.

Source pathDocumentation/process/changes.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

문서의 목적

changes.rst:3-15

이 문서는 현재 kernel version을 compile하고 관련 기능을 실행하는 데 필요한 software의 최소 version을 제시한다. Bug를 의심하기 전에 toolchain과 utility가 최소 요구사항을 만족하는지 확인해야 한다.

이미 정상적으로 Linux kernel을 실행하고 있다는 전제의 목록이며 모든 system에 모든 도구가 필요한 것은 아니다. 사용하지 않는 hardware나 기능의 utility는 설치할 필요가 없다.

최소 version과 확인 명령

changes.rst:17-68
Program최소 version확인 명령
GNU C8.1gcc --version
Clang/LLVM · optional15.0.0clang --version
Rust · optional1.78.0rustc --version
bindgen · optional0.65.1bindgen --version
GNU make4.0make --version
bash4.2bash --version
binutils2.30ld -v
flex2.5.35flex --version
bison2.0bison --version
pahole1.16pahole --version
util-linux2.10omount --version
kmod13depmod -V
e2fsprogs1.41.4e2fsck -V
jfsutils1.1.3fsck.jfs -V
xfsprogs2.6.0xfs_db -V
squashfs-tools4.0mksquashfs -version
btrfs-progs0.18btrfs --version
pcmciautils004pccardctl -V
quota-tools3.09quota -V
PPP2.4.0pppd --version
nfs-utils1.0.5showmount --version
procps3.2.0ps --version
udev081udevd --version
grub0.93grub --version 또는 grub-install --version
mcelog0.6mcelog --version
iptables1.4.2iptables -V
openssl과 libcrypto1.0.0openssl version
bc1.06.95bc --version
Sphinx3.4.3sphinx-build --version
GNU tar1.28tar --version
gtags · optional6.6.5gtags --version
mkimage · optional2017.01mkimage --version
Python3.9.xpython3 --version
GNU AWK · optional5.1.0gawk --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-322

DevFS는 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-401

Kernel 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 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 .. _changes:
2
3 Minimal requirements to compile the Kernel
4 ++++++++++++++++++++++++++++++++++++++++++
5
6 Intro
7 =====
8
9 This document is designed to provide a list of the minimum levels of
10 software necessary to run the current kernel version.
11
12 This document is originally based on my "Changes" file for 2.0.x kernels
13 and therefore owes credit to the same people as that file (Jared Mauch,
14 Axel Boldt, Alessandro Sigala, and countless other users all over the
15 'net).
16
17 Current Minimal Requirements
18 ****************************
19
20 Upgrade to at **least** these software revisions before thinking you've
21 encountered a bug! If you're unsure what version you're currently
22 running, the suggested command should tell you.
23
24 Again, keep in mind that this list assumes you are already functionally
25 running a Linux kernel. Also, not all tools are necessary on all
26 systems; obviously, if you don't have any PC Card hardware, for example,
27 you probably needn't concern yourself with pcmciautils.
28
29 ====================== =============== ========================================
30 Program Minimal version Command to check the version
31 ====================== =============== ========================================
32 GNU C 8.1 gcc --version
33 Clang/LLVM (optional) 15.0.0 clang --version
34 Rust (optional) 1.78.0 rustc --version
35 bindgen (optional) 0.65.1 bindgen --version
36 GNU make 4.0 make --version
37 bash 4.2 bash --version
38 binutils 2.30 ld -v
39 flex 2.5.35 flex --version
40 bison 2.0 bison --version
41 pahole 1.16 pahole --version
42 util-linux 2.10o mount --version
43 kmod 13 depmod -V
44 e2fsprogs 1.41.4 e2fsck -V
45 jfsutils 1.1.3 fsck.jfs -V
46 xfsprogs 2.6.0 xfs_db -V
47 squashfs-tools 4.0 mksquashfs -version
48 btrfs-progs 0.18 btrfs --version
49 pcmciautils 004 pccardctl -V
50 quota-tools 3.09 quota -V
51 PPP 2.4.0 pppd --version
52 nfs-utils 1.0.5 showmount --version
53 procps 3.2.0 ps --version
54 udev 081 udevd --version
55 grub 0.93 grub --version || grub-install --version
56 mcelog 0.6 mcelog --version
57 iptables 1.4.2 iptables -V
58 openssl & libcrypto 1.0.0 openssl version
59 bc 1.06.95 bc --version
60 Sphinx\ [#f1]_ 3.4.3 sphinx-build --version
61 GNU tar 1.28 tar --version
62 gtags (optional) 6.6.5 gtags --version
63 mkimage (optional) 2017.01 mkimage --version
64 Python 3.9.x python3 --version
65 GNU AWK (optional) 5.1.0 gawk --version
66 ====================== =============== ========================================
67
68 .. [#f1] Sphinx is needed only to build the Kernel documentation
69
70 Kernel compilation
71 ******************
72
73 GCC
74 ---
75
76 The gcc version requirements may vary depending on the type of CPU in your
77 computer.
78
79 Clang/LLVM (optional)
80 ---------------------
81
82 The latest formal release of clang and LLVM utils (according to
83 `releases.llvm.org <https://releases.llvm.org>`_) are supported for building
84 kernels. Older releases aren't guaranteed to work, and we may drop workarounds
85 from the kernel that were used to support older versions. Please see additional
86 docs on :ref:`Building Linux with Clang/LLVM <kbuild_llvm>`.
87
88 Rust (optional)
89 ---------------
90
91 A recent version of the Rust compiler is required.
92
93 Please see Documentation/rust/quick-start.rst for instructions on how to
94 satisfy the build requirements of Rust support. In particular, the ``Makefile``
95 target ``rustavailable`` is useful to check why the Rust toolchain may not
96 be detected.
97
98 bindgen (optional)
99 ------------------
100
101 ``bindgen`` is used to generate the Rust bindings to the C side of the kernel.
102 It depends on ``libclang``.
103
104 Make
105 ----
106
107 You will need GNU make 4.0 or later to build the kernel.
108
109 Bash
110 ----
111
112 Some bash scripts are used for the kernel build.
113 Bash 4.2 or newer is needed.
114
115 Binutils
116 --------
117
118 Binutils 2.30 or newer is needed to build the kernel.
119
120 pkg-config
121 ----------
122
123 The build system, as of 4.18, requires pkg-config to check for installed
124 kconfig tools and to determine flags settings for use in
125 'make {g,x}config'. Previously pkg-config was being used but not
126 verified or documented.
127
128 Flex
129 ----
130
131 Since Linux 4.16, the build system generates lexical analyzers
132 during build. This requires flex 2.5.35 or later.
133
134
135 Bison
136 -----
137
138 Since Linux 4.16, the build system generates parsers
139 during build. This requires bison 2.0 or later.
140
141 pahole
142 ------
143
144 Since Linux 5.2, if CONFIG_DEBUG_INFO_BTF is selected, the build system
145 generates BTF (BPF Type Format) from DWARF in vmlinux, a bit later from kernel
146 modules as well. This requires pahole v1.16 or later.
147
148 It is found in the 'dwarves' or 'pahole' distro packages or from
149 https://fedorapeople.org/~acme/dwarves/.
150
151 Perl
152 ----
153
154 You will need perl 5 and the following modules: ``Getopt::Long``,
155 ``Getopt::Std``, ``File::Basename``, and ``File::Find`` to build the kernel.
156
157 Python
158 ------
159
160 Several config options require it: it is required for arm/arm64
161 default configs, CONFIG_LTO_CLANG, some DRM optional configs,
162 the kernel-doc tool, and docs build (Sphinx), among others.
163
164 BC
165 --
166
167 You will need bc to build kernels 3.10 and higher
168
169
170 OpenSSL
171 -------
172
173 Module signing and external certificate handling use the OpenSSL program and
174 crypto library to do key creation and signature generation.
175
176 You will need openssl to build kernels 3.7 and higher if module signing is
177 enabled. You will also need openssl development packages to build kernels 4.3
178 and higher.
179
180 Tar
181 ---
182
183 GNU tar is needed if you want to enable access to the kernel headers via sysfs
184 (CONFIG_IKHEADERS).
185
186 gtags / GNU GLOBAL (optional)
187 -----------------------------
188
189 The kernel build requires GNU GLOBAL version 6.6.5 or later to generate
190 tag files through ``make gtags``. This is due to its use of the gtags
191 ``-C (--directory)`` flag.
192
193 mkimage
194 -------
195
196 This tool is used when building a Flat Image Tree (FIT), commonly used on ARM
197 platforms. The tool is available via the ``u-boot-tools`` package or can be
198 built from the U-Boot source code. See the instructions at
199 https://docs.u-boot.org/en/latest/build/tools.html#building-tools-for-linux
200
201 GNU AWK
202 -------
203
204 GNU AWK is needed if you want kernel builds to generate address range data for
205 builtin modules (CONFIG_BUILTIN_MODULE_RANGES).
206
207 System utilities
208 ****************
209
210 Architectural changes
211 ---------------------
212
213 DevFS has been obsoleted in favour of udev
214 (https://www.kernel.org/pub/linux/utils/kernel/hotplug/)
215
216 32-bit UID support is now in place. Have fun!
217
218 Linux documentation for functions is transitioning to inline
219 documentation via specially-formatted comments near their
220 definitions in the source. These comments can be combined with ReST
221 files the Documentation/ directory to make enriched documentation, which can
222 then be converted to PostScript, HTML, LaTex, ePUB and PDF files.
223 In order to convert from ReST format to a format of your choice, you'll need
224 Sphinx.
225
226 Util-linux
227 ----------
228
229 New versions of util-linux provide ``fdisk`` support for larger disks,
230 support new options to mount, recognize more supported partition
231 types, and similar goodies.
232 You'll probably want to upgrade.
233
234 Ksymoops
235 --------
236
237 If the unthinkable happens and your kernel oopses, you may need the
238 ksymoops tool to decode it, but in most cases you don't.
239 It is generally preferred to build the kernel with ``CONFIG_KALLSYMS`` so
240 that it produces readable dumps that can be used as-is (this also
241 produces better output than ksymoops). If for some reason your kernel
242 is not build with ``CONFIG_KALLSYMS`` and you have no way to rebuild and
243 reproduce the Oops with that option, then you can still decode that Oops
244 with ksymoops.
245
246 Mkinitrd
247 --------
248
249 These changes to the ``/lib/modules`` file tree layout also require that
250 mkinitrd be upgraded.
251
252 E2fsprogs
253 ---------
254
255 The latest version of ``e2fsprogs`` fixes several bugs in fsck and
256 debugfs. Obviously, it's a good idea to upgrade.
257
258 JFSutils
259 --------
260
261 The ``jfsutils`` package contains the utilities for the file system.
262 The following utilities are available:
263
264 - ``fsck.jfs`` - initiate replay of the transaction log, and check
265 and repair a JFS formatted partition.
266
267 - ``mkfs.jfs`` - create a JFS formatted partition.
268
269 - other file system utilities are also available in this package.
270
271 Xfsprogs
272 --------
273
274 The latest version of ``xfsprogs`` contains ``mkfs.xfs``, ``xfs_db``, and the
275 ``xfs_repair`` utilities, among others, for the XFS filesystem. It is
276 architecture independent and any version from 2.0.0 onward should
277 work correctly with this version of the XFS kernel code (2.6.0 or
278 later is recommended, due to some significant improvements).
279
280 PCMCIAutils
281 -----------
282
283 PCMCIAutils replaces ``pcmcia-cs``. It properly sets up
284 PCMCIA sockets at system startup and loads the appropriate modules
285 for 16-bit PCMCIA devices if the kernel is modularized and the hotplug
286 subsystem is used.
287
288 Quota-tools
289 -----------
290
291 Support for 32 bit uid's and gid's is required if you want to use
292 the newer version 2 quota format. Quota-tools version 3.07 and
293 newer has this support. Use the recommended version or newer
294 from the table above.
295
296 Intel IA32 microcode
297 --------------------
298
299 A driver has been added to allow updating of Intel IA32 microcode,
300 accessible as a normal (misc) character device. If you are not using
301 udev you may need to::
302
303 mkdir /dev/cpu
304 mknod /dev/cpu/microcode c 10 184
305 chmod 0644 /dev/cpu/microcode
306
307 as root before you can use this. You'll probably also want to
308 get the user-space microcode_ctl utility to use with this.
309
310 udev
311 ----
312
313 ``udev`` is a userspace application for populating ``/dev`` dynamically with
314 only entries for devices actually present. ``udev`` replaces the basic
315 functionality of devfs, while allowing persistent device naming for
316 devices.
317
318 FUSE
319 ----
320
321 Needs libfuse 2.4.0 or later. Absolute minimum is 2.3.0 but mount
322 options ``direct_io`` and ``kernel_cache`` won't work.
323
324 Networking
325 **********
326
327 General changes
328 ---------------
329
330 If you have advanced network configuration needs, you should probably
331 consider using the network tools from ip-route2.
332
333 Packet Filter / NAT
334 -------------------
335 The packet filtering and NAT code uses the same tools like the previous 2.4.x
336 kernel series (iptables). It still includes backwards-compatibility modules
337 for 2.2.x-style ipchains and 2.0.x-style ipfwadm.
338
339 PPP
340 ---
341
342 The PPP driver has been restructured to support multilink and to
343 enable it to operate over diverse media layers. If you use PPP,
344 upgrade pppd to at least 2.4.0.
345
346 If you are not using udev, you must have the device file /dev/ppp
347 which can be made by::
348
349 mknod /dev/ppp c 108 0
350
351 as root.
352
353 NFS-utils
354 ---------
355
356 In ancient (2.4 and earlier) kernels, the nfs server needed to know
357 about any client that expected to be able to access files via NFS. This
358 information would be given to the kernel by ``mountd`` when the client
359 mounted the filesystem, or by ``exportfs`` at system startup. exportfs
360 would take information about active clients from ``/var/lib/nfs/rmtab``.
361
362 This approach is quite fragile as it depends on rmtab being correct
363 which is not always easy, particularly when trying to implement
364 fail-over. Even when the system is working well, ``rmtab`` suffers from
365 getting lots of old entries that never get removed.
366
367 With modern kernels we have the option of having the kernel tell mountd
368 when it gets a request from an unknown host, and mountd can give
369 appropriate export information to the kernel. This removes the
370 dependency on ``rmtab`` and means that the kernel only needs to know about
371 currently active clients.
372
373 To enable this new functionality, you need to::
374
375 mount -t nfsd nfsd /proc/fs/nfsd
376
377 before running exportfs or mountd. It is recommended that all NFS
378 services be protected from the internet-at-large by a firewall where
379 that is possible.
380
381 mcelog
382 ------
383
384 On x86 kernels the mcelog utility is needed to process and log machine check
385 events when ``CONFIG_X86_MCE`` is enabled. Machine check events are errors
386 reported by the CPU. Processing them is strongly encouraged.
387
388 Kernel documentation
389 ********************
390
391 Sphinx
392 ------
393
394 Please see :ref:`sphinx_install` in :ref:`Documentation/doc-guide/sphinx.rst <sphinxdoc>`
395 for details about Sphinx requirements.
396
397 rustdoc
398 -------
399
400 ``rustdoc`` is used to generate the documentation for Rust code. Please see
401 Documentation/rust/general-information.rst for more information.
402
403 Getting updated software
404 ========================
405
406 Kernel compilation
407 ******************
408
409 gcc
410 ---
411
412 - <ftp://ftp.gnu.org/gnu/gcc/>
413
414 Clang/LLVM
415 ----------
416
417 - :ref:`Getting LLVM <getting_llvm>`.
418
419 Rust
420 ----
421
422 - Documentation/rust/quick-start.rst.
423
424 bindgen
425 -------
426
427 - Documentation/rust/quick-start.rst.
428
429 Make
430 ----
431
432 - <ftp://ftp.gnu.org/gnu/make/>
433
434 Bash
435 ----
436
437 - <ftp://ftp.gnu.org/gnu/bash/>
438
439 Binutils
440 --------
441
442 - <https://www.kernel.org/pub/linux/devel/binutils/>
443
444 Flex
445 ----
446
447 - <https://github.com/westes/flex/releases>
448
449 Bison
450 -----
451
452 - <ftp://ftp.gnu.org/gnu/bison/>
453
454 OpenSSL
455 -------
456
457 - <https://www.openssl.org/>
458
459 System utilities
460 ****************
461
462 Util-linux
463 ----------
464
465 - <https://www.kernel.org/pub/linux/utils/util-linux/>
466
467 Kmod
468 ----
469
470 - <https://www.kernel.org/pub/linux/utils/kernel/kmod/>
471 - <https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git>
472
473 Ksymoops
474 --------
475
476 - <https://www.kernel.org/pub/linux/utils/kernel/ksymoops/v2.4/>
477
478 Mkinitrd
479 --------
480
481 - <https://code.launchpad.net/initrd-tools/main>
482
483 E2fsprogs
484 ---------
485
486 - <https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/>
487 - <https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/>
488
489 JFSutils
490 --------
491
492 - <https://jfs.sourceforge.net/>
493
494 Xfsprogs
495 --------
496
497 - <https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git>
498 - <https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/>
499
500 Pcmciautils
501 -----------
502
503 - <https://www.kernel.org/pub/linux/utils/kernel/pcmcia/>
504
505 Quota-tools
506 -----------
507
508 - <https://sourceforge.net/projects/linuxquota/>
509
510
511 Intel P6 microcode
512 ------------------
513
514 - <https://downloadcenter.intel.com/>
515
516 udev
517 ----
518
519 - <https://www.freedesktop.org/software/systemd/man/udev.html>
520
521 FUSE
522 ----
523
524 - <https://github.com/libfuse/libfuse/releases>
525
526 mcelog
527 ------
528
529 - <https://www.mcelog.org/>
530
531 Networking
532 **********
533
534 PPP
535 ---
536
537 - <https://download.samba.org/pub/ppp/>
538 - <https://git.ozlabs.org/?p=ppp.git>
539 - <https://github.com/paulusmack/ppp/>
540
541 NFS-utils
542 ---------
543
544 - <https://sourceforge.net/project/showfiles.php?group_id=14>
545 - <https://nfs.sourceforge.net/>
546
547 Iptables
548 --------
549
550 - <https://netfilter.org/projects/iptables/index.html>
551
552 Ip-route2
553 ---------
554
555 - <https://www.kernel.org/pub/linux/utils/net/iproute2/>
556
557 OProfile
558 --------
559
560 - <https://oprofile.sf.net/download/>
561
562 Kernel documentation
563 ********************
564
565 Sphinx
566 ------
567
568 - <https://www.sphinx-doc.org/>
569

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를 신경 쓸 필요가 없는 식이다.

ProgramMinimumVersion 확인 command
GNU C8.1gcc --version
Clang/LLVM (optional)15.0.0clang --version
Rust (optional)1.78.0rustc --version
bindgen (optional)0.65.1bindgen --version
GNU make4.0make --version
bash4.2bash --version
binutils2.30ld -v
flex2.5.35flex --version
bison2.0bison --version
pahole1.16pahole --version
util-linux2.10omount --version
kmod13depmod -V
e2fsprogs1.41.4e2fsck -V
jfsutils1.1.3fsck.jfs -V
xfsprogs2.6.0xfs_db -V
squashfs-tools4.0mksquashfs -version
btrfs-progs0.18btrfs --version
pcmciautils004pccardctl -V
quota-tools3.09quota -V
PPP2.4.0pppd --version
nfs-utils1.0.5showmount --version
procps3.2.0ps --version
udev081udevd --version
grub0.93grub --version || grub-install --version
mcelog0.6mcelog --version
iptables1.4.2iptables -V
openssl & libcrypto1.0.0openssl version
bc1.06.95bc --version
Sphinx3.4.3sphinx-build --version
GNU tar1.28tar --version
gtags (optional)6.6.5gtags --version
mkimage (optional)2017.01mkimage --version
Python3.9.xpython3 --version
GNU AWK (optional)5.1.0gawk --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-205

Kernel 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-250

DevFS는 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-322

Intel 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-401

Sphinx 요구 사항의 자세한 내용은 Documentation/doc-guide/sphinx.rst의 sphinx_install 절을 참고한다.

rustdoc은 Rust code documentation을 생성한다. 추가 정보는 Documentation/rust/general-information.rst에 있다.

Compiler와 build tool update 위치

403-457

Clang/LLVM은 Getting LLVM 문서를, Rust와 bindgen은 Documentation/rust/quick-start.rst를 따른다.

System utility update 위치

459-529

Networking과 documentation tool update 위치

531-568