summaryrefslogtreecommitdiff
path: root/Documentation
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/ABI/testing/sysfs-bus-papr-pmem2
-rw-r--r--Documentation/PCI/pci-error-recovery.rst4
-rw-r--r--Documentation/admin-guide/cgroup-v2.rst10
-rw-r--r--Documentation/admin-guide/dynamic-debug-howto.rst2
-rw-r--r--Documentation/admin-guide/efi-stub.rst2
-rw-r--r--Documentation/admin-guide/hw-vuln/mds.rst34
-rw-r--r--Documentation/admin-guide/hw-vuln/processor_mmio_stale_data.rst13
-rw-r--r--Documentation/admin-guide/hw-vuln/tsx_async_abort.rst33
-rw-r--r--Documentation/admin-guide/mm/memory-hotplug.rst10
-rw-r--r--Documentation/admin-guide/spkguide.txt11
-rw-r--r--Documentation/admin-guide/sysctl/fs.rst16
-rw-r--r--Documentation/admin-guide/sysctl/vm.rst4
-rw-r--r--Documentation/arch/index.rst4
-rw-r--r--Documentation/arch/powerpc/associativity.rst (renamed from Documentation/powerpc/associativity.rst)0
-rw-r--r--Documentation/arch/powerpc/booting.rst (renamed from Documentation/powerpc/booting.rst)0
-rw-r--r--Documentation/arch/powerpc/bootwrapper.rst (renamed from Documentation/powerpc/bootwrapper.rst)0
-rw-r--r--Documentation/arch/powerpc/cpu_families.rst (renamed from Documentation/powerpc/cpu_families.rst)0
-rw-r--r--Documentation/arch/powerpc/cpu_features.rst (renamed from Documentation/powerpc/cpu_features.rst)0
-rw-r--r--Documentation/arch/powerpc/cxl.rst (renamed from Documentation/powerpc/cxl.rst)0
-rw-r--r--Documentation/arch/powerpc/cxlflash.rst (renamed from Documentation/powerpc/cxlflash.rst)2
-rw-r--r--Documentation/arch/powerpc/dawr-power9.rst (renamed from Documentation/powerpc/dawr-power9.rst)0
-rw-r--r--Documentation/arch/powerpc/dexcr.rst (renamed from Documentation/powerpc/dexcr.rst)0
-rw-r--r--Documentation/arch/powerpc/dscr.rst (renamed from Documentation/powerpc/dscr.rst)0
-rw-r--r--Documentation/arch/powerpc/eeh-pci-error-recovery.rst (renamed from Documentation/powerpc/eeh-pci-error-recovery.rst)0
-rw-r--r--Documentation/arch/powerpc/elf_hwcaps.rst (renamed from Documentation/powerpc/elf_hwcaps.rst)6
-rw-r--r--Documentation/arch/powerpc/elfnote.rst (renamed from Documentation/powerpc/elfnote.rst)0
-rw-r--r--Documentation/arch/powerpc/features.rst (renamed from Documentation/powerpc/features.rst)0
-rw-r--r--Documentation/arch/powerpc/firmware-assisted-dump.rst (renamed from Documentation/powerpc/firmware-assisted-dump.rst)0
-rw-r--r--Documentation/arch/powerpc/hvcs.rst (renamed from Documentation/powerpc/hvcs.rst)0
-rw-r--r--Documentation/arch/powerpc/imc.rst (renamed from Documentation/powerpc/imc.rst)0
-rw-r--r--Documentation/arch/powerpc/index.rst (renamed from Documentation/powerpc/index.rst)0
-rw-r--r--Documentation/arch/powerpc/isa-versions.rst (renamed from Documentation/powerpc/isa-versions.rst)0
-rw-r--r--Documentation/arch/powerpc/kasan.txt (renamed from Documentation/powerpc/kasan.txt)0
-rw-r--r--Documentation/arch/powerpc/kaslr-booke32.rst (renamed from Documentation/powerpc/kaslr-booke32.rst)0
-rw-r--r--Documentation/arch/powerpc/mpc52xx.rst (renamed from Documentation/powerpc/mpc52xx.rst)0
-rw-r--r--Documentation/arch/powerpc/papr_hcalls.rst (renamed from Documentation/powerpc/papr_hcalls.rst)0
-rw-r--r--Documentation/arch/powerpc/pci_iov_resource_on_powernv.rst (renamed from Documentation/powerpc/pci_iov_resource_on_powernv.rst)0
-rw-r--r--Documentation/arch/powerpc/pmu-ebb.rst (renamed from Documentation/powerpc/pmu-ebb.rst)0
-rw-r--r--Documentation/arch/powerpc/ptrace.rst (renamed from Documentation/powerpc/ptrace.rst)0
-rw-r--r--Documentation/arch/powerpc/qe_firmware.rst (renamed from Documentation/powerpc/qe_firmware.rst)0
-rw-r--r--Documentation/arch/powerpc/syscall64-abi.rst (renamed from Documentation/powerpc/syscall64-abi.rst)0
-rw-r--r--Documentation/arch/powerpc/transactional_memory.rst (renamed from Documentation/powerpc/transactional_memory.rst)0
-rw-r--r--Documentation/arch/powerpc/ultravisor.rst (renamed from Documentation/powerpc/ultravisor.rst)0
-rw-r--r--Documentation/arch/powerpc/vas-api.rst (renamed from Documentation/powerpc/vas-api.rst)0
-rw-r--r--Documentation/arch/powerpc/vcpudispatch_stats.rst (renamed from Documentation/powerpc/vcpudispatch_stats.rst)0
-rw-r--r--Documentation/arch/powerpc/vmemmap_dedup.rst (renamed from Documentation/powerpc/vmemmap_dedup.rst)0
-rw-r--r--Documentation/arch/riscv/acpi.rst (renamed from Documentation/riscv/acpi.rst)0
-rw-r--r--Documentation/arch/riscv/boot-image-header.rst (renamed from Documentation/riscv/boot-image-header.rst)0
-rw-r--r--Documentation/arch/riscv/boot.rst (renamed from Documentation/riscv/boot.rst)0
-rw-r--r--Documentation/arch/riscv/features.rst (renamed from Documentation/riscv/features.rst)0
-rw-r--r--Documentation/arch/riscv/hwprobe.rst (renamed from Documentation/riscv/hwprobe.rst)0
-rw-r--r--Documentation/arch/riscv/index.rst (renamed from Documentation/riscv/index.rst)0
-rw-r--r--Documentation/arch/riscv/patch-acceptance.rst (renamed from Documentation/riscv/patch-acceptance.rst)0
-rw-r--r--Documentation/arch/riscv/uabi.rst (renamed from Documentation/riscv/uabi.rst)0
-rw-r--r--Documentation/arch/riscv/vector.rst (renamed from Documentation/riscv/vector.rst)0
-rw-r--r--Documentation/arch/riscv/vm-layout.rst (renamed from Documentation/riscv/vm-layout.rst)0
-rw-r--r--Documentation/block/blk-mq.rst2
-rw-r--r--Documentation/doc-guide/contributing.rst4
-rw-r--r--Documentation/driver-api/driver-model/devres.rst14
-rw-r--r--Documentation/driver-api/pps.rst16
-rw-r--r--Documentation/driver-api/pwm.rst6
-rw-r--r--Documentation/filesystems/xfs-online-fsck-design.rst2
-rw-r--r--Documentation/maintainer/maintainer-entry-profile.rst2
-rw-r--r--Documentation/mm/overcommit-accounting.rst3
-rw-r--r--Documentation/mm/page_tables.rst127
-rw-r--r--Documentation/mm/vmemmap_dedup.rst2
-rw-r--r--Documentation/process/backporting.rst604
-rw-r--r--Documentation/process/index.rst3
-rw-r--r--Documentation/process/submitting-patches.rst10
-rw-r--r--Documentation/security/index.rst1
-rw-r--r--Documentation/security/snp-tdx-threat-model.rst253
-rw-r--r--Documentation/sphinx/cdomain.py4
-rw-r--r--Documentation/sphinx/kernel_abi.py2
-rw-r--r--Documentation/sphinx/kernel_feat.py2
-rw-r--r--Documentation/sphinx/kerneldoc.py4
-rw-r--r--Documentation/sphinx/kfigure.py2
-rwxr-xr-xDocumentation/sphinx/maintainers_include.py8
-rw-r--r--Documentation/subsystem-apis.rst2
-rw-r--r--Documentation/translations/it_IT/riscv/patch-acceptance.rst2
-rw-r--r--Documentation/translations/sp_SP/process/embargoed-hardware-issues.rst341
-rw-r--r--Documentation/translations/sp_SP/process/index.rst2
-rw-r--r--Documentation/translations/sp_SP/process/security-bugs.rst103
-rw-r--r--Documentation/translations/zh_CN/arch/index.rst2
-rw-r--r--Documentation/translations/zh_CN/arch/riscv/boot-image-header.rst (renamed from Documentation/translations/zh_CN/riscv/boot-image-header.rst)4
-rw-r--r--Documentation/translations/zh_CN/arch/riscv/index.rst (renamed from Documentation/translations/zh_CN/riscv/index.rst)4
-rw-r--r--Documentation/translations/zh_CN/arch/riscv/patch-acceptance.rst (renamed from Documentation/translations/zh_CN/riscv/patch-acceptance.rst)4
-rw-r--r--Documentation/translations/zh_CN/arch/riscv/vm-layout.rst (renamed from Documentation/translations/zh_CN/riscv/vm-layout.rst)4
-rw-r--r--Documentation/translations/zh_CN/index.rst5
-rw-r--r--Documentation/translations/zh_CN/maintainer/maintainer-entry-profile.rst2
-rw-r--r--Documentation/translations/zh_CN/subsystem-apis.rst110
-rw-r--r--Documentation/translations/zh_TW/admin-guide/README.rst164
-rw-r--r--Documentation/translations/zh_TW/admin-guide/bootconfig.rst294
-rw-r--r--Documentation/translations/zh_TW/admin-guide/bug-bisect.rst10
-rw-r--r--Documentation/translations/zh_TW/admin-guide/bug-hunting.rst38
-rw-r--r--Documentation/translations/zh_TW/admin-guide/clearing-warn-once.rst4
-rw-r--r--Documentation/translations/zh_TW/admin-guide/cpu-load.rst8
-rw-r--r--Documentation/translations/zh_TW/admin-guide/cputopology.rst97
-rw-r--r--Documentation/translations/zh_TW/admin-guide/index.rst137
-rw-r--r--Documentation/translations/zh_TW/admin-guide/init.rst36
-rw-r--r--Documentation/translations/zh_TW/admin-guide/lockup-watchdogs.rst67
-rw-r--r--Documentation/translations/zh_TW/admin-guide/mm/damon/index.rst30
-rw-r--r--Documentation/translations/zh_TW/admin-guide/mm/damon/lru_sort.rst264
-rw-r--r--Documentation/translations/zh_TW/admin-guide/mm/damon/reclaim.rst229
-rw-r--r--Documentation/translations/zh_TW/admin-guide/mm/damon/start.rst125
-rw-r--r--Documentation/translations/zh_TW/admin-guide/mm/damon/usage.rst592
-rw-r--r--Documentation/translations/zh_TW/admin-guide/mm/index.rst50
-rw-r--r--Documentation/translations/zh_TW/admin-guide/mm/ksm.rst199
-rw-r--r--Documentation/translations/zh_TW/admin-guide/reporting-issues.rst727
-rw-r--r--Documentation/translations/zh_TW/admin-guide/reporting-regressions.rst371
-rw-r--r--Documentation/translations/zh_TW/admin-guide/security-bugs.rst26
-rw-r--r--Documentation/translations/zh_TW/admin-guide/sysrq.rst281
-rw-r--r--Documentation/translations/zh_TW/admin-guide/tainted-kernels.rst84
-rw-r--r--Documentation/translations/zh_TW/admin-guide/unicode.rst10
-rw-r--r--Documentation/translations/zh_TW/arch/arm/Booting176
-rw-r--r--Documentation/translations/zh_TW/arch/arm/kernel_user_helpers.txt285
-rw-r--r--Documentation/translations/zh_TW/arch/arm64/amu.rst6
-rw-r--r--Documentation/translations/zh_TW/arch/arm64/booting.txt28
-rw-r--r--Documentation/translations/zh_TW/arch/arm64/elf_hwcaps.rst10
-rw-r--r--Documentation/translations/zh_TW/arch/arm64/legacy_instructions.txt14
-rw-r--r--Documentation/translations/zh_TW/arch/arm64/memory.txt16
-rw-r--r--Documentation/translations/zh_TW/arch/arm64/perf.rst2
-rw-r--r--Documentation/translations/zh_TW/arch/arm64/silicon-errata.txt28
-rw-r--r--Documentation/translations/zh_TW/arch/arm64/tagged-pointers.txt10
-rw-r--r--Documentation/translations/zh_TW/arch/index.rst29
-rw-r--r--Documentation/translations/zh_TW/arch/loongarch/booting.rst49
-rw-r--r--Documentation/translations/zh_TW/arch/loongarch/features.rst9
-rw-r--r--Documentation/translations/zh_TW/arch/loongarch/index.rst28
-rw-r--r--Documentation/translations/zh_TW/arch/loongarch/introduction.rst354
-rw-r--r--Documentation/translations/zh_TW/arch/loongarch/irq-chip-model.rst158
-rw-r--r--Documentation/translations/zh_TW/arch/mips/booting.rst35
-rw-r--r--Documentation/translations/zh_TW/arch/mips/features.rst14
-rw-r--r--Documentation/translations/zh_TW/arch/mips/index.rst30
-rw-r--r--Documentation/translations/zh_TW/arch/mips/ingenic-tcu.rst73
-rw-r--r--Documentation/translations/zh_TW/arch/openrisc/index.rst33
-rw-r--r--Documentation/translations/zh_TW/arch/openrisc/openrisc_port.rst128
-rw-r--r--Documentation/translations/zh_TW/arch/openrisc/todo.rst24
-rw-r--r--Documentation/translations/zh_TW/arch/parisc/debugging.rst46
-rw-r--r--Documentation/translations/zh_TW/arch/parisc/index.rst32
-rw-r--r--Documentation/translations/zh_TW/arch/parisc/registers.rst157
-rw-r--r--Documentation/translations/zh_TW/cpu-freq/core.rst38
-rw-r--r--Documentation/translations/zh_TW/cpu-freq/cpu-drivers.rst158
-rw-r--r--Documentation/translations/zh_TW/cpu-freq/cpufreq-stats.rst52
-rw-r--r--Documentation/translations/zh_TW/cpu-freq/index.rst13
-rw-r--r--Documentation/translations/zh_TW/dev-tools/gcov.rst265
-rw-r--r--Documentation/translations/zh_TW/dev-tools/gdb-kernel-debugging.rst168
-rw-r--r--Documentation/translations/zh_TW/dev-tools/index.rst43
-rw-r--r--Documentation/translations/zh_TW/dev-tools/kasan.rst463
-rw-r--r--Documentation/translations/zh_TW/dev-tools/sparse.rst (renamed from Documentation/translations/zh_TW/sparse.txt)4
-rw-r--r--Documentation/translations/zh_TW/dev-tools/testing-overview.rst162
-rw-r--r--Documentation/translations/zh_TW/filesystems/debugfs.rst47
-rw-r--r--Documentation/translations/zh_TW/filesystems/index.rst2
-rw-r--r--Documentation/translations/zh_TW/filesystems/sysfs.txt14
-rw-r--r--Documentation/translations/zh_TW/filesystems/tmpfs.rst35
-rw-r--r--Documentation/translations/zh_TW/filesystems/virtiofs.rst9
-rw-r--r--Documentation/translations/zh_TW/index.rst7
-rw-r--r--Documentation/translations/zh_TW/process/1.Intro.rst78
-rw-r--r--Documentation/translations/zh_TW/process/2.Process.rst130
-rw-r--r--Documentation/translations/zh_TW/process/3.Early-stage.rst44
-rw-r--r--Documentation/translations/zh_TW/process/4.Coding.rst104
-rw-r--r--Documentation/translations/zh_TW/process/5.Posting.rst80
-rw-r--r--Documentation/translations/zh_TW/process/6.Followthrough.rst46
-rw-r--r--Documentation/translations/zh_TW/process/7.AdvancedTopics.rst56
-rw-r--r--Documentation/translations/zh_TW/process/8.Conclusion.rst14
-rw-r--r--Documentation/translations/zh_TW/process/code-of-conduct-interpretation.rst52
-rw-r--r--Documentation/translations/zh_TW/process/code-of-conduct.rst18
-rw-r--r--Documentation/translations/zh_TW/process/coding-style.rst405
-rw-r--r--Documentation/translations/zh_TW/process/development-process.rst2
-rw-r--r--Documentation/translations/zh_TW/process/email-clients.rst279
-rw-r--r--Documentation/translations/zh_TW/process/embargoed-hardware-issues.rst76
-rw-r--r--Documentation/translations/zh_TW/process/index.rst5
-rw-r--r--Documentation/translations/zh_TW/process/kernel-driver-statement.rst2
-rw-r--r--Documentation/translations/zh_TW/process/license-rules.rst54
-rw-r--r--Documentation/translations/zh_TW/process/management-style.rst60
-rw-r--r--Documentation/translations/zh_TW/process/stable-api-nonsense.rst86
-rw-r--r--Documentation/translations/zh_TW/process/stable-kernel-rules.rst36
-rw-r--r--Documentation/translations/zh_TW/process/submit-checklist.rst92
-rw-r--r--Documentation/translations/zh_TW/process/submitting-patches.rst749
-rw-r--r--Documentation/translations/zh_TW/process/volatile-considered-harmful.rst32
-rw-r--r--Documentation/usb/gadget_uvc.rst2
179 files changed, 9260 insertions, 2148 deletions
diff --git a/Documentation/ABI/testing/sysfs-bus-papr-pmem b/Documentation/ABI/testing/sysfs-bus-papr-pmem
index 46cfe02058fd..34ee8c59ab25 100644
--- a/Documentation/ABI/testing/sysfs-bus-papr-pmem
+++ b/Documentation/ABI/testing/sysfs-bus-papr-pmem
@@ -8,7 +8,7 @@ Description:
more bits set in the dimm-health-bitmap retrieved in
response to H_SCM_HEALTH hcall. The details of the bit
flags returned in response to this hcall is available
- at 'Documentation/powerpc/papr_hcalls.rst' . Below are
+ at 'Documentation/arch/powerpc/papr_hcalls.rst' . Below are
the flags reported in this sysfs file:
* "not_armed"
diff --git a/Documentation/PCI/pci-error-recovery.rst b/Documentation/PCI/pci-error-recovery.rst
index 0c7552a00c8c..42e1e78353f3 100644
--- a/Documentation/PCI/pci-error-recovery.rst
+++ b/Documentation/PCI/pci-error-recovery.rst
@@ -364,7 +364,7 @@ Note, however, not all failures are truly "permanent". Some are
caused by over-heating, some by a poorly seated card. Many
PCI error events are caused by software bugs, e.g. DMAs to
wild addresses or bogus split transactions due to programming
-errors. See the discussion in Documentation/powerpc/eeh-pci-error-recovery.rst
+errors. See the discussion in Documentation/arch/powerpc/eeh-pci-error-recovery.rst
for additional detail on real-life experience of the causes of
software errors.
@@ -404,7 +404,7 @@ That is, the recovery API only requires that:
.. note::
Implementation details for the powerpc platform are discussed in
- the file Documentation/powerpc/eeh-pci-error-recovery.rst
+ the file Documentation/arch/powerpc/eeh-pci-error-recovery.rst
As of this writing, there is a growing list of device drivers with
patches implementing error recovery. Not all of these patches are in
diff --git a/Documentation/admin-guide/cgroup-v2.rst b/Documentation/admin-guide/cgroup-v2.rst
index e440aee4fe94..3f081459a5be 100644
--- a/Documentation/admin-guide/cgroup-v2.rst
+++ b/Documentation/admin-guide/cgroup-v2.rst
@@ -2030,7 +2030,7 @@ IO Priority
~~~~~~~~~~~
A single attribute controls the behavior of the I/O priority cgroup policy,
-namely the blkio.prio.class attribute. The following values are accepted for
+namely the io.prio.class attribute. The following values are accepted for
that attribute:
no-change
@@ -2059,9 +2059,11 @@ The following numerical values are associated with the I/O priority policies:
+----------------+---+
| no-change | 0 |
+----------------+---+
-| rt-to-be | 2 |
+| promote-to-rt | 1 |
+----------------+---+
-| all-to-idle | 3 |
+| restrict-to-be | 2 |
++----------------+---+
+| idle | 3 |
+----------------+---+
The numerical value that corresponds to each I/O priority class is as follows:
@@ -2081,7 +2083,7 @@ The algorithm to set the I/O priority class for a request is as follows:
- If I/O priority class policy is promote-to-rt, change the request I/O
priority class to IOPRIO_CLASS_RT and change the request I/O priority
level to 4.
-- If I/O priorityt class is not promote-to-rt, translate the I/O priority
+- If I/O priority class policy is not promote-to-rt, translate the I/O priority
class policy into a number, then change the request I/O priority class
into the maximum of the I/O priority class policy number and the numerical
I/O priority class.
diff --git a/Documentation/admin-guide/dynamic-debug-howto.rst b/Documentation/admin-guide/dynamic-debug-howto.rst
index 0b3d39c610d9..0c526dac8428 100644
--- a/Documentation/admin-guide/dynamic-debug-howto.rst
+++ b/Documentation/admin-guide/dynamic-debug-howto.rst
@@ -259,7 +259,7 @@ Debug Messages at Module Initialization Time
When ``modprobe foo`` is called, modprobe scans ``/proc/cmdline`` for
``foo.params``, strips ``foo.``, and passes them to the kernel along with
-params given in modprobe args or ``/etc/modprob.d/*.conf`` files,
+params given in modprobe args or ``/etc/modprobe.d/*.conf`` files,
in the following order:
1. parameters given via ``/etc/modprobe.d/*.conf``::
diff --git a/Documentation/admin-guide/efi-stub.rst b/Documentation/admin-guide/efi-stub.rst
index b24e7c40d832..090f3a185e18 100644
--- a/Documentation/admin-guide/efi-stub.rst
+++ b/Documentation/admin-guide/efi-stub.rst
@@ -15,7 +15,7 @@ between architectures is in drivers/firmware/efi/libstub.
For arm64, there is no compressed kernel support, so the Image itself
masquerades as a PE/COFF image and the EFI stub is linked into the
-kernel. The arm64 EFI stub lives in arch/arm64/kernel/efi-entry.S
+kernel. The arm64 EFI stub lives in drivers/firmware/efi/libstub/arm64.c
and drivers/firmware/efi/libstub/arm64-stub.c.
By using the EFI boot stub it's possible to boot a Linux kernel
diff --git a/Documentation/admin-guide/hw-vuln/mds.rst b/Documentation/admin-guide/hw-vuln/mds.rst
index 48ca0bd85604..48c7b0b72aed 100644
--- a/Documentation/admin-guide/hw-vuln/mds.rst
+++ b/Documentation/admin-guide/hw-vuln/mds.rst
@@ -102,9 +102,19 @@ The possible values in this file are:
* - 'Vulnerable'
- The processor is vulnerable, but no mitigation enabled
* - 'Vulnerable: Clear CPU buffers attempted, no microcode'
- - The processor is vulnerable but microcode is not updated.
-
- The mitigation is enabled on a best effort basis. See :ref:`vmwerv`
+ - The processor is vulnerable but microcode is not updated. The
+ mitigation is enabled on a best effort basis.
+
+ If the processor is vulnerable but the availability of the microcode
+ based mitigation mechanism is not advertised via CPUID, the kernel
+ selects a best effort mitigation mode. This mode invokes the mitigation
+ instructions without a guarantee that they clear the CPU buffers.
+
+ This is done to address virtualization scenarios where the host has the
+ microcode update applied, but the hypervisor is not yet updated to
+ expose the CPUID to the guest. If the host has updated microcode the
+ protection takes effect; otherwise a few CPU cycles are wasted
+ pointlessly.
* - 'Mitigation: Clear CPU buffers'
- The processor is vulnerable and the CPU buffer clearing mitigation is
enabled.
@@ -119,24 +129,6 @@ to the above information:
'SMT Host state unknown' Kernel runs in a VM, Host SMT state unknown
======================== ============================================
-.. _vmwerv:
-
-Best effort mitigation mode
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
- If the processor is vulnerable, but the availability of the microcode based
- mitigation mechanism is not advertised via CPUID the kernel selects a best
- effort mitigation mode. This mode invokes the mitigation instructions
- without a guarantee that they clear the CPU buffers.
-
- This is done to address virtualization scenarios where the host has the
- microcode update applied, but the hypervisor is not yet updated to expose
- the CPUID to the guest. If the host has updated microcode the protection
- takes effect otherwise a few cpu cycles are wasted pointlessly.
-
- The state in the mds sysfs file reflects this situation accordingly.
-
-
Mitigation mechanism
-------------------------
diff --git a/Documentation/admin-guide/hw-vuln/processor_mmio_stale_data.rst b/Documentation/admin-guide/hw-vuln/processor_mmio_stale_data.rst
index c98fd11907cc..1302fd1b55e8 100644
--- a/Documentation/admin-guide/hw-vuln/processor_mmio_stale_data.rst
+++ b/Documentation/admin-guide/hw-vuln/processor_mmio_stale_data.rst
@@ -225,8 +225,19 @@ The possible values in this file are:
* - 'Vulnerable'
- The processor is vulnerable, but no mitigation enabled
* - 'Vulnerable: Clear CPU buffers attempted, no microcode'
- - The processor is vulnerable, but microcode is not updated. The
+ - The processor is vulnerable but microcode is not updated. The
mitigation is enabled on a best effort basis.
+
+ If the processor is vulnerable but the availability of the microcode
+ based mitigation mechanism is not advertised via CPUID, the kernel
+ selects a best effort mitigation mode. This mode invokes the mitigation
+ instructions without a guarantee that they clear the CPU buffers.
+
+ This is done to address virtualization scenarios where the host has the
+ microcode update applied, but the hypervisor is not yet updated to
+ expose the CPUID to the guest. If the host has updated microcode the
+ protection takes effect; otherwise a few CPU cycles are wasted
+ pointlessly.
* - 'Mitigation: Clear CPU buffers'
- The processor is vulnerable and the CPU buffer clearing mitigation is
enabled.
diff --git a/Documentation/admin-guide/hw-vuln/tsx_async_abort.rst b/Documentation/admin-guide/hw-vuln/tsx_async_abort.rst
index 014167ef8dd1..444f84e22a91 100644
--- a/Documentation/admin-guide/hw-vuln/tsx_async_abort.rst
+++ b/Documentation/admin-guide/hw-vuln/tsx_async_abort.rst
@@ -98,7 +98,19 @@ The possible values in this file are:
* - 'Vulnerable'
- The CPU is affected by this vulnerability and the microcode and kernel mitigation are not applied.
* - 'Vulnerable: Clear CPU buffers attempted, no microcode'
- - The system tries to clear the buffers but the microcode might not support the operation.
+ - The processor is vulnerable but microcode is not updated. The
+ mitigation is enabled on a best effort basis.
+
+ If the processor is vulnerable but the availability of the microcode
+ based mitigation mechanism is not advertised via CPUID, the kernel
+ selects a best effort mitigation mode. This mode invokes the mitigation
+ instructions without a guarantee that they clear the CPU buffers.
+
+ This is done to address virtualization scenarios where the host has the
+ microcode update applied, but the hypervisor is not yet updated to
+ expose the CPUID to the guest. If the host has updated microcode the
+ protection takes effect; otherwise a few CPU cycles are wasted
+ pointlessly.
* - 'Mitigation: Clear CPU buffers'
- The microcode has been updated to clear the buffers. TSX is still enabled.
* - 'Mitigation: TSX disabled'
@@ -106,25 +118,6 @@ The possible values in this file are:
* - 'Not affected'
- The CPU is not affected by this issue.
-.. _ucode_needed:
-
-Best effort mitigation mode
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-If the processor is vulnerable, but the availability of the microcode-based
-mitigation mechanism is not advertised via CPUID the kernel selects a best
-effort mitigation mode. This mode invokes the mitigation instructions
-without a guarantee that they clear the CPU buffers.
-
-This is done to address virtualization scenarios where the host has the
-microcode update applied, but the hypervisor is not yet updated to expose the
-CPUID to the guest. If the host has updated microcode the protection takes
-effect; otherwise a few CPU cycles are wasted pointlessly.
-
-The state in the tsx_async_abort sysfs file reflects this situation
-accordingly.
-
-
Mitigation mechanism
--------------------
diff --git a/Documentation/admin-guide/mm/memory-hotplug.rst b/Documentation/admin-guide/mm/memory-hotplug.rst
index a5ef6ee69d01..098f14d83e99 100644
--- a/Documentation/admin-guide/mm/memory-hotplug.rst
+++ b/Documentation/admin-guide/mm/memory-hotplug.rst
@@ -75,7 +75,7 @@ Memory hotunplug consists of two phases:
(1) Offlining memory blocks
(2) Removing the memory from Linux
-In the fist phase, memory is "hidden" from the page allocator again, for
+In the first phase, memory is "hidden" from the page allocator again, for
example, by migrating busy memory to other memory locations and removing all
relevant free pages from the page allocator After this phase, the memory is no
longer visible in memory statistics of the system.
@@ -250,15 +250,15 @@ Observing the State of Memory Blocks
The state (online/offline/going-offline) of a memory block can be observed
either via::
- % cat /sys/device/system/memory/memoryXXX/state
+ % cat /sys/devices/system/memory/memoryXXX/state
Or alternatively (1/0) via::
- % cat /sys/device/system/memory/memoryXXX/online
+ % cat /sys/devices/system/memory/memoryXXX/online
For an online memory block, the managing zone can be observed via::
- % cat /sys/device/system/memory/memoryXXX/valid_zones
+ % cat /sys/devices/system/memory/memoryXXX/valid_zones
Configuring Memory Hot(Un)Plug
==============================
@@ -326,7 +326,7 @@ however, a memory block might span memory holes. A memory block spanning memory
holes cannot be offlined.
For example, assume 1 GiB memory block size. A device for a memory starting at
-0x100000000 is ``/sys/device/system/memory/memory4``::
+0x100000000 is ``/sys/devices/system/memory/memory4``::
(0x100000000 / 1Gib = 4)
diff --git a/Documentation/admin-guide/spkguide.txt b/Documentation/admin-guide/spkguide.txt
index 74ea7f391942..0d5965138f8f 100644
--- a/Documentation/admin-guide/spkguide.txt
+++ b/Documentation/admin-guide/spkguide.txt
@@ -7,7 +7,7 @@ Last modified on Mon Sep 27 14:26:31 2010
Document version 1.3
Copyright (c) 2005 Gene Collins
-Copyright (c) 2008 Samuel Thibault
+Copyright (c) 2008, 2023 Samuel Thibault
Copyright (c) 2009, 2010 the Speakup Team
Permission is granted to copy, distribute and/or modify this document
@@ -83,8 +83,7 @@ spkout -- Speak Out
txprt -- Transport
dummy -- Plain text terminal
-Note: Speakup does * NOT * support usb connections! Speakup also does *
-NOT * support the internal Tripletalk!
+Note: Speakup does * NOT * support the internal Tripletalk!
Speakup does support two other synthesizers, but because they work in
conjunction with other software, they must be loaded as modules after
@@ -94,6 +93,12 @@ These are as follows:
decpc -- DecTalk PC (not available at boot up)
soft -- One of several software synthesizers (not available at boot up)
+By default speakup looks for the synthesizer on the ttyS0 serial port. This can
+be changed with the device parameter of the modules, for instance for
+DoubleTalk LT:
+
+speakup_ltlk.dev=ttyUSB0
+
See the sections on loading modules and software synthesizers later in
this manual for further details. It should be noted here that the
speakup.synth boot parameter will have no effect if Speakup has been
diff --git a/Documentation/admin-guide/sysctl/fs.rst b/Documentation/admin-guide/sysctl/fs.rst
index a321b84eccaa..47499a1742bd 100644
--- a/Documentation/admin-guide/sysctl/fs.rst
+++ b/Documentation/admin-guide/sysctl/fs.rst
@@ -42,16 +42,16 @@ pre-allocation or re-sizing of any kernel data structures.
dentry-state
------------
-This file shows the values in ``struct dentry_stat``, as defined in
-``linux/include/linux/dcache.h``::
+This file shows the values in ``struct dentry_stat_t``, as defined in
+``fs/dcache.c``::
struct dentry_stat_t dentry_stat {
- int nr_dentry;
- int nr_unused;
- int age_limit; /* age in seconds */
- int want_pages; /* pages requested by system */
- int nr_negative; /* # of unused negative dentries */
- int dummy; /* Reserved for future use */
+ long nr_dentry;
+ long nr_unused;
+ long age_limit; /* age in seconds */
+ long want_pages; /* pages requested by system */
+ long nr_negative; /* # of unused negative dentries */
+ long dummy; /* Reserved for future use */
};
Dentries are dynamically allocated and deallocated.
diff --git a/Documentation/admin-guide/sysctl/vm.rst b/Documentation/admin-guide/sysctl/vm.rst
index 45ba1f4dc004..c59889de122b 100644
--- a/Documentation/admin-guide/sysctl/vm.rst
+++ b/Documentation/admin-guide/sysctl/vm.rst
@@ -742,8 +742,8 @@ overcommit_memory
This value contains a flag that enables memory overcommitment.
-When this flag is 0, the kernel attempts to estimate the amount
-of free memory left when userspace requests more memory.
+When this flag is 0, the kernel compares the userspace memory request
+size against total memory plus swap and rejects obvious overcommits.
When this flag is 1, the kernel pretends there is always enough
memory until it actually runs out.
diff --git a/Documentation/arch/index.rst b/Documentation/arch/index.rst
index 194e7e797877..3f9962e45c09 100644
--- a/Documentation/arch/index.rst
+++ b/Documentation/arch/index.rst
@@ -18,8 +18,8 @@ implementation.
nios2/index
openrisc/index
parisc/index
- ../powerpc/index
- ../riscv/index
+ powerpc/index
+ riscv/index
s390/index
sh/index
sparc/index
diff --git a/Documentation/powerpc/associativity.rst b/Documentation/arch/powerpc/associativity.rst
index 4d01c7368561..4d01c7368561 100644
--- a/Documentation/powerpc/associativity.rst
+++ b/Documentation/arch/powerpc/associativity.rst
diff --git a/Documentation/powerpc/booting.rst b/Documentation/arch/powerpc/booting.rst
index 11aa440f98cc..11aa440f98cc 100644
--- a/Documentation/powerpc/booting.rst
+++ b/Documentation/arch/powerpc/booting.rst
diff --git a/Documentation/powerpc/bootwrapper.rst b/Documentation/arch/powerpc/bootwrapper.rst
index cdfa2bc8425f..cdfa2bc8425f 100644
--- a/Documentation/powerpc/bootwrapper.rst
+++ b/Documentation/arch/powerpc/bootwrapper.rst
diff --git a/Documentation/powerpc/cpu_families.rst b/Documentation/arch/powerpc/cpu_families.rst
index eb7e60649b43..eb7e60649b43 100644
--- a/Documentation/powerpc/cpu_families.rst
+++ b/Documentation/arch/powerpc/cpu_families.rst
diff --git a/Documentation/powerpc/cpu_features.rst b/Documentation/arch/powerpc/cpu_features.rst
index b7bcdd2f41bb..b7bcdd2f41bb 100644
--- a/Documentation/powerpc/cpu_features.rst
+++ b/Documentation/arch/powerpc/cpu_features.rst
diff --git a/Documentation/powerpc/cxl.rst b/Documentation/arch/powerpc/cxl.rst
index d2d77057610e..d2d77057610e 100644
--- a/Documentation/powerpc/cxl.rst
+++ b/Documentation/arch/powerpc/cxl.rst
diff --git a/Documentation/powerpc/cxlflash.rst b/Documentation/arch/powerpc/cxlflash.rst
index cea67931b3b9..e8f488acfa41 100644
--- a/Documentation/powerpc/cxlflash.rst
+++ b/Documentation/arch/powerpc/cxlflash.rst
@@ -32,7 +32,7 @@ Introduction
responsible for the initialization of the adapter, setting up the
special path for user space access, and performing error recovery. It
communicates directly the Flash Accelerator Functional Unit (AFU)
- as described in Documentation/powerpc/cxl.rst.
+ as described in Documentation/arch/powerpc/cxl.rst.
The cxlflash driver supports two, mutually exclusive, modes of
operation at the device (LUN) level:
diff --git a/Documentation/powerpc/dawr-power9.rst b/Documentation/arch/powerpc/dawr-power9.rst
index 310f2e0cea81..310f2e0cea81 100644
--- a/Documentation/powerpc/dawr-power9.rst
+++ b/Documentation/arch/powerpc/dawr-power9.rst
diff --git a/Documentation/powerpc/dexcr.rst b/Documentation/arch/powerpc/dexcr.rst
index 615a631f51fa..615a631f51fa 100644
--- a/Documentation/powerpc/dexcr.rst
+++ b/Documentation/arch/powerpc/dexcr.rst
diff --git a/Documentation/powerpc/dscr.rst b/Documentation/arch/powerpc/dscr.rst
index f735ec5375d5..f735ec5375d5 100644
--- a/Documentation/powerpc/dscr.rst
+++ b/Documentation/arch/powerpc/dscr.rst
diff --git a/Documentation/powerpc/eeh-pci-error-recovery.rst b/Documentation/arch/powerpc/eeh-pci-error-recovery.rst
index d6643a91bdf8..d6643a91bdf8 100644
--- a/Documentation/powerpc/eeh-pci-error-recovery.rst
+++ b/Documentation/arch/powerpc/eeh-pci-error-recovery.rst
diff --git a/Documentation/powerpc/elf_hwcaps.rst b/Documentation/arch/powerpc/elf_hwcaps.rst
index 3366e5b18e67..4c896cf077c2 100644
--- a/Documentation/powerpc/elf_hwcaps.rst
+++ b/Documentation/arch/powerpc/elf_hwcaps.rst
@@ -202,7 +202,7 @@ PPC_FEATURE2_VEC_CRYPTO
PPC_FEATURE2_HTM_NOSC
System calls fail if called in a transactional state, see
- Documentation/powerpc/syscall64-abi.rst
+ Documentation/arch/powerpc/syscall64-abi.rst
PPC_FEATURE2_ARCH_3_00
The processor supports the v3.0B / v3.0C userlevel architecture. Processors
@@ -217,11 +217,11 @@ PPC_FEATURE2_DARN
PPC_FEATURE2_SCV
The scv 0 instruction may be used for system calls, see
- Documentation/powerpc/syscall64-abi.rst.
+ Documentation/arch/powerpc/syscall64-abi.rst.
PPC_FEATURE2_HTM_NO_SUSPEND
A limited Transactional Memory facility that does not support suspend is
- available, see Documentation/powerpc/transactional_memory.rst.
+ available, see Documentation/arch/powerpc/transactional_memory.rst.
PPC_FEATURE2_ARCH_3_1
The processor supports the v3.1 userlevel architecture. Processors
diff --git a/Documentation/powerpc/elfnote.rst b/Documentation/arch/powerpc/elfnote.rst
index 3ec8d61e9a33..3ec8d61e9a33 100644
--- a/Documentation/powerpc/elfnote.rst
+++ b/Documentation/arch/powerpc/elfnote.rst
diff --git a/Documentation/powerpc/features.rst b/Documentation/arch/powerpc/features.rst
index aeae73df86b0..aeae73df86b0 100644
--- a/Documentation/powerpc/features.rst
+++ b/Documentation/arch/powerpc/features.rst
diff --git a/Documentation/powerpc/firmware-assisted-dump.rst b/Documentation/arch/powerpc/firmware-assisted-dump.rst
index e363fc48529a..e363fc48529a 100644
--- a/Documentation/powerpc/firmware-assisted-dump.rst
+++ b/Documentation/arch/powerpc/firmware-assisted-dump.rst
diff --git a/Documentation/powerpc/hvcs.rst b/Documentation/arch/powerpc/hvcs.rst
index 6808acde672f..6808acde672f 100644
--- a/Documentation/powerpc/hvcs.rst
+++ b/Documentation/arch/powerpc/hvcs.rst
diff --git a/Documentation/powerpc/imc.rst b/Documentation/arch/powerpc/imc.rst
index 633bcee7dc85..633bcee7dc85 100644
--- a/Documentation/powerpc/imc.rst
+++ b/Documentation/arch/powerpc/imc.rst
diff --git a/Documentation/powerpc/index.rst b/Documentation/arch/powerpc/index.rst
index a50834798454..a50834798454 100644
--- a/Documentation/powerpc/index.rst
+++ b/Documentation/arch/powerpc/index.rst
diff --git a/Documentation/powerpc/isa-versions.rst b/Documentation/arch/powerpc/isa-versions.rst
index a8d6b6028b3e..a8d6b6028b3e 100644
--- a/Documentation/powerpc/isa-versions.rst
+++ b/Documentation/arch/powerpc/isa-versions.rst
diff --git a/Documentation/powerpc/kasan.txt b/Documentation/arch/powerpc/kasan.txt
index a4f647e4fffa..a4f647e4fffa 100644
--- a/Documentation/powerpc/kasan.txt
+++ b/Documentation/arch/powerpc/kasan.txt
diff --git a/Documentation/powerpc/kaslr-booke32.rst b/Documentation/arch/powerpc/kaslr-booke32.rst
index 5681c1d1b65b..5681c1d1b65b 100644
--- a/Documentation/powerpc/kaslr-booke32.rst
+++ b/Documentation/arch/powerpc/kaslr-booke32.rst
diff --git a/Documentation/powerpc/mpc52xx.rst b/Documentation/arch/powerpc/mpc52xx.rst
index 5243b1763fad..5243b1763fad 100644
--- a/Documentation/powerpc/mpc52xx.rst
+++ b/Documentation/arch/powerpc/mpc52xx.rst
diff --git a/Documentation/powerpc/papr_hcalls.rst b/Documentation/arch/powerpc/papr_hcalls.rst
index 80d2c0aadab5..80d2c0aadab5 100644
--- a/Documentation/powerpc/papr_hcalls.rst
+++ b/Documentation/arch/powerpc/papr_hcalls.rst
diff --git a/Documentation/powerpc/pci_iov_resource_on_powernv.rst b/Documentation/arch/powerpc/pci_iov_resource_on_powernv.rst
index f5a5793e1613..f5a5793e1613 100644
--- a/Documentation/powerpc/pci_iov_resource_on_powernv.rst
+++ b/Documentation/arch/powerpc/pci_iov_resource_on_powernv.rst
diff --git a/Documentation/powerpc/pmu-ebb.rst b/Documentation/arch/powerpc/pmu-ebb.rst
index 4f474758eb55..4f474758eb55 100644
--- a/Documentation/powerpc/pmu-ebb.rst
+++ b/Documentation/arch/powerpc/pmu-ebb.rst
diff --git a/Documentation/powerpc/ptrace.rst b/Documentation/arch/powerpc/ptrace.rst
index 5629edf4d56e..5629edf4d56e 100644
--- a/Documentation/powerpc/ptrace.rst
+++ b/Documentation/arch/powerpc/ptrace.rst
diff --git a/Documentation/powerpc/qe_firmware.rst b/Documentation/arch/powerpc/qe_firmware.rst
index a358f152b7e7..a358f152b7e7 100644
--- a/Documentation/powerpc/qe_firmware.rst
+++ b/Documentation/arch/powerpc/qe_firmware.rst
diff --git a/Documentation/powerpc/syscall64-abi.rst b/Documentation/arch/powerpc/syscall64-abi.rst
index 56490c4c0c07..56490c4c0c07 100644
--- a/Documentation/powerpc/syscall64-abi.rst
+++ b/Documentation/arch/powerpc/syscall64-abi.rst
diff --git a/Documentation/powerpc/transactional_memory.rst b/Documentation/arch/powerpc/transactional_memory.rst
index 040a20675fd1..040a20675fd1 100644
--- a/Documentation/powerpc/transactional_memory.rst
+++ b/Documentation/arch/powerpc/transactional_memory.rst
diff --git a/Documentation/powerpc/ultravisor.rst b/Documentation/arch/powerpc/ultravisor.rst
index ba6b1bf1cc44..ba6b1bf1cc44 100644
--- a/Documentation/powerpc/ultravisor.rst
+++ b/Documentation/arch/powerpc/ultravisor.rst
diff --git a/Documentation/powerpc/vas-api.rst b/Documentation/arch/powerpc/vas-api.rst
index a9625a2fa0c6..a9625a2fa0c6 100644
--- a/Documentation/powerpc/vas-api.rst
+++ b/Documentation/arch/powerpc/vas-api.rst
diff --git a/Documentation/powerpc/vcpudispatch_stats.rst b/Documentation/arch/powerpc/vcpudispatch_stats.rst
index 5704657a5987..5704657a5987 100644
--- a/Documentation/powerpc/vcpudispatch_stats.rst
+++ b/Documentation/arch/powerpc/vcpudispatch_stats.rst
diff --git a/Documentation/powerpc/vmemmap_dedup.rst b/Documentation/arch/powerpc/vmemmap_dedup.rst
index dc4db59fdf87..dc4db59fdf87 100644
--- a/Documentation/powerpc/vmemmap_dedup.rst
+++ b/Documentation/arch/powerpc/vmemmap_dedup.rst
diff --git a/Documentation/riscv/acpi.rst b/Documentation/arch/riscv/acpi.rst
index 9870a282815b..9870a282815b 100644
--- a/Documentation/riscv/acpi.rst
+++ b/Documentation/arch/riscv/acpi.rst
diff --git a/Documentation/riscv/boot-image-header.rst b/Documentation/arch/riscv/boot-image-header.rst
index df2ffc173e80..df2ffc173e80 100644
--- a/Documentation/riscv/boot-image-header.rst
+++ b/Documentation/arch/riscv/boot-image-header.rst
diff --git a/Documentation/riscv/boot.rst b/Documentation/arch/riscv/boot.rst
index 6077b587a842..6077b587a842 100644
--- a/Documentation/riscv/boot.rst
+++ b/Documentation/arch/riscv/boot.rst
diff --git a/Documentation/riscv/features.rst b/Documentation/arch/riscv/features.rst
index c70ef6ac2368..c70ef6ac2368 100644
--- a/Documentation/riscv/features.rst
+++ b/Documentation/arch/riscv/features.rst
diff --git a/Documentation/riscv/hwprobe.rst b/Documentation/arch/riscv/hwprobe.rst
index a52996b22f75..a52996b22f75 100644
--- a/Documentation/riscv/hwprobe.rst
+++ b/Documentation/arch/riscv/hwprobe.rst
diff --git a/Documentation/riscv/index.rst b/Documentation/arch/riscv/index.rst
index 4dab0cb4b900..4dab0cb4b900 100644
--- a/Documentation/riscv/index.rst
+++ b/Documentation/arch/riscv/index.rst
diff --git a/Documentation/riscv/patch-acceptance.rst b/Documentation/arch/riscv/patch-acceptance.rst
index 634aa222b410..634aa222b410 100644
--- a/Documentation/riscv/patch-acceptance.rst
+++ b/Documentation/arch/riscv/patch-acceptance.rst
diff --git a/Documentation/riscv/uabi.rst b/Documentation/arch/riscv/uabi.rst
index 8960fac42c40..8960fac42c40 100644
--- a/Documentation/riscv/uabi.rst
+++ b/Documentation/arch/riscv/uabi.rst
diff --git a/Documentation/riscv/vector.rst b/Documentation/arch/riscv/vector.rst
index 75dd88a62e1d..75dd88a62e1d 100644
--- a/Documentation/riscv/vector.rst
+++ b/Documentation/arch/riscv/vector.rst
diff --git a/Documentation/riscv/vm-layout.rst b/Documentation/arch/riscv/vm-layout.rst
index 69ff6da1dbf8..69ff6da1dbf8 100644
--- a/Documentation/riscv/vm-layout.rst
+++ b/Documentation/arch/riscv/vm-layout.rst
diff --git a/Documentation/block/blk-mq.rst b/Documentation/block/blk-mq.rst
index 31f52f326971..fc06761b6ea9 100644
--- a/Documentation/block/blk-mq.rst
+++ b/Documentation/block/blk-mq.rst
@@ -56,7 +56,7 @@ sent to the software queue.
Then, after the requests are processed by software queues, they will be placed
at the hardware queue, a second stage queue where the hardware has direct access
to process those requests. However, if the hardware does not have enough
-resources to accept more requests, blk-mq will places requests on a temporary
+resources to accept more requests, blk-mq will place requests on a temporary
queue, to be sent in the future, when the hardware is able.
Software staging queues
diff --git a/Documentation/doc-guide/contributing.rst b/Documentation/doc-guide/contributing.rst
index d4793826ad9a..662c7a840cd5 100644
--- a/Documentation/doc-guide/contributing.rst
+++ b/Documentation/doc-guide/contributing.rst
@@ -138,6 +138,10 @@ times, but it's highly important. If we can actually eliminate warnings
from the documentation build, then we can start expecting developers to
avoid adding new ones.
+In addition to warnings from the regular documentation build, you can also
+run ``make refcheckdocs`` to find references to nonexistent documentation
+files.
+
Languishing kerneldoc comments
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/Documentation/driver-api/driver-model/devres.rst b/Documentation/driver-api/driver-model/devres.rst
index 8be086b3f829..c5f99d834ec5 100644
--- a/Documentation/driver-api/driver-model/devres.rst
+++ b/Documentation/driver-api/driver-model/devres.rst
@@ -322,10 +322,8 @@ IOMAP
devm_platform_ioremap_resource_byname()
devm_platform_get_and_ioremap_resource()
devm_iounmap()
- pcim_iomap()
- pcim_iomap_regions() : do request_region() and iomap() on multiple BARs
- pcim_iomap_table() : array of mapped addresses indexed by BAR
- pcim_iounmap()
+
+ Note: For the PCI devices the specific pcim_*() functions may be used, see below.
IRQ
devm_free_irq()
@@ -392,8 +390,16 @@ PCI
devm_pci_alloc_host_bridge() : managed PCI host bridge allocation
devm_pci_remap_cfgspace() : ioremap PCI configuration space
devm_pci_remap_cfg_resource() : ioremap PCI configuration space resource
+
pcim_enable_device() : after success, all PCI ops become managed
+ pcim_iomap() : do iomap() on a single BAR
+ pcim_iomap_regions() : do request_region() and iomap() on multiple BARs
+ pcim_iomap_regions_request_all() : do request_region() on all and iomap() on multiple BARs
+ pcim_iomap_table() : array of mapped addresses indexed by BAR
+ pcim_iounmap() : do iounmap() on a single BAR
+ pcim_iounmap_regions() : do iounmap() and release_region() on multiple BARs
pcim_pin_device() : keep PCI device enabled after release
+ pcim_set_mwi() : enable Memory-Write-Invalidate PCI transaction
PHY
devm_usb_get_phy()
diff --git a/Documentation/driver-api/pps.rst b/Documentation/driver-api/pps.rst
index 2d6b99766ee8..78dded03e5d8 100644
--- a/Documentation/driver-api/pps.rst
+++ b/Documentation/driver-api/pps.rst
@@ -200,11 +200,17 @@ Generators
Sometimes one needs to be able not only to catch PPS signals but to produce
them also. For example, running a distributed simulation, which requires
-computers' clock to be synchronized very tightly. One way to do this is to
-invent some complicated hardware solutions but it may be neither necessary
-nor affordable. The cheap way is to load a PPS generator on one of the
-computers (master) and PPS clients on others (slaves), and use very simple
-cables to deliver signals using parallel ports, for example.
+computers' clock to be synchronized very tightly.
+
+
+Parallel port generator
+------------------------
+
+One way to do this is to invent some complicated hardware solutions but it
+may be neither necessary nor affordable. The cheap way is to load a PPS
+generator on one of the computers (master) and PPS clients on others
+(slaves), and use very simple cables to deliver signals using parallel
+ports, for example.
Parallel port cable pinout::
diff --git a/Documentation/driver-api/pwm.rst b/Documentation/driver-api/pwm.rst
index 3fdc95f7a1d1..bb264490a87a 100644
--- a/Documentation/driver-api/pwm.rst
+++ b/Documentation/driver-api/pwm.rst
@@ -111,13 +111,13 @@ channel that was exported. The following properties will then be available:
duty_cycle
The active time of the PWM signal (read/write).
- Value is in nanoseconds and must be less than the period.
+ Value is in nanoseconds and must be less than or equal to the period.
polarity
Changes the polarity of the PWM signal (read/write).
Writes to this property only work if the PWM chip supports changing
- the polarity. The polarity can only be changed if the PWM is not
- enabled. Value is the string "normal" or "inversed".
+ the polarity.
+ Value is the string "normal" or "inversed".
enable
Enable/disable the PWM signal (read/write).
diff --git a/Documentation/filesystems/xfs-online-fsck-design.rst b/Documentation/filesystems/xfs-online-fsck-design.rst
index 1625d1131093..a0678101a7d0 100644
--- a/Documentation/filesystems/xfs-online-fsck-design.rst
+++ b/Documentation/filesystems/xfs-online-fsck-design.rst
@@ -1585,7 +1585,7 @@ The transaction sequence looks like this:
2. The second transaction contains a physical update to the free space btrees
of AG 3 to release the former BMBT block and a second physical update to the
free space btrees of AG 7 to release the unmapped file space.
- Observe that the the physical updates are resequenced in the correct order
+ Observe that the physical updates are resequenced in the correct order
when possible.
Attached to the transaction is a an extent free done (EFD) log item.
The EFD contains a pointer to the EFI logged in transaction #1 so that log
diff --git a/Documentation/maintainer/maintainer-entry-profile.rst b/Documentation/maintainer/maintainer-entry-profile.rst
index 6b64072d4bf2..7ad4bfc2cc03 100644
--- a/Documentation/maintainer/maintainer-entry-profile.rst
+++ b/Documentation/maintainer/maintainer-entry-profile.rst
@@ -101,7 +101,7 @@ to do something different in the near future.
../doc-guide/maintainer-profile
../nvdimm/maintainer-entry-profile
- ../riscv/patch-acceptance
+ ../arch/riscv/patch-acceptance
../driver-api/media/maintainer-entry-profile
../driver-api/vfio-pci-device-specific-driver-acceptance
../nvme/feature-and-quirk-policy
diff --git a/Documentation/mm/overcommit-accounting.rst b/Documentation/mm/overcommit-accounting.rst
index a4895d6fc1c2..e2263477f6d5 100644
--- a/Documentation/mm/overcommit-accounting.rst
+++ b/Documentation/mm/overcommit-accounting.rst
@@ -8,8 +8,7 @@ The Linux kernel supports the following overcommit handling modes
Heuristic overcommit handling. Obvious overcommits of address
space are refused. Used for a typical system. It ensures a
seriously wild allocation fails while allowing overcommit to
- reduce swap usage. root is allowed to allocate slightly more
- memory in this mode. This is the default.
+ reduce swap usage. This is the default.
1
Always overcommit. Appropriate for some scientific
diff --git a/Documentation/mm/page_tables.rst b/Documentation/mm/page_tables.rst
index 7840c1891751..be47b192a596 100644
--- a/Documentation/mm/page_tables.rst
+++ b/Documentation/mm/page_tables.rst
@@ -152,3 +152,130 @@ Page table handling code that wishes to be architecture-neutral, such as the
virtual memory manager, will need to be written so that it traverses all of the
currently five levels. This style should also be preferred for
architecture-specific code, so as to be robust to future changes.
+
+
+MMU, TLB, and Page Faults
+=========================
+
+The `Memory Management Unit (MMU)` is a hardware component that handles virtual
+to physical address translations. It may use relatively small caches in hardware
+called `Translation Lookaside Buffers (TLBs)` and `Page Walk Caches` to speed up
+these translations.
+
+When CPU accesses a memory location, it provides a virtual address to the MMU,
+which checks if there is the existing translation in the TLB or in the Page
+Walk Caches (on architectures that support them). If no translation is found,
+MMU uses the page walks to determine the physical address and create the map.
+
+The dirty bit for a page is set (i.e., turned on) when the page is written to.
+Each page of memory has associated permission and dirty bits. The latter
+indicate that the page has been modified since it was loaded into memory.
+
+If nothing prevents it, eventually the physical memory can be accessed and the
+requested operation on the physical frame is performed.
+
+There are several reasons why the MMU can't find certain translations. It could
+happen because the CPU is trying to access memory that the current task is not
+permitted to, or because the data is not present into physical memory.
+
+When these conditions happen, the MMU triggers page faults, which are types of
+exceptions that signal the CPU to pause the current execution and run a special
+function to handle the mentioned exceptions.
+
+There are common and expected causes of page faults. These are triggered by
+process management optimization techniques called "Lazy Allocation" and
+"Copy-on-Write". Page faults may also happen when frames have been swapped out
+to persistent storage (swap partition or file) and evicted from their physical
+locations.
+
+These techniques improve memory efficiency, reduce latency, and minimize space
+occupation. This document won't go deeper into the details of "Lazy Allocation"
+and "Copy-on-Write" because these subjects are out of scope as they belong to
+Process Address Management.
+
+Swapping differentiates itself from the other mentioned techniques because it's
+undesirable since it's performed as a means to reduce memory under heavy
+pressure.
+
+Swapping can't work for memory mapped by kernel logical addresses. These are a
+subset of the kernel virtual space that directly maps a contiguous range of
+physical memory. Given any logical address, its physical address is determined
+with simple arithmetic on an offset. Accesses to logical addresses are fast
+because they avoid the need for complex page table lookups at the expenses of
+frames not being evictable and pageable out.
+
+If the kernel fails to make room for the data that must be present in the
+physical frames, the kernel invokes the out-of-memory (OOM) killer to make room
+by terminating lower priority processes until pressure reduces under a safe
+threshold.
+
+Additionally, page faults may be also caused by code bugs or by maliciously
+crafted addresses that the CPU is instructed to access. A thread of a process
+could use instructions to address (non-shared) memory which does not belong to
+its own address space, or could try to execute an instruction that want to write
+to a read-only location.
+
+If the above-mentioned conditions happen in user-space, the kernel sends a
+`Segmentation Fault` (SIGSEGV) signal to the current thread. That signal usually
+causes the termination of the thread and of the process it belongs to.
+
+This document is going to simplify and show an high altitude view of how the
+Linux kernel handles these page faults, creates tables and tables' entries,
+check if memory is present and, if not, requests to load data from persistent
+storage or from other devices, and updates the MMU and its caches.
+
+The first steps are architecture dependent. Most architectures jump to
+`do_page_fault()`, whereas the x86 interrupt handler is defined by the
+`DEFINE_IDTENTRY_RAW_ERRORCODE()` macro which calls `handle_page_fault()`.
+
+Whatever the routes, all architectures end up to the invocation of
+`handle_mm_fault()` which, in turn, (likely) ends up calling
+`__handle_mm_fault()` to carry out the actual work of allocating the page
+tables.
+
+The unfortunate case of not being able to call `__handle_mm_fault()` means
+that the virtual address is pointing to areas of physical memory which are not
+permitted to be accessed (at least from the current context). This
+condition resolves to the kernel sending the above-mentioned SIGSEGV signal
+to the process and leads to the consequences already explained.
+
+`__handle_mm_fault()` carries out its work by calling several functions to
+find the entry's offsets of the upper layers of the page tables and allocate
+the tables that it may need.
+
+The functions that look for the offset have names like `*_offset()`, where the
+"*" is for pgd, p4d, pud, pmd, pte; instead the functions to allocate the
+corresponding tables, layer by layer, are called `*_alloc`, using the
+above-mentioned convention to name them after the corresponding types of tables
+in the hierarchy.
+
+The page table walk may end at one of the middle or upper layers (PMD, PUD).
+
+Linux supports larger page sizes than the usual 4KB (i.e., the so called
+`huge pages`). When using these kinds of larger pages, higher level pages can
+directly map them, with no need to use lower level page entries (PTE). Huge
+pages contain large contiguous physical regions that usually span from 2MB to
+1GB. They are respectively mapped by the PMD and PUD page entries.
+
+The huge pages bring with them several benefits like reduced TLB pressure,
+reduced page table overhead, memory allocation efficiency, and performance
+improvement for certain workloads. However, these benefits come with
+trade-offs, like wasted memory and allocation challenges.
+
+At the very end of the walk with allocations, if it didn't return errors,
+`__handle_mm_fault()` finally calls `handle_pte_fault()`, which via `do_fault()`
+performs one of `do_read_fault()`, `do_cow_fault()`, `do_shared_fault()`.
+"read", "cow", "shared" give hints about the reasons and the kind of fault it's
+handling.
+
+The actual implementation of the workflow is very complex. Its design allows
+Linux to handle page faults in a way that is tailored to the specific
+characteristics of each architecture, while still sharing a common overall
+structure.
+
+To conclude this high altitude view of how Linux handles page faults, let's
+add that the page faults handler can be disabled and enabled respectively with
+`pagefault_disable()` and `pagefault_enable()`.
+
+Several code path make use of the latter two functions because they need to
+disable traps into the page faults handler, mostly to prevent deadlocks.
diff --git a/Documentation/mm/vmemmap_dedup.rst b/Documentation/mm/vmemmap_dedup.rst
index 59891f72420e..593ede6d314b 100644
--- a/Documentation/mm/vmemmap_dedup.rst
+++ b/Documentation/mm/vmemmap_dedup.rst
@@ -211,7 +211,7 @@ the device (altmap).
The following page sizes are supported in DAX: PAGE_SIZE (4K on x86_64),
PMD_SIZE (2M on x86_64) and PUD_SIZE (1G on x86_64).
-For powerpc equivalent details see Documentation/powerpc/vmemmap_dedup.rst
+For powerpc equivalent details see Documentation/arch/powerpc/vmemmap_dedup.rst
The differences with HugeTLB are relatively minor.
diff --git a/Documentation/process/backporting.rst b/Documentation/process/backporting.rst
new file mode 100644
index 000000000000..e1a6ea0a1e8a
--- /dev/null
+++ b/Documentation/process/backporting.rst
@@ -0,0 +1,604 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+===================================
+Backporting and conflict resolution
+===================================
+
+:Author: Vegard Nossum <vegard.nossum@oracle.com>
+
+.. contents::
+ :local:
+ :depth: 3
+ :backlinks: none
+
+Introduction
+============
+
+Some developers may never really have to deal with backporting patches,
+merging branches, or resolving conflicts in their day-to-day work, so
+when a merge conflict does pop up, it can be daunting. Luckily,
+resolving conflicts is a skill like any other, and there are many useful
+techniques you can use to make the process smoother and increase your
+confidence in the result.
+
+This document aims to be a comprehensive, step-by-step guide to
+backporting and conflict resolution.
+
+Applying the patch to a tree
+============================
+
+Sometimes the patch you are backporting already exists as a git commit,
+in which case you just cherry-pick it directly using
+``git cherry-pick``. However, if the patch comes from an email, as it
+often does for the Linux kernel, you will need to apply it to a tree
+using ``git am``.
+
+If you've ever used ``git am``, you probably already know that it is
+quite picky about the patch applying perfectly to your source tree. In
+fact, you've probably had nightmares about ``.rej`` files and trying to
+edit the patch to make it apply.
+
+It is strongly recommended to instead find an appropriate base version
+where the patch applies cleanly and *then* cherry-pick it over to your
+destination tree, as this will make git output conflict markers and let
+you resolve conflicts with the help of git and any other conflict
+resolution tools you might prefer to use. For example, if you want to
+apply a patch that just arrived on LKML to an older stable kernel, you
+can apply it to the most recent mainline kernel and then cherry-pick it
+to your older stable branch.
+
+It's generally better to use the exact same base as the one the patch
+was generated from, but it doesn't really matter that much as long as it
+applies cleanly and isn't too far from the original base. The only
+problem with applying the patch to the "wrong" base is that it may pull
+in more unrelated changes in the context of the diff when cherry-picking
+it to the older branch.
+
+A good reason to prefer ``git cherry-pick`` over ``git am`` is that git
+knows the precise history of an existing commit, so it will know when
+code has moved around and changed the line numbers; this in turn makes
+it less likely to apply the patch to the wrong place (which can result
+in silent mistakes or messy conflicts).
+
+If you are using `b4`_. and you are applying the patch directly from an
+email, you can use ``b4 am`` with the options ``-g``/``--guess-base``
+and ``-3``/``--prep-3way`` to do some of this automatically (see the
+`b4 presentation`_ for more information). However, the rest of this
+article will assume that you are doing a plain ``git cherry-pick``.
+
+.. _b4: https://people.kernel.org/monsieuricon/introducing-b4-and-patch-attestation
+.. _b4 presentation: https://youtu.be/mF10hgVIx9o?t=2996
+
+Once you have the patch in git, you can go ahead and cherry-pick it into
+your source tree. Don't forget to cherry-pick with ``-x`` if you want a
+written record of where the patch came from!
+
+Note that if you are submiting a patch for stable, the format is
+slightly different; the first line after the subject line needs tobe
+either::
+
+ commit <upstream commit> upstream
+
+or::
+
+ [ Upstream commit <upstream commit> ]
+
+Resolving conflicts
+===================
+
+Uh-oh; the cherry-pick failed with a vaguely threatening message::
+
+ CONFLICT (content): Merge conflict
+
+What to do now?
+
+In general, conflicts appear when the context of the patch (i.e., the
+lines being changed and/or the lines surrounding the changes) doesn't
+match what's in the tree you are trying to apply the patch *to*.
+
+For backports, what likely happened was that the branch you are
+backporting from contains patches not in the branch you are backporting
+to. However, the reverse is also possible. In any case, the result is a
+conflict that needs to be resolved.
+
+If your attempted cherry-pick fails with a conflict, git automatically
+edits the files to include so-called conflict markers showing you where
+the conflict is and how the two branches have diverged. Resolving the
+conflict typically means editing the end result in such a way that it
+takes into account these other commits.
+
+Resolving the conflict can be done either by hand in a regular text
+editor or using a dedicated conflict resolution tool.
+
+Many people prefer to use their regular text editor and edit the
+conflict directly, as it may be easier to understand what you're doing
+and to control the final result. There are definitely pros and cons to
+each method, and sometimes there's value in using both.
+
+We will not cover using dedicated merge tools here beyond providing some
+pointers to various tools that you could use:
+
+- `Emacs Ediff mode <https://www.emacswiki.org/emacs/EdiffMode>`__
+- `vimdiff/gvimdiff <https://linux.die.net/man/1/vimdiff>`__
+- `KDiff3 <http://kdiff3.sourceforge.net/>`__
+- `TortoiseMerge <https://tortoisesvn.net/TortoiseMerge.html>`__
+- `Meld <https://meldmerge.org/help/>`__
+- `P4Merge <https://www.perforce.com/products/helix-core-apps/merge-diff-tool-p4merge>`__
+- `Beyond Compare <https://www.scootersoftware.com/>`__
+- `IntelliJ <https://www.jetbrains.com/help/idea/resolve-conflicts.html>`__
+- `VSCode <https://code.visualstudio.com/docs/editor/versioncontrol>`__
+
+To configure git to work with these, see ``git mergetool --help`` or
+the official `git-mergetool documentation`_.
+
+.. _git-mergetool documentation: https://git-scm.com/docs/git-mergetool
+
+Prerequisite patches
+--------------------
+
+Most conflicts happen because the branch you are backporting to is
+missing some patches compared to the branch you are backporting *from*.
+In the more general case (such as merging two independent branches),
+development could have happened on either branch, or the branches have
+simply diverged -- perhaps your older branch had some other backports
+applied to it that themselves needed conflict resolutions, causing a
+divergence.
+
+It's important to always identify the commit or commits that caused the
+conflict, as otherwise you cannot be confident in the correctness of
+your resolution. As an added bonus, especially if the patch is in an
+area you're not that famliar with, the changelogs of these commits will
+often give you the context to understand the code and potential problems
+or pitfalls with your conflict resolution.
+
+git log
+~~~~~~~
+
+A good first step is to look at ``git log`` for the file that has the
+conflict -- this is usually sufficient when there aren't a lot of
+patches to the file, but may get confusing if the file is big and
+frequently patched. You should run ``git log`` on the range of commits
+between your currently checked-out branch (``HEAD``) and the parent of
+the patch you are picking (``<commit>``), i.e.::
+
+ git log HEAD..<commit>^ -- <path>
+
+Even better, if you want to restrict this output to a single function
+(because that's where the conflict appears), you can use the following
+syntax::
+
+ git log -L:'\<function\>':<path> HEAD..<commit>^
+
+.. note::
+ The ``\<`` and ``\>`` around the function name ensure that the
+ matches are anchored on a word boundary. This is important, as this
+ part is actually a regex and git only follows the first match, so
+ if you use ``-L:thread_stack:kernel/fork.c`` it may only give you
+ results for the function ``try_release_thread_stack_to_cache`` even
+ though there are many other functions in that file containing the
+ string ``thread_stack`` in their names.
+
+Another useful option for ``git log`` is ``-G``, which allows you to
+filter on certain strings appearing in the diffs of the commits you are
+listing::
+
+ git log -G'regex' HEAD..<commit>^ -- <path>
+
+This can also be a handy way to quickly find when something (e.g. a
+function call or a variable) was changed, added, or removed. The search
+string is a regular expression, which means you can potentially search
+for more specific things like assignments to a specific struct member::
+
+ git log -G'\->index\>.*='
+
+git blame
+~~~~~~~~~
+
+Another way to find prerequisite commits (albeit only the most recent
+one for a given conflict) is to run ``git blame``. In this case, you
+need to run it against the parent commit of the patch you are
+cherry-picking and the file where the conflict appared, i.e.::
+
+ git blame <commit>^ -- <path>
+
+This command also accepts the ``-L`` argument (for restricting the
+output to a single function), but in this case you specify the filename
+at the end of the command as usual::
+
+ git blame -L:'\<function\>' <commit>^ -- <path>
+
+Navigate to the place where the conflict occurred. The first column of
+the blame output is the commit ID of the patch that added a given line
+of code.
+
+It might be a good idea to ``git show`` these commits and see if they
+look like they might be the source of the conflict. Sometimes there will
+be more than one of these commits, either because multiple commits
+changed different lines of the same conflict area *or* because multiple
+subsequent patches changed the same line (or lines) multiple times. In
+the latter case, you may have to run ``git blame`` again and specify the
+older version of the file to look at in order to dig further back in
+the history of the file.
+
+Prerequisite vs. incidental patches
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Having found the patch that caused the conflict, you need to determine
+whether it is a prerequisite for the patch you are backporting or
+whether it is just incidental and can be skipped. An incidental patch
+would be one that touches the same code as the patch you are
+backporting, but does not change the semantics of the code in any
+material way. For example, a whitespace cleanup patch is completely
+incidental -- likewise, a patch that simply renames a function or a
+variable would be incidental as well. On the other hand, if the function
+being changed does not even exist in your current branch then this would
+not be incidental at all and you need to carefully consider whether the
+patch adding the function should be cherry-picked first.
+
+If you find that there is a necessary prerequisite patch, then you need
+to stop and cherry-pick that instead. If you've already resolved some
+conflicts in a different file and don't want to do it again, you can
+create a temporary copy of that file.
+
+To abort the current cherry-pick, go ahead and run
+``git cherry-pick --abort``, then restart the cherry-picking process
+with the commit ID of the prerequisite patch instead.
+
+Understanding conflict markers
+------------------------------
+
+Combined diffs
+~~~~~~~~~~~~~~
+
+Let's say you've decided against picking (or reverting) additional
+patches and you just want to resolve the conflict. Git will have
+inserted conflict markers into your file. Out of the box, this will look
+something like::
+
+ <<<<<<< HEAD
+ this is what's in your current tree before cherry-picking
+ =======
+ this is what the patch wants it to be after cherry-picking
+ >>>>>>> <commit>... title
+
+This is what you would see if you opened the file in your editor.
+However, if you were to run ``git diff`` without any arguments, the
+output would look something like this::
+
+ $ git diff
+ [...]
+ ++<<<<<<<< HEAD
+ +this is what's in your current tree before cherry-picking
+ ++========
+ + this is what the patch wants it to be after cherry-picking
+ ++>>>>>>>> <commit>... title
+
+When you are resolving a conflict, the behavior of ``git diff`` differs
+from its normal behavior. Notice the two columns of diff markers
+instead of the usual one; this is a so-called "`combined diff`_", here
+showing the 3-way diff (or diff-of-diffs) between
+
+#. the current branch (before cherry-picking) and the current working
+ directory, and
+#. the current branch (before cherry-picking) and the file as it looks
+ after the original patch has been applied.
+
+.. _combined diff: https://git-scm.com/docs/diff-format#_combined_diff_format
+
+
+Better diffs
+~~~~~~~~~~~~
+
+3-way combined diffs include all the other changes that happened to the
+file between your current branch and the branch you are cherry-picking
+from. While this is useful for spotting other changes that you need to
+take into account, this also makes the output of ``git diff`` somewhat
+intimidating and difficult to read. You may instead prefer to run
+``git diff HEAD`` (or ``git diff --ours``) which shows only the diff
+between the current branch before cherry-picking and the current working
+directory. It looks like this::
+
+ $ git diff HEAD
+ [...]
+ +<<<<<<<< HEAD
+ this is what's in your current tree before cherry-picking
+ +========
+ +this is what the patch wants it to be after cherry-picking
+ +>>>>>>>> <commit>... title
+
+As you can see, this reads just like any other diff and makes it clear
+which lines are in the current branch and which lines are being added
+because they are part of the merge conflict or the patch being
+cherry-picked.
+
+Merge styles and diff3
+~~~~~~~~~~~~~~~~~~~~~~
+
+The default conflict marker style shown above is known as the ``merge``
+style. There is also another style available, known as the ``diff3``
+style, which looks like this::
+
+ <<<<<<< HEAD
+ this is what is in your current tree before cherry-picking
+ ||||||| parent of <commit> (title)
+ this is what the patch expected to find there
+ =======
+ this is what the patch wants it to be after being applied
+ >>>>>>> <commit> (title)
+
+As you can see, this has 3 parts instead of 2, and includes what git
+expected to find there but didn't. It is *highly recommended* to use
+this conflict style as it makes it much clearer what the patch actually
+changed; i.e., it allows you to compare the before-and-after versions
+of the file for the commit you are cherry-picking. This allows you to
+make better decisions about how to resolve the conflict.
+
+To change conflict marker styles, you can use the following command::
+
+ git config merge.conflictStyle diff3
+
+There is a third option, ``zdiff3``, introduced in `Git 2.35`_,
+which has the same 3 sections as ``diff3``, but where common lines have
+been trimmed off, making the conflict area smaller in some cases.
+
+.. _Git 2.35: https://github.blog/2022-01-24-highlights-from-git-2-35/
+
+Iterating on conflict resolutions
+---------------------------------
+
+The first step in any conflict resolution process is to understand the
+patch you are backporting. For the Linux kernel this is especially
+important, since an incorrect change can lead to the whole system
+crashing -- or worse, an undetected security vulnerability.
+
+Understanding the patch can be easy or difficult depending on the patch
+itself, the changelog, and your familiarity with the code being changed.
+However, a good question for every change (or every hunk of the patch)
+might be: "Why is this hunk in the patch?" The answers to these
+questions will inform your conflict resolution.
+
+Resolution process
+~~~~~~~~~~~~~~~~~~
+
+Sometimes the easiest thing to do is to just remove all but the first
+part of the conflict, leaving the file essentially unchanged, and apply
+the changes by hand. Perhaps the patch is changing a function call
+argument from ``0`` to ``1`` while a conflicting change added an
+entirely new (and insignificant) parameter to the end of the parameter
+list; in that case, it's easy enough to change the argument from ``0``
+to ``1`` by hand and leave the rest of the arguments alone. This
+technique of manually applying changes is mostly useful if the conflict
+pulled in a lot of unrelated context that you don't really need to care
+about.
+
+For particularly nasty conflicts with many conflict markers, you can use
+``git add`` or ``git add -i`` to selectively stage your resolutions to
+get them out of the way; this also lets you use ``git diff HEAD`` to
+always see what remains to be resolved or ``git diff --cached`` to see
+what your patch looks like so far.
+
+Dealing with file renames
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+One of the most annoying things that can happen while backporting a
+patch is discovering that one of the files being patched has been
+renamed, as that typically means git won't even put in conflict markers,
+but will just throw up its hands and say (paraphrased): "Unmerged path!
+You do the work..."
+
+There are generally a few ways to deal with this. If the patch to the
+renamed file is small, like a one-line change, the easiest thing is to
+just go ahead and apply the change by hand and be done with it. On the
+other hand, if the change is big or complicated, you definitely don't
+want to do it by hand.
+
+As a first pass, you can try something like this, which will lower the
+rename detection threshold to 30% (by default, git uses 50%, meaning
+that two files need to have at least 50% in common for it to consider
+an add-delete pair to be a potential rename)::
+
+ git cherry-pick -strategy=recursive -Xrename-threshold=30
+
+Sometimes the right thing to do will be to also backport the patch that
+did the rename, but that's definitely not the most common case. Instead,
+what you can do is to temporarily rename the file in the branch you're
+backporting to (using ``git mv`` and committing the result), restart the
+attempt to cherry-pick the patch, rename the file back (``git mv`` and
+committing again), and finally squash the result using ``git rebase -i``
+(see the `rebase tutorial`_) so it appears as a single commit when you
+are done.
+
+.. _rebase tutorial: https://medium.com/@slamflipstrom/a-beginners-guide-to-squashing-commits-with-git-rebase-8185cf6e62ec
+
+Gotchas
+-------
+
+Function arguments
+~~~~~~~~~~~~~~~~~~
+
+Pay attention to changing function arguments! It's easy to gloss over
+details and think that two lines are the same but actually they differ
+in some small detail like which variable was passed as an argument
+(especially if the two variables are both a single character that look
+the same, like i and j).
+
+Error handling
+~~~~~~~~~~~~~~
+
+If you cherry-pick a patch that includes a ``goto`` statement (typically
+for error handling), it is absolutely imperative to double check that
+the target label is still correct in the branch you are backporting to.
+The same goes for added ``return``, ``break``, and ``continue``
+statements.
+
+Error handling is typically located at the bottom of the function, so it
+may not be part of the conflict even though could have been changed by
+other patches.
+
+A good way to ensure that you review the error paths is to always use
+``git diff -W`` and ``git show -W`` (AKA ``--function-context``) when
+inspecting your changes. For C code, this will show you the whole
+function that's being changed in a patch. One of the things that often
+go wrong during backports is that something else in the function changed
+on either of the branches that you're backporting from or to. By
+including the whole function in the diff you get more context and can
+more easily spot problems that might otherwise go unnoticed.
+
+Refactored code
+~~~~~~~~~~~~~~~
+
+Something that happens quite often is that code gets refactored by
+"factoring out" a common code sequence or pattern into a helper
+function. When backporting patches to an area where such a refactoring
+has taken place, you effectively need to do the reverse when
+backporting: a patch to a single location may need to be applied to
+multiple locations in the backported version. (One giveaway for this
+scenario is that a function was renamed -- but that's not always the
+case.)
+
+To avoid incomplete backports, it's worth trying to figure out if the
+patch fixes a bug that appears in more than one place. One way to do
+this would be to use ``git grep``. (This is actually a good idea to do
+in general, not just for backports.) If you do find that the same kind
+of fix would apply to other places, it's also worth seeing if those
+places exist upstream -- if they don't, it's likely the patch may need
+to be adjusted. ``git log`` is your friend to figure out what happened
+to these areas as ``git blame`` won't show you code that has been
+removed.
+
+If you do find other instances of the same pattern in the upstream tree
+and you're not sure whether it's also a bug, it may be worth asking the
+patch author. It's not uncommon to find new bugs during backporting!
+
+Verifying the result
+====================
+
+colordiff
+---------
+
+Having committed a conflict-free new patch, you can now compare your
+patch to the original patch. It is highly recommended that you use a
+tool such as `colordiff`_ that can show two files side by side and color
+them according to the changes between them::
+
+ colordiff -yw -W 200 <(git diff -W <upstream commit>^-) <(git diff -W HEAD^-) | less -SR
+
+.. _colordiff: https://www.colordiff.org/
+
+Here, ``-y`` means to do a side-by-side comparison; ``-w`` ignores
+whitespace, and ``-W 200`` sets the width of the output (as otherwise it
+will use 130 by default, which is often a bit too little).
+
+The ``rev^-`` syntax is a handy shorthand for ``rev^..rev``, essentially
+giving you just the diff for that single commit; also see
+the official `git rev-parse documentation`_.
+
+.. _git rev-parse documentation: https://git-scm.com/docs/git-rev-parse#_other_rev_parent_shorthand_notations
+
+Again, note the inclusion of ``-W`` for ``git diff``; this ensures that
+you will see the full function for any function that has changed.
+
+One incredibly important thing that colordiff does is to highlight lines
+that are different. For example, if an error-handling ``goto`` has
+changed labels between the original and backported patch, colordiff will
+show these side-by-side but highlighted in a different color. Thus, it
+is easy to see that the two ``goto`` statements are jumping to different
+labels. Likewise, lines that were not modified by either patch but
+differ in the context will also be highlighted and thus stand out during
+a manual inspection.
+
+Of course, this is just a visual inspection; the real test is building
+and running the patched kernel (or program).
+
+Build testing
+-------------
+
+We won't cover runtime testing here, but it can be a good idea to build
+just the files touched by the patch as a quick sanity check. For the
+Linux kernel you can build single files like this, assuming you have the
+``.config`` and build environment set up correctly::
+
+ make path/to/file.o
+
+Note that this won't discover linker errors, so you should still do a
+full build after verifying that the single file compiles. By compiling
+the single file first you can avoid having to wait for a full build *in
+case* there are compiler errors in any of the files you've changed.
+
+Runtime testing
+---------------
+
+Even a successful build or boot test is not necessarily enough to rule
+out a missing dependency somewhere. Even though the chances are small,
+there could be code changes where two independent changes to the same
+file result in no conflicts, no compile-time errors, and runtime errors
+only in exceptional cases.
+
+One concrete example of this was a pair of patches to the system call
+entry code where the first patch saved/restored a register and a later
+patch made use of the same register somewhere in the middle of this
+sequence. Since there was no overlap between the changes, one could
+cherry-pick the second patch, have no conflicts, and believe that
+everything was fine, when in fact the code was now scribbling over an
+unsaved register.
+
+Although the vast majority of errors will be caught during compilation
+or by superficially exercising the code, the only way to *really* verify
+a backport is to review the final patch with the same level of scrutiny
+as you would (or should) give to any other patch. Having unit tests and
+regression tests or other types of automatic testing can help increase
+the confidence in the correctness of a backport.
+
+Submitting backports to stable
+==============================
+
+As the stable maintainers try to cherry-pick mainline fixes onto their
+stable kernels, they may send out emails asking for backports when when
+encountering conflicts, see e.g.
+<https://lore.kernel.org/stable/2023101528-jawed-shelving-071a@gregkh/>.
+These emails typically include the exact steps you need to cherry-pick
+the patch to the correct tree and submit the patch.
+
+One thing to make sure is that your changelog conforms to the expected
+format::
+
+ <original patch title>
+
+ [ Upstream commit <mainline rev> ]
+
+ <rest of the original changelog>
+ [ <summary of the conflicts and their resolutions> ]
+ Signed-off-by: <your name and email>
+
+The "Upstream commit" line is sometimes slightly different depending on
+the stable version. Older version used this format::
+
+ commit <mainline rev> upstream.
+
+It is most common to indicate the kernel version the patch applies to
+in the email subject line (using e.g.
+``git send-email --subject-prefix='PATCH 6.1.y'``), but you can also put
+it in the Signed-off-by:-area or below the ``---`` line.
+
+The stable maintainers expect separate submissions for each active
+stable version, and each submission should also be tested separately.
+
+A few final words of advice
+===========================
+
+1) Approach the backporting process with humility.
+2) Understand the patch you are backporting; this means reading both
+ the changelog and the code.
+3) Be honest about your confidence in the result when submitting the
+ patch.
+4) Ask relevant maintainers for explicit acks.
+
+Examples
+========
+
+The above shows roughly the idealized process of backporting a patch.
+For a more concrete example, see this video tutorial where two patches
+are backported from mainline to stable:
+`Backporting Linux Kernel Patches`_.
+
+.. _Backporting Linux Kernel Patches: https://youtu.be/sBR7R1V2FeA
diff --git a/Documentation/process/index.rst b/Documentation/process/index.rst
index b501cd977053..a1daa309b58d 100644
--- a/Documentation/process/index.rst
+++ b/Documentation/process/index.rst
@@ -66,12 +66,13 @@ lack of a better place.
:maxdepth: 1
applying-patches
+ backporting
adding-syscalls
magic-number
volatile-considered-harmful
botching-up-ioctls
clang-format
- ../riscv/patch-acceptance
+ ../arch/riscv/patch-acceptance
../core-api/unaligned-memory-access
.. only:: subproject and html
diff --git a/Documentation/process/submitting-patches.rst b/Documentation/process/submitting-patches.rst
index efac910e2659..86d346bcb8ef 100644
--- a/Documentation/process/submitting-patches.rst
+++ b/Documentation/process/submitting-patches.rst
@@ -327,6 +327,8 @@ politely and address the problems they have pointed out. When sending a next
version, add a ``patch changelog`` to the cover letter or to individual patches
explaining difference against previous submission (see
:ref:`the_canonical_patch_format`).
+Notify people that commented on your patch about new versions by adding them to
+the patches CC list.
See Documentation/process/email-clients.rst for recommendations on email
clients and mailing list etiquette.
@@ -366,10 +368,10 @@ busy people and may not get to your patch right away.
Once upon a time, patches used to disappear into the void without comment,
but the development process works more smoothly than that now. You should
-receive comments within a week or so; if that does not happen, make sure
-that you have sent your patches to the right place. Wait for a minimum of
-one week before resubmitting or pinging reviewers - possibly longer during
-busy times like merge windows.
+receive comments within a few weeks (typically 2-3); if that does not
+happen, make sure that you have sent your patches to the right place.
+Wait for a minimum of one week before resubmitting or pinging reviewers
+- possibly longer during busy times like merge windows.
It's also ok to resend the patch or the patch series after a couple of
weeks with the word "RESEND" added to the subject line::
diff --git a/Documentation/security/index.rst b/Documentation/security/index.rst
index 6ed8d2fa6f9e..59f8fc106cb0 100644
--- a/Documentation/security/index.rst
+++ b/Documentation/security/index.rst
@@ -6,6 +6,7 @@ Security Documentation
:maxdepth: 1
credentials
+ snp-tdx-threat-model
IMA-templates
keys/index
lsm
diff --git a/Documentation/security/snp-tdx-threat-model.rst b/Documentation/security/snp-tdx-threat-model.rst
new file mode 100644
index 000000000000..ec66f2ed80c9
--- /dev/null
+++ b/Documentation/security/snp-tdx-threat-model.rst
@@ -0,0 +1,253 @@
+======================================================
+Confidential Computing in Linux for x86 virtualization
+======================================================
+
+.. contents:: :local:
+
+By: Elena Reshetova <elena.reshetova@intel.com> and Carlos Bilbao <carlos.bilbao@amd.com>
+
+Motivation
+==========
+
+Kernel developers working on confidential computing for virtualized
+environments in x86 operate under a set of assumptions regarding the Linux
+kernel threat model that differ from the traditional view. Historically,
+the Linux threat model acknowledges attackers residing in userspace, as
+well as a limited set of external attackers that are able to interact with
+the kernel through various networking or limited HW-specific exposed
+interfaces (USB, thunderbolt). The goal of this document is to explain
+additional attack vectors that arise in the confidential computing space
+and discuss the proposed protection mechanisms for the Linux kernel.
+
+Overview and terminology
+========================
+
+Confidential Computing (CoCo) is a broad term covering a wide range of
+security technologies that aim to protect the confidentiality and integrity
+of data in use (vs. data at rest or data in transit). At its core, CoCo
+solutions provide a Trusted Execution Environment (TEE), where secure data
+processing can be performed and, as a result, they are typically further
+classified into different subtypes depending on the SW that is intended
+to be run in TEE. This document focuses on a subclass of CoCo technologies
+that are targeting virtualized environments and allow running Virtual
+Machines (VM) inside TEE. From now on in this document will be referring
+to this subclass of CoCo as 'Confidential Computing (CoCo) for the
+virtualized environments (VE)'.
+
+CoCo, in the virtualization context, refers to a set of HW and/or SW
+technologies that allow for stronger security guarantees for the SW running
+inside a CoCo VM. Namely, confidential computing allows its users to
+confirm the trustworthiness of all SW pieces to include in its reduced
+Trusted Computing Base (TCB) given its ability to attest the state of these
+trusted components.
+
+While the concrete implementation details differ between technologies, all
+available mechanisms aim to provide increased confidentiality and
+integrity for the VM's guest memory and execution state (vCPU registers),
+more tightly controlled guest interrupt injection, as well as some
+additional mechanisms to control guest-host page mapping. More details on
+the x86-specific solutions can be found in
+:doc:`Intel Trust Domain Extensions (TDX) </arch/x86/tdx>` and
+`AMD Memory Encryption <https://www.amd.com/system/files/techdocs/sev-snp-strengthening-vm-isolation-with-integrity-protection-and-more.pdf>`_.
+
+The basic CoCo guest layout includes the host, guest, the interfaces that
+communicate guest and host, a platform capable of supporting CoCo VMs, and
+a trusted intermediary between the guest VM and the underlying platform
+that acts as a security manager. The host-side virtual machine monitor
+(VMM) typically consists of a subset of traditional VMM features and
+is still in charge of the guest lifecycle, i.e. create or destroy a CoCo
+VM, manage its access to system resources, etc. However, since it
+typically stays out of CoCo VM TCB, its access is limited to preserve the
+security objectives.
+
+In the following diagram, the "<--->" lines represent bi-directional
+communication channels or interfaces between the CoCo security manager and
+the rest of the components (data flow for guest, host, hardware) ::
+
+ +-------------------+ +-----------------------+
+ | CoCo guest VM |<---->| |
+ +-------------------+ | |
+ | Interfaces | | CoCo security manager |
+ +-------------------+ | |
+ | Host VMM |<---->| |
+ +-------------------+ | |
+ | |
+ +--------------------+ | |
+ | CoCo platform |<--->| |
+ +--------------------+ +-----------------------+
+
+The specific details of the CoCo security manager vastly diverge between
+technologies. For example, in some cases, it will be implemented in HW
+while in others it may be pure SW.
+
+Existing Linux kernel threat model
+==================================
+
+The overall components of the current Linux kernel threat model are::
+
+ +-----------------------+ +-------------------+
+ | |<---->| Userspace |
+ | | +-------------------+
+ | External attack | | Interfaces |
+ | vectors | +-------------------+
+ | |<---->| Linux Kernel |
+ | | +-------------------+
+ +-----------------------+ +-------------------+
+ | Bootloader/BIOS |
+ +-------------------+
+ +-------------------+
+ | HW platform |
+ +-------------------+
+
+There is also communication between the bootloader and the kernel during
+the boot process, but this diagram does not represent it explicitly. The
+"Interfaces" box represents the various interfaces that allow
+communication between kernel and userspace. This includes system calls,
+kernel APIs, device drivers, etc.
+
+The existing Linux kernel threat model typically assumes execution on a
+trusted HW platform with all of the firmware and bootloaders included on
+its TCB. The primary attacker resides in the userspace, and all of the data
+coming from there is generally considered untrusted, unless userspace is
+privileged enough to perform trusted actions. In addition, external
+attackers are typically considered, including those with access to enabled
+external networks (e.g. Ethernet, Wireless, Bluetooth), exposed hardware
+interfaces (e.g. USB, Thunderbolt), and the ability to modify the contents
+of disks offline.
+
+Regarding external attack vectors, it is interesting to note that in most
+cases external attackers will try to exploit vulnerabilities in userspace
+first, but that it is possible for an attacker to directly target the
+kernel; particularly if the host has physical access. Examples of direct
+kernel attacks include the vulnerabilities CVE-2019-19524, CVE-2022-0435
+and CVE-2020-24490.
+
+Confidential Computing threat model and its security objectives
+===============================================================
+
+Confidential Computing adds a new type of attacker to the above list: a
+potentially misbehaving host (which can also include some part of a
+traditional VMM or all of it), which is typically placed outside of the
+CoCo VM TCB due to its large SW attack surface. It is important to note
+that this doesn’t imply that the host or VMM are intentionally
+malicious, but that there exists a security value in having a small CoCo
+VM TCB. This new type of adversary may be viewed as a more powerful type
+of external attacker, as it resides locally on the same physical machine
+(in contrast to a remote network attacker) and has control over the guest
+kernel communication with most of the HW::
+
+ +------------------------+
+ | CoCo guest VM |
+ +-----------------------+ | +-------------------+ |
+ | |<--->| | Userspace | |
+ | | | +-------------------+ |
+ | External attack | | | Interfaces | |
+ | vectors | | +-------------------+ |
+ | |<--->| | Linux Kernel | |
+ | | | +-------------------+ |
+ +-----------------------+ | +-------------------+ |
+ | | Bootloader/BIOS | |
+ +-----------------------+ | +-------------------+ |
+ | |<--->+------------------------+
+ | | | Interfaces |
+ | | +------------------------+
+ | CoCo security |<--->| Host/Host-side VMM |
+ | manager | +------------------------+
+ | | +------------------------+
+ | |<--->| CoCo platform |
+ +-----------------------+ +------------------------+
+
+While traditionally the host has unlimited access to guest data and can
+leverage this access to attack the guest, the CoCo systems mitigate such
+attacks by adding security features like guest data confidentiality and
+integrity protection. This threat model assumes that those features are
+available and intact.
+
+The **Linux kernel CoCo VM security objectives** can be summarized as follows:
+
+1. Preserve the confidentiality and integrity of CoCo guest's private
+memory and registers.
+
+2. Prevent privileged escalation from a host into a CoCo guest Linux kernel.
+While it is true that the host (and host-side VMM) requires some level of
+privilege to create, destroy, or pause the guest, part of the goal of
+preventing privileged escalation is to ensure that these operations do not
+provide a pathway for attackers to gain access to the guest's kernel.
+
+The above security objectives result in two primary **Linux kernel CoCo
+VM assets**:
+
+1. Guest kernel execution context.
+2. Guest kernel private memory.
+
+The host retains full control over the CoCo guest resources, and can deny
+access to them at any time. Examples of resources include CPU time, memory
+that the guest can consume, network bandwidth, etc. Because of this, the
+host Denial of Service (DoS) attacks against CoCo guests are beyond the
+scope of this threat model.
+
+The **Linux CoCo VM attack surface** is any interface exposed from a CoCo
+guest Linux kernel towards an untrusted host that is not covered by the
+CoCo technology SW/HW protection. This includes any possible
+side-channels, as well as transient execution side channels. Examples of
+explicit (not side-channel) interfaces include accesses to port I/O, MMIO
+and DMA interfaces, access to PCI configuration space, VMM-specific
+hypercalls (towards Host-side VMM), access to shared memory pages,
+interrupts allowed to be injected into the guest kernel by the host, as
+well as CoCo technology-specific hypercalls, if present. Additionally, the
+host in a CoCo system typically controls the process of creating a CoCo
+guest: it has a method to load into a guest the firmware and bootloader
+images, the kernel image together with the kernel command line. All of this
+data should also be considered untrusted until its integrity and
+authenticity is established via attestation.
+
+The table below shows a threat matrix for the CoCo guest Linux kernel but
+does not discuss potential mitigation strategies. The matrix refers to
+CoCo-specific versions of the guest, host and platform.
+
+.. list-table:: CoCo Linux guest kernel threat matrix
+ :widths: auto
+ :align: center
+ :header-rows: 1
+
+ * - Threat name
+ - Threat description
+
+ * - Guest malicious configuration
+ - A misbehaving host modifies one of the following guest's
+ configuration:
+
+ 1. Guest firmware or bootloader
+
+ 2. Guest kernel or module binaries
+
+ 3. Guest command line parameters
+
+ This allows the host to break the integrity of the code running
+ inside a CoCo guest, and violates the CoCo security objectives.
+
+ * - CoCo guest data attacks
+ - A misbehaving host retains full control of the CoCo guest's data
+ in-transit between the guest and the host-managed physical or
+ virtual devices. This allows any attack against confidentiality,
+ integrity or freshness of such data.
+
+ * - Malformed runtime input
+ - A misbehaving host injects malformed input via any communication
+ interface used by the guest's kernel code. If the code is not
+ prepared to handle this input correctly, this can result in a host
+ --> guest kernel privilege escalation. This includes traditional
+ side-channel and/or transient execution attack vectors.
+
+ * - Malicious runtime input
+ - A misbehaving host injects a specific input value via any
+ communication interface used by the guest's kernel code. The
+ difference with the previous attack vector (malformed runtime input)
+ is that this input is not malformed, but its value is crafted to
+ impact the guest's kernel security. Examples of such inputs include
+ providing a malicious time to the guest or the entropy to the guest
+ random number generator. Additionally, the timing of such events can
+ be an attack vector on its own, if it results in a particular guest
+ kernel action (i.e. processing of a host-injected interrupt).
+ resistant to supplied host input.
+
diff --git a/Documentation/sphinx/cdomain.py b/Documentation/sphinx/cdomain.py
index a99716bf44b5..4eb150bf509c 100644
--- a/Documentation/sphinx/cdomain.py
+++ b/Documentation/sphinx/cdomain.py
@@ -93,7 +93,7 @@ def markup_ctype_refs(match):
#
RE_expr = re.compile(r':c:(expr|texpr):`([^\`]+)`')
def markup_c_expr(match):
- return '\ ``' + match.group(2) + '``\ '
+ return '\\ ``' + match.group(2) + '``\\ '
#
# Parse Sphinx 3.x C markups, replacing them by backward-compatible ones
@@ -151,7 +151,7 @@ class CObject(Base_CObject):
def handle_func_like_macro(self, sig, signode):
u"""Handles signatures of function-like macros.
- If the objtype is 'function' and the the signature ``sig`` is a
+ If the objtype is 'function' and the signature ``sig`` is a
function-like macro, the name of the macro is returned. Otherwise
``False`` is returned. """
diff --git a/Documentation/sphinx/kernel_abi.py b/Documentation/sphinx/kernel_abi.py
index b5feb5b1d905..49797c55479c 100644
--- a/Documentation/sphinx/kernel_abi.py
+++ b/Documentation/sphinx/kernel_abi.py
@@ -138,7 +138,7 @@ class KernelCmd(Directive):
code_block += "\n " + l
lines = code_block + "\n\n"
- line_regex = re.compile("^\.\. LINENO (\S+)\#([0-9]+)$")
+ line_regex = re.compile(r"^\.\. LINENO (\S+)\#([0-9]+)$")
ln = 0
n = 0
f = fname
diff --git a/Documentation/sphinx/kernel_feat.py b/Documentation/sphinx/kernel_feat.py
index 27b701ed3681..b5fa2f0542a5 100644
--- a/Documentation/sphinx/kernel_feat.py
+++ b/Documentation/sphinx/kernel_feat.py
@@ -104,7 +104,7 @@ class KernelFeat(Directive):
lines = self.runCmd(cmd, shell=True, cwd=cwd, env=shell_env)
- line_regex = re.compile("^\.\. FILE (\S+)$")
+ line_regex = re.compile(r"^\.\. FILE (\S+)$")
out_lines = ""
diff --git a/Documentation/sphinx/kerneldoc.py b/Documentation/sphinx/kerneldoc.py
index 9395892c7ba3..7acf09963daa 100644
--- a/Documentation/sphinx/kerneldoc.py
+++ b/Documentation/sphinx/kerneldoc.py
@@ -130,7 +130,7 @@ class KernelDocDirective(Directive):
result = ViewList()
lineoffset = 0;
- line_regex = re.compile("^\.\. LINENO ([0-9]+)$")
+ line_regex = re.compile(r"^\.\. LINENO ([0-9]+)$")
for line in lines:
match = line_regex.search(line)
if match:
@@ -138,7 +138,7 @@ class KernelDocDirective(Directive):
lineoffset = int(match.group(1)) - 1
# we must eat our comments since the upset the markup
else:
- doc = env.srcdir + "/" + env.docname + ":" + str(self.lineno)
+ doc = str(env.srcdir) + "/" + env.docname + ":" + str(self.lineno)
result.append(line, doc + ": " + filename, lineoffset)
lineoffset += 1
diff --git a/Documentation/sphinx/kfigure.py b/Documentation/sphinx/kfigure.py
index cefdbb7e7523..13e885bbd499 100644
--- a/Documentation/sphinx/kfigure.py
+++ b/Documentation/sphinx/kfigure.py
@@ -309,7 +309,7 @@ def convert_image(img_node, translator, src_fname=None):
if dst_fname:
# the builder needs not to copy one more time, so pop it if exists.
translator.builder.images.pop(img_node['uri'], None)
- _name = dst_fname[len(translator.builder.outdir) + 1:]
+ _name = dst_fname[len(str(translator.builder.outdir)) + 1:]
if isNewer(dst_fname, src_fname):
kernellog.verbose(app,
diff --git a/Documentation/sphinx/maintainers_include.py b/Documentation/sphinx/maintainers_include.py
index 328b3631a585..dcad0fff4723 100755
--- a/Documentation/sphinx/maintainers_include.py
+++ b/Documentation/sphinx/maintainers_include.py
@@ -77,7 +77,7 @@ class MaintainersInclude(Include):
line = line.rstrip()
# Linkify all non-wildcard refs to ReST files in Documentation/.
- pat = '(Documentation/([^\s\?\*]*)\.rst)'
+ pat = r'(Documentation/([^\s\?\*]*)\.rst)'
m = re.search(pat, line)
if m:
# maintainers.rst is in a subdirectory, so include "../".
@@ -90,11 +90,11 @@ class MaintainersInclude(Include):
output = "| %s" % (line.replace("\\", "\\\\"))
# Look for and record field letter to field name mappings:
# R: Designated *reviewer*: FullName <address@domain>
- m = re.search("\s(\S):\s", line)
+ m = re.search(r"\s(\S):\s", line)
if m:
field_letter = m.group(1)
if field_letter and not field_letter in fields:
- m = re.search("\*([^\*]+)\*", line)
+ m = re.search(r"\*([^\*]+)\*", line)
if m:
fields[field_letter] = m.group(1)
elif subsystems:
@@ -112,7 +112,7 @@ class MaintainersInclude(Include):
field_content = ""
# Collapse whitespace in subsystem name.
- heading = re.sub("\s+", " ", line)
+ heading = re.sub(r"\s+", " ", line)
output = output + "%s\n%s" % (heading, "~" * len(heading))
field_prev = ""
else:
diff --git a/Documentation/subsystem-apis.rst b/Documentation/subsystem-apis.rst
index 90a0535a932a..930dc23998a0 100644
--- a/Documentation/subsystem-apis.rst
+++ b/Documentation/subsystem-apis.rst
@@ -35,6 +35,7 @@ Human interfaces
sound/index
gpu/index
fb/index
+ leds/index
Networking interfaces
---------------------
@@ -70,7 +71,6 @@ Storage interfaces
fpga/index
i2c/index
iio/index
- leds/index
pcmcia/index
spi/index
w1/index
diff --git a/Documentation/translations/it_IT/riscv/patch-acceptance.rst b/Documentation/translations/it_IT/riscv/patch-acceptance.rst
index edf67252b3fb..2d7afb1f6959 100644
--- a/Documentation/translations/it_IT/riscv/patch-acceptance.rst
+++ b/Documentation/translations/it_IT/riscv/patch-acceptance.rst
@@ -1,6 +1,6 @@
.. include:: ../disclaimer-ita.rst
-:Original: :doc:`../../../riscv/patch-acceptance`
+:Original: :doc:`../../../arch/riscv/patch-acceptance`
:Translator: Federico Vaga <federico.vaga@vaga.pv.it>
arch/riscv linee guida alla manutenzione per gli sviluppatori
diff --git a/Documentation/translations/sp_SP/process/embargoed-hardware-issues.rst b/Documentation/translations/sp_SP/process/embargoed-hardware-issues.rst
new file mode 100644
index 000000000000..c261b428b3f0
--- /dev/null
+++ b/Documentation/translations/sp_SP/process/embargoed-hardware-issues.rst
@@ -0,0 +1,341 @@
+.. SPDX-License-Identifier: GPL-2.0
+.. include:: ../disclaimer-sp.rst
+
+:Original: Documentation/process/embargoed-hardware-issues.rst
+:Translator: Avadhut Naik <avadhut.naik@amd.com>
+
+Problemas de hardware embargados
+================================
+
+Alcance
+-------
+
+Los problemas de hardware que resultan en problemas de seguridad son una
+categoría diferente de errores de seguridad que los errores de software
+puro que solo afectan al kernel de Linux.
+
+Los problemas de hardware como Meltdown, Spectre, L1TF, etc. deben
+tratarse de manera diferente porque usualmente afectan a todos los
+sistemas operativos (“OSâ€) y, por lo tanto, necesitan coordinación entre
+vendedores diferentes de OS, distribuciones, vendedores de hardware y
+otras partes. Para algunos de los problemas, las mitigaciones de software
+pueden depender de actualizaciones de microcódigo o firmware, los cuales
+necesitan una coordinación adicional.
+
+.. _Contacto:
+
+Contacto
+--------
+
+El equipo de seguridad de hardware del kernel de Linux es separado del
+equipo regular de seguridad del kernel de Linux.
+
+El equipo solo maneja la coordinación de los problemas de seguridad de
+hardware embargados. Los informes de errores de seguridad de software puro
+en el kernel de Linux no son manejados por este equipo y el "reportero"
+(quien informa del error) será guiado a contactar el equipo de seguridad
+del kernel de Linux (:doc:`errores de seguridad <security-bugs>`) en su
+lugar.
+
+El equipo puede contactar por correo electrónico en
+<hardware-security@kernel.org>. Esta es una lista privada de oficiales de
+seguridad que lo ayudarán a coordinar un problema de acuerdo con nuestro
+proceso documentado.
+
+La lista esta encriptada y el correo electrónico a la lista puede ser
+enviado por PGP o S/MIME encriptado y debe estar firmado con la llave de
+PGP del reportero o el certificado de S/MIME. La llave de PGP y el
+certificado de S/MIME de la lista están disponibles en las siguientes
+URLs:
+
+ - PGP: https://www.kernel.org/static/files/hardware-security.asc
+ - S/MIME: https://www.kernel.org/static/files/hardware-security.crt
+
+Si bien los problemas de seguridad del hardware a menudo son manejados por
+el vendedor de hardware afectado, damos la bienvenida al contacto de
+investigadores o individuos que hayan identificado una posible falla de
+hardware.
+
+Oficiales de seguridad de hardware
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+El equipo actual de oficiales de seguridad de hardware:
+
+ - Linus Torvalds (Linux Foundation Fellow)
+ - Greg Kroah-Hartman (Linux Foundation Fellow)
+ - Thomas Gleixner (Linux Foundation Fellow)
+
+Operación de listas de correo
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Las listas de correo encriptadas que se utilizan en nuestro proceso están
+alojados en la infraestructura de IT de la Fundación Linux. Al proporcionar
+este servicio, los miembros del personal de operaciones de IT de la
+Fundación Linux técnicamente tienen la capacidad de acceder a la
+información embargada, pero están obligados a la confidencialidad por su
+contrato de trabajo. El personal de IT de la Fundación Linux también es
+responsable para operar y administrar el resto de la infraestructura de
+kernel.org.
+
+El actual director de infraestructura de proyecto de IT de la Fundación
+Linux es Konstantin Ryabitsev.
+
+Acuerdos de no divulgación
+--------------------------
+
+El equipo de seguridad de hardware del kernel de Linux no es un organismo
+formal y, por lo tanto, no puede firmar cualquier acuerdo de no
+divulgación. La comunidad del kernel es consciente de la naturaleza
+delicada de tales problemas y ofrece un Memorando de Entendimiento en su
+lugar.
+
+Memorando de Entendimiento
+--------------------------
+
+La comunidad del kernel de Linux tiene una comprensión profunda del
+requisito de mantener los problemas de seguridad de hardware bajo embargo
+para la coordinación entre diferentes vendedores de OS, distribuidores,
+vendedores de hardware y otras partes.
+
+La comunidad del kernel de Linux ha manejado con éxito los problemas de
+seguridad del hardware en el pasado y tiene los mecanismos necesarios para
+permitir el desarrollo compatible con la comunidad bajo restricciones de
+embargo.
+
+La comunidad del kernel de Linux tiene un equipo de seguridad de hardware
+dedicado para el contacto inicial, el cual supervisa el proceso de manejo
+de tales problemas bajo las reglas de embargo.
+
+El equipo de seguridad de hardware identifica a los desarrolladores
+(expertos en dominio) que formarán el equipo de respuesta inicial para un
+problema en particular. El equipo de respuesta inicial puede involucrar
+más desarrolladores (expertos en dominio) para abordar el problema de la
+mejor manera técnica.
+
+Todos los desarrolladores involucrados se comprometen a adherirse a las
+reglas del embargo y a mantener confidencial la información recibida. La
+violación de la promesa conducirá a la exclusión inmediata del problema
+actual y la eliminación de todas las listas de correo relacionadas.
+Además, el equipo de seguridad de hardware también excluirá al
+delincuente de problemas futuros. El impacto de esta consecuencia es un
+elemento de disuasión altamente efectivo en nuestra comunidad. En caso de
+que ocurra una violación, el equipo de seguridad de hardware informará a
+las partes involucradas inmediatamente. Si usted o alguien tiene
+conocimiento de una posible violación, por favor, infórmelo inmediatamente
+a los oficiales de seguridad de hardware.
+
+Proceso
+^^^^^^^
+
+Debido a la naturaleza distribuida globalmente del desarrollo del kernel
+de Linux, las reuniones cara a cara hacen imposible abordar los
+problemas de seguridad del hardware. Las conferencias telefónicas son
+difíciles de coordinar debido a las zonas horarias y otros factores y
+solo deben usarse cuando sea absolutamente necesario. El correo
+electrónico encriptado ha demostrado ser el método de comunicación más
+efectivo y seguro para estos tipos de problemas.
+
+Inicio de la divulgación
+""""""""""""""""""""""""
+
+La divulgación comienza contactado al equipo de seguridad de hardware del
+kernel de Linux por correo electrónico. Este contacto inicial debe
+contener una descripción del problema y una lista de cualquier hardware
+afectado conocido. Si su organización fabrica o distribuye el hardware
+afectado, le animamos a considerar también que otro hardware podría estar
+afectado.
+
+El equipo de seguridad de hardware proporcionará una lista de correo
+encriptada específica para el incidente que se utilizará para la discusión
+inicial con el reportero, la divulgación adicional y la coordinación.
+
+El equipo de seguridad de hardware proporcionará a la parte reveladora una
+lista de desarrolladores (expertos de dominios) a quienes se debe informar
+inicialmente sobre el problema después de confirmar con los
+desarrolladores que se adherirán a este Memorando de Entendimiento y al
+proceso documentado. Estos desarrolladores forman el equipo de respuesta
+inicial y serán responsables de manejar el problema después del contacto
+inicial. El equipo de seguridad de hardware apoyará al equipo de
+respuesta, pero no necesariamente involucrandose en el proceso de desarrollo
+de mitigación.
+
+Si bien los desarrolladores individuales pueden estar cubiertos por un
+acuerdo de no divulgación a través de su empleador, no pueden firmar
+acuerdos individuales de no divulgación en su papel de desarrolladores
+del kernel de Linux. Sin embargo, aceptarán adherirse a este proceso
+documentado y al Memorando de Entendimiento.
+
+La parte reveladora debe proporcionar una lista de contactos para todas
+las demás entidades ya que han sido, o deberían ser, informadas sobre el
+problema. Esto sirve para varios propósitos:
+
+ - La lista de entidades divulgadas permite la comunicación en toda la
+ industria, por ejemplo, otros vendedores de OS, vendedores de HW, etc.
+
+ - Las entidades divulgadas pueden ser contactadas para nombrar a expertos
+ que deben participar en el desarrollo de la mitigación.
+
+ - Si un experto que se requiere para manejar un problema es empleado por
+ una entidad cotizada o un miembro de una entidad cotizada, los equipos
+ de respuesta pueden solicitar la divulgación de ese experto a esa
+ entidad. Esto asegura que el experto también forme parte del equipo de
+ respuesta de la entidad.
+
+Divulgación
+"""""""""""
+
+La parte reveladora proporcionará información detallada al equipo de
+respuesta inicial a través de la lista de correo encriptada especifica.
+
+Según nuestra experiencia, la documentación técnica de estos problemas
+suele ser un punto de partida suficiente y es mejor hacer aclaraciones
+técnicas adicionales a través del correo electrónico.
+
+Desarrollo de la mitigación
+"""""""""""""""""""""""""""
+
+El equipo de respuesta inicial configura una lista de correo encriptada o
+reutiliza una existente si es apropiada.
+
+El uso de una lista de correo está cerca del proceso normal de desarrollo
+de Linux y se ha utilizado con éxito en el desarrollo de mitigación para
+varios problemas de seguridad de hardware en el pasado.
+
+La lista de correo funciona en la misma manera que el desarrollo normal de
+Linux. Los parches se publican, discuten y revisan y, si se acuerda, se
+aplican a un repositorio git no público al que solo pueden acceder los
+desarrolladores participantes a través de una conexión segura. El
+repositorio contiene la rama principal de desarrollo en comparación con
+el kernel principal y las ramas backport para versiones estables del
+kernel según sea necesario.
+
+El equipo de respuesta inicial identificará a más expertos de la
+comunidad de desarrolladores del kernel de Linux según sea necesario. La
+incorporación de expertos puede ocurrir en cualquier momento del proceso
+de desarrollo y debe manejarse de manera oportuna.
+
+Si un experto es empleado por o es miembro de una entidad en la lista de
+divulgación proporcionada por la parte reveladora, entonces se solicitará
+la participación de la entidad pertinente.
+
+Si no es así, entonces se informará a la parte reveladora sobre la
+participación de los expertos. Los expertos están cubiertos por el
+Memorando de Entendimiento y se solicita a la parte reveladora que
+reconozca la participación. En caso de que la parte reveladora tenga una
+razón convincente para objetar, entonces esta objeción debe plantearse
+dentro de los cinco días laborables y resolverse con el equipo de
+incidente inmediatamente. Si la parte reveladora no reacciona dentro de
+los cinco días laborables, esto se toma como un reconocimiento silencioso.
+
+Después del reconocimiento o la resolución de una objeción, el experto es
+revelado por el equipo de incidente y se incorpora al proceso de
+desarrollo.
+
+Lanzamiento coordinado
+""""""""""""""""""""""
+
+Las partes involucradas negociarán la fecha y la hora en la que termina el
+embargo. En ese momento, las mitigaciones preparadas se integran en los
+árboles de kernel relevantes y se publican.
+
+Si bien entendemos que los problemas de seguridad del hardware requieren
+un tiempo de embargo coordinado, el tiempo de embargo debe limitarse al
+tiempo mínimo que se requiere para que todas las partes involucradas
+desarrollen, prueben y preparen las mitigaciones. Extender el tiempo de
+embargo artificialmente para cumplir con las fechas de discusión de la
+conferencia u otras razones no técnicas está creando más trabajo y carga
+para los desarrolladores y los equipos de respuesta involucrados, ya que
+los parches necesitan mantenerse actualizados para seguir el desarrollo en
+curso del kernel upstream, lo cual podría crear cambios conflictivos.
+
+Asignación de CVE
+"""""""""""""""""
+
+Ni el equipo de seguridad de hardware ni el equipo de respuesta inicial
+asignan CVEs, ni se requieren para el proceso de desarrollo. Si los CVEs
+son proporcionados por la parte reveladora, pueden usarse con fines de
+documentación.
+
+Embajadores del proceso
+-----------------------
+
+Para obtener asistencia con este proceso, hemos establecido embajadores
+en varias organizaciones, que pueden responder preguntas o proporcionar
+orientación sobre el proceso de reporte y el manejo posterior. Los
+embajadores no están involucrados en la divulgación de un problema en
+particular, a menos que lo solicite un equipo de respuesta o una parte
+revelada involucrada. La lista de embajadores actuales:
+
+ ============= ========================================================
+ AMD Tom Lendacky <thomas.lendacky@amd.com>
+ Ampere Darren Hart <darren@os.amperecomputing.com>
+ ARM Catalin Marinas <catalin.marinas@arm.com>
+ IBM Power Anton Blanchard <anton@linux.ibm.com>
+ IBM Z Christian Borntraeger <borntraeger@de.ibm.com>
+ Intel Tony Luck <tony.luck@intel.com>
+ Qualcomm Trilok Soni <tsoni@codeaurora.org>
+ Samsung Javier González <javier.gonz@samsung.com>
+
+ Microsoft James Morris <jamorris@linux.microsoft.com>
+ Xen Andrew Cooper <andrew.cooper3@citrix.com>
+
+ Canonical John Johansen <john.johansen@canonical.com>
+ Debian Ben Hutchings <ben@decadent.org.uk>
+ Oracle Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
+ Red Hat Josh Poimboeuf <jpoimboe@redhat.com>
+ SUSE Jiri Kosina <jkosina@suse.cz>
+
+ Google Kees Cook <keescook@chromium.org>
+
+ LLVM Nick Desaulniers <ndesaulniers@google.com>
+ ============= ========================================================
+
+Si quiere que su organización se añada a la lista de embajadores, por
+favor póngase en contacto con el equipo de seguridad de hardware. El
+embajador nominado tiene que entender y apoyar nuestro proceso
+completamente y está idealmente bien conectado en la comunidad del kernel
+de Linux.
+
+Listas de correo encriptadas
+----------------------------
+
+Usamos listas de correo encriptadas para la comunicación. El principio de
+funcionamiento de estas listas es que el correo electrónico enviado a la
+lista se encripta con la llave PGP de la lista o con el certificado S/MIME
+de la lista. El software de lista de correo descifra el correo electrónico
+y lo vuelve a encriptar individualmente para cada suscriptor con la llave
+PGP del suscriptor o el certificado S/MIME. Los detalles sobre el software
+de la lista de correo y la configuración que se usa para asegurar la
+seguridad de las listas y la protección de los datos se pueden encontrar
+aquí: https://korg.wiki.kernel.org/userdoc/remail.
+
+Llaves de lista
+^^^^^^^^^^^^^^^
+
+Para el contacto inicial, consulte :ref:`Contacto`. Para las listas de
+correo especificas de incidentes, la llave y el certificado S/MIME se
+envían a los suscriptores por correo electrónico desde la lista
+especifica.
+
+Suscripción a listas específicas de incidentes
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+La suscripción es manejada por los equipos de respuesta. Las partes
+reveladas que quieren participar en la comunicación envían una lista de
+suscriptores potenciales al equipo de respuesta para que el equipo de
+respuesta pueda validar las solicitudes de suscripción.
+
+Cada suscriptor necesita enviar una solicitud de suscripción al equipo de
+respuesta por correo electrónico. El correo electrónico debe estar firmado
+con la llave PGP del suscriptor o el certificado S/MIME. Si se usa una
+llave PGP, debe estar disponible desde un servidor de llave publica y esta
+idealmente conectada a la red de confianza PGP del kernel de Linux. Véase
+también: https://www.kernel.org/signature.html.
+
+El equipo de respuesta verifica que la solicitud del suscriptor sea válida
+y añade al suscriptor a la lista. Después de la suscripción, el suscriptor
+recibirá un correo electrónico de la lista que está firmado con la llave
+PGP de la lista o el certificado S/MIME de la lista. El cliente de correo
+electrónico del suscriptor puede extraer la llave PGP o el certificado
+S/MIME de la firma, de modo que el suscriptor pueda enviar correo
+electrónico encriptado a la lista.
diff --git a/Documentation/translations/sp_SP/process/index.rst b/Documentation/translations/sp_SP/process/index.rst
index 09bfece0f52f..d6f3ccfb160e 100644
--- a/Documentation/translations/sp_SP/process/index.rst
+++ b/Documentation/translations/sp_SP/process/index.rst
@@ -22,3 +22,5 @@
adding-syscalls
researcher-guidelines
contribution-maturity-model
+ security-bugs
+ embargoed-hardware-issues
diff --git a/Documentation/translations/sp_SP/process/security-bugs.rst b/Documentation/translations/sp_SP/process/security-bugs.rst
new file mode 100644
index 000000000000..d07c7e579b52
--- /dev/null
+++ b/Documentation/translations/sp_SP/process/security-bugs.rst
@@ -0,0 +1,103 @@
+.. SPDX-License-Identifier: GPL-2.0
+.. include:: ../disclaimer-sp.rst
+
+:Original: Documentation/process/security-bugs.rst
+:Translator: Avadhut Naik <avadhut.naik@amd.com>
+
+Errores de seguridad
+====================
+
+Los desarrolladores del kernel de Linux se toman la seguridad muy en
+serio. Como tal, nos gustaría saber cuándo se encuentra un error de
+seguridad para que pueda ser corregido y divulgado lo más rápido posible.
+Por favor, informe sobre los errores de seguridad al equipo de seguridad
+del kernel de Linux.
+
+Contacto
+--------
+
+El equipo de seguridad del kernel de Linux puede ser contactado por correo
+electrónico en <security@kernel.org>. Esta es una lista privada de
+oficiales de seguridad que ayudarán a verificar el informe del error y
+desarrollarán y publicarán una corrección. Si ya tiene una corrección, por
+favor, inclúyala con su informe, ya que eso puede acelerar considerablemente
+el proceso. Es posible que el equipo de seguridad traiga ayuda adicional
+de mantenedores del área para comprender y corregir la vulnerabilidad de
+seguridad.
+
+Como ocurre con cualquier error, cuanta más información se proporcione,
+más fácil será diagnosticarlo y corregirlo. Por favor, revise el
+procedimiento descrito en 'Documentation/admin-guide/reporting-issues.rst'
+si no tiene claro que información es útil. Cualquier código de explotación
+es muy útil y no será divulgado sin el consentimiento del "reportero" (el
+que envia el error) a menos que ya se haya hecho público.
+
+Por favor, envíe correos electrónicos en texto plano sin archivos
+adjuntos cuando sea posible. Es mucho más difícil tener una discusión
+citada en contexto sobre un tema complejo si todos los detalles están
+ocultos en archivos adjuntos. Piense en ello como un
+:doc:`envío de parche regular <submitting-patches>` (incluso si no tiene
+un parche todavía) describa el problema y el impacto, enumere los pasos
+de reproducción, y sígalo con una solución propuesta, todo en texto plano.
+
+
+Divulgación e información embargada
+-----------------------------------
+
+La lista de seguridad no es un canal de divulgación. Para eso, ver
+Coordinación debajo. Una vez que se ha desarrollado una solución robusta,
+comienza el proceso de lanzamiento. Las soluciones para errores conocidos
+públicamente se lanzan inmediatamente.
+
+Aunque nuestra preferencia es lanzar soluciones para errores no divulgados
+públicamente tan pronto como estén disponibles, esto puede postponerse a
+petición del reportero o una parte afectada por hasta 7 días calendario
+desde el inicio del proceso de lanzamiento, con una extensión excepcional
+a 14 días de calendario si se acuerda que la criticalidad del error requiere
+más tiempo. La única razón válida para aplazar la publicación de una
+solución es para acomodar la logística de QA y los despliegues a gran
+escala que requieren coordinación de lanzamiento.
+
+Si bien la información embargada puede compartirse con personas de
+confianza para desarrollar una solución, dicha información no se publicará
+junto con la solución o en cualquier otro canal de divulgación sin el
+permiso del reportero. Esto incluye, pero no se limita al informe original
+del error y las discusiones de seguimiento (si las hay), exploits,
+información sobre CVE o la identidad del reportero.
+
+En otras palabras, nuestro único interés es solucionar los errores. Toda
+otra información presentada a la lista de seguridad y cualquier discusión
+de seguimiento del informe se tratan confidencialmente incluso después de
+que se haya levantado el embargo, en perpetuidad.
+
+Coordinación con otros grupos
+-----------------------------
+
+El equipo de seguridad del kernel recomienda encarecidamente que los
+reporteros de posibles problemas de seguridad NUNCA contacten la lista
+de correo “linux-distros†hasta DESPUES de discutirlo con el equipo de
+seguridad del kernel. No Cc: ambas listas a la vez. Puede ponerse en
+contacto con la lista de correo linux-distros después de que se haya
+acordado una solución y comprenda completamente los requisitos que al
+hacerlo le impondrá a usted y la comunidad del kernel.
+
+Las diferentes listas tienen diferentes objetivos y las reglas de
+linux-distros no contribuyen en realidad a solucionar ningún problema de
+seguridad potencial.
+
+Asignación de CVE
+-----------------
+
+El equipo de seguridad no asigna CVEs, ni los requerimos para informes o
+correcciones, ya que esto puede complicar innecesariamente el proceso y
+puede retrasar el manejo de errores. Si un reportero desea que se le
+asigne un identificador CVE, debe buscar uno por sí mismo, por ejemplo,
+poniéndose en contacto directamente con MITRE. Sin embargo, en ningún
+caso se retrasará la inclusión de un parche para esperar a que llegue un
+identificador CVE.
+
+Acuerdos de no divulgación
+--------------------------
+
+El equipo de seguridad del kernel de Linux no es un organismo formal y,
+por lo tanto, no puede firmar cualquier acuerdo de no divulgación.
diff --git a/Documentation/translations/zh_CN/arch/index.rst b/Documentation/translations/zh_CN/arch/index.rst
index 945b078168b0..71186d9df7c9 100644
--- a/Documentation/translations/zh_CN/arch/index.rst
+++ b/Documentation/translations/zh_CN/arch/index.rst
@@ -10,7 +10,7 @@
mips/index
arm64/index
- ../riscv/index
+ ../arch/riscv/index
openrisc/index
parisc/index
loongarch/index
diff --git a/Documentation/translations/zh_CN/riscv/boot-image-header.rst b/Documentation/translations/zh_CN/arch/riscv/boot-image-header.rst
index 0234c28a7114..779b5172fe24 100644
--- a/Documentation/translations/zh_CN/riscv/boot-image-header.rst
+++ b/Documentation/translations/zh_CN/arch/riscv/boot-image-header.rst
@@ -1,6 +1,6 @@
-.. include:: ../disclaimer-zh_CN.rst
+.. include:: ../../disclaimer-zh_CN.rst
-:Original: Documentation/riscv/boot-image-header.rst
+:Original: Documentation/arch/riscv/boot-image-header.rst
:翻译:
diff --git a/Documentation/translations/zh_CN/riscv/index.rst b/Documentation/translations/zh_CN/arch/riscv/index.rst
index 131e405aa857..3b041c116169 100644
--- a/Documentation/translations/zh_CN/riscv/index.rst
+++ b/Documentation/translations/zh_CN/arch/riscv/index.rst
@@ -1,8 +1,8 @@
.. SPDX-License-Identifier: GPL-2.0
-.. include:: ../disclaimer-zh_CN.rst
+.. include:: ../../disclaimer-zh_CN.rst
-:Original: Documentation/riscv/index.rst
+:Original: Documentation/arch/riscv/index.rst
:翻译:
diff --git a/Documentation/translations/zh_CN/riscv/patch-acceptance.rst b/Documentation/translations/zh_CN/arch/riscv/patch-acceptance.rst
index d180d24717bf..c8eb230ca8ee 100644
--- a/Documentation/translations/zh_CN/riscv/patch-acceptance.rst
+++ b/Documentation/translations/zh_CN/arch/riscv/patch-acceptance.rst
@@ -1,8 +1,8 @@
.. SPDX-License-Identifier: GPL-2.0
-.. include:: ../disclaimer-zh_CN.rst
+.. include:: ../../disclaimer-zh_CN.rst
-:Original: Documentation/riscv/patch-acceptance.rst
+:Original: Documentation/arch/riscv/patch-acceptance.rst
:翻译:
diff --git a/Documentation/translations/zh_CN/riscv/vm-layout.rst b/Documentation/translations/zh_CN/arch/riscv/vm-layout.rst
index 91884e2dfff8..4b9f4dcf6c19 100644
--- a/Documentation/translations/zh_CN/riscv/vm-layout.rst
+++ b/Documentation/translations/zh_CN/arch/riscv/vm-layout.rst
@@ -1,7 +1,7 @@
.. SPDX-License-Identifier: GPL-2.0
-.. include:: ../disclaimer-zh_CN.rst
+.. include:: ../../disclaimer-zh_CN.rst
-:Original: Documentation/riscv/vm-layout.rst
+:Original: Documentation/arch/riscv/vm-layout.rst
:翻译:
diff --git a/Documentation/translations/zh_CN/index.rst b/Documentation/translations/zh_CN/index.rst
index 299704c0818d..6ccec9657cc6 100644
--- a/Documentation/translations/zh_CN/index.rst
+++ b/Documentation/translations/zh_CN/index.rst
@@ -52,12 +52,9 @@
core-api/index
driver-api/index
+ subsystem-apis
å†…æ ¸ä¸­çš„é” <locking/index>
-TODOList:
-
-* subsystem-apis
-
å¼€å‘工具和æµç¨‹
--------------
diff --git a/Documentation/translations/zh_CN/maintainer/maintainer-entry-profile.rst b/Documentation/translations/zh_CN/maintainer/maintainer-entry-profile.rst
index a1ee99c4786e..0f5acfb1012e 100644
--- a/Documentation/translations/zh_CN/maintainer/maintainer-entry-profile.rst
+++ b/Documentation/translations/zh_CN/maintainer/maintainer-entry-profile.rst
@@ -89,4 +89,4 @@
../doc-guide/maintainer-profile
../../../nvdimm/maintainer-entry-profile
- ../../../riscv/patch-acceptance
+ ../../../arch/riscv/patch-acceptance
diff --git a/Documentation/translations/zh_CN/subsystem-apis.rst b/Documentation/translations/zh_CN/subsystem-apis.rst
new file mode 100644
index 000000000000..47780bb0772f
--- /dev/null
+++ b/Documentation/translations/zh_CN/subsystem-apis.rst
@@ -0,0 +1,110 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+.. include:: ./disclaimer-zh_CN.rst
+
+:Original: Documentation/subsystem-apis.rst
+
+:翻译:
+
+ å”艺舟 Tang Yizhou <tangyeechou@gmail.com>
+
+==============
+内核å­ç³»ç»Ÿæ–‡æ¡£
+==============
+
+这些书ç±ä»Žå†…核开å‘者的角度,详细介ç»äº†ç‰¹å®šå†…æ ¸å­ç³»ç»Ÿ
+的如何工作。这里的大部分信æ¯ç›´æŽ¥å–自内核æºä»£ç ï¼Œå¹¶
+æ ¹æ®éœ€è¦æ·»åŠ äº†è¡¥å……æ料(或者至少是我们设法添加的 - å¯
+能 *ä¸æ˜¯* 所有的æ料都有需è¦ï¼‰ã€‚
+
+核心å­ç³»ç»Ÿ
+----------
+
+.. toctree::
+ :maxdepth: 1
+
+ core-api/index
+ driver-api/index
+ mm/index
+ power/index
+ scheduler/index
+ locking/index
+
+TODOList:
+
+* timers/index
+
+人机接å£
+--------
+
+.. toctree::
+ :maxdepth: 1
+
+ sound/index
+
+TODOList:
+
+* input/index
+* hid/index
+* gpu/index
+* fb/index
+
+网络接å£
+--------
+
+.. toctree::
+ :maxdepth: 1
+
+ infiniband/index
+
+TODOList:
+
+* networking/index
+* netlabel/index
+* isdn/index
+* mhi/index
+
+存储接å£
+--------
+
+.. toctree::
+ :maxdepth: 1
+
+ filesystems/index
+
+TODOList:
+
+* block/index
+* cdrom/index
+* scsi/index
+* target/index
+
+**Fixme**: 这里还需è¦æ›´å¤šçš„分类组织工作。
+
+.. toctree::
+ :maxdepth: 1
+
+ accounting/index
+ cpu-freq/index
+ iio/index
+ virt/index
+ PCI/index
+ peci/index
+
+TODOList:
+
+* fpga/index
+* i2c/index
+* leds/index
+* pcmcia/index
+* spi/index
+* w1/index
+* watchdog/index
+* hwmon/index
+* accel/index
+* security/index
+* crypto/index
+* bpf/index
+* usb/index
+* misc-devices/index
+* wmi/index
diff --git a/Documentation/translations/zh_TW/admin-guide/README.rst b/Documentation/translations/zh_TW/admin-guide/README.rst
index 7fc56e1e3348..4cb581f5994a 100644
--- a/Documentation/translations/zh_TW/admin-guide/README.rst
+++ b/Documentation/translations/zh_TW/admin-guide/README.rst
@@ -9,16 +9,16 @@
å³æƒ³æˆ Wu XiangCheng <bobwxc@email.cn>
胡皓文 Hu Haowen <src.res.211@gmail.com>
-Linux內核5.x版本 <http://kernel.org/>
+Linux內核6.x版本 <http://kernel.org/>
=========================================
-以下是Linux版本5的發行註記。仔細閱讀它們,
+以下是Linux版本6的發行註記。仔細閱讀它們,
它們會告訴你這些都是什麼,解釋如何安è£å…§æ ¸ï¼Œä»¥åŠé‡åˆ°å•é¡Œæ™‚該如何åšã€‚
什麼是Linux?
---------------
- Linux是Unix作業系統的克隆版本,由Linus Torvalds在一個鬆散的網絡黑客
+ Linux是Unixæ“作系統的克隆版本,由Linus Torvalds在一個鬆散的網絡黑客
(Hacker,無貶義)團隊的幫助下從頭開始編寫。它旨在實ç¾å…¼å®¹POSIXå’Œ
單一UNIXè¦ç¯„。
@@ -28,7 +28,7 @@ Linux內核5.x版本 <http://kernel.org/>
Linux在GNU通用公共許å¯è­‰ï¼Œç‰ˆæœ¬2(GNU GPLv2)下分發,詳見隨附的COPYING文件。
-它能在什麼樣的硬體上é‹è¡Œï¼Ÿ
+它能在什麼樣的硬件上é‹è¡Œï¼Ÿ
-----------------------------
雖然Linux最åˆæ˜¯çˆ²32ä½çš„x86 PC機(386或更高版本)開發的,但今天它也能é‹è¡Œåœ¨
@@ -40,16 +40,16 @@ Linux內核5.x版本 <http://kernel.org/>
單元(PMMU)和一個移æ¤çš„GNU C編譯器(gccï¼›GNU Compiler Collection,GCC的一
部分)。Linux也被移æ¤åˆ°è¨±å¤šæ²’有PMMU的體系架構中,儘管功能顯然å—到了一定的
é™åˆ¶ã€‚
- Linux也被移æ¤åˆ°äº†å…¶è‡ªå·±ä¸Šã€‚ç¾åœ¨å¯ä»¥å°‡å…§æ ¸ä½œçˆ²ç”¨æˆ¶ç©ºé–“應用程å¼é‹è¡Œâ€”—這被
+ Linux也被移æ¤åˆ°äº†å…¶è‡ªå·±ä¸Šã€‚ç¾åœ¨å¯ä»¥å°‡å…§æ ¸ä½œçˆ²ç”¨æˆ¶ç©ºé–“應用程åºé‹è¡Œâ€”—這被
稱爲用戶模å¼Linux(UML)。
文檔
-----
-網際網路上和書ç±ä¸Šéƒ½æœ‰å¤§é‡çš„é›»å­æ–‡æª”,既有Linux專屬文檔,也有與一般UNIXå•é¡Œç›¸é—œ
+因特網上和書ç±ä¸Šéƒ½æœ‰å¤§é‡çš„é›»å­æ–‡æª”,既有Linux專屬文檔,也有與一般UNIXå•é¡Œç›¸é—œ
的文檔。我建議在任何Linux FTP站點上查找LDP(Linux文檔項目)書ç±çš„文檔å­ç›®éŒ„。
本自述文件並ä¸æ˜¯é—œæ–¼ç³»çµ±çš„文檔:有更好的å¯ç”¨è³‡æºã€‚
- - 網際網路上和書ç±ä¸Šéƒ½æœ‰å¤§é‡çš„(電å­ï¼‰æ–‡æª”,既有Linux專屬文檔,也有與普通
+ - 因特網上和書ç±ä¸Šéƒ½æœ‰å¤§é‡çš„(電å­ï¼‰æ–‡æª”,既有Linux專屬文檔,也有與普通
UNIXå•é¡Œç›¸é—œçš„文檔。我建議在任何有LDP(Linux文檔項目)書ç±çš„Linux FTP
站點上查找文檔å­ç›®éŒ„。本自述文件並ä¸æ˜¯é—œæ–¼ç³»çµ±çš„文檔:有更好的å¯ç”¨è³‡æºã€‚
@@ -58,33 +58,33 @@ Linux內核5.x版本 <http://kernel.org/>
:ref:`Documentation/process/changes.rst <changes>` 文件,它包å«äº†å‡ç´šå…§æ ¸
å¯èƒ½æœƒå°Žè‡´çš„å•é¡Œçš„相關信æ¯ã€‚
-安è£å…§æ ¸åŽŸå§‹ç¢¼
+安è£å…§æ ¸æºä»£ç¢¼
---------------
- - 如果您è¦å®‰è£å®Œæ•´çš„原始碼,請把內核tar檔案包放在您有權é™çš„目錄中(例如您
+ - 如果您è¦å®‰è£å®Œæ•´çš„æºä»£ç¢¼ï¼Œè«‹æŠŠå…§æ ¸tar檔案包放在您有權é™çš„目錄中(例如您
的主目錄)並將其解包::
- xz -cd linux-5.x.tar.xz | tar xvf -
+ xz -cd linux-6.x.tar.xz | tar xvf -
- 將「Xã€æ›¿æ›æˆæœ€æ–°å…§æ ¸çš„版本號。
+ 將“Xâ€æ›¿æ›æˆæœ€æ–°å…§æ ¸çš„版本號。
- ã€ä¸è¦ã€‘使用 /usr/src/linux 目錄ï¼é€™è£¡æœ‰ä¸€çµ„庫頭文件使用的內核頭文件
+ ã€ä¸è¦ã€‘使用 /usr/src/linux 目錄ï¼é€™è£æœ‰ä¸€çµ„庫頭文件使用的內核頭文件
(通常是ä¸å®Œæ•´çš„)。它們應該與庫匹é…,而ä¸æ˜¯è¢«å…§æ ¸çš„變化æžå¾—一團糟。
- - 您還å¯ä»¥é€šéŽæ‰“補ä¸åœ¨5.x版本之間å‡ç´šã€‚補ä¸ä»¥xzæ ¼å¼åˆ†ç™¼ã€‚è¦é€šéŽæ‰“補ä¸é€²è¡Œ
- 安è£ï¼Œè«‹ç²å–所有較新的補ä¸æ–‡ä»¶ï¼Œé€²å…¥å…§æ ¸åŽŸå§‹ç¢¼ï¼ˆlinux-5.x)的目錄並
+ - 您還å¯ä»¥é€šéŽæ‰“補ä¸åœ¨6.x版本之間å‡ç´šã€‚補ä¸ä»¥xzæ ¼å¼åˆ†ç™¼ã€‚è¦é€šéŽæ‰“補ä¸é€²è¡Œ
+ 安è£ï¼Œè«‹ç²å–所有較新的補ä¸æ–‡ä»¶ï¼Œé€²å…¥å…§æ ¸æºä»£ç¢¼ï¼ˆlinux-6.x)的目錄並
執行::
- xz -cd ../patch-5.x.xz | patch -p1
+ xz -cd ../patch-6.x.xz | patch -p1
- è«‹ã€æŒ‰é †åºã€‘替æ›æ‰€æœ‰å¤§æ–¼ç•¶å‰åŽŸå§‹ç¢¼æ¨¹ç‰ˆæœ¬çš„「xã€ï¼Œé€™æ¨£å°±å¯ä»¥äº†ã€‚您å¯èƒ½æƒ³è¦
+ è«‹ã€æŒ‰é †åºã€‘替æ›æ‰€æœ‰å¤§æ–¼ç•¶å‰æºä»£ç¢¼æ¨¹ç‰ˆæœ¬çš„“xâ€ï¼Œé€™æ¨£å°±å¯ä»¥äº†ã€‚您å¯èƒ½æƒ³è¦
刪除備份文件(文件åé¡žä¼¼xxx~ 或 xxx.orig),並確ä¿æ²’有失敗的補ä¸ï¼ˆæ–‡ä»¶å
é¡žä¼¼xxx# 或 xxx.rej)。如果有,ä¸æ˜¯ä½ å°±æ˜¯æˆ‘犯了錯誤。
- 與5.x內核的補ä¸ä¸åŒï¼Œ5.x.y內核(也稱爲穩定版內核)的補ä¸ä¸æ˜¯å¢žé‡çš„,而是
- 直接應用於基本的5.x內核。例如,如果您的基本內核是5.0,並且希望應用5.0.3
- 補ä¸ï¼Œå‰‡ä¸æ‡‰å…ˆæ‡‰ç”¨5.0.1å’Œ5.0.2的補ä¸ã€‚類似地,如果您é‹è¡Œçš„是5.0.2內核,
- 並且希望跳轉到5.0.3,那麼在應用5.0.3補ä¸ä¹‹å‰ï¼Œå¿…須首先撤銷5.0.2補ä¸
+ 與6.x內核的補ä¸ä¸åŒï¼Œ6.x.y內核(也稱爲穩定版內核)的補ä¸ä¸æ˜¯å¢žé‡çš„,而是
+ 直接應用於基本的6.x內核。例如,如果您的基本內核是6.0,並且希望應用6.0.3
+ 補ä¸ï¼Œå‰‡ä¸æ‡‰å…ˆæ‡‰ç”¨6.0.1å’Œ6.0.2的補ä¸ã€‚類似地,如果您é‹è¡Œçš„是6.0.2內核,
+ 並且希望跳轉到6.0.3,那麼在應用6.0.3補ä¸ä¹‹å‰ï¼Œå¿…須首先撤銷6.0.2補ä¸
(å³patch -R)。更多關於這方é¢çš„內容,請閱讀
:ref:`Documentation/process/applying-patches.rst <applying_patches>` 。
@@ -93,7 +93,7 @@ Linux內核5.x版本 <http://kernel.org/>
linux/scripts/patch-kernel linux
- 上é¢å‘½ä»¤ä¸­çš„第一個åƒæ•¸æ˜¯å…§æ ¸åŽŸå§‹ç¢¼çš„ä½ç½®ã€‚補ä¸æ˜¯åœ¨ç•¶å‰ç›®éŒ„應用的,但是
+ 上é¢å‘½ä»¤ä¸­çš„第一個åƒæ•¸æ˜¯å…§æ ¸æºä»£ç¢¼çš„ä½ç½®ã€‚補ä¸æ˜¯åœ¨ç•¶å‰ç›®éŒ„應用的,但是
å¯ä»¥å°‡å¦ä¸€å€‹ç›®éŒ„指定爲第二個åƒæ•¸ã€‚
- 確ä¿æ²’有éŽæ™‚çš„ .o 文件和ä¾è³´é …::
@@ -101,30 +101,30 @@ Linux內核5.x版本 <http://kernel.org/>
cd linux
make mrproper
- ç¾åœ¨æ‚¨æ‡‰è©²å·²ç¶“正確安è£äº†åŽŸå§‹ç¢¼ã€‚
+ ç¾åœ¨æ‚¨æ‡‰è©²å·²ç¶“正確安è£äº†æºä»£ç¢¼ã€‚
-軟體è¦æ±‚
+軟件è¦æ±‚
---------
- 編譯和é‹è¡Œ5.x內核需è¦å„種軟體包的最新版本。請åƒè€ƒ
+ 編譯和é‹è¡Œ6.x內核需è¦å„種軟件包的最新版本。請åƒè€ƒ
:ref:`Documentation/process/changes.rst <changes>`
- 來了解最低版本è¦æ±‚以åŠå¦‚何å‡ç´šè»Ÿé«”包。請注æ„,使用éŽèˆŠç‰ˆæœ¬çš„這些包å¯èƒ½æœƒ
+ 來了解最低版本è¦æ±‚以åŠå¦‚何å‡ç´šè»Ÿä»¶åŒ…。請注æ„,使用éŽèˆŠç‰ˆæœ¬çš„這些包å¯èƒ½æœƒ
導致很難追蹤的間接錯誤,因此ä¸è¦ä»¥çˆ²åœ¨ç”Ÿæˆæˆ–æ“作éŽç¨‹ä¸­å‡ºç¾æ˜Žé¡¯å•é¡Œæ™‚å¯ä»¥
åªæ›´æ–°åŒ…。
爲內核建立目錄
---------------
- 編譯內核時,默èªæƒ…æ³ä¸‹æ‰€æœ‰è¼¸å‡ºæ–‡ä»¶éƒ½å°‡èˆ‡å…§æ ¸åŽŸå§‹ç¢¼æ”¾åœ¨ä¸€èµ·ã€‚使用
+ 編譯內核時,默èªæƒ…æ³ä¸‹æ‰€æœ‰è¼¸å‡ºæ–‡ä»¶éƒ½å°‡èˆ‡å…§æ ¸æºä»£ç¢¼æ”¾åœ¨ä¸€èµ·ã€‚使用
``make O=output/dir`` é¸é …å¯ä»¥çˆ²è¼¸å‡ºæ–‡ä»¶ï¼ˆåŒ…括 .config)指定備用ä½ç½®ã€‚
例如::
- kernel source code: /usr/src/linux-5.x
+ kernel source code: /usr/src/linux-6.x
build directory: /home/name/build/kernel
è¦é…置和構建內核,請使用::
- cd /usr/src/linux-5.x
+ cd /usr/src/linux-6.x
make O=/home/name/build/kernel menuconfig
make O=/home/name/build/kernel
sudo make O=/home/name/build/kernel modules_install install
@@ -136,7 +136,7 @@ Linux內核5.x版本 <http://kernel.org/>
å³ä½¿åªå‡ç´šä¸€å€‹å°ç‰ˆæœ¬ï¼Œä¹Ÿä¸è¦è·³éŽæ­¤æ­¥é©Ÿã€‚æ¯å€‹ç‰ˆæœ¬ä¸­éƒ½æœƒæ·»åŠ æ–°çš„é…ç½®é¸é …,
如果é…置文件沒有按é å®šè¨­ç½®ï¼Œå°±æœƒå‡ºç¾å¥‡æ€ªçš„å•é¡Œã€‚如果您想以最少的工作é‡
- å°‡ç¾æœ‰é…ç½®å‡ç´šåˆ°æ–°ç‰ˆæœ¬ï¼Œè«‹ä½¿ç”¨ ``makeoldconfig`` ,它åªæœƒè©¢å•æ‚¨æ–°é…ç½®
+ å°‡ç¾æœ‰é…ç½®å‡ç´šåˆ°æ–°ç‰ˆæœ¬ï¼Œè«‹ä½¿ç”¨ ``make oldconfig`` ,它åªæœƒè©¢å•æ‚¨æ–°é…ç½®
é¸é …的答案。
- 其他é…置命令包括::
@@ -164,17 +164,17 @@ Linux內核5.x版本 <http://kernel.org/>
"make ${PLATFORM}_defconfig"
使用arch/$arch/configs/${PLATFORM}_defconfig中
的默èªé¸é …值創建一個./.config文件。
- 用「makehelpã€ä¾†ç²å–您體系架構中所有å¯ç”¨å¹³å°çš„列表。
+ 用“make helpâ€ä¾†ç²å–您體系架構中所有å¯ç”¨å¹³è‡ºçš„列表。
"make allyesconfig"
- 通éŽå„˜å¯èƒ½å°‡é¸é …值設置爲「yã€ï¼Œå‰µå»ºä¸€å€‹
+ 通éŽå„˜å¯èƒ½å°‡é¸é …值設置爲“yâ€ï¼Œå‰µå»ºä¸€å€‹
./.config文件。
"make allmodconfig"
- 通éŽå„˜å¯èƒ½å°‡é¸é …值設置爲「mã€ï¼Œå‰µå»ºä¸€å€‹
+ 通éŽå„˜å¯èƒ½å°‡é¸é …值設置爲“mâ€ï¼Œå‰µå»ºä¸€å€‹
./.config文件。
- "make allnoconfig" 通éŽå„˜å¯èƒ½å°‡é¸é …值設置爲「nã€ï¼Œå‰µå»ºä¸€å€‹
+ "make allnoconfig" 通éŽå„˜å¯èƒ½å°‡é¸é …值設置爲“nâ€ï¼Œå‰µå»ºä¸€å€‹
./.config文件。
"make randconfig" 通éŽéš¨æ©Ÿè¨­ç½®é¸é …值來創建./.config文件。
@@ -182,7 +182,7 @@ Linux內核5.x版本 <http://kernel.org/>
"make localmodconfig" 基於當å‰é…置和加載的模塊(lsmod)創建é…置。ç¦ç”¨
已加載的模塊ä¸éœ€è¦çš„任何模塊é¸é …。
- è¦çˆ²å¦ä¸€å°è¨ˆç®—機創建localmodconfig,請將該計算機
+ è¦çˆ²å¦ä¸€è‡ºè¨ˆç®—機創建localmodconfig,請將該計算機
çš„lsmod存儲到一個文件中,並將其作爲lsmodåƒæ•¸å‚³å…¥ã€‚
此外,通éŽåœ¨åƒæ•¸LMC_KEEP中指定模塊的路徑,å¯ä»¥å°‡
@@ -200,9 +200,10 @@ Linux內核5.x版本 <http://kernel.org/>
"make localyesconfig" 與localmodconfig類似,åªæ˜¯å®ƒæœƒå°‡æ‰€æœ‰æ¨¡å¡Šé¸é …轉æ›
爲內置(=y)。你å¯ä»¥åŒæ™‚通éŽLMC_KEEPä¿ç•™æ¨¡å¡Šã€‚
- "make kvmconfig" 爲kvm客體內核支æŒå•“用其他é¸é …。
+ "make kvm_guest.config"
+ 爲kvm客戶機內核支æŒå•“用其他é¸é …。
- "make xenconfig" 爲xen dom0客體內核支æŒå•“用其他é¸é …。
+ "make xen.config" 爲xen dom0客戶機內核支æŒå•“用其他é¸é …。
"make tinyconfig" é…置儘å¯èƒ½å°çš„內核。
@@ -218,10 +219,10 @@ Linux內核5.x版本 <http://kernel.org/>
這種情æ³ä¸‹ï¼Œæ•¸å­¸ä»¿çœŸæ°¸é ä¸æœƒè¢«ä½¿ç”¨ã€‚內核會ç¨å¾®å¤§ä¸€é»žï¼Œä½†ä¸ç®¡
是å¦æœ‰æ•¸å­¸å”處ç†å™¨ï¼Œéƒ½å¯ä»¥åœ¨ä¸åŒçš„機器上工作。
- - 「kernel hackingã€é…置細節通常會導致更大或更慢的內核(或兩者
+ - “kernel hackingâ€é…置細節通常會導致更大或更慢的內核(或兩者
兼而有之),甚至å¯ä»¥é€šéŽé…置一些例程來主動嘗試破壞壞代碼以發ç¾
內核å•é¡Œï¼Œå¾žè€Œé™ä½Žå…§æ ¸çš„穩定性(kmalloc())。因此,您å¯èƒ½æ‡‰è©²
- 用於研究「開發ã€ã€ã€Œå¯¦é©—ã€æˆ–「調試ã€ç‰¹æ€§ç›¸é—œå•é¡Œã€‚
+ 用於研究“開發â€ã€â€œå¯¦é©—â€æˆ–“調試â€ç‰¹æ€§ç›¸é—œå•é¡Œã€‚
編譯內核
---------
@@ -229,10 +230,8 @@ Linux內核5.x版本 <http://kernel.org/>
- 確ä¿æ‚¨è‡³å°‘有gcc 5.1å¯ç”¨ã€‚
有關更多信æ¯ï¼Œè«‹åƒé–± :ref:`Documentation/process/changes.rst <changes>` 。
- 請注æ„,您ä»ç„¶å¯ä»¥ä½¿ç”¨æ­¤å…§æ ¸é‹è¡Œa.out用戶程åºã€‚
-
- 執行 ``make`` 來創建壓縮內核映åƒã€‚如果您安è£äº†lilo以é©é…內核makefile,
- 那麼也å¯ä»¥é€²è¡Œ ``makeinstall`` ,但是您å¯èƒ½éœ€è¦å…ˆæª¢æŸ¥ç‰¹å®šçš„lilo設置。
+ 那麼也å¯ä»¥é€²è¡Œ ``make install`` ,但是您å¯èƒ½éœ€è¦å…ˆæª¢æŸ¥ç‰¹å®šçš„lilo設置。
實際安è£å¿…須以root身份執行,但任何正常構建都ä¸éœ€è¦ã€‚
無須徒然使用root身份。
@@ -242,8 +241,8 @@ Linux內核5.x版本 <http://kernel.org/>
- 詳細的內核編譯/生æˆè¼¸å‡ºï¼š
通常,內核構建系統在相當安éœçš„模å¼ä¸‹é‹è¡Œï¼ˆä½†ä¸æ˜¯å®Œå…¨å®‰éœï¼‰ã€‚但是有時您或
- 其他內核開發人員需è¦çœ‹åˆ°ç·¨è­¯ã€é€£çµæˆ–其他命令的執行éŽç¨‹ã€‚爲此,å¯ä½¿ç”¨
- 「verbose(詳細)ã€æ§‹å»ºæ¨¡å¼ã€‚
+ 其他內核開發人員需è¦çœ‹åˆ°ç·¨è­¯ã€éˆæŽ¥æˆ–其他命令的執行éŽç¨‹ã€‚爲此,å¯ä½¿ç”¨
+ “verbose(詳細)â€æ§‹å»ºæ¨¡å¼ã€‚
å‘ ``make`` å‘½ä»¤å‚³éž ``V=1`` 來實ç¾ï¼Œä¾‹å¦‚::
make V=1 all
@@ -255,15 +254,15 @@ Linux內核5.x版本 <http://kernel.org/>
與工作內核版本號相åŒçš„新內核,請在進行 ``make modules_install`` 安è£
之å‰å‚™ä»½modules目錄。
- 或者,在編譯之å‰ï¼Œä½¿ç”¨å…§æ ¸é…ç½®é¸é …「LOCALVERSIONã€å‘常è¦å…§æ ¸ç‰ˆæœ¬é™„加
- 一個唯一的後綴。LOCALVERSIONå¯ä»¥åœ¨ã€ŒGeneral Setupã€èœå–®ä¸­è¨­ç½®ã€‚
+ 或者,在編譯之å‰ï¼Œä½¿ç”¨å…§æ ¸é…ç½®é¸é …“LOCALVERSIONâ€å‘常è¦å…§æ ¸ç‰ˆæœ¬é™„加
+ 一個唯一的後綴。LOCALVERSIONå¯ä»¥åœ¨â€œGeneral Setupâ€èœå–®ä¸­è¨­ç½®ã€‚
- 爲了引導新內核,您需è¦å°‡å…§æ ¸æ˜ åƒï¼ˆä¾‹å¦‚編譯後的
.../linux/arch/x86/boot/bzImage)複製到常è¦å¯å¼•å°Žå…§æ ¸çš„ä½ç½®ã€‚
- ä¸å†æ”¯æŒåœ¨æ²’有LILO等啓動è£è¼‰ç¨‹åºå¹«åŠ©çš„情æ³ä¸‹ç›´æŽ¥å¾žè»Ÿç›¤å¼•å°Žå…§æ ¸ã€‚
- 如果從硬碟引導Linux,很å¯èƒ½ä½¿ç”¨LILO,它使用/etc/lilo.conf文件中
+ 如果從硬盤引導Linux,很å¯èƒ½ä½¿ç”¨LILO,它使用/etc/lilo.conf文件中
指定的內核映åƒæ–‡ä»¶ã€‚內核映åƒæ–‡ä»¶é€šå¸¸æ˜¯/vmlinuzã€/boot/vmlinuzã€
/bzImage或/boot/bzImage。使用新內核å‰ï¼Œè«‹ä¿å­˜èˆŠæ˜ åƒçš„副本,並複製
新映åƒè¦†è“‹èˆŠæ˜ åƒã€‚然後您ã€å¿…é ˆé‡æ–°é‹è¡ŒLILO】來更新加載映射ï¼å¦å‰‡ï¼Œ
@@ -284,68 +283,13 @@ Linux內核5.x版本 <http://kernel.org/>
è‹¥é‡åˆ°å•é¡Œ
-----------
- - 如果您發ç¾äº†ä¸€äº›å¯èƒ½ç”±æ–¼å…§æ ¸ç¼ºé™·æ‰€å°Žè‡´çš„å•é¡Œï¼Œè«‹æª¢æŸ¥MAINTAINERS(維護者)
- 文件看看是å¦æœ‰äººèˆ‡ä»¤æ‚¨é‡åˆ°éº»ç…©çš„內核部分相關。如果無人在此列出,那麼第二
- 個最好的方案就是把它們發給我(torvalds@linux-foundation.org),也å¯èƒ½ç™¼é€
- 到任何其他相關的郵件列表或新èžçµ„。
-
- - 在所有的缺陷報告中,ã€è«‹ã€‘告訴我們您在說什麼內核,如何復ç¾å•é¡Œï¼Œä»¥åŠæ‚¨çš„
- 設置是什麼的(使用您的常識)。如果å•é¡Œæ˜¯æ–°çš„,請告訴我;如果å•é¡Œæ˜¯èˆŠçš„,
- 請嘗試告訴我您什麼時候首次注æ„到它。
-
- - 如果缺陷導致如下消æ¯::
-
- unable to handle kernel paging request at address C0000010
- Oops: 0002
- EIP: 0010:XXXXXXXX
- eax: xxxxxxxx ebx: xxxxxxxx ecx: xxxxxxxx edx: xxxxxxxx
- esi: xxxxxxxx edi: xxxxxxxx ebp: xxxxxxxx
- ds: xxxx es: xxxx fs: xxxx gs: xxxx
- Pid: xx, process nr: xx
- xx xx xx xx xx xx xx xx xx xx
-
- 或者類似的內核調試信æ¯é¡¯ç¤ºåœ¨å±å¹•ä¸Šæˆ–在系統日誌里,請ã€å¦‚實】複製它。
- å¯èƒ½å°ä½ ä¾†èªªè½‰å„²ï¼ˆdump)看起來ä¸å¯ç†è§£ï¼Œä½†å®ƒç¢ºå¯¦åŒ…å«å¯èƒ½æœ‰åŠ©æ–¼èª¿è©¦å•é¡Œçš„
- ä¿¡æ¯ã€‚轉儲上方的文本也很é‡è¦ï¼šå®ƒèªªæ˜Žäº†å…§æ ¸è½‰å„²ä»£ç¢¼çš„原因(在上é¢çš„示例中,
- 是由於內核指é‡éŒ¯èª¤ï¼‰ã€‚更多關於如何ç†è§£è½‰å„²çš„ä¿¡æ¯ï¼Œè«‹åƒè¦‹
- Documentation/admin-guide/bug-hunting.rst。
-
- - 如果使用 CONFIG_KALLSYMS 編譯內核,則å¯ä»¥æŒ‰åŽŸæ¨£ç™¼é€è½‰å„²ï¼Œå¦å‰‡å¿…須使用
- ``ksymoops`` 程åºä¾†ç†è§£è½‰å„²ï¼ˆä½†é€šå¸¸é¦–é¸ä½¿ç”¨CONFIG_KALLSYMS編譯)。
- 此實用程åºå¯å¾ž
- https://www.kernel.org/pub/linux/utils/kernel/ksymoops/ 下載。
- 或者,您å¯ä»¥æ‰‹å‹•åŸ·è¡Œè½‰å„²æŸ¥æ‰¾ï¼š
-
- - 在調試åƒä¸Šé¢é€™æ¨£çš„轉儲時,如果您å¯ä»¥æŸ¥æ‰¾EIP值的å«ç¾©ï¼Œé€™å°‡éžå¸¸æœ‰å¹«åŠ©ã€‚
- å六進ä½å€¼æœ¬èº«å°æˆ‘或其他任何人都沒有太大幫助:它會å–決於特定的內核設置。
- 您應該åšçš„是從EIPè¡Œç²å–å六進ä½å€¼ï¼ˆå¿½ç•¥ ``0010:`` ),然後在內核å字列表
- 中查找它,以查看哪個內核函數包å«æœ‰å•é¡Œçš„地å€ã€‚
-
- è¦æ‰¾åˆ°å…§æ ¸å‡½æ•¸å,您需è¦æ‰¾åˆ°èˆ‡é¡¯ç¤ºç—‡ç‹€çš„內核相關è¯çš„系統二進ä½æ–‡ä»¶ã€‚就是
- 文件「linux/vmlinuxã€ã€‚è¦æå–å字列表並將其與內核崩潰中的EIP進行匹é…,
- 請執行::
-
- nm vmlinux | sort | less
-
- 這將爲您æ供一個按å‡åºæŽ’åºçš„內核地å€åˆ—表,從中很容易找到包å«æœ‰å•é¡Œçš„地å€
- 的函數。請注æ„,內核調試消æ¯æ供的地å€ä¸ä¸€å®šèˆ‡å‡½æ•¸åœ°å€å®Œå…¨åŒ¹é…(事實上,
- 這是ä¸å¯èƒ½çš„),因此您ä¸èƒ½åªã€Œgrepã€åˆ—表:ä¸éŽåˆ—表將爲您æä¾›æ¯å€‹å…§æ ¸å‡½æ•¸
- 的起點,因此通éŽæŸ¥æ‰¾èµ·å§‹åœ°å€ä½Žæ–¼ä½ æ­£åœ¨æœç´¢çš„地å€ï¼Œä½†å¾Œä¸€å€‹å‡½æ•¸çš„高於的
- 函數,你會找到您想è¦çš„。實際上,在您的å•é¡Œå ±å‘Šä¸­åŠ å…¥ä¸€äº›ã€Œä¸Šä¸‹æ–‡ã€å¯èƒ½æ˜¯
- 一個好主æ„,給出相關的上下幾行。
-
- 如果您由於æŸäº›åŽŸå› ç„¡æ³•å®Œæˆä¸Šè¿°æ“作(如您使用é ç·¨è­¯çš„內核映åƒæˆ–類似的映åƒï¼‰ï¼Œ
- 請儘å¯èƒ½å¤šåœ°å‘Šè¨´æˆ‘您的相關設置信æ¯ï¼Œé€™æœƒæœ‰æ‰€å¹«åŠ©ã€‚有關詳細信æ¯è«‹é–±è®€
- 『Documentation/admin-guide/reporting-issues.rstã€ã€‚
-
- - 或者,您å¯ä»¥åœ¨æ­£åœ¨é‹è¡Œçš„內核上使用gdb(åªè®€çš„ï¼›å³ä¸èƒ½æ›´æ”¹å€¼æˆ–設置斷點)。
- 爲此,請首先使用-g編譯內核;é©ç•¶åœ°ç·¨è¼¯arch/x86/Makefile,然後執行 ``make
- clean`` 。您還需è¦å•“用CONFIG_PROC_FSï¼ˆé€šéŽ ``make config`` )。
-
- 使用新內核é‡æ–°å•“動後,執行 ``gdb vmlinux /proc/kcore`` 。ç¾åœ¨å¯ä»¥ä½¿ç”¨æ‰€æœ‰
- 普通的gdb命令。查找系統崩潰點的命令是 ``l *0xXXXXXXXX`` (將xxx替æ›çˆ²EIP
- 值)。
-
- 用gdb無法調試一個當å‰æœªé‹è¡Œçš„內核是由於gdb(錯誤地)忽略了編譯內核的起始
- å移é‡ã€‚
+如果您發ç¾äº†ä¸€äº›å¯èƒ½ç”±æ–¼å…§æ ¸ç¼ºé™·æ‰€å°Žè‡´çš„å•é¡Œï¼Œè«‹åƒé–±ï¼š
+Documentation/translations/zh_CN/admin-guide/reporting-issues.rst 。
+
+想è¦ç†è§£å…§æ ¸éŒ¯èª¤å ±å‘Šï¼Œè«‹åƒé–±ï¼š
+Documentation/translations/zh_CN/admin-guide/bug-hunting.rst 。
+
+更多用GDB調試內核的信æ¯ï¼Œè«‹åƒé–±ï¼š
+Documentation/translations/zh_CN/dev-tools/gdb-kernel-debugging.rst
+和 Documentation/dev-tools/kgdb.rst 。
diff --git a/Documentation/translations/zh_TW/admin-guide/bootconfig.rst b/Documentation/translations/zh_TW/admin-guide/bootconfig.rst
new file mode 100644
index 000000000000..abac5aa60f67
--- /dev/null
+++ b/Documentation/translations/zh_TW/admin-guide/bootconfig.rst
@@ -0,0 +1,294 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+.. include:: ../disclaimer-zh_TW.rst
+
+:Original: Documentation/admin-guide/bootconfig.rst
+
+:譯者: å³æƒ³æˆ Wu XiangCheng <bobwxc@email.cn>
+
+========
+引導é…ç½®
+========
+
+:作者: Masami Hiramatsu <mhiramat@kernel.org>
+
+概述
+====
+
+引導é…置擴展了ç¾æœ‰çš„內核命令行,以一種更有效率的方å¼åœ¨å¼•å°Žå…§æ ¸æ™‚進一步支æŒ
+éµå€¼æ•¸æ“šã€‚這å…許管ç†å“¡å‚³éžä¸€ä»½çµæ§‹åŒ–é—œéµå­—çš„é…置文件。
+
+é…置文件語法
+============
+
+引導é…置文件的語法採用éžå¸¸ç°¡å–®çš„éµå€¼çµæ§‹ã€‚æ¯å€‹é—œéµå­—由點連接的單詞組æˆï¼Œéµ
+和值由 ``=`` 連接。值以分號( ``;`` )或æ›è¡Œç¬¦ï¼ˆ ``\n`` )çµå°¾ã€‚數組值中æ¯
+個元素由逗號( ``,`` )分隔。::
+
+ KEY[.WORD[...]] = VALUE[, VALUE2[...]][;]
+
+與內核命令行語法ä¸åŒï¼Œé€—號和 ``=`` 周åœå…許有空格。
+
+é—œéµå­—åªå…許包å«å­—æ¯ã€æ•¸å­—ã€é€£å­—符( ``-`` )和下劃線( ``_`` )。值å¯åŒ…å«
+å¯æ‰“å°å­—符和空格,但分號( ``;`` )ã€æ›è¡Œç¬¦ï¼ˆ ``\n`` )ã€é€—號( ``,`` )ã€
+井號( ``#`` )和å³å¤§æ‹¬è™Ÿï¼ˆ ``}`` )等分隔符除外。
+
+如果你需è¦åœ¨å€¼ä¸­ä½¿ç”¨é€™äº›åˆ†éš”符,å¯ä»¥ç”¨é›™å¼•è™Ÿï¼ˆ ``"VALUE"`` )或單引號
+( ``'VALUE'`` )括起來。注æ„,引號無法轉義。
+
+éµçš„值å¯ä»¥çˆ²ç©ºæˆ–ä¸å­˜åœ¨ã€‚這些éµç”¨æ–¼æª¢æŸ¥è©²éµæ˜¯å¦å­˜åœ¨ï¼ˆé¡žä¼¼å¸ƒçˆ¾å€¼ï¼‰ã€‚
+
+éµå€¼èªžæ³•
+--------
+
+引導é…置文件語法å…許用戶通éŽå¤§æ‹¬è™Ÿåˆä½µéµå部分相åŒçš„é—œéµå­—。例如::
+
+ foo.bar.baz = value1
+ foo.bar.qux.quux = value2
+
+也å¯ä»¥å¯«æˆ::
+
+ foo.bar {
+ baz = value1
+ qux.quux = value2
+ }
+
+或者更緊湊一些,寫æˆ::
+
+ foo.bar { baz = value1; qux.quux = value2 }
+
+在這兩種樣å¼ä¸­ï¼Œå¼•å°Žè§£æžæ™‚相åŒçš„é—œéµå­—都會自動åˆä½µã€‚å› æ­¤å¯ä»¥è¿½åŠ é¡žä¼¼çš„樹或
+éµå€¼ã€‚
+
+相åŒé—œéµå­—的值
+--------------
+
+ç¦æ­¢å…©å€‹æˆ–多個值或數組共享åŒä¸€å€‹é—œéµå­—。例如::
+
+ foo = bar, baz
+ foo = qux # !錯誤! 我們ä¸å¯ä»¥é‡å®šç¾©ç›¸åŒçš„é—œéµå­—
+
+如果你想è¦æ›´æ–°å€¼ï¼Œå¿…須顯å¼ä½¿ç”¨è¦†è“‹æ“作符 ``:=`` 。例如::
+
+ foo = bar, baz
+ foo := qux
+
+這樣 ``foo`` é—œéµå­—的值就變æˆäº† ``qux`` 。這å°æ–¼é€šéŽæ·»åŠ ï¼ˆéƒ¨åˆ†ï¼‰è‡ªå®šç¾©å¼•å°Ž
+é…置來覆蓋默èªå€¼éžå¸¸æœ‰ç”¨ï¼Œå…於解æžé»˜èªå¼•å°Žé…置。
+
+如果你想å°ç¾æœ‰é—œéµå­—追加值作爲數組æˆå“¡ï¼Œå¯ä»¥ä½¿ç”¨ ``+=`` æ“作符。例如::
+
+ foo = bar, baz
+ foo += qux
+
+這樣, ``foo`` é—œéµå­—å°±åŒæ™‚æ“有了 ``bar`` , ``baz`` å’Œ ``qux`` 。
+
+此外,父關éµå­—下å¯åŒæ™‚存在值和å­é—œéµå­—。
+例如,下列é…置是å¯è¡Œçš„。::
+
+ foo = value1
+ foo.bar = value2
+ foo := value3 # 這會更新foo的值。
+
+注æ„,裸值ä¸èƒ½ç›´æŽ¥æ”¾é€²çµæ§‹åŒ–é—œéµå­—中,必須在大括號外定義它。例如::
+
+ foo {
+ bar = value1
+ bar {
+ baz = value2
+ qux = value3
+ }
+ }
+
+åŒæ™‚,關éµå­—下值節點的順åºæ˜¯å›ºå®šçš„。如果值和å­é—œéµå­—åŒæ™‚存在,值永é æ˜¯è©²é—œ
+éµå­—的第一個å­ç¯€é»žã€‚因此如果用戶先指定å­é—œéµå­—,如::
+
+ foo.bar = value1
+ foo = value2
+
+則在程åºï¼ˆå’Œ/proc/bootconfig)中,它會按如下顯示::
+
+ foo = value2
+ foo.bar = value1
+
+註釋
+----
+
+é…置語法接å—shell腳本風格的註釋。註釋以井號( ``#`` )開始,到æ›è¡Œç¬¦
+( ``\n`` )çµæŸã€‚
+
+::
+
+ # comment line
+ foo = value # value is set to foo.
+ bar = 1, # 1st element
+ 2, # 2nd element
+ 3 # 3rd element
+
+會被解æžçˆ²::
+
+ foo = value
+ bar = 1, 2, 3
+
+注æ„ä½ ä¸èƒ½æŠŠè¨»é‡‹æ”¾åœ¨å€¼å’Œåˆ†éš”符( ``,`` 或 ``;`` )之間。如下é…置語法是錯誤的::
+
+ key = 1 # comment
+ ,2
+
+
+/proc/bootconfig
+================
+
+/proc/bootconfig是引導é…置的用戶空間接å£ã€‚與/proc/cmdlineä¸åŒï¼Œæ­¤æ–‡ä»¶å…§å®¹ä»¥
+éµå€¼åˆ—表樣å¼é¡¯ç¤ºã€‚
+æ¯å€‹éµå€¼å°ä¸€è¡Œï¼Œæ¨£å¼å¦‚下::
+
+ KEY[.WORDS...] = "[VALUE]"[,"VALUE2"...]
+
+
+用引導é…置引導內核
+==================
+
+用引導é…置引導內核有兩種方法:將引導é…置附加到initrdé¡åƒæˆ–直接嵌入內核中。
+
+*initrd: initial RAM disk,åˆå§‹å…§å­˜ç£ç›¤*
+
+將引導é…置附加到initrd
+----------------------
+
+由於默èªæƒ…æ³ä¸‹å¼•å°Žé…置文件是用initrd加載的,因此它將被添加到initrd(initramfs)
+é¡åƒæ–‡ä»¶çš„末尾,其中包å«å¡«å……ã€å¤§å°ã€æ ¡é©—值和12字節幻數,如下所示::
+
+ [initrd][bootconfig][padding][size(le32)][checksum(le32)][#BOOTCONFIG\n]
+
+大å°å’Œæ ¡é©—值爲å°ç«¯åºå­˜æ”¾çš„32ä½ç„¡ç¬¦è™Ÿå€¼ã€‚
+
+當引導é…置被加到initrdé¡åƒæ™‚,整個文件大å°æœƒå°é½Šåˆ°4字節。空字符( ``\0`` )
+會填補å°é½Šç©ºéš™ã€‚å› æ­¤ ``size`` 就是引導é…置文件的長度+填充的字節。
+
+Linux內核在內存中解碼initrdé¡åƒçš„最後部分以ç²å–引導é…置數據。由於這種“æ¹è² å¼â€
+的方法,åªè¦å¼•å°ŽåŠ è¼‰å™¨å‚³éžäº†æ­£ç¢ºçš„initrd文件大å°ï¼Œå°±ç„¡éœ€æ›´æ”¹æˆ–更新引導加載器
+和內核é¡åƒæœ¬èº«ã€‚如果引導加載器æ„外傳éžäº†æ›´é•·çš„大å°ï¼Œå…§æ ¸å°‡ç„¡æ³•æ‰¾åˆ°å¼•å°Žé…置數
+據。
+
+Linux內核在tools/bootconfig下æ供了 ``bootconfig`` 命令來完æˆæ­¤æ“作,管ç†å“¡
+å¯ä»¥ç”¨å®ƒå¾žinitrdé¡åƒä¸­åˆªé™¤æˆ–追加é…置文件。你å¯ä»¥ç”¨ä»¥ä¸‹å‘½ä»¤ä¾†æ§‹å»ºå®ƒ::
+
+ # make -C tools/bootconfig
+
+è¦å‘initrdé¡åƒæ·»åŠ ä½ çš„引導é…置文件,請按如下命令æ“作(舊數據會自動移除)::
+
+ # tools/bootconfig/bootconfig -a your-config /boot/initrd.img-X.Y.Z
+
+è¦å¾žé¡åƒä¸­ç§»é™¤é…置,å¯ä»¥ä½¿ç”¨-dé¸é …::
+
+ # tools/bootconfig/bootconfig -d /boot/initrd.img-X.Y.Z
+
+然後在內核命令行上添加 ``bootconfig`` 告訴內核去initrd文件末尾尋找內核é…置。
+
+將引導é…置嵌入內核
+------------------
+
+如果你ä¸èƒ½ä½¿ç”¨initrd,也å¯ä»¥é€šéŽKconfigé¸é …將引導é…置文件嵌入內核中。在此情
+æ³ä¸‹ï¼Œä½ éœ€è¦ç”¨ä»¥ä¸‹é¸é …é‡æ–°ç·¨è­¯å…§æ ¸::
+
+ CONFIG_BOOT_CONFIG_EMBED=y
+ CONFIG_BOOT_CONFIG_EMBED_FILE="/引導é…ç½®/文件/çš„/路徑"
+
+``CONFIG_BOOT_CONFIG_EMBED_FILE`` 需è¦å¾žæºç¢¼æ¨¹æˆ–å°è±¡æ¨¹é–‹å§‹çš„引導é…置文件的
+絕å°/相å°è·¯å¾‘。內核會將其嵌入作爲默èªå¼•å°Žé…置。
+
+與將引導é…置附加到initrd一樣,你也需è¦åœ¨å…§æ ¸å‘½ä»¤è¡Œä¸Šæ·»åŠ  ``bootconfig`` 告訴
+內核去啓用內嵌的引導é…置。
+
+注æ„,å³ä½¿ä½ å·²ç¶“設置了此é¸é …,ä»å¯ç”¨é™„加到initrd的其他引導é…置覆蓋內嵌的引導
+é…置。
+
+通éŽå¼•å°Žé…置傳éžå…§æ ¸åƒæ•¸
+========================
+
+除了內核命令行,引導é…置也å¯ä»¥ç”¨æ–¼å‚³éžå…§æ ¸åƒæ•¸ã€‚所有 ``kernel`` é—œéµå­—下的éµ
+值å°éƒ½å°‡ç›´æŽ¥å‚³éžçµ¦å…§æ ¸å‘½ä»¤è¡Œã€‚此外, ``init`` 下的éµå€¼å°å°‡é€šéŽå‘½ä»¤è¡Œå‚³éžçµ¦
+init進程。åƒæ•¸æŒ‰ä»¥ä¸‹é †åºèˆ‡ç”¨æˆ¶çµ¦å®šçš„內核命令行字符串相連,因此命令行åƒæ•¸å¯ä»¥
+覆蓋引導é…ç½®åƒæ•¸ï¼ˆé€™å–決於å­ç³»çµ±å¦‚何處ç†åƒæ•¸ï¼Œä½†é€šå¸¸å‰é¢çš„åƒæ•¸å°‡è¢«å¾Œé¢çš„åƒæ•¸
+覆蓋)::
+
+ [bootconfig params][cmdline params] -- [bootconfig init params][cmdline init params]
+
+如果引導é…置文件給出的kernel/initåƒæ•¸æ˜¯::
+
+ kernel {
+ root = 01234567-89ab-cdef-0123-456789abcd
+ }
+ init {
+ splash
+ }
+
+這將被複制到內核命令行字符串中,如下所示::
+
+ root="01234567-89ab-cdef-0123-456789abcd" -- splash
+
+如果用戶給出的其他命令行是::
+
+ ro bootconfig -- quiet
+
+則最後的內核命令行如下::
+
+ root="01234567-89ab-cdef-0123-456789abcd" ro bootconfig -- splash quiet
+
+
+é…置文件的é™åˆ¶
+==============
+
+當å‰æœ€å¤§çš„é…置大å°æ˜¯32KB,關éµå­—總數(ä¸æ˜¯éµå€¼æ¢ç›®ï¼‰å¿…須少於1024個節點。
+注æ„:這ä¸æ˜¯æ¢ç›®æ•¸è€Œæ˜¯ç¯€é»žæ•¸ï¼Œæ¢ç›®å¿…須消耗超éŽ2個節點(一個關éµå­—和一個值)。
+所以從ç†è«–上講最多512個éµå€¼å°ã€‚如果關éµå­—å¹³å‡åŒ…å«3個單詞,則å¯æœ‰256個éµå€¼å°ã€‚
+在大多數情æ³ä¸‹ï¼Œé…置項的數é‡å°‡å°‘æ–¼100個æ¢ç›®ï¼Œå°æ–¼8KB,因此這應該足夠了。如果
+節點數超éŽ1024,解æžå™¨å°‡è¿”回錯誤,å³ä½¿æ–‡ä»¶å¤§å°å°æ–¼32KB。(請注æ„,此最大尺寸
+ä¸åŒ…括填充的空字符。)
+無論如何,因爲 ``bootconfig`` 命令在附加啓動é…置到initrd映åƒæ™‚會驗證它,用戶
+å¯ä»¥åœ¨å¼•å°Žä¹‹å‰æ³¨æ„到它。
+
+
+引導é…ç½®API
+===========
+
+用戶å¯ä»¥æŸ¥è©¢æˆ–éæ­·éµå€¼å°ï¼Œä¹Ÿå¯ä»¥æŸ¥æ‰¾ï¼ˆå‰ç¶´ï¼‰æ ¹é—œéµå­—節點,並在查找該節點下的
+éµå€¼ã€‚
+
+如果您有一個關éµå­—字符串,則å¯ä»¥ç›´æŽ¥ä½¿ç”¨ xbc_find_value() 查詢該éµçš„值。如果
+你想知é“引導é…ç½®è£æœ‰å“ªäº›é—œéµå­—,å¯ä»¥ä½¿ç”¨ xbc_for_each_key_value() 迭代éµå€¼å°ã€‚
+請注æ„,您需è¦ä½¿ç”¨ xbc_array_for_each_value() 訪å•æ•¸çµ„的值,例如::
+
+ vnode = NULL;
+ xbc_find_value("key.word", &vnode);
+ if (vnode && xbc_node_is_array(vnode))
+ xbc_array_for_each_value(vnode, value) {
+ printk("%s ", value);
+ }
+
+如果您想查找具有å‰ç¶´å­—符串的éµï¼Œå¯ä»¥ä½¿ç”¨ xbc_find_node() 通éŽå‰ç¶´å­—符串查找
+節點,然後用 xbc_node_for_each_key_value() 迭代å‰ç¶´ç¯€é»žä¸‹çš„éµã€‚
+
+但最典型的用法是ç²å–å‰ç¶´ä¸‹çš„命å值或å‰ç¶´ä¸‹çš„命å數組,例如::
+
+ root = xbc_find_node("key.prefix");
+ value = xbc_node_find_value(root, "option", &vnode);
+ ...
+ xbc_node_for_each_array_value(root, "array-option", value, anode) {
+ ...
+ }
+
+這將訪å•å€¼â€œkey.prefix.optionâ€çš„值和“key.prefix.array-optionâ€çš„數組。
+
+鎖是ä¸éœ€è¦çš„,因爲在åˆå§‹åŒ–之後é…ç½®åªè®€ã€‚如果需è¦ä¿®æ”¹ï¼Œå¿…須複製所有數據和關éµå­—。
+
+
+函數與çµæ§‹é«”
+============
+
+相關定義的kernel-docåƒè¦‹ï¼š
+
+ - include/linux/bootconfig.h
+ - lib/bootconfig.c
+
diff --git a/Documentation/translations/zh_TW/admin-guide/bug-bisect.rst b/Documentation/translations/zh_TW/admin-guide/bug-bisect.rst
index b448dbf5ac87..3f10a9f8f223 100644
--- a/Documentation/translations/zh_TW/admin-guide/bug-bisect.rst
+++ b/Documentation/translations/zh_TW/admin-guide/bug-bisect.rst
@@ -17,14 +17,14 @@
引言
=====
-始終嘗試由來自kernel.org的原始碼構建的最新內核。如果您沒有信心這樣åšï¼Œè«‹å°‡
+始終嘗試由來自kernel.orgçš„æºä»£ç¢¼æ§‹å»ºçš„最新內核。如果您沒有信心這樣åšï¼Œè«‹å°‡
錯誤報告給您的發行版供應商,而ä¸æ˜¯å…§æ ¸é–‹ç™¼äººå“¡ã€‚
找到缺陷(bug)並ä¸ç¸½æ˜¯é‚£éº¼å®¹æ˜“,ä¸éŽä»ç„¶å¾—去找。如果你找ä¸åˆ°å®ƒï¼Œä¸è¦æ”¾æ£„。
-儘å¯èƒ½å¤šçš„å‘相關維護人員報告您發ç¾çš„ä¿¡æ¯ã€‚è«‹åƒé–±MAINTAINERS文件以了解您所
+儘å¯èƒ½å¤šçš„å‘相關維護人員報告您發ç¾çš„ä¿¡æ¯ã€‚è«‹åƒé–±MAINTAINERS文件以瞭解您所
關注的å­ç³»çµ±çš„維護人員。
-在æ交錯誤報告之å‰ï¼Œè«‹é–±è®€ã€ŒDocumentation/admin-guide/reporting-issues.rstã€ã€‚
+在æ交錯誤報告之å‰ï¼Œè«‹é–±è®€â€œDocumentation/admin-guide/reporting-issues.rstâ€ã€‚
設備未出ç¾ï¼ˆDevices not appearing)
====================================
@@ -38,7 +38,7 @@
æ“作步驟:
-- 從git原始碼構建內核
+- 從gitæºä»£ç¢¼æ§‹å»ºå…§æ ¸
- 以此開始二分 [#f1]_::
$ git bisect start
@@ -76,7 +76,7 @@
如需進一步åƒè€ƒï¼Œè«‹é–±è®€ï¼š
- ``git-bisect`` 的手冊é 
-- `Fighting regressions with git bisect(用git bisect解決回歸)
+- `Fighting regressions with git bisect(用git bisect解決迴歸)
<https://www.kernel.org/pub/software/scm/git/docs/git-bisect-lk2009.html>`_
- `Fully automated bisecting with "git bisect run"(使用git bisect run
來全自動二分) <https://lwn.net/Articles/317154>`_
diff --git a/Documentation/translations/zh_TW/admin-guide/bug-hunting.rst b/Documentation/translations/zh_TW/admin-guide/bug-hunting.rst
index 9a3de3bff5e7..631fd2650929 100644
--- a/Documentation/translations/zh_TW/admin-guide/bug-hunting.rst
+++ b/Documentation/translations/zh_TW/admin-guide/bug-hunting.rst
@@ -48,8 +48,8 @@
[<c1549f43>] ? sysenter_past_esp+0x40/0x6a
---[ end trace 6ebc60ef3981792f ]---
-這樣的堆棧跟蹤æ供了足夠的信æ¯ä¾†è­˜åˆ¥å…§æ ¸åŽŸå§‹ç¢¼ä¸­ç™¼ç”ŸéŒ¯èª¤çš„那一行。根據å•é¡Œçš„
-åš´é‡æ€§ï¼Œå®ƒé‚„å¯èƒ½åŒ…å« **「Oopsã€** 一詞,比如::
+這樣的堆棧跟蹤æ供了足夠的信æ¯ä¾†è­˜åˆ¥å…§æ ¸æºä»£ç¢¼ä¸­ç™¼ç”ŸéŒ¯èª¤çš„那一行。根據å•é¡Œçš„
+åš´é‡æ€§ï¼Œå®ƒé‚„å¯èƒ½åŒ…å« **“Oopsâ€** 一詞,比如::
BUG: unable to handle kernel NULL pointer dereference at (null)
IP: [<c06969d4>] iret_exc+0x7d0/0xa59
@@ -58,17 +58,17 @@
...
儘管有 **Oops** 或其他類型的堆棧跟蹤,但通常需è¦æ‰¾åˆ°å‡ºå•é¡Œçš„行來識別和處ç†ç¼º
-陷。在本章中,我們將åƒè€ƒã€ŒOopsã€ä¾†äº†è§£éœ€è¦åˆ†æžçš„å„種堆棧跟蹤。
+陷。在本章中,我們將åƒè€ƒâ€œOopsâ€ä¾†äº†è§£éœ€è¦åˆ†æžçš„å„種堆棧跟蹤。
如果內核是用 ``CONFIG_DEBUG_INFO`` 編譯的,那麼å¯ä»¥ä½¿ç”¨æ–‡ä»¶ï¼š
`scripts/decode_stacktrace.sh` 。
-連çµçš„模塊
+éˆæŽ¥çš„模塊
-----------
-å—到汙染或正在加載/å¸è¼‰çš„模塊用「(…)ã€æ¨™è¨˜ï¼Œæ±™æŸ“標誌在
-`Documentation/admin-guide/tainted-kernels.rst` 文件中進行了æ述,「正在被加
-載ã€ç”¨ã€Œ+ã€æ¨™è¨»ï¼Œã€Œæ­£åœ¨è¢«å¸è¼‰ã€ç”¨ã€Œ-ã€æ¨™è¨»ã€‚
+å—到污染或正在加載/å¸è¼‰çš„模塊用“(…)â€æ¨™è¨˜ï¼Œæ±¡æŸ“標誌在
+`Documentation/admin-guide/tainted-kernels.rst` 文件中進行了æ述,“正在被加
+載â€ç”¨â€œ+â€æ¨™è¨»ï¼Œâ€œæ­£åœ¨è¢«å¸è¼‰â€ç”¨â€œ-â€æ¨™è¨»ã€‚
Oops消æ¯åœ¨å“ªï¼Ÿ
@@ -81,19 +81,19 @@ syslog文件,通常是 ``/var/log/messages`` (å–決於 ``/etc/syslog.conf``
有時 ``klogd`` 會掛掉,這種情æ³ä¸‹æ‚¨å¯ä»¥é‹è¡Œ ``dmesg > file`` 從內核緩è¡å€
讀å–數據並ä¿å­˜å®ƒã€‚或者您å¯ä»¥ ``cat /proc/kmsg > file`` ,但是您必須é©æ™‚
-中斷以åœæ­¢å‚³è¼¸ï¼Œå› çˆ² ``kmsg`` 是一個「永無止境的文件ã€ã€‚
+中斷以åœæ­¢å‚³è¼¸ï¼Œå› çˆ² ``kmsg`` 是一個“永無止境的文件â€ã€‚
-如果機器嚴é‡å´©æ½°ï¼Œç„¡æ³•è¼¸å…¥å‘½ä»¤æˆ–ç£ç¢Ÿä¸å¯ç”¨ï¼Œé‚£é‚„有三個é¸é …:
+如果機器嚴é‡å´©æ½°ï¼Œç„¡æ³•è¼¸å…¥å‘½ä»¤æˆ–ç£ç›¤ä¸å¯ç”¨ï¼Œé‚£é‚„有三個é¸é …:
(1) 手動複製å±å¹•ä¸Šçš„文本,並在機器é‡æ–°å•“動後輸入。很難å—,但這是çªç„¶å´©æ½°ä¸‹
- 唯一的é¸æ“‡ã€‚或者你å¯ä»¥ç”¨æ•¸ä½ç›¸æ©Ÿæ‹ä¸‹å±å¹•â€”—雖然ä¸é‚£éº¼å¥½ï¼Œä½†ç¸½æ¯”什麼都沒
- 有好。如果消æ¯æ»¾å‹•è¶…出控制å°é ‚部,使用更高解æžåº¦ï¼ˆä¾‹å¦‚ ``vga=791`` )
- 引導啓動將å…è¨±æ‚¨é–±è®€æ›´å¤šæ–‡æœ¬ã€‚ï¼ˆè­¦å‘Šï¼šé€™éœ€è¦ ``vesafb`` ,因此å°ã€Œæ—©æœŸã€
+ 唯一的é¸æ“‡ã€‚或者你å¯ä»¥ç”¨æ•¸ç¢¼ç›¸æ©Ÿæ‹ä¸‹å±å¹•â€”—雖然ä¸é‚£éº¼å¥½ï¼Œä½†ç¸½æ¯”什麼都沒
+ 有好。如果消æ¯æ»¾å‹•è¶…出控制檯頂部,使用更高分辨率(例如 ``vga=791`` )
+ 引導啓動將å…è¨±æ‚¨é–±è®€æ›´å¤šæ–‡æœ¬ã€‚ï¼ˆè­¦å‘Šï¼šé€™éœ€è¦ ``vesafb`` ,因此å°â€œæ—©æœŸâ€
的Oppses沒有幫助)
(2) 從串å£çµ‚端啓動(åƒè¦‹
:ref:`Documentation/admin-guide/serial-console.rst <serial_console>` ),
- 在å¦ä¸€å°æ©Ÿå™¨ä¸Šé‹è¡Œæ•¸æ“šæ©Ÿç„¶å¾Œç”¨ä½ å–œæ­¡çš„通信程åºæ•ç²è¼¸å‡ºã€‚
+ 在å¦ä¸€è‡ºæ©Ÿå™¨ä¸Šé‹è¡Œèª¿åˆ¶è§£èª¿å™¨ç„¶å¾Œç”¨ä½ å–œæ­¡çš„通信程åºæ•ç²è¼¸å‡ºã€‚
Minicomé‹è¡Œè‰¯å¥½ã€‚
(3) 使用Kdump(åƒé–± Documentation/admin-guide/kdump/kdump.rst ),使用
@@ -103,7 +103,7 @@ syslog文件,通常是 ``/var/log/messages`` (å–決於 ``/etc/syslog.conf``
找到缺陷ä½ç½®
-------------
-如果你能指出缺陷在內核原始碼中的ä½ç½®ï¼Œå‰‡å ±å‘Šç¼ºé™·çš„效果會éžå¸¸å¥½ã€‚這有兩種方法。
+如果你能指出缺陷在內核æºä»£ç¢¼ä¸­çš„ä½ç½®ï¼Œå‰‡å ±å‘Šç¼ºé™·çš„效果會éžå¸¸å¥½ã€‚這有兩種方法。
通常來說使用 ``gdb`` 會比較容易,ä¸éŽå…§æ ¸éœ€è¦ç”¨èª¿è©¦ä¿¡æ¯ä¾†é ç·¨è­¯ã€‚
gdb
@@ -187,7 +187,7 @@ GNU 調試器(GNU debugger, ``gdb`` )是從 ``vmlinux`` 文件中找出OOP
objdump
^^^^^^^^
-è¦èª¿è©¦å…§æ ¸ï¼Œè«‹ä½¿ç”¨objdump並從崩潰輸出中查找å六進ä½å移,以找到有效的代碼/匯
+è¦èª¿è©¦å…§æ ¸ï¼Œè«‹ä½¿ç”¨objdump並從崩潰輸出中查找å六進制å移,以找到有效的代碼/匯
編行。如果沒有調試符號,您將看到所示例程的彙編程åºä»£ç¢¼ï¼Œä½†æ˜¯å¦‚果內核有調試
符號,C代碼也將å¯è¦‹ï¼ˆèª¿è©¦ç¬¦è™Ÿå¯ä»¥åœ¨å…§æ ¸é…ç½®èœå–®çš„hacking項中啓用)。例如::
@@ -197,7 +197,7 @@ objdump
您需è¦è™•æ–¼å…§æ ¸æ¨¹çš„頂層以便此ç²å¾—您的C文件。
-如果您無法訪å•åŽŸå§‹ç¢¼ï¼Œä»ç„¶å¯ä»¥ä½¿ç”¨ä»¥ä¸‹æ–¹æ³•èª¿è©¦ä¸€äº›å´©æ½°è½‰å„²ï¼ˆå¦‚Dave Millerçš„
+如果您無法訪å•æºä»£ç¢¼ï¼Œä»ç„¶å¯ä»¥ä½¿ç”¨ä»¥ä¸‹æ–¹æ³•èª¿è©¦ä¸€äº›å´©æ½°è½‰å„²ï¼ˆå¦‚Dave Millerçš„
示例崩潰轉儲輸出所示)::
EIP is at +0x14/0x4c0
@@ -234,9 +234,9 @@ objdump
報告缺陷
---------
-一旦你通éŽå®šä½ç¼ºé™·æ‰¾åˆ°äº†å…¶ç™¼ç”Ÿçš„地方,你å¯ä»¥å˜—試自己修復它或者å‘上游報告它。
+一旦你通éŽå®šä½ç¼ºé™·æ‰¾åˆ°äº†å…¶ç™¼ç”Ÿçš„地方,你å¯ä»¥å˜—試自己修復它或者å‘上éŠå ±å‘Šå®ƒã€‚
-爲了å‘上游報告,您應該找出用於開發å—影響代碼的郵件列表。這å¯ä»¥ä½¿ç”¨ ``get_maintainer.pl`` 。
+爲了å‘上éŠå ±å‘Šï¼Œæ‚¨æ‡‰è©²æ‰¾å‡ºç”¨æ–¼é–‹ç™¼å—影響代碼的郵件列表。這å¯ä»¥ä½¿ç”¨ ``get_maintainer.pl`` 。
例如,您在gspcaçš„sonixj.c文件中發ç¾ä¸€å€‹ç¼ºé™·ï¼Œå‰‡å¯ä»¥é€šéŽä»¥ä¸‹æ–¹æ³•æ‰¾åˆ°å®ƒçš„維護者::
@@ -251,7 +251,7 @@ objdump
請注æ„它將指出:
-- 最後接觸原始碼的開發人員(如果這是在git樹中完æˆçš„)。在上é¢çš„例å­ä¸­æ˜¯Tejun
+- 最後接觸æºä»£ç¢¼çš„開發人員(如果這是在git樹中完æˆçš„)。在上é¢çš„例å­ä¸­æ˜¯Tejun
å’ŒBhaktipriya(在這個特定的案例中,沒有人真正åƒèˆ‡é€™å€‹æ–‡ä»¶çš„開發);
- 驅動維護人員(Hans Verkuil);
- å­ç³»çµ±ç¶­è­·äººå“¡ï¼ˆMauro Carvalho Chehab);
diff --git a/Documentation/translations/zh_TW/admin-guide/clearing-warn-once.rst b/Documentation/translations/zh_TW/admin-guide/clearing-warn-once.rst
index bd0c08aab8ea..6961006b4a2d 100644
--- a/Documentation/translations/zh_TW/admin-guide/clearing-warn-once.rst
+++ b/Documentation/translations/zh_TW/admin-guide/clearing-warn-once.rst
@@ -7,10 +7,10 @@
清除 WARN_ONCE
--------------
-WARN_ONCE / WARN_ON_ONCE / printk_once 僅僅列å°ä¸€æ¬¡æ¶ˆæ¯.
+WARN_ONCE / WARN_ON_ONCE / printk_once 僅僅打å°ä¸€æ¬¡æ¶ˆæ¯.
echo 1 > /sys/kernel/debug/clear_warn_once
-å¯ä»¥æ¸…除這種狀態並且å†æ¬¡å…許列å°ä¸€æ¬¡å‘Šè­¦ä¿¡æ¯ï¼Œé€™å°æ–¼é‹è¡Œæ¸¬è©¦é›†å¾Œé‡ç¾å•é¡Œ
+å¯ä»¥æ¸…除這種狀態並且å†æ¬¡å…許打å°ä¸€æ¬¡å‘Šè­¦ä¿¡æ¯ï¼Œé€™å°æ–¼é‹è¡Œæ¸¬è©¦é›†å¾Œé‡ç¾å•é¡Œ
很有用。
diff --git a/Documentation/translations/zh_TW/admin-guide/cpu-load.rst b/Documentation/translations/zh_TW/admin-guide/cpu-load.rst
index 9e04aeac1a5c..cc046f3b7ffa 100644
--- a/Documentation/translations/zh_TW/admin-guide/cpu-load.rst
+++ b/Documentation/translations/zh_TW/admin-guide/cpu-load.rst
@@ -20,13 +20,13 @@ Linux通éŽ``/proc/stat``å’Œ``/proc/uptime``導出å„種信æ¯ï¼Œç”¨æˆ¶ç©ºé–“å·¥
...
-這裡系統èªçˆ²åœ¨é»˜èªæŽ¡æ¨£å‘¨æœŸå…§æœ‰10.01%的時間工作在用戶空間,2.92%的時
+這è£ç³»çµ±èªçˆ²åœ¨é»˜èªæŽ¡æ¨£é€±æœŸå…§æœ‰10.01%的時間工作在用戶空間,2.92%的時
間用在系統空間,總體上有81.63%的時間是空閒的。
大多數情æ³ä¸‹``/proc/stat``çš„ä¿¡æ¯å¹¾ä¹ŽçœŸå¯¦å映了系統信æ¯ï¼Œç„¶è€Œï¼Œç”±æ–¼å…§
核採集這些數據的方å¼/時間的特點,有時這些信æ¯æ ¹æœ¬ä¸å¯é ã€‚
-那麼這些信æ¯æ˜¯å¦‚何被æœé›†çš„呢?æ¯ç•¶æ™‚間中斷觸發時,內核查看此刻é‹è¡Œçš„
+那麼這些信æ¯æ˜¯å¦‚何被è’集的呢?æ¯ç•¶æ™‚間中斷觸發時,內核查看此刻é‹è¡Œçš„
進程類型,並增加與此類型/狀態進程å°æ‡‰çš„計數器的值。這種方法的å•é¡Œæ˜¯
在兩次時間中斷之間系統(進程)能夠在多種狀態之間切æ›å¤šæ¬¡ï¼Œè€Œè¨ˆæ•¸å™¨åª
增加最後一種狀態下的計數。
@@ -34,7 +34,7 @@ Linux通éŽ``/proc/stat``å’Œ``/proc/uptime``導出å„種信æ¯ï¼Œç”¨æˆ¶ç©ºé–“å·¥
舉例
---
-å‡è¨­ç³»çµ±æœ‰ä¸€å€‹é€²ç¨‹ä»¥å¦‚下方å¼å‘¨æœŸæ€§åœ°å ç”¨cpu::
+å‡è¨­ç³»çµ±æœ‰ä¸€å€‹é€²ç¨‹ä»¥å¦‚下方å¼é€±æœŸæ€§åœ°ä½”用cpu::
兩個時é˜ä¸­æ–·ä¹‹é–“的時間線
|-----------------------|
@@ -46,7 +46,7 @@ Linux通éŽ``/proc/stat``å’Œ``/proc/uptime``導出å„種信æ¯ï¼Œç”¨æˆ¶ç©ºé–“å·¥
在上é¢çš„情æ³ä¸‹ï¼Œæ ¹æ“š``/proc/stat``çš„ä¿¡æ¯ï¼ˆç”±æ–¼ç•¶ç³»çµ±è™•æ–¼ç©ºé–’狀態時,
時間中斷經常會發生)系統的負載將會是0
-大家能夠想åƒå…§æ ¸çš„這種行爲會發生在許多情æ³ä¸‹ï¼Œé€™å°‡å°Žè‡´``/proc/stat``
+大家能夠想象內核的這種行爲會發生在許多情æ³ä¸‹ï¼Œé€™å°‡å°Žè‡´``/proc/stat``
中存在相當å¤æ€ªçš„ä¿¡æ¯::
/* gcc -o hog smallhog.c */
diff --git a/Documentation/translations/zh_TW/admin-guide/cputopology.rst b/Documentation/translations/zh_TW/admin-guide/cputopology.rst
new file mode 100644
index 000000000000..5c46d1b3b065
--- /dev/null
+++ b/Documentation/translations/zh_TW/admin-guide/cputopology.rst
@@ -0,0 +1,97 @@
+.. SPDX-License-Identifier: GPL-2.0
+.. include:: ../disclaimer-zh_TW.rst
+
+:Original: Documentation/admin-guide/cputopology.rst
+
+:翻譯:
+
+ å”è—舟 Tang Yizhou <tangyeechou@gmail.com>
+
+==========================
+如何通éŽsysfså°‡CPU拓撲導出
+==========================
+
+CPU拓撲信æ¯é€šéŽsysfs導出。顯示的項(屬性)和æŸäº›æž¶æ§‹çš„/proc/cpuinfo輸出相似。它們ä½æ–¼
+/sys/devices/system/cpu/cpuX/topology/。請閱讀ABI文件:
+Documentation/ABI/stable/sysfs-devices-system-cpu。
+
+drivers/base/topology.c是體系çµæ§‹ä¸­æ€§çš„,它導出了這些屬性。然而,dieã€clusterã€bookã€
+draw這些層次çµæ§‹ç›¸é—œçš„文件僅在體系çµæ§‹æ供了下文æè¿°çš„å®çš„æ¢ä»¶ä¸‹è¢«å‰µå»ºã€‚
+
+å°æ–¼æ”¯æŒé€™å€‹ç‰¹æ€§çš„體系çµæ§‹ï¼Œå®ƒå¿…須在include/asm-XXX/topology.h中定義這些å®ä¸­çš„一部分::
+
+ #define topology_physical_package_id(cpu)
+ #define topology_die_id(cpu)
+ #define topology_cluster_id(cpu)
+ #define topology_core_id(cpu)
+ #define topology_book_id(cpu)
+ #define topology_drawer_id(cpu)
+ #define topology_sibling_cpumask(cpu)
+ #define topology_core_cpumask(cpu)
+ #define topology_cluster_cpumask(cpu)
+ #define topology_die_cpumask(cpu)
+ #define topology_book_cpumask(cpu)
+ #define topology_drawer_cpumask(cpu)
+
+``**_id macros`` 的類型是int。
+``**_cpumask macros`` 的類型是 ``(const) struct cpumask *`` 。後者和æ°ç•¶çš„
+``**_siblings`` sysfs屬性å°æ‡‰ï¼ˆé™¤äº†topology_sibling_cpumask(),它和thread_siblings
+å°æ‡‰ï¼‰ã€‚
+
+爲了在所有體系çµæ§‹ä¸Šä¿æŒä¸€è‡´ï¼Œinclude/linux/topology.hæ供了上述所有å®çš„默èªå®šç¾©ï¼Œä»¥é˜²
+它們未在include/asm-XXX/topology.h中定義:
+
+1) topology_physical_package_id: -1
+2) topology_die_id: -1
+3) topology_cluster_id: -1
+4) topology_core_id: 0
+5) topology_book_id: -1
+6) topology_drawer_id: -1
+7) topology_sibling_cpumask: 僅入åƒCPU
+8) topology_core_cpumask: 僅入åƒCPU
+9) topology_cluster_cpumask: 僅入åƒCPU
+10) topology_die_cpumask: 僅入åƒCPU
+11) topology_book_cpumask: 僅入åƒCPU
+12) topology_drawer_cpumask: 僅入åƒCPU
+
+此外,CPU拓撲信æ¯ç”±/sys/devices/system/cpuæ供,包å«ä¸‹è¿°æ–‡ä»¶ã€‚輸出å°æ‡‰çš„內部數據æºæ”¾åœ¨
+方括號("[]")中。
+
+ =========== ==================================================================
+ kernel_max: 內核é…ç½®å…許的最大CPU下標值。[NR_CPUS-1]
+
+ offline: 由於熱æ’拔移除或者超éŽå…§æ ¸å…許的CPU上é™ï¼ˆä¸Šæ–‡æè¿°çš„kernel_max)
+ 導致未上線的CPU。[~cpu_online_mask + cpus >= NR_CPUS]
+
+ online: 在線的CPU,å¯ä¾›èª¿åº¦ä½¿ç”¨ã€‚[cpu_online_mask]
+
+ possible: 已被分é…資æºçš„CPU,如果它們CPU實際存在,å¯ä»¥ä¸Šç·šã€‚
+ [cpu_possible_mask]
+
+ present: 被系統識別實際存在的CPU。[cpu_present_mask]
+ =========== ==================================================================
+
+上述輸出的格å¼å’Œcpulist_parse()兼容[åƒè¦‹ <linux/cpumask.h>]。下é¢çµ¦äº›ä¾‹å­ã€‚
+
+在本例中,系統中有64個CPU,但是CPU 32-63超éŽäº†kernel_max值,因爲NR_CPUSé…置項是32,
+å–值範åœè¢«é™åˆ¶çˆ²0..31。此外注æ„CPU2å’Œ4-31未上線,但是å¯ä»¥ä¸Šç·šï¼Œå› çˆ²å®ƒå€‘åŒæ™‚存在於
+presentå’Œpossible::
+
+ kernel_max: 31
+ offline: 2,4-31,32-63
+ online: 0-1,3
+ possible: 0-31
+ present: 0-31
+
+在本例中,NR_CPUSé…置項是128,但內核啓動時設置possible_cpus=144。系統中有4個CPU,
+CPU2被手動設置下線(也是唯一一個å¯ä»¥ä¸Šç·šçš„CPU)::
+
+ kernel_max: 127
+ offline: 2,4-127,128-143
+ online: 0-1,3
+ possible: 0-127
+ present: 0-3
+
+閱讀Documentation/core-api/cpu_hotplug.rstå¯çž­è§£é–‹æ©Ÿåƒæ•¸possible_cpus=NUM,åŒæ™‚é‚„
+å¯ä»¥çž­è§£å„種cpumaskçš„ä¿¡æ¯ã€‚
+
diff --git a/Documentation/translations/zh_TW/admin-guide/index.rst b/Documentation/translations/zh_TW/admin-guide/index.rst
index 2804d619201d..aba8939351e0 100644
--- a/Documentation/translations/zh_TW/admin-guide/index.rst
+++ b/Documentation/translations/zh_TW/admin-guide/index.rst
@@ -3,13 +3,14 @@
.. include:: ../disclaimer-zh_TW.rst
:Original: :doc:`../../../admin-guide/index`
-:Translator: 胡皓文 Hu Haowen <src.res.211@gmail.com>
+:Translator: Alex Shi <alex.shi@linux.alibaba.com>
+ 胡皓文 Hu Haowen <src.res.211@gmail.com>
Linux 內核用戶和管ç†å“¡æŒ‡å—
==========================
下é¢æ˜¯ä¸€çµ„隨時間添加到內核中的é¢å‘用戶的文檔的集åˆã€‚到目å‰çˆ²æ­¢ï¼Œé‚„沒有一個
-整體的順åºæˆ–組織 - 這些ææ–™ä¸æ˜¯ä¸€å€‹å–®ä¸€çš„,連貫的文件ï¼å¹¸é‹çš„話,情æ³æœƒéš¨è‘—
+整體的順åºæˆ–組織 - 這些ææ–™ä¸æ˜¯ä¸€å€‹å–®ä¸€çš„,連貫的文件ï¼å¹¸é‹çš„話,情æ³æœƒéš¨ç€
時間的推移而迅速改善。
這個åˆå§‹éƒ¨åˆ†åŒ…å«ç¸½é«”ä¿¡æ¯ï¼ŒåŒ…括æ述內核的README, 關於內核åƒæ•¸çš„文檔等。
@@ -21,15 +22,15 @@ Linux 內核用戶和管ç†å“¡æŒ‡å—
Todolist:
- kernel-parameters
- devices
- sysctl/index
+* kernel-parameters
+* devices
+* sysctl/index
本節介紹CPUæ¼æ´žåŠå…¶ç·©è§£æŽªæ–½ã€‚
Todolist:
- hw-vuln/index
+* hw-vuln/index
下é¢çš„一組文檔,é‡å°çš„是試圖跟蹤å•é¡Œå’Œbug的用戶。
@@ -37,6 +38,7 @@ Todolist:
:maxdepth: 1
reporting-issues
+ reporting-regressions
security-bugs
bug-hunting
bug-bisect
@@ -45,18 +47,17 @@ Todolist:
Todolist:
- reporting-bugs
- ramoops
- dynamic-debug-howto
- kdump/index
- perf/index
+* ramoops
+* dynamic-debug-howto
+* kdump/index
+* perf/index
-這是應用程å¼é–‹ç™¼äººå“¡æ„Ÿèˆˆè¶£çš„章節的開始。å¯ä»¥åœ¨é€™è£¡æ‰¾åˆ°æ¶µè“‹å…§æ ¸ABIå„個
+這是應用程åºé–‹ç™¼äººå“¡æ„Ÿèˆˆè¶£çš„章節的開始。å¯ä»¥åœ¨é€™è£æ‰¾åˆ°æ¶µè“‹å…§æ ¸ABIå„個
æ–¹é¢çš„文檔。
Todolist:
- sysfs-rules
+* sysfs-rules
本手冊的其餘部分包括å„種指å—,介紹如何根據您的喜好é…置內核的特定行爲。
@@ -64,67 +65,67 @@ Todolist:
.. toctree::
:maxdepth: 1
+ bootconfig
clearing-warn-once
cpu-load
+ cputopology
+ lockup-watchdogs
unicode
+ sysrq
+ mm/index
Todolist:
- acpi/index
- aoe/index
- auxdisplay/index
- bcache
- binderfs
- binfmt-misc
- blockdev/index
- bootconfig
- braille-console
- btmrvl
- cgroup-v1/index
- cgroup-v2
- cifs/index
- cputopology
- dell_rbu
- device-mapper/index
- edid
- efi-stub
- ext4
- nfs/index
- gpio/index
- highuid
- hw_random
- initrd
- iostats
- java
- jfs
- kernel-per-CPU-kthreads
- laptops/index
- lcd-panel-cgram
- ldm
- lockup-watchdogs
- LSM/index
- md
- media/index
- mm/index
- module-signing
- mono
- namespaces/index
- numastat
- parport
- perf-security
- pm/index
- pnp
- rapidio
- ras
- rtc
- serial-console
- svga
- sysrq
- thunderbolt
- ufs
- vga-softcursor
- video-output
- xfs
+* acpi/index
+* aoe/index
+* auxdisplay/index
+* bcache
+* binderfs
+* binfmt-misc
+* blockdev/index
+* braille-console
+* btmrvl
+* cgroup-v1/index
+* cgroup-v2
+* cifs/index
+* dell_rbu
+* device-mapper/index
+* edid
+* efi-stub
+* ext4
+* nfs/index
+* gpio/index
+* highuid
+* hw_random
+* initrd
+* iostats
+* java
+* jfs
+* kernel-per-CPU-kthreads
+* laptops/index
+* lcd-panel-cgram
+* ldm
+* LSM/index
+* md
+* media/index
+* module-signing
+* mono
+* namespaces/index
+* numastat
+* parport
+* perf-security
+* pm/index
+* pnp
+* rapidio
+* ras
+* rtc
+* serial-console
+* svga
+* thunderbolt
+* ufs
+* vga-softcursor
+* video-output
+* xfs
.. only:: subproject and html
diff --git a/Documentation/translations/zh_TW/admin-guide/init.rst b/Documentation/translations/zh_TW/admin-guide/init.rst
index db3fdf611080..be6e34f5f7fa 100644
--- a/Documentation/translations/zh_TW/admin-guide/init.rst
+++ b/Documentation/translations/zh_TW/admin-guide/init.rst
@@ -9,8 +9,8 @@
å³æƒ³æˆ Wu XiangCheng <bobwxc@email.cn>
胡皓文 Hu Haowen <src.res.211@gmail.com>
-解釋「No working init found.ã€å•“動掛起消æ¯
-==========================================
+解釋“No working init found.â€å•“動掛起消æ¯
+=========================================
:作者:
@@ -18,41 +18,41 @@
Cristian Souza <cristianmsbr at gmail period com>
-本文檔æ供了加載åˆå§‹åŒ–二進ä½ï¼ˆinit binary)失敗的一些高層級原因(大致按執行
+本文檔æ供了加載åˆå§‹åŒ–二進制(init binary)失敗的一些高層級原因(大致按執行
é †åºåˆ—出)。
-1) **無法掛載根文件系統Unable to mount root FS** :請設置「debugã€å…§æ ¸åƒæ•¸ï¼ˆåœ¨
+1) **無法掛載根文件系統Unable to mount root FS** :請設置“debugâ€å…§æ ¸åƒæ•¸ï¼ˆåœ¨
引導加載程åºbootloaderé…置文件或CONFIG_CMDLINE)以ç²å–更詳細的內核消æ¯ã€‚
-2) **åˆå§‹åŒ–二進ä½ä¸å­˜åœ¨æ–¼æ ¹æ–‡ä»¶ç³»çµ±ä¸Šinit binary doesn't exist on rootfs** :
+2) **åˆå§‹åŒ–二進制ä¸å­˜åœ¨æ–¼æ ¹æ–‡ä»¶ç³»çµ±ä¸Šinit binary doesn't exist on rootfs** :
確ä¿æ‚¨çš„根文件系統類型正確(並且 ``root=`` 內核åƒæ•¸æŒ‡å‘正確的分å€ï¼‰ï¼›æ“有
- 所需的驅動程åºï¼Œä¾‹å¦‚SCSI或USB等存儲硬體;文件系統(ext3ã€jffs2等)是內建的
+ 所需的驅動程åºï¼Œä¾‹å¦‚SCSI或USB等存儲硬件;文件系統(ext3ã€jffs2等)是內建的
(或者作爲模塊由initrdé åŠ è¼‰ï¼‰ã€‚
-3) **控制å°è¨­å‚™æ壞Broken console device** : ``console= setup`` 中å¯èƒ½å­˜åœ¨
- è¡çª --> åˆå§‹æŽ§åˆ¶å°ä¸å¯ç”¨ï¼ˆinitial console unavailable)。例如,由於串行
- IRQå•é¡Œï¼ˆå¦‚缺少基於中斷的é…置)導致的æŸäº›ä¸²è¡ŒæŽ§åˆ¶å°ä¸å¯é ã€‚嘗試使用ä¸åŒçš„
+3) **控制檯設備æ壞Broken console device** : ``console= setup`` 中å¯èƒ½å­˜åœ¨
+ è¡çª --> åˆå§‹æŽ§åˆ¶æª¯ä¸å¯ç”¨ï¼ˆinitial console unavailable)。例如,由於串行
+ IRQå•é¡Œï¼ˆå¦‚缺少基於中斷的é…置)導致的æŸäº›ä¸²è¡ŒæŽ§åˆ¶æª¯ä¸å¯é ã€‚嘗試使用ä¸åŒçš„
``console= device`` æˆ–åƒ ``netconsole=`` 。
-4) **二進ä½å­˜åœ¨ä½†ä¾è³´é …ä¸å¯ç”¨Binary exists but dependencies not available** :
- 例如åˆå§‹åŒ–二進ä½çš„必需庫ä¾è³´é …ï¼Œåƒ ``/lib/ld-linux.so.2`` 丟失或æ壞。使用
+4) **二進制存在但ä¾è³´é …ä¸å¯ç”¨Binary exists but dependencies not available** :
+ 例如åˆå§‹åŒ–二進制的必需庫ä¾è³´é …ï¼Œåƒ ``/lib/ld-linux.so.2`` 丟失或æ壞。使用
``readelf -d <INIT>|grep NEEDED`` 找出需è¦å“ªäº›åº«ã€‚
-5) **無法加載二進ä½Binary cannot be loaded** :請確ä¿äºŒé€²ä½çš„體系çµæ§‹èˆ‡æ‚¨çš„
- 硬體匹é…。例如i386ä¸åŒ¹é…x86_64,或者嘗試在ARM硬體上加載x86。如果您嘗試在
- 此處加載éžäºŒé€²ä½æ–‡ä»¶ï¼ˆshell腳本?),您應該確ä¿è…³æœ¬åœ¨å…¶å·¥ä½œé ­ï¼ˆshebang
+5) **無法加載二進制Binary cannot be loaded** :請確ä¿äºŒé€²åˆ¶çš„體系çµæ§‹èˆ‡æ‚¨çš„
+ 硬件匹é…。例如i386ä¸åŒ¹é…x86_64,或者嘗試在ARM硬件上加載x86。如果您嘗試在
+ 此處加載éžäºŒé€²åˆ¶æ–‡ä»¶ï¼ˆshell腳本?),您應該確ä¿è…³æœ¬åœ¨å…¶å·¥ä½œé ­ï¼ˆshebang
header)行 ``#!/...`` 中指定能正常工作的解釋器(包括其庫ä¾è³´é …)。在處ç†
- 腳本之å‰ï¼Œæœ€å¥½å…ˆæ¸¬è©¦ä¸€å€‹ç°¡å–®çš„éžè…³æœ¬äºŒé€²ä½æ–‡ä»¶ï¼Œæ¯”如 ``/bin/sh`` ,並確èª
+ 腳本之å‰ï¼Œæœ€å¥½å…ˆæ¸¬è©¦ä¸€å€‹ç°¡å–®çš„éžè…³æœ¬äºŒé€²åˆ¶æ–‡ä»¶ï¼Œæ¯”如 ``/bin/sh`` ,並確èª
它能æˆåŠŸåŸ·è¡Œã€‚è¦äº†è§£æ›´å¤šä¿¡æ¯ï¼Œè«‹å°‡ä»£ç¢¼æ·»åŠ åˆ° ``init/main.c`` 以顯示
kernel_execve()的返回值。
-當您發ç¾æ–°çš„失敗原因時,請擴展本解釋(畢竟加載åˆå§‹åŒ–二進ä½æ˜¯ä¸€å€‹ **é—œéµ** 且
+當您發ç¾æ–°çš„失敗原因時,請擴展本解釋(畢竟加載åˆå§‹åŒ–二進制是一個 **é—œéµ** 且
艱難的éŽæ¸¡æ­¥é©Ÿï¼Œéœ€è¦å„˜å¯èƒ½ç„¡ç—›åœ°é€²è¡Œï¼‰ï¼Œç„¶å¾Œå‘LKMLæ交一個補ä¸ã€‚
待辦事項:
- 通éŽä¸€å€‹å¯ä»¥å­˜å„² ``kernel_execve()`` çµæžœå€¼çš„çµæ§‹é«”數組實ç¾å„種
- ``run_init_process()`` 調用,並在失敗時通éŽç–Šä»£ **所有** çµæžœä¾†è¨˜éŒ„一切
+ ``run_init_process()`` 調用,並在失敗時通éŽè¿­ä»£ **所有** çµæžœä¾†è¨˜éŒ„一切
(éžå¸¸é‡è¦çš„å¯ç”¨æ€§ä¿®å¾©ï¼‰ã€‚
-- 試著使實ç¾æœ¬èº«åœ¨ä¸€èˆ¬æƒ…æ³ä¸‹æ›´æœ‰å¹«åŠ©ï¼Œä¾‹å¦‚在å—影響的地方æä¾›é¡å¤–的錯誤消æ¯ã€‚
+- 試ç€ä½¿å¯¦ç¾æœ¬èº«åœ¨ä¸€èˆ¬æƒ…æ³ä¸‹æ›´æœ‰å¹«åŠ©ï¼Œä¾‹å¦‚在å—影響的地方æä¾›é¡å¤–的錯誤消æ¯ã€‚
diff --git a/Documentation/translations/zh_TW/admin-guide/lockup-watchdogs.rst b/Documentation/translations/zh_TW/admin-guide/lockup-watchdogs.rst
new file mode 100644
index 000000000000..f65b0c96e8e3
--- /dev/null
+++ b/Documentation/translations/zh_TW/admin-guide/lockup-watchdogs.rst
@@ -0,0 +1,67 @@
+.. include:: ../disclaimer-zh_TW.rst
+
+:Original: Documentation/admin-guide/lockup-watchdogs.rst
+:Translator: Hailong Liu <liu.hailong6@zte.com.cn>
+
+.. _tw_lockup-watchdogs:
+
+
+=================================================
+Softlockup與hardlockup檢測機制(åˆå:nmi_watchdog)
+=================================================
+
+Linux中內核實ç¾äº†ä¸€ç¨®ç”¨ä»¥æª¢æ¸¬ç³»çµ±ç™¼ç”Ÿsoftlockupå’Œhardlockup的看門狗機制。
+
+Softlockup是一種會引發系統在內核態中一直循環超éŽ20秒(詳見下é¢â€œå¯¦ç¾â€å°ç¯€ï¼‰å°Žè‡´
+其他任務沒有機會得到é‹è¡Œçš„BUG。一旦檢測到'softlockup'發生,默èªæƒ…æ³ä¸‹ç³»çµ±æœƒæ‰“
+å°ç•¶å‰å †æ£§è·Ÿè¹¤ä¿¡æ¯ä¸¦é€²å…¥éŽ–定狀態。也å¯é…置使其在檢測到'softlockup'後進入panic
+狀態;通éŽsysctl命令設置“kernel.softlockup_panicâ€ã€ä½¿ç”¨å…§æ ¸å•“å‹•åƒæ•¸
+“softlockup_panicâ€ï¼ˆè©³è¦‹Documentation/admin-guide/kernel-parameters.rst)以åŠä½¿
+能內核編譯é¸é …“BOOTPARAM_SOFTLOCKUP_PANICâ€éƒ½å¯å¯¦ç¾é€™ç¨®é…置。
+
+而'hardlockup'是一種會引發系統在內核態一直循環超éŽ10秒é˜ï¼ˆè©³è¦‹"實ç¾"å°ç¯€ï¼‰å°Žè‡´å…¶
+他中斷沒有機會é‹è¡Œçš„缺陷。與'softlockup'情æ³é¡žä¼¼ï¼Œé™¤äº†ä½¿ç”¨sysctl命令設置
+'hardlockup_panic'ã€ä½¿èƒ½å…§æ ¸é¸é …“BOOTPARAM_HARDLOCKUP_PANICâ€ä»¥åŠä½¿ç”¨å…§æ ¸åƒæ•¸
+"nmi_watchdog"(詳見:â€Documentation/admin-guide/kernel-parameters.rst“)外,一旦檢
+測到'hardlockup'默èªæƒ…æ³ä¸‹ç³»çµ±æ‰“å°ç•¶å‰å †æ£§è·Ÿè¹¤ä¿¡æ¯ï¼Œç„¶å¾Œé€²å…¥éŽ–定狀態。
+
+這個panicé¸é …也å¯ä»¥èˆ‡panic_timeoutçµåˆä½¿ç”¨ï¼ˆé€™å€‹panic_timeout是通éŽç¨å…·è¿·æƒ‘性的
+sysctl命令"kernel.panic"來設置),使系統在panic指定時間後自動é‡å•“。
+
+實ç¾
+====
+
+Softlockupå’Œhardlockup分別建立在hrtimer(高精度定時器)å’Œperf兩個å­ç³»çµ±ä¸Šè€Œå¯¦ç¾ã€‚
+這也就æ„味ç€ç†è«–上任何架構åªè¦å¯¦ç¾äº†é€™å…©å€‹å­ç³»çµ±å°±æ”¯æŒé€™å…©ç¨®æª¢æ¸¬æ©Ÿåˆ¶ã€‚
+
+Hrtimer用於週期性產生中斷並喚醒watchdog線程;NMI perf事件則以â€watchdog_thresh“
+(編譯時默èªåˆå§‹åŒ–爲10秒,也å¯é€šéŽâ€watchdog_thresh“這個sysctl接å£ä¾†é€²è¡Œé…置修改)
+爲間隔週期產生以檢測 hardlockups。如果一個CPU在這個時間段內沒有檢測到hrtimer中
+斷髮生,'hardlockup 檢測器'(å³NMI perf事件處ç†å‡½æ•¸)將會視系統é…置而é¸æ“‡ç”¢ç”Ÿå…§æ ¸
+警告或者直接panic。
+
+而watchdog線程本質上是一個高優先級內核線程,æ¯èª¿åº¦ä¸€æ¬¡å°±å°æ™‚間戳進行一次更新。
+如果時間戳在2*watchdog_thresh(這個是softlockup的觸發門é™)這段時間都未更新,那麼
+"softlocup 檢測器"(內部hrtimer定時器回調函數)會將相關的調試信æ¯æ‰“å°åˆ°ç³»çµ±æ—¥èªŒä¸­ï¼Œ
+然後如果系統é…置了進入panicæµç¨‹å‰‡é€²å…¥panic,å¦å‰‡å…§æ ¸ç¹¼çºŒåŸ·è¡Œã€‚
+
+Hrtimer定時器的週期是2*watchdog_thresh/5,也就是說在hardlockup被觸發å‰hrtimer有
+2~3次機會產生時é˜ä¸­æ–·ã€‚
+
+如上所述,內核相當於爲系統管ç†å“¡æ供了一個å¯èª¿ç¯€hrtimer定時器和perf事件週期長度
+的調節旋鈕。如何通éŽé€™å€‹æ—‹éˆ•çˆ²ç‰¹å®šä½¿ç”¨å ´æ™¯é…置一個åˆç†çš„週期值è¦å°lockups檢測的
+響應速度和lockups檢測開銷這二者之間進行權衡。
+
+默èªæƒ…æ³ä¸‹æ‰€æœ‰åœ¨ç·šcpu上都會é‹è¡Œä¸€å€‹watchdog線程。ä¸éŽåœ¨å…§æ ¸é…置了â€NO_HZ_FULL“的
+情æ³ä¸‹watchdog線程默èªåªæœƒé‹è¡Œåœ¨ç®¡å®¶(housekeeping)cpu上,而â€nohz_full“啓動åƒæ•¸æŒ‡
+定的cpu上則ä¸æœƒæœ‰watchdog線程é‹è¡Œã€‚試想,如果我們å…許watchdog線程在â€nohz_full“指
+定的cpu上é‹è¡Œï¼Œé€™äº›cpu上必須得é‹è¡Œæ™‚é˜å®šæ™‚器來激發watchdog線程調度;這樣一來就會
+使â€nohz_full“ä¿è­·ç”¨æˆ¶ç¨‹åºå…å—內核干擾的功能失效。當然,副作用就是â€nohz_full“指定
+çš„cpuå³ä½¿åœ¨å…§æ ¸ç”¢ç”Ÿäº†lockupå•é¡Œæˆ‘們也無法檢測到。ä¸éŽï¼Œè‡³å°‘我們å¯ä»¥å…許watchdog
+線程在管家(non-tickless)核上繼續é‹è¡Œä»¥ä¾¿æˆ‘們能繼續正常的監測這些cpus上的lockups
+事件。
+
+ä¸è«–哪種情æ³éƒ½å¯ä»¥é€šéŽsysctl命令kernel.watchdog_cpumask來å°æ²’有é‹è¡Œwatchdog線程
+çš„cpu集åˆé€²è¡Œèª¿ç¯€ã€‚å°æ–¼nohz_full而言,如果nohz_full cpu上有異常掛ä½çš„情æ³ï¼Œé€šéŽ
+這種方å¼æ‰“開這些cpu上的watchdog進行調試å¯èƒ½æœƒæœ‰æ‰€ä½œç”¨ã€‚
+
diff --git a/Documentation/translations/zh_TW/admin-guide/mm/damon/index.rst b/Documentation/translations/zh_TW/admin-guide/mm/damon/index.rst
new file mode 100644
index 000000000000..a472eb3c708b
--- /dev/null
+++ b/Documentation/translations/zh_TW/admin-guide/mm/damon/index.rst
@@ -0,0 +1,30 @@
+.. SPDX-License-Identifier: GPL-2.0
+.. include:: ../../../disclaimer-zh_TW.rst
+
+:Original: Documentation/admin-guide/mm/damon/index.rst
+
+:翻譯:
+
+ å¸å»¶é¨° Yanteng Si <siyanteng@loongson.cn>
+
+:æ ¡è­¯:
+
+============
+監測數據訪å•
+============
+
+:doc:`DAMON </mm/damon/index>` å…許輕é‡ç´šçš„數據訪å•ç›£æ¸¬ã€‚使用DAMON,
+用戶å¯ä»¥åˆ†æžä»–們系統的內存訪å•æ¨¡å¼ï¼Œä¸¦å„ªåŒ–它們。
+
+.. toctree::
+ :maxdepth: 2
+
+ start
+ usage
+ reclaim
+ lru_sort
+
+
+
+
+
diff --git a/Documentation/translations/zh_TW/admin-guide/mm/damon/lru_sort.rst b/Documentation/translations/zh_TW/admin-guide/mm/damon/lru_sort.rst
new file mode 100644
index 000000000000..1ffc4b6b1d12
--- /dev/null
+++ b/Documentation/translations/zh_TW/admin-guide/mm/damon/lru_sort.rst
@@ -0,0 +1,264 @@
+.. SPDX-License-Identifier: GPL-2.0
+.. include:: ../../../disclaimer-zh_TW.rst
+
+:Original: Documentation/admin-guide/mm/damon/lru_sort.rst
+
+:翻譯:
+
+ 臧雷剛 Leigang Zang <zangleigang@hisilicon.com>
+
+:æ ¡è­¯:
+
+==================
+基於DAMONçš„LRU排åº
+==================
+
+基於DAMONçš„LRU排åºæ˜¯ä¸€å€‹éœæ…‹çš„內核模塊,旨在用於以主動的ã€è¼•é‡ç´šçš„數據訪å•æ¨¡åž‹
+爲基礎的é é¢å„ªå…ˆç´šè™•ç†çš„LRUéˆè¡¨ä¸Šï¼Œä»¥ä½¿å¾—LRU上的數據訪å•æ¨¡åž‹æ›´çˆ²å¯ä¿¡ã€‚
+
+哪è£éœ€è¦ä¸»å‹•çš„LRU排åº
+=====================
+
+在一個大型系統中,以é çˆ²ç²’度的訪å•æª¢æ¸¬æœƒæœ‰æ¯”較顯著的開銷,LRU通常ä¸æœƒä¸»å‹•åŽ»æŽ’åºï¼Œ
+而是å°éƒ¨åˆ†ç‰¹æ®Šäº‹ä»¶é€²è¡Œéƒ¨åˆ†çš„ã€éŸ¿æ‡‰å¼çš„排åºï¼Œä¾‹å¦‚:特殊的用戶請求,系統調用或者
+內存壓力。這導致,在有些場景下,LRUä¸èƒ½å¤ å®Œç¾Žçš„作爲一個å¯ä¿¡çš„數據訪å•æ¨¡åž‹ï¼Œæ¯”如
+在內存壓力下å°ç›®æ¨™å…§å­˜é€²è¡Œå›žæ”¶ã€‚
+
+因爲DAMON能夠儘å¯èƒ½æº–確的識別數據訪å•æ¨¡åž‹ï¼ŒåŒæ™‚åªå¼•èµ·ç”¨æˆ¶æŒ‡å®šç¯„åœçš„開銷,主動的
+執行DAMON_LRU_SORT讓LRU變得更爲å¯ä¿¡æ˜¯æœ‰ç›Šçš„,而且這隻需è¦è¼ƒå°‘å’Œå¯æŽ§çš„開銷。
+
+這是如何工作的
+==============
+
+DAMON_LRU_SORT使用DAMON尋找熱é ï¼ˆç¯„åœå…§çš„é é¢è¨ªå•é »çŽ‡é«˜æ–¼ç”¨æˆ¶æŒ‡å®šçš„閾值)和冷é 
+(範åœå…§çš„é é¢åœ¨è¶…éŽç”¨æˆ¶æŒ‡å®šçš„時間無訪å•ï¼‰ï¼Œä¸¦æ高熱é å’Œé™ä½Žå†·é åœ¨LRU中的優先級。
+爲了é¿å…在排åºéŽç¨‹ä½”用更多的CPU計算資æºï¼Œå¯ä»¥è¨­ç½®ä¸€å€‹CPU佔用時間的約æŸå€¼ã€‚在約
+æŸä¸‹ï¼Œåˆ†åˆ¥æå‡æˆ–者é™ä½Žæ›´å¤šçš„熱é å’Œå†·é ã€‚系統管ç†å“¡ä¹Ÿå¯ä»¥é…置三個內存水ä½ä»¥æŽ§åˆ¶
+在何種æ¢ä»¶ä¸‹è‡ªå‹•æ¿€æ´»æˆ–者åœæ­¢é€™ç¨®æ©Ÿåˆ¶ã€‚
+
+冷熱閾值和CPUç´„æŸçš„默èªå€¼æ˜¯æ¯”較ä¿å®ˆçš„。這æ„味ç€ï¼Œåœ¨é»˜èªåƒæ•¸ä¸‹ï¼Œæ¨¡å¡Šå¯ä»¥å»£æ³›ä¸”ç„¡
+負作用的使用在常見環境中,åŒæ™‚在åªæ¶ˆè€—一å°éƒ¨åˆ†CPU時間的情æ³ä¸‹ï¼Œçµ¦æœ‰å…§å­˜å£“力的系
+çµ±æ供一定水平的冷熱識別。
+
+接å£ï¼šæ¨¡å¡Šåƒæ•¸
+==============
+
+使用此特性,你首先需è¦ç¢ºèªä½ çš„系統中é‹è¡Œçš„內核在編譯時啓用了
+``CONFIG_DAMON_LRU_SORT=y``.
+
+爲了讓系統管ç†å“¡æ‰“開或者關閉並且調節指定的系統,DAMON_LRU_SORT設計了模塊åƒæ•¸ã€‚
+這æ„味ç€ï¼Œä½ å¯ä»¥æ·»åŠ  ``damon_lru_sort.<parameter>=<value>`` 到內核的啓動命令行
+åƒæ•¸ï¼Œæˆ–者在 ``/sys/modules/damon_lru_sort/parameters/<parameter>`` 寫入正確的
+值。
+
+下邊是æ¯å€‹åƒæ•¸çš„æè¿°
+
+enabled
+-------
+
+打開或者關閉DAMON_LRU_SORT.
+
+ä½ å¯ä»¥é€šéŽè¨­ç½®é€™å€‹åƒæ•¸çˆ² ``Y`` 來打開DAMON_LRU_SORT。設置爲 ``N`` 關閉
+DAMON_LRU_SORT。注æ„,在基於水ä½çš„激活的情æ³ä¸‹ï¼ŒDAMON_LRU_SORT有å¯èƒ½ä¸æœƒçœŸæ­£åŽ»
+監測或者åšLRU排åºã€‚å°é€™ç¨®æƒ…æ³ï¼Œåƒè€ƒä¸‹æ–¹é—œæ–¼æ°´ä½çš„æ述。
+
+commit_inputs
+-------------
+
+讓DAMON_LRU_SORTå†æ¬¡è®€å–輸入åƒæ•¸ï¼Œé™¤äº† ``enabled`` 。
+
+在DAMON_LRU_SORTé‹è¡Œæ™‚,新的輸入åƒæ•¸é»˜èªä¸æœƒè¢«æ‡‰ç”¨ã€‚一旦這個åƒæ•¸è¢«è¨­ç½®çˆ² ``Y``
+,DAMON_LRU_SORT會å†æ¬¡è®€å–除了 ``enabled`` 之外的åƒæ•¸ã€‚讀å–完æˆå¾Œï¼Œé€™å€‹åƒæ•¸æœƒè¢«
+設置爲 ``N`` 。如果在讀å–時發ç¾æœ‰ç„¡æ•ˆåƒæ•¸ï¼ŒDAMON_LRU_SORT會被關閉。
+
+hot_thres_access_freq
+---------------------
+
+熱點內存å€åŸŸçš„訪å•é »çŽ‡é–¾å€¼ï¼Œåƒåˆ†æ¯”。
+
+如果一個內存å€åŸŸçš„訪å•é »çŽ‡å¤§æ–¼ç­‰æ–¼é€™å€‹å€¼ï¼ŒDAMON_LRU_SORT把這個å€åŸŸçœ‹ä½œç†±å€ï¼Œä¸¦
+在LRU上把這個å€åŸŸæ¨™è¨˜çˆ²å·²è¨ªå•ï¼Œå› äº›åœ¨å…§å­˜å£“力下這部分內存ä¸æœƒè¢«å›žæ”¶ã€‚默èªçˆ²50%。
+
+cold_min_age
+------------
+
+用於識別冷內存å€åŸŸçš„時間閾值,單ä½æ˜¯å¾®ç§’。
+
+如果一個內存å€åŸŸåœ¨é€™å€‹æ™‚間內未被訪å•éŽï¼ŒDAMON_LRU_SORT把這個å€åŸŸçœ‹ä½œå†·å€ï¼Œä¸¦åœ¨
+LRU上把這個å€åŸŸæ¨™è¨˜çˆ²æœªè¨ªå•ï¼Œå› æ­¤åœ¨å…§å­˜å£“力下這些內存會首先被回收。默èªå€¼çˆ²120
+秒。
+
+quota_ms
+--------
+
+嘗試LRUéˆè¡¨æŽ’åºçš„時間é™åˆ¶ï¼Œå–®ä½æ˜¯æ¯«ç§’。
+
+DAMON_LRU_SORT在一個時間窗å£å…§ï¼ˆquota_reset_interval_ms)內最多嘗試這麼長時間來
+å°LRU進行排åºã€‚這個å¯ä»¥ç”¨ä¾†ä½œçˆ²CPU計算資æºçš„ç´„æŸã€‚如果值爲0,則表示無é™åˆ¶ã€‚
+
+默èª10毫秒。
+
+quota_reset_interval_ms
+-----------------------
+
+é…é¡è¨ˆæ™‚é‡ç½®é€±æœŸï¼Œæ¯«ç§’。
+
+é…é¡è¨ˆæ™‚é‡ç½®é€±æœŸã€‚å³ï¼Œåœ¨quota_reset_interval_ms毫秒內,DAMON_LRU_SORTå°LRU進行
+排åºä¸æœƒè¶…éŽquota_ms或者quota_sz。
+
+默èª1秒。
+
+wmarks_interval
+---------------
+
+æ°´ä½çš„檢查週期,單ä½æ˜¯å¾®ç§’。
+
+當DAMON_LRU_SORT使能但是由於水ä½è€Œä¸æ´»èºæ™‚檢查水ä½å‰æœ€å°çš„等待時間。默èªå€¼5秒。
+
+wmarks_high
+-----------
+
+空閒內存高水ä½ï¼Œåƒåˆ†æ¯”。
+
+如果空閒內存水ä½é«˜æ–¼é€™å€‹å€¼ï¼ŒDAMON_LRU_SORTåœæ­¢å·¥ä½œï¼Œä¸åšä»»ä½•äº‹ï¼Œé™¤äº†é€±æœŸæ€§çš„檢
+查水ä½ã€‚默èª200(20%)。
+
+wmarks_mid
+----------
+
+空閒內存中間水ä½ï¼Œåƒåˆ†æ¯”。
+
+如果空閒內存水ä½åœ¨é€™å€‹å€¼èˆ‡ä½Žæ°´ä½ä¹‹é–“,DAMON_LRU_SORT開始工作,開始檢測並å°LRUéˆ
+表進行排åºã€‚默èª150(15%)。
+
+wmarks_low
+----------
+
+空閒內存低水ä½ï¼Œåƒåˆ†æ¯”。
+
+如果空閒內存å°æ–¼é€™å€‹å€¼ï¼ŒDAMON_LRU_SORTä¸å†å·¥ä½œï¼Œä¸åšä»»ä½•äº‹ï¼Œé™¤äº†é€±æœŸæ€§çš„檢查水
+線。默èª50(5%)。
+
+sample_interval
+---------------
+
+監測的採樣週期,微秒。
+
+DAMONå°å†·å…§å­˜ç›£æ¸¬çš„採樣週期。更多細節請åƒè€ƒDAMON文檔 (:doc:`usage`) 。默èª5
+毫秒。
+
+aggr_interval
+-------------
+
+監測的收集週期,微秒。
+
+DAMONå°å†·å…§å­˜é€²è¡Œæ”¶é›†çš„時間週期。更多細節請åƒè€ƒDAMON文檔 (:doc:`usage`) 。默èª
+100毫秒。
+
+min_nr_regions
+--------------
+
+最å°ç›£æ¸¬å€åŸŸæ•¸é‡ã€‚
+
+å°å†·å…§å­˜å€åŸŸç›£æ¸¬çš„最å°æ•¸é‡ã€‚這個值å¯ä»¥ä½œçˆ²ç›£æ¸¬è³ªé‡çš„下é™ã€‚ä¸éŽï¼Œé€™å€‹å€¼è¨­ç½®çš„éŽ
+大會增加開銷。更多細節請åƒè€ƒDAMON文檔 (:doc:`usage`) 。默èªå€¼çˆ²10。
+
+max_nr_regions
+--------------
+
+最大監測å€åŸŸæ•¸é‡ã€‚
+
+å°å†·å…§å­˜å€åŸŸç›£æ¸¬çš„最大數é‡ã€‚這個值å¯ä»¥ä½œçˆ²ç›£æ¸¬è³ªé‡çš„上é™ã€‚然而,這個值設置的éŽ
+低會導致監測çµæžœè®Šå·®ã€‚更多細節請åƒè€ƒDAMON文檔 (:doc:`usage`) 。默èªå€¼çˆ²1000。
+
+monitor_region_start
+--------------------
+
+目標內存å€åŸŸçš„起始物ç†åœ°å€ã€‚
+
+DAMON_LRU_SORTè¦è™•ç†çš„目標內存å€åŸŸçš„起始物ç†åœ°å€ã€‚默èªï¼Œä½¿ç”¨ç³»çµ±æœ€å¤§å…§å­˜ã€‚
+
+monitor_region_end
+------------------
+
+目標內存å€åŸŸçš„çµæŸç‰©ç†åœ°å€ã€‚
+
+DAMON_LRU_SORTè¦è™•ç†çš„目標內存å€åŸŸçš„çµæŸç‰©ç†åœ°å€ã€‚默èªï¼Œä½¿ç”¨ç³»çµ±æœ€å¤§å…§å­˜ã€‚
+
+kdamond_pid
+-----------
+
+DAMON線程的PID。
+
+如果DAMON_LRU_SORT是使能的,這個表示任務線程的PID。其它情æ³çˆ²-1。
+
+nr_lru_sort_tried_hot_regions
+-----------------------------
+
+被嘗試進行LRU排åºçš„熱內存å€åŸŸçš„數é‡ã€‚
+
+bytes_lru_sort_tried_hot_regions
+--------------------------------
+
+被嘗試進行LRU排åºçš„熱內存å€åŸŸçš„大å°ï¼ˆå­—節)。
+
+nr_lru_sorted_hot_regions
+-------------------------
+
+æˆåŠŸé€²è¡ŒLRU排åºçš„熱內存å€åŸŸçš„數é‡ã€‚
+
+bytes_lru_sorted_hot_regions
+----------------------------
+
+æˆåŠŸé€²è¡ŒLRU排åºçš„熱內存å€åŸŸçš„大å°ï¼ˆå­—節)。
+
+nr_hot_quota_exceeds
+--------------------
+
+熱å€åŸŸæ™‚é–“ç´„æŸè¶…éŽé™åˆ¶çš„次數。
+
+nr_lru_sort_tried_cold_regions
+------------------------------
+
+被嘗試進行LRU排åºçš„冷內存å€åŸŸçš„數é‡ã€‚
+
+bytes_lru_sort_tried_cold_regions
+---------------------------------
+
+被嘗試進行LRU排åºçš„冷內存å€åŸŸçš„大å°ï¼ˆå­—節)。
+
+nr_lru_sorted_cold_regions
+--------------------------
+
+æˆåŠŸé€²è¡ŒLRU排åºçš„冷內存å€åŸŸçš„數é‡ã€‚
+
+bytes_lru_sorted_cold_regions
+-----------------------------
+
+æˆåŠŸé€²è¡ŒLRU排åºçš„冷內存å€åŸŸçš„大å°ï¼ˆå­—節)。
+
+nr_cold_quota_exceeds
+---------------------
+
+冷å€åŸŸæ™‚é–“ç´„æŸè¶…éŽé™åˆ¶çš„次數。
+
+Example
+=======
+
+如下是一個é‹è¡Œæ™‚的命令示例,使DAMON_LRU_SORT查找訪å•é »çŽ‡è¶…éŽ50%çš„å€åŸŸä¸¦å°å…¶é€²è¡Œ
+LRU的優先級的æå‡ï¼ŒåŒæ™‚é™ä½Žé‚£äº›è¶…éŽ120秒無人訪å•çš„內存å€åŸŸçš„優先級。優先級的處
+ç†è¢«é™åˆ¶åœ¨æœ€å¤š1%çš„CPU以é¿å…DAMON_LRU_SORT消費éŽå¤šCPU時間。在系統空閒內存超éŽ50%
+時DAMON_LRU_SORTåœæ­¢å·¥ä½œï¼Œä¸¦åœ¨ä½Žæ–¼40%時é‡æ–°é–‹å§‹å·¥ä½œã€‚如果DAMON_RECLAIM沒有å–å¾—
+進展且空閒內存低於20%,å†æ¬¡è®“DAMON_LRU_SORTåœæ­¢å·¥ä½œï¼Œä»¥æ­¤å›žé€€åˆ°ä»¥LRUéˆè¡¨çˆ²åŸºç¤Ž
+以é é¢çˆ²å–®ä½çš„內存回收上。 ::
+
+ # cd /sys/modules/damon_lru_sort/parameters
+ # echo 500 > hot_thres_access_freq
+ # echo 120000000 > cold_min_age
+ # echo 10 > quota_ms
+ # echo 1000 > quota_reset_interval_ms
+ # echo 500 > wmarks_high
+ # echo 400 > wmarks_mid
+ # echo 200 > wmarks_low
+ # echo Y > enabled
+
diff --git a/Documentation/translations/zh_TW/admin-guide/mm/damon/reclaim.rst b/Documentation/translations/zh_TW/admin-guide/mm/damon/reclaim.rst
new file mode 100644
index 000000000000..efed29c40e44
--- /dev/null
+++ b/Documentation/translations/zh_TW/admin-guide/mm/damon/reclaim.rst
@@ -0,0 +1,229 @@
+.. SPDX-License-Identifier: GPL-2.0
+.. include:: ../../../disclaimer-zh_TW.rst
+
+:Original: Documentation/admin-guide/mm/damon/reclaim.rst
+
+:翻譯:
+
+ å¸å»¶é¨° Yanteng Si <siyanteng@loongson.cn>
+
+:æ ¡è­¯:
+
+===============
+基於DAMON的回收
+===============
+
+基於DAMON的回收(DAMON_RECLAIM)是一個éœæ…‹çš„內核模塊,旨在用於輕度內存壓力下的主動和輕
+é‡ç´šçš„回收。它的目的ä¸æ˜¯å–代基於LRU列表的é é¢å›žæ”¶ï¼Œè€Œæ˜¯æœ‰é¸æ“‡åœ°ç”¨æ–¼ä¸åŒç¨‹åº¦çš„內存壓力和è¦
+求。
+
+哪些地方需è¦ä¸»å‹•å›žæ”¶ï¼Ÿ
+======================
+
+在一般的內存超é‡ä½¿ç”¨ï¼ˆover-committed systems,虛擬化相關術語)的系統上,主動回收冷é 
+有助於節çœå…§å­˜å’Œæ¸›å°‘延é²é«˜å³¯ï¼Œé€™äº›å»¶é²æ˜¯ç”±ç›´æŽ¥å›žæ”¶é€²ç¨‹æˆ–kswapdçš„CPU消耗引起的,åŒæ™‚åªç”¢
+生最å°çš„æ€§èƒ½ä¸‹é™ [1]_ [2]_ 。
+
+基於空閒é å ±å‘Š [3]_ 的內存éŽåº¦æ‰¿è«¾çš„虛擬化系統就是很好的例å­ã€‚在這樣的系統中,客戶機
+å‘主機報告他們的空閒內存,而主機則將報告的內存é‡æ–°åˆ†é…給其他客戶。因此,系統的內存得到了充
+分的利用。然而,客戶å¯èƒ½ä¸é‚£éº¼ç¯€çœå…§å­˜ï¼Œä¸»è¦æ˜¯å› çˆ²ä¸€äº›å…§æ ¸å­ç³»çµ±å’Œç”¨æˆ¶ç©ºé–“應用程åºè¢«è¨­è¨ˆçˆ²
+使用盡å¯èƒ½å¤šçš„內存。然後,客戶機å¯èƒ½åªå‘主機報告少é‡çš„內存是空閒的,導致系統的內存利用率下é™ã€‚
+在客戶中é‹è¡Œä¸»å‹•å›žæ”¶å¯ä»¥ç·©è§£é€™å€‹å•é¡Œã€‚
+
+它是如何工作的?
+================
+
+DAMON_RECLAIM找到在特定時間內沒有被訪å•çš„內存å€åŸŸä¸¦åˆ†é ã€‚爲了é¿å…它在分é æ“作中消耗éŽå¤š
+çš„CPU,å¯ä»¥é…置一個速度é™åˆ¶ã€‚在這個速度é™åˆ¶ä¸‹ï¼Œå®ƒé¦–先分é å‡ºé‚£äº›æ²’有被訪å•éŽçš„內存å€åŸŸã€‚ç³»
+統管ç†å“¡é‚„å¯ä»¥é…置在什麼情æ³ä¸‹é€™å€‹æ–¹æ¡ˆæ‡‰è©²è‡ªå‹•æ¿€æ´»å’Œåœç”¨ä¸‰å€‹å…§å­˜å£“力水ä½ã€‚
+
+接å£: 模塊åƒæ•¸
+==============
+
+è¦ä½¿ç”¨é€™å€‹åŠŸèƒ½ï¼Œä½ é¦–å…ˆè¦ç¢ºä¿ä½ çš„系統é‹è¡Œåœ¨ä¸€å€‹ä»¥ ``CONFIG_DAMON_RECLAIM=y`` 構建的內
+核上。
+
+爲了讓系統管ç†å“¡å•“用或ç¦ç”¨å®ƒï¼Œä½µçˆ²çµ¦å®šçš„系統進行調整,DAMON_RECLAIM利用了模塊åƒæ•¸ã€‚也就
+是說,你å¯ä»¥æŠŠ ``damon_reclaim.<parameter>=<value>`` 放在內核啓動命令行上,或者把
+é©ç•¶çš„值寫入 ``/sys/module/damon_reclaim/parameters/<parameter>`` 文件。
+
+下é¢æ˜¯æ¯å€‹åƒæ•¸çš„æ述。
+
+enabled
+-------
+
+啓用或ç¦ç”¨DAMON_RECLAIM。
+
+ä½ å¯ä»¥é€šéŽæŠŠé€™å€‹åƒæ•¸çš„值設置爲 ``Y`` 來啓用DAMON_RCLAIM,把它設置爲 ``N`` å¯ä»¥ç¦ç”¨
+DAMON_RECLAIM。注æ„,由於基於水ä½çš„激活æ¢ä»¶ï¼ŒDAMON_RECLAIMä¸èƒ½é€²è¡ŒçœŸæ­£çš„監測和回收。
+這一點請åƒè€ƒä¸‹é¢é—œæ–¼æ°´ä½åƒæ•¸çš„æ述。
+
+min_age
+-------
+
+識別冷內存å€åŸŸçš„時間閾值,單ä½æ˜¯å¾®ç§’。
+
+如果一個內存å€åŸŸåœ¨é€™å€‹æ™‚間或更長的時間內沒有被訪å•ï¼ŒDAMON_RECLAIM會將該å€åŸŸè­˜åˆ¥çˆ²å†·çš„,
+並回收它。
+
+默èªçˆ²120秒。
+
+quota_ms
+--------
+
+回收的時間é™åˆ¶ï¼Œä»¥æ¯«ç§’爲單ä½ã€‚
+
+DAMON_RECLAIM 試圖在一個時間窗å£ï¼ˆquota_reset_interval_ms)內åªä½¿ç”¨åˆ°é€™å€‹æ™‚間,以
+嘗試回收冷é ã€‚這å¯ä»¥ç”¨ä¾†é™åˆ¶DAMON_RECLAIMçš„CPU消耗。如果該值爲零,則該é™åˆ¶è¢«ç¦ç”¨ã€‚
+
+默èªçˆ²10ms。
+
+quota_sz
+--------
+
+回收的內存大å°é™åˆ¶ï¼Œå–®ä½çˆ²å­—節。
+
+DAMON_RECLAIM 收å–在一個時間窗å£ï¼ˆquota_reset_interval_ms)內試圖回收的內存é‡ï¼Œä¸¦
+使其ä¸è¶…éŽé€™å€‹é™åˆ¶ã€‚這å¯ä»¥ç”¨ä¾†é™åˆ¶CPUå’ŒIO的消耗。如果該值爲零,則é™åˆ¶è¢«ç¦ç”¨ã€‚
+
+默èªæƒ…æ³ä¸‹æ˜¯128 MiB。
+
+quota_reset_interval_ms
+-----------------------
+
+時間/大å°é…é¡æ”¶å–é‡ç½®é–“隔,單ä½çˆ²æ¯«ç§’。
+
+時間(quota_ms)和大å°ï¼ˆquota_sz)的é…é¡çš„目標é‡ç½®é–“隔。也就是說,DAMON_RECLAIM在
+嘗試回收‘ä¸â€™è¶…éŽquota_ms毫秒或quota_sz字節的內存。
+
+默èªçˆ²1秒。
+
+wmarks_interval
+---------------
+
+當DAMON_RECLAIM被啓用但由於其水ä½è¦å‰‡è€Œä¸æ´»èºæ™‚,在檢查水ä½ä¹‹å‰çš„最å°ç­‰å¾…時間。
+
+wmarks_high
+-----------
+
+高水ä½çš„å¯ç”¨å…§å­˜çŽ‡ï¼ˆæ¯åƒå­—節)。
+
+如果系統的å¯ç”¨å…§å­˜ï¼ˆä»¥æ¯åƒå­—節爲單ä½ï¼‰é«˜æ–¼é€™å€‹æ•¸å€¼ï¼ŒDAMON_RECLAIM就會變得ä¸æ´»èºï¼Œæ‰€ä»¥
+它什麼也ä¸åšï¼Œåªæ˜¯å®šæœŸæª¢æŸ¥æ°´ä½ã€‚
+
+wmarks_mid
+----------
+
+中間水ä½çš„å¯ç”¨å…§å­˜çŽ‡ï¼ˆæ¯åƒå­—節)。
+
+如果系統的空閒內存(以æ¯åƒå­—節爲單ä½ï¼‰åœ¨é€™å€‹å’Œä½Žæ°´ä½ç·šä¹‹é–“,DAMON_RECLAIM就會被激活,
+因此開始監測和回收。
+
+wmarks_low
+----------
+
+低水ä½çš„å¯ç”¨å…§å­˜çŽ‡ï¼ˆæ¯åƒå­—節)。
+
+如果系統的空閒內存(以æ¯åƒå­—節爲單ä½ï¼‰ä½Žæ–¼é€™å€‹æ•¸å€¼ï¼ŒDAMON_RECLAIM就會變得ä¸æ´»èºï¼Œæ‰€ä»¥
+它除了定期檢查水ä½å¤–什麼都ä¸åšã€‚在這種情æ³ä¸‹ï¼Œç³»çµ±æœƒé€€å›žåˆ°åŸºæ–¼LRU列表的é é¢ç²’度回收é‚輯。
+
+sample_interval
+---------------
+
+監測的採樣間隔,單ä½æ˜¯å¾®ç§’。
+
+DAMON用於監測冷內存的採樣間隔。更多細節請åƒè€ƒDAMON文檔 (:doc:`usage`) 。
+
+aggr_interval
+-------------
+
+監測的èšé›†é–“隔,單ä½æ˜¯å¾®ç§’。
+
+DAMONå°å†·å…§å­˜ç›£æ¸¬çš„èšé›†é–“隔。更多細節請åƒè€ƒDAMON文檔 (:doc:`usage`)。
+
+min_nr_regions
+--------------
+
+監測å€åŸŸçš„最å°æ•¸é‡ã€‚
+
+DAMON用於冷內存監測的最å°ç›£æ¸¬å€åŸŸæ•¸ã€‚這å¯ä»¥ç”¨ä¾†è¨­ç½®ç›£æ¸¬è³ªé‡çš„下é™ã€‚但是,設
+置的太高å¯èƒ½æœƒå°Žè‡´ç›£æ¸¬é–‹éŠ·çš„增加。更多細節請åƒè€ƒDAMON文檔 (:doc:`usage`) 。
+
+max_nr_regions
+--------------
+
+監測å€åŸŸçš„最大數é‡ã€‚
+
+DAMON用於冷內存監測的最大監測å€åŸŸæ•¸ã€‚這å¯ä»¥ç”¨ä¾†è¨­ç½®ç›£æ¸¬é–‹éŠ·çš„上é™å€¼ã€‚但是,
+設置得太低å¯èƒ½æœƒå°Žè‡´ç›£æ¸¬è³ªé‡ä¸å¥½ã€‚更多細節請åƒè€ƒDAMON文檔 (:doc:`usage`) 。
+
+monitor_region_start
+--------------------
+
+目標內存å€åŸŸçš„物ç†åœ°å€èµ·é»žã€‚
+
+DAMON_RECLAIMå°‡å°å…¶é€²è¡Œå·¥ä½œçš„內存å€åŸŸçš„起始物ç†åœ°å€ã€‚也就是說,DAMON_RECLAIM
+將在這個å€åŸŸä¸­æ‰¾åˆ°å†·çš„內存å€åŸŸä¸¦é€²è¡Œå›žæ”¶ã€‚默èªæƒ…æ³ä¸‹ï¼Œè©²å€åŸŸä½¿ç”¨æœ€å¤§ç³»çµ±å…§å­˜å€ã€‚
+
+monitor_region_end
+------------------
+
+目標內存å€åŸŸçš„çµæŸç‰©ç†åœ°å€ã€‚
+
+DAMON_RECLAIMå°‡å°å…¶é€²è¡Œå·¥ä½œçš„內存å€åŸŸçš„末端物ç†åœ°å€ã€‚也就是說,DAMON_RECLAIMå°‡
+在這個å€åŸŸå…§æ‰¾åˆ°å†·çš„內存å€åŸŸä¸¦é€²è¡Œå›žæ”¶ã€‚默èªæƒ…æ³ä¸‹ï¼Œè©²å€åŸŸä½¿ç”¨æœ€å¤§ç³»çµ±å…§å­˜å€ã€‚
+
+kdamond_pid
+-----------
+
+DAMON線程的PID。
+
+如果DAMON_RECLAIM被啓用,這將æˆçˆ²å·¥ä½œç·šç¨‹çš„PID。å¦å‰‡ï¼Œçˆ²-1。
+
+nr_reclaim_tried_regions
+------------------------
+
+試圖通éŽDAMON_RECLAIM回收的內存å€åŸŸçš„數é‡ã€‚
+
+bytes_reclaim_tried_regions
+---------------------------
+
+試圖通éŽDAMON_RECLAIM回收的內存å€åŸŸçš„總字節數。
+
+nr_reclaimed_regions
+--------------------
+
+通éŽDAMON_RECLAIMæˆåŠŸå›žæ”¶çš„內存å€åŸŸçš„數é‡ã€‚
+
+bytes_reclaimed_regions
+-----------------------
+
+通éŽDAMON_RECLAIMæˆåŠŸå›žæ”¶çš„內存å€åŸŸçš„總字節數。
+
+nr_quota_exceeds
+----------------
+
+超éŽæ™‚é–“/空間é…é¡é™åˆ¶çš„次數。
+
+例å­
+====
+
+下é¢çš„é‹è¡Œç¤ºä¾‹å‘½ä»¤ä½¿DAMON_RECLAIM找到30秒或更長時間沒有訪å•çš„內存å€åŸŸä¸¦â€œå›žæ”¶â€ï¼Ÿ
+爲了é¿å…DAMON_RECLAIM在分é æ“作中消耗éŽå¤šçš„CPU時間,回收被é™åˆ¶åœ¨æ¯ç§’1GiB以內。
+它還è¦æ±‚DAMON_RECLAIM在系統的å¯ç”¨å…§å­˜çŽ‡è¶…éŽ50%時ä¸åšä»»ä½•äº‹æƒ…,但如果它低於40%時
+就開始真正的工作。如果DAMON_RECLAIM沒有å–得進展,因此空閒內存率低於20%,它會è¦æ±‚
+DAMON_RECLAIMå†æ¬¡ä»€éº¼éƒ½ä¸åšï¼Œé€™æ¨£æˆ‘們就å¯ä»¥é€€å›žåˆ°åŸºæ–¼LRU列表的é é¢ç²’度回收了::
+
+ # cd /sys/module/damon_reclaim/parameters
+ # echo 30000000 > min_age
+ # echo $((1 * 1024 * 1024 * 1024)) > quota_sz
+ # echo 1000 > quota_reset_interval_ms
+ # echo 500 > wmarks_high
+ # echo 400 > wmarks_mid
+ # echo 200 > wmarks_low
+ # echo Y > enabled
+
+.. [1] https://research.google/pubs/pub48551/
+.. [2] https://lwn.net/Articles/787611/
+.. [3] https://www.kernel.org/doc/html/latest/mm/free_page_reporting.html
+
diff --git a/Documentation/translations/zh_TW/admin-guide/mm/damon/start.rst b/Documentation/translations/zh_TW/admin-guide/mm/damon/start.rst
new file mode 100644
index 000000000000..1822956be0e0
--- /dev/null
+++ b/Documentation/translations/zh_TW/admin-guide/mm/damon/start.rst
@@ -0,0 +1,125 @@
+.. SPDX-License-Identifier: GPL-2.0
+.. include:: ../../../disclaimer-zh_TW.rst
+
+:Original: Documentation/admin-guide/mm/damon/start.rst
+
+:翻譯:
+
+ å¸å»¶é¨° Yanteng Si <siyanteng@loongson.cn>
+
+:æ ¡è­¯:
+
+========
+入門指å—
+========
+
+本文通éŽæ¼”示DAMON的默èªç”¨æˆ¶ç©ºé–“工具,簡è¦åœ°ä»‹ç´¹çž­å¦‚何使用DAMON。請注æ„,爲了簡潔
+起見,本文檔åªæ述了它的部分功能。更多細節請åƒè€ƒè©²å·¥å…·çš„使用文檔。
+`doc <https://github.com/awslabs/damo/blob/next/USAGE.md>`_ .
+
+
+å‰ææ¢ä»¶
+========
+
+內核
+----
+
+首先,你è¦ç¢ºä¿ä½ ç•¶å‰ç³»çµ±ä¸­è·‘的內核構建時é¸å®šäº†é€™å€‹åŠŸèƒ½é¸é … ``CONFIG_DAMON_*=y``.
+
+
+用戶空間工具
+------------
+
+在演示中,我們將使用DAMON的默èªç”¨æˆ¶ç©ºé–“工具,稱爲DAMON Operator(DAMO)。它å¯ä»¥åœ¨
+https://github.com/awslabs/damo找到。下é¢çš„例å­å‡è¨­DAMO在你的$PATH上。當然,但
+這並ä¸æ˜¯å¼·åˆ¶æ€§çš„。
+
+因爲DAMO使用了DAMONçš„sysfs接å£ï¼ˆè©³æƒ…è«‹åƒè€ƒ:doc:`usage`),你應該確ä¿
+:doc:`sysfs </filesystems/sysfs>` 被掛載。
+
+記錄數據訪å•æ¨¡å¼
+================
+
+下é¢çš„命令記錄了一個程åºçš„內存訪å•æ¨¡å¼ï¼Œä¸¦å°‡ç›£æ¸¬çµæžœä¿å­˜åˆ°æ–‡ä»¶ä¸­ã€‚ ::
+
+ $ git clone https://github.com/sjp38/masim
+ $ cd masim; make; ./masim ./configs/zigzag.cfg &
+ $ sudo damo record -o damon.data $(pidof masim)
+
+命令的å‰å…©è¡Œä¸‹è¼‰äº†ä¸€å€‹äººå·¥å…§å­˜è¨ªå•ç”Ÿæˆå™¨ç¨‹åºä¸¦åœ¨å¾Œè‡ºé‹è¡Œã€‚生æˆå™¨å°‡é‡è¤‡åœ°é€ä¸€è¨ªå•å…©å€‹
+100 MiB大å°çš„內存å€åŸŸã€‚ä½ å¯ä»¥ç”¨ä½ çš„真實工作負載來代替它。最後一行è¦æ±‚ ``damo`` å°‡
+訪å•æ¨¡å¼è¨˜éŒ„在 ``damon.data`` 文件中。
+
+
+將記錄的模å¼å¯è¦–化
+==================
+
+ä½ å¯ä»¥åœ¨heatmap中直觀地看到這種模å¼ï¼Œé¡¯ç¤ºå“ªå€‹å…§å­˜å€åŸŸï¼ˆX軸)何時被訪å•ï¼ˆY軸)以åŠè¨ª
+å•çš„頻率(數字)。::
+
+ $ sudo damo report heats --heatmap stdout
+ 22222222222222222222222222222222222222211111111111111111111111111111111111111100
+ 44444444444444444444444444444444444444434444444444444444444444444444444444443200
+ 44444444444444444444444444444444444444433444444444444444444444444444444444444200
+ 33333333333333333333333333333333333333344555555555555555555555555555555555555200
+ 33333333333333333333333333333333333344444444444444444444444444444444444444444200
+ 22222222222222222222222222222222222223355555555555555555555555555555555555555200
+ 00000000000000000000000000000000000000288888888888888888888888888888888888888400
+ 00000000000000000000000000000000000000288888888888888888888888888888888888888400
+ 33333333333333333333333333333333333333355555555555555555555555555555555555555200
+ 88888888888888888888888888888888888888600000000000000000000000000000000000000000
+ 88888888888888888888888888888888888888600000000000000000000000000000000000000000
+ 33333333333333333333333333333333333333444444444444444444444444444444444444443200
+ 00000000000000000000000000000000000000288888888888888888888888888888888888888400
+ [...]
+ # access_frequency: 0 1 2 3 4 5 6 7 8 9
+ # x-axis: space (139728247021568-139728453431248: 196.848 MiB)
+ # y-axis: time (15256597248362-15326899978162: 1 m 10.303 s)
+ # resolution: 80x40 (2.461 MiB and 1.758 s for each character)
+
+你也å¯ä»¥ç›´è§€åœ°çœ‹åˆ°å·¥ä½œé›†çš„大å°åˆ†ä½ˆï¼ŒæŒ‰å¤§å°æŽ’åºã€‚::
+
+ $ sudo damo report wss --range 0 101 10
+ # <percentile> <wss>
+ # target_id 18446632103789443072
+ # avr: 107.708 MiB
+ 0 0 B | |
+ 10 95.328 MiB |**************************** |
+ 20 95.332 MiB |**************************** |
+ 30 95.340 MiB |**************************** |
+ 40 95.387 MiB |**************************** |
+ 50 95.387 MiB |**************************** |
+ 60 95.398 MiB |**************************** |
+ 70 95.398 MiB |**************************** |
+ 80 95.504 MiB |**************************** |
+ 90 190.703 MiB |********************************************************* |
+ 100 196.875 MiB |***********************************************************|
+
+在上述命令中使用 ``--sortby`` é¸é …,å¯ä»¥é¡¯ç¤ºå·¥ä½œé›†çš„大å°æ˜¯å¦‚何按時間順åºè®ŠåŒ–的。::
+
+ $ sudo damo report wss --range 0 101 10 --sortby time
+ # <percentile> <wss>
+ # target_id 18446632103789443072
+ # avr: 107.708 MiB
+ 0 3.051 MiB | |
+ 10 190.703 MiB |***********************************************************|
+ 20 95.336 MiB |***************************** |
+ 30 95.328 MiB |***************************** |
+ 40 95.387 MiB |***************************** |
+ 50 95.332 MiB |***************************** |
+ 60 95.320 MiB |***************************** |
+ 70 95.398 MiB |***************************** |
+ 80 95.398 MiB |***************************** |
+ 90 95.340 MiB |***************************** |
+ 100 95.398 MiB |***************************** |
+
+
+數據訪å•æ¨¡å¼æ„ŸçŸ¥çš„內存管ç†
+==========================
+
+以下三個命令使æ¯ä¸€å€‹å¤§å°>=4K的內存å€åŸŸåœ¨ä½ çš„工作負載中沒有被訪å•>=60秒,就會被æ›æŽ‰ã€‚ ::
+
+ $ echo "#min-size max-size min-acc max-acc min-age max-age action" > test_scheme
+ $ echo "4K max 0 0 60s max pageout" >> test_scheme
+ $ damo schemes -c test_scheme <pid of your workload>
+
diff --git a/Documentation/translations/zh_TW/admin-guide/mm/damon/usage.rst b/Documentation/translations/zh_TW/admin-guide/mm/damon/usage.rst
new file mode 100644
index 000000000000..6dee719a32ea
--- /dev/null
+++ b/Documentation/translations/zh_TW/admin-guide/mm/damon/usage.rst
@@ -0,0 +1,592 @@
+.. SPDX-License-Identifier: GPL-2.0
+.. include:: ../../../disclaimer-zh_TW.rst
+
+:Original: Documentation/admin-guide/mm/damon/usage.rst
+
+:翻譯:
+
+ å¸å»¶é¨° Yanteng Si <siyanteng@loongson.cn>
+
+:æ ¡è­¯:
+
+========
+詳細用法
+========
+
+DAMON 爲ä¸åŒçš„用戶æ供了下é¢é€™äº›æŽ¥å£ã€‚
+
+- *DAMON用戶空間工具。*
+ `這 <https://github.com/awslabs/damo>`_ 爲有這特權的人, 如系統管ç†å“¡ï¼Œå¸Œæœ›æœ‰ä¸€å€‹å‰›å¥½
+ å¯ä»¥å·¥ä½œçš„人性化界é¢ã€‚
+ 使用它,用戶å¯ä»¥ä»¥äººæ€§åŒ–çš„æ–¹å¼ä½¿ç”¨DAMON的主è¦åŠŸèƒ½ã€‚ä¸éŽï¼Œå®ƒå¯èƒ½ä¸æœƒçˆ²ç‰¹æ®Šæƒ…æ³é€²è¡Œé«˜åº¦èª¿æ•´ã€‚
+ 它åŒæ™‚支æŒè™›æ“¬å’Œç‰©ç†åœ°å€ç©ºé–“的監測。更多細節,請åƒè€ƒå®ƒçš„ `使用文檔
+ <https://github.com/awslabs/damo/blob/next/USAGE.md>`_。
+- *sysfs接å£ã€‚*
+ :ref:`這 <sysfs_interface>` 是爲那些希望更高級的使用DAMON的特權用戶空間程åºå“¡æº–備的。
+ 使用它,用戶å¯ä»¥é€šéŽè®€å–和寫入特殊的sysfs文件來使用DAMON的主è¦åŠŸèƒ½ã€‚因此,你å¯ä»¥ç·¨å¯«å’Œä½¿
+ 用你個性化的DAMON sysfs包è£ç¨‹åºï¼Œä»£æ›¿ä½ è®€/寫sysfs文件。 `DAMON用戶空間工具
+ <https://github.com/awslabs/damo>`_ 就是這種程åºçš„ä¸€å€‹ä¾‹å­ å®ƒåŒæ™‚支æŒè™›æ“¬å’Œç‰©ç†åœ°å€
+ 空間的監測。注æ„,這個界é¢åªæ供簡單的監測çµæžœ :ref:`統計 <damos_stats>`。å°æ–¼è©³ç´°çš„監測
+ çµæžœï¼ŒDAMONæ供了一個:ref:`跟蹤點 <tracepoint>`。
+- *debugfs interface.*
+ :ref:`這 <debugfs_interface>` 幾乎與:ref:`sysfs interface <sysfs_interface>` 接
+ å£ç›¸åŒã€‚這將在下一個LTS內核發佈後被移除,所以用戶應該轉移到
+ :ref:`sysfs interface <sysfs_interface>`。
+- *內核空間編程接å£ã€‚*
+ :doc:`這 </mm/damon/api>` 這是爲內核空間程åºå“¡æº–備的。使用它,用戶å¯ä»¥é€šéŽçˆ²ä½ ç·¨å¯«å…§
+ 核空間的DAMON應用程åºï¼Œæœ€éˆæ´»æœ‰æ•ˆåœ°åˆ©ç”¨DAMONçš„æ¯ä¸€å€‹åŠŸèƒ½ã€‚你甚至å¯ä»¥çˆ²å„種地å€ç©ºé–“擴展DAMON。
+ 詳細情æ³è«‹åƒè€ƒæŽ¥å£ :doc:`文件 </mm/damon/api>`。
+
+sysfs接å£
+=========
+DAMONçš„sysfs接å£æ˜¯åœ¨å®šç¾© ``CONFIG_DAMON_SYSFS`` 時建立的。它在其sysfs目錄下創建多
+個目錄和文件, ``<sysfs>/kernel/mm/damon/`` 。你å¯ä»¥é€šéŽå°è©²ç›®éŒ„下的文件進行寫入和
+讀å–來控制DAMON。
+
+å°æ–¼ä¸€å€‹ç°¡çŸ­çš„例å­ï¼Œç”¨æˆ¶å¯ä»¥ç›£æ¸¬ä¸€å€‹çµ¦å®šå·¥ä½œè² è¼‰çš„虛擬地å€ç©ºé–“,如下所示::
+
+ # cd /sys/kernel/mm/damon/admin/
+ # echo 1 > kdamonds/nr_kdamonds && echo 1 > kdamonds/0/contexts/nr_contexts
+ # echo vaddr > kdamonds/0/contexts/0/operations
+ # echo 1 > kdamonds/0/contexts/0/targets/nr_targets
+ # echo $(pidof <workload>) > kdamonds/0/contexts/0/targets/0/pid_target
+ # echo on > kdamonds/0/state
+
+文件層次çµæ§‹
+------------
+
+DAMON sysfs接å£çš„文件層次çµæ§‹å¦‚下圖所示。在下圖中,父å­é—œä¿‚用縮進表示,æ¯å€‹ç›®éŒ„有
+``/`` 後綴,æ¯å€‹ç›®éŒ„中的文件用逗號(",")分開。 ::
+
+ /sys/kernel/mm/damon/admin
+ │ kdamonds/nr_kdamonds
+ │ │ 0/state,pid
+ │ │ │ contexts/nr_contexts
+ │ │ │ │ 0/operations
+ │ │ │ │ │ monitoring_attrs/
+ │ │ │ │ │ │ intervals/sample_us,aggr_us,update_us
+ │ │ │ │ │ │ nr_regions/min,max
+ │ │ │ │ │ targets/nr_targets
+ │ │ │ │ │ │ 0/pid_target
+ │ │ │ │ │ │ │ regions/nr_regions
+ │ │ │ │ │ │ │ │ 0/start,end
+ │ │ │ │ │ │ │ │ ...
+ │ │ │ │ │ │ ...
+ │ │ │ │ │ schemes/nr_schemes
+ │ │ │ │ │ │ 0/action
+ │ │ │ │ │ │ │ access_pattern/
+ │ │ │ │ │ │ │ │ sz/min,max
+ │ │ │ │ │ │ │ │ nr_accesses/min,max
+ │ │ │ │ │ │ │ │ age/min,max
+ │ │ │ │ │ │ │ quotas/ms,bytes,reset_interval_ms
+ │ │ │ │ │ │ │ │ weights/sz_permil,nr_accesses_permil,age_permil
+ │ │ │ │ │ │ │ watermarks/metric,interval_us,high,mid,low
+ │ │ │ │ │ │ │ stats/nr_tried,sz_tried,nr_applied,sz_applied,qt_exceeds
+ │ │ │ │ │ │ │ tried_regions/
+ │ │ │ │ │ │ │ │ 0/start,end,nr_accesses,age
+ │ │ │ │ │ │ │ │ ...
+ │ │ │ │ │ │ ...
+ │ │ │ │ ...
+ │ │ ...
+
+æ ¹
+--
+
+DAMON sysfs接å£çš„根是 ``<sysfs>/kernel/mm/damon/`` ,它有一個å爲 ``admin`` çš„
+目錄。該目錄包å«ç‰¹æ¬Šç”¨æˆ¶ç©ºé–“程åºæŽ§åˆ¶DAMON的文件。æ“有根權é™çš„用戶空間工具或deamonså¯ä»¥
+使用這個目錄。
+
+kdamonds/
+---------
+
+與監測相關的信æ¯åŒ…括請求è¦æ ¼å’Œçµæžœè¢«ç¨±çˆ²DAMON上下文。DAMON用一個å«åškdamond的內核線程
+執行æ¯å€‹ä¸Šä¸‹æ–‡ï¼Œå¤šå€‹kdamondså¯ä»¥ä¸¦è¡Œé‹è¡Œã€‚
+
+在 ``admin`` 目錄下,有一個目錄,å³``kdamonds``,它有控制kdamonds的文件存在。在開始
+時,這個目錄åªæœ‰ä¸€å€‹æ–‡ä»¶ï¼Œ``nr_kdamonds``。å‘該文件寫入一個數字(``N``),就會創建å爲
+``0`` 到 ``N-1`` çš„å­ç›®éŒ„數é‡ã€‚æ¯å€‹ç›®éŒ„代表æ¯å€‹kdamond。
+
+kdamonds/<N>/
+-------------
+
+在æ¯å€‹kdamond目錄中,存在兩個文件(``state`` å’Œ ``pid`` )和一個目錄( ``contexts`` )。
+
+è®€å– ``state`` 時,如果kdamond當å‰æ­£åœ¨é‹è¡Œï¼Œå‰‡è¿”回 ``on`` ,如果沒有é‹è¡Œå‰‡è¿”回 ``off`` 。
+寫入 ``on`` 或 ``off`` 使kdamondè™•æ–¼ç‹€æ…‹ã€‚å‘ ``state`` 文件寫 ``update_schemes_stats`` ,
+æ›´æ–°kdamondçš„æ¯å€‹åŸºæ–¼DAMONçš„æ“作方案的統計文件的內容。關於統計信æ¯çš„細節,請åƒè€ƒ
+:ref:`stats section <sysfs_schemes_stats>`. 將 ``update_schemes_tried_regions`` 寫到
+``state`` 文件,爲kdamondçš„æ¯å€‹åŸºæ–¼DAMONçš„æ“作方案,更新基於DAMONçš„æ“作方案動作的嘗試å€åŸŸç›®éŒ„。
+å°‡`clear_schemes_tried_regions`寫入`state`文件,清除kdamondçš„æ¯å€‹åŸºæ–¼DAMONçš„æ“作方案的動作
+嘗試å€åŸŸç›®éŒ„。 關於基於DAMONçš„æ“作方案動作嘗試å€åŸŸç›®éŒ„的細節,請åƒè€ƒ:ref:tried_regions 部分
+<sysfs_schemes_tried_regions>`。
+
+如果狀態爲 ``on``ï¼Œè®€å– ``pid`` 顯示kdamond線程的pid。
+
+``contexts`` 目錄包å«æŽ§åˆ¶é€™å€‹kdamondè¦åŸ·è¡Œçš„監測上下文的文件。
+
+kdamonds/<N>/contexts/
+----------------------
+
+在開始時,這個目錄åªæœ‰ä¸€å€‹æ–‡ä»¶ï¼Œå³ ``nr_contexts`` 。å‘該文件寫入一個數字( ``N`` ),就會創
+建å爲``0`` 到 ``N-1`` çš„å­ç›®éŒ„數é‡ã€‚æ¯å€‹ç›®éŒ„代表æ¯å€‹ç›£æ¸¬èƒŒæ™¯ã€‚ç›®å‰ï¼Œæ¯å€‹kdamondåªæ”¯æŒ
+一個上下文,所以åªæœ‰ ``0`` 或 ``1`` å¯ä»¥è¢«å¯«å…¥æ–‡ä»¶ã€‚
+
+contexts/<N>/
+-------------
+
+在æ¯å€‹ä¸Šä¸‹æ–‡ç›®éŒ„中,存在一個文件(``operations``)和三個目錄(``monitoring_attrs``,
+``targets``, 和 ``schemes``)。
+
+DAMON支æŒå¤šç¨®é¡žåž‹çš„監測æ“作,包括å°è™›æ“¬åœ°å€ç©ºé–“和物ç†åœ°å€ç©ºé–“的監測。你å¯ä»¥é€šéŽå‘文件
+中寫入以下關éµè©žä¹‹ä¸€ï¼Œä¸¦å¾žæ–‡ä»¶ä¸­è®€å–,來設置和ç²å–DAMON將爲上下文使用何種類型的監測æ“作。
+
+ - vaddr: 監測特定進程的虛擬地å€ç©ºé–“
+ - paddr: 監視系統的物ç†åœ°å€ç©ºé–“
+
+contexts/<N>/monitoring_attrs/
+------------------------------
+
+用於指定監測屬性的文件,包括所需的監測質é‡å’Œæ•ˆçŽ‡ï¼Œéƒ½åœ¨ ``monitoring_attrs`` 目錄中。
+å…·é«”ä¾†èªªï¼Œé€™å€‹ç›®éŒ„ä¸‹æœ‰å…©å€‹ç›®éŒ„ï¼Œå³ ``intervals`` å’Œ ``nr_regions`` 。
+
+在 ``intervals`` 目錄下,存在DAMON的採樣間隔(``sample_us``)ã€èšé›†é–“éš”(``aggr_us``)
+和更新間隔(``update_us``)三個文件。你å¯ä»¥é€šéŽå¯«å…¥å’Œè®€å‡ºé€™äº›æ–‡ä»¶ä¾†è¨­ç½®å’Œç²å–微秒級的值。
+
+在 ``nr_regions`` 目錄下,有兩個文件分別用於DAMON監測å€åŸŸçš„下é™å’Œä¸Šé™ï¼ˆ``min`` å’Œ ``max`` ),
+這兩個文件控制ç€ç›£æ¸¬çš„開銷。你å¯ä»¥é€šéŽå‘這些文件的寫入和讀出來設置和ç²å–這些值。
+
+關於間隔和監測å€åŸŸç¯„åœçš„更多細節,請åƒè€ƒè¨­è¨ˆæ–‡ä»¶ (:doc:`/mm/damon/design`)。
+
+contexts/<N>/targets/
+---------------------
+
+在開始時,這個目錄åªæœ‰ä¸€å€‹æ–‡ä»¶ ``nr_targets`` 。å‘該文件寫入一個數字(``N``),就å¯ä»¥å‰µå»º
+å爲 ``0`` 到 ``N-1`` çš„å­ç›®éŒ„的數é‡ã€‚æ¯å€‹ç›®éŒ„代表æ¯å€‹ç›£æ¸¬ç›®æ¨™ã€‚
+
+targets/<N>/
+------------
+
+在æ¯å€‹ç›®æ¨™ç›®éŒ„中,存在一個文件(``pid_target``)和一個目錄(``regions``)。
+
+如果你把 ``vaddr`` 寫到 ``contexts/<N>/operations`` 中,æ¯å€‹ç›®æ¨™æ‡‰è©²æ˜¯ä¸€å€‹é€²ç¨‹ã€‚ä½ 
+å¯ä»¥é€šéŽå°‡é€²ç¨‹çš„pid寫到 ``pid_target`` 文件中來指定DAMON的進程。
+
+targets/<N>/regions
+-------------------
+
+當使用 ``vaddr`` 監測æ“作集時( ``vaddr`` 被寫入 ``contexts/<N>/operations`` æ–‡
+件),DAMON自動設置和更新監測目標å€åŸŸï¼Œé€™æ¨£å°±å¯ä»¥è¦†è“‹ç›®æ¨™é€²ç¨‹çš„整個內存映射。然而,用戶å¯
+能希望將åˆå§‹ç›£æ¸¬å€åŸŸè¨­ç½®çˆ²ç‰¹å®šçš„地å€ç¯„åœã€‚
+
+相å,當使用 ``paddr`` 監測æ“作集時,DAMONä¸æœƒè‡ªå‹•è¨­ç½®å’Œæ›´æ–°ç›£æ¸¬ç›®æ¨™å€åŸŸï¼ˆ ``paddr``
+被寫入 ``contexts/<N>/operations`` 中)。因此,在這種情æ³ä¸‹ï¼Œç”¨æˆ¶æ‡‰è©²è‡ªå·±è¨­ç½®ç›£æ¸¬ç›®æ¨™
+å€åŸŸã€‚
+
+在這種情æ³ä¸‹ï¼Œç”¨æˆ¶å¯ä»¥æŒ‰ç…§è‡ªå·±çš„æ„願明確設置åˆå§‹ç›£æ¸¬ç›®æ¨™å€åŸŸï¼Œå°‡é©ç•¶çš„值寫入該目錄下的文件。
+
+開始時,這個目錄åªæœ‰ä¸€å€‹æ–‡ä»¶ï¼Œ ``nr_regions`` 。å‘該文件寫入一個數字(``N``),就å¯ä»¥å‰µ
+建å爲 ``0`` 到 ``N-1`` çš„å­ç›®éŒ„。æ¯å€‹ç›®éŒ„代表æ¯å€‹åˆå§‹ç›£æ¸¬ç›®æ¨™å€åŸŸã€‚
+
+regions/<N>/
+------------
+
+在æ¯å€‹å€åŸŸç›®éŒ„中,你會發ç¾å…©å€‹æ–‡ä»¶ï¼ˆ ``start`` å’Œ ``end`` )。你å¯ä»¥é€šéŽå‘文件寫入
+和從文件中讀出,分別設置和ç²å¾—åˆå§‹ç›£æ¸¬ç›®æ¨™å€åŸŸçš„起始和çµæŸåœ°å€ã€‚
+
+æ¯å€‹å€åŸŸä¸æ‡‰è©²èˆ‡å…¶ä»–å€åŸŸé‡ç–Šã€‚ 目錄“Nâ€çš„“çµæŸâ€æ‡‰ç­‰æ–¼æˆ–å°æ–¼ç›®éŒ„“N+1â€çš„“開始â€ã€‚
+
+contexts/<N>/schemes/
+---------------------
+
+å°æ–¼ä¸€ç‰ˆçš„基於DAMON的數據訪å•æ„ŸçŸ¥çš„內存管ç†å„ªåŒ–,用戶通常希望系統å°ç‰¹å®šè¨ªå•æ¨¡å¼çš„內存å€
+域應用內存管ç†æ“作。DAMON從用戶那è£æŽ¥æ”¶é€™ç¨®å½¢å¼åŒ–çš„æ“作方案,並將這些方案應用於目標內存
+å€åŸŸã€‚用戶å¯ä»¥é€šéŽè®€å–和寫入這個目錄下的文件來ç²å¾—和設置這些方案。
+
+在開始時,這個目錄åªæœ‰ä¸€å€‹æ–‡ä»¶ï¼Œ``nr_schemes``。å‘該文件寫入一個數字(``N``),就å¯ä»¥
+創建å爲``0``到``N-1``çš„å­ç›®éŒ„的數é‡ã€‚æ¯å€‹ç›®éŒ„代表æ¯å€‹åŸºæ–¼DAMONçš„æ“作方案。
+
+schemes/<N>/
+------------
+
+在æ¯å€‹æ–¹æ¡ˆç›®éŒ„中,存在五個目錄(``access_pattern``ã€``quotas``ã€``watermarks``ã€
+``stats`` 和 ``tried_regions``)和一個文件(``action``)。
+
+``action`` 文件用於設置和ç²å–你想應用於具有特定訪å•æ¨¡å¼çš„內存å€åŸŸçš„動作。å¯ä»¥å¯«å…¥æ–‡ä»¶
+和從文件中讀å–çš„é—œéµè©žåŠå…¶å«ç¾©å¦‚下。
+
+ - ``willneed``: å°æœ‰ ``MADV_WILLNEED`` çš„å€åŸŸèª¿ç”¨ ``madvise()`` 。
+ - ``cold``: å°å…·æœ‰ ``MADV_COLD`` çš„å€åŸŸèª¿ç”¨ ``madvise()`` 。
+ - ``pageout``: 爲具有 ``MADV_PAGEOUT`` çš„å€åŸŸèª¿ç”¨ ``madvise()`` 。
+ - ``hugepage``: 爲帶有 ``MADV_HUGEPAGE`` çš„å€åŸŸèª¿ç”¨ ``madvise()`` 。
+ - ``nohugepage``: 爲帶有 ``MADV_NOHUGEPAGE`` çš„å€åŸŸèª¿ç”¨ ``madvise()``。
+ - ``lru_prio``: 在其LRU列表上å°å€åŸŸé€²è¡Œå„ªå…ˆæŽ’åºã€‚
+ - ``lru_deprio``: å°å€åŸŸçš„LRU列表進行é™ä½Žå„ªå…ˆè™•ç†ã€‚
+ - ``stat``: 什麼都ä¸åšï¼Œåªè¨ˆç®—統計數據
+
+schemes/<N>/access_pattern/
+---------------------------
+
+æ¯å€‹åŸºæ–¼DAMONçš„æ“作方案的目標訪å•æ¨¡å¼ç”±ä¸‰å€‹ç¯„åœæ§‹æˆï¼ŒåŒ…括以字節爲單ä½çš„å€åŸŸå¤§å°ã€æ¯å€‹
+èšåˆå€é–“的監測訪å•æ¬¡æ•¸å’Œå€åŸŸå¹´é½¡çš„èšåˆå€é–“數。
+
+在 ``access_pattern`` 目錄下,存在三個目錄( ``sz``, ``nr_accesses``, 和 ``age`` ),
+æ¯å€‹ç›®éŒ„有兩個文件(``min`` å’Œ ``max`` )。你å¯ä»¥é€šéŽå‘ ``sz``, ``nr_accesses``, å’Œ
+``age`` 目錄下的 ``min`` å’Œ ``max`` 文件分別寫入和讀å–來設置和ç²å–給定方案的訪å•æ¨¡å¼ã€‚
+
+schemes/<N>/quotas/
+-------------------
+
+æ¯å€‹ ``動作`` 的最佳 ``目標訪å•æ¨¡å¼`` å–決於工作負載,所以ä¸å®¹æ˜“找到。更糟糕的是,將æŸäº›å‹•ä½œ
+的方案設置得éŽæ–¼æ¿€é€²æœƒé€ æˆåš´é‡çš„開銷。爲了é¿å…這種開銷,用戶å¯ä»¥çˆ²æ¯å€‹æ–¹æ¡ˆé™åˆ¶æ™‚間和大å°é…é¡ã€‚
+具體來說,用戶å¯ä»¥è¦æ±‚DAMON儘é‡åªä½¿ç”¨ç‰¹å®šçš„時間(``時間é…é¡``)來應用動作,並且在給定的時間間
+隔(``é‡ç½®é–“éš”``)內,åªå°å…·æœ‰ç›®æ¨™è¨ªå•æ¨¡å¼çš„內存å€åŸŸæ‡‰ç”¨å‹•ä½œï¼Œè€Œä¸ä½¿ç”¨ç‰¹å®šæ•¸é‡ï¼ˆ``大å°é…é¡``)。
+
+當é è¨ˆè¶…éŽé…é¡é™åˆ¶æ™‚,DAMON會根據 ``目標訪å•æ¨¡å¼`` 的大å°ã€è¨ªå•é »çŽ‡å’Œå¹´é½¡ï¼Œå°æ‰¾åˆ°çš„內存å€åŸŸ
+進行優先排åºã€‚爲了進行個性化的優先排åºï¼Œç”¨æˆ¶å¯ä»¥çˆ²é€™ä¸‰å€‹å±¬æ€§è¨­ç½®æ¬Šé‡ã€‚
+
+在 ``quotas`` 目錄下,存在三個文件(``ms``, ``bytes``, ``reset_interval_ms``)和一個
+目錄(``weights``),其中有三個文件(``sz_permil``, ``nr_accesses_permil``, 和
+``age_permil``)。
+
+ä½ å¯ä»¥è¨­ç½®ä»¥æ¯«ç§’爲單ä½çš„ ``時間é…é¡`` ,以字節爲單ä½çš„ ``大å°é…é¡`` ,以åŠä»¥æ¯«ç§’爲單ä½çš„ ``é‡
+置間隔`` ,分別å‘這三個文件寫入數值。你還å¯ä»¥é€šéŽå‘ ``weights`` 目錄下的三個文件寫入數值來設
+置大å°ã€è¨ªå•é »çŽ‡å’Œå¹´é½¡çš„優先權,單ä½çˆ²åƒåˆ†ä¹‹ä¸€ã€‚
+
+schemes/<N>/watermarks/
+-----------------------
+
+爲了便於根據系統狀態激活和åœç”¨æ¯å€‹æ–¹æ¡ˆï¼ŒDAMONæ供了一個稱爲水ä½çš„功能。該功能接收五個值,稱爲
+``度é‡`` ã€``é–“éš”`` ã€``高`` ã€``中`` ã€``低`` 。``度é‡å€¼`` 是指å¯ä»¥æ¸¬é‡çš„系統度é‡å€¼ï¼Œå¦‚
+自由內存比率。如果系統的度é‡å€¼ ``高`` æ–¼memoent的高值或 ``低`` 於低值,則該方案被åœç”¨ã€‚如果
+該值低於 ``中`` ,則該方案被激活。
+
+在水ä½ç›®éŒ„下,存在五個文件(``metric``, ``interval_us``,``high``, ``mid``, and ``low``)
+用於設置æ¯å€‹å€¼ã€‚ä½ å¯ä»¥é€šéŽå‘這些文件的寫入來分別設置和ç²å–這五個值。
+
+å¯ä»¥å¯«å…¥ ``metric`` 文件的關éµè©žå’Œå«ç¾©å¦‚下。
+
+ - none: 忽略水ä½
+ - free_mem_rate: 系統的自由內存率(åƒåˆ†æ¯”)。
+
+``interval`` 應以微秒爲單ä½å¯«å…¥ã€‚
+
+schemes/<N>/stats/
+------------------
+
+DAMON統計æ¯å€‹æ–¹æ¡ˆè¢«å˜—試應用的å€åŸŸçš„總數é‡å’Œå­—節數,æ¯å€‹æ–¹æ¡ˆè¢«æˆåŠŸæ‡‰ç”¨çš„å€åŸŸçš„兩個數字,以åŠ
+超éŽé…é¡é™åˆ¶çš„總數é‡ã€‚這些統計數據å¯ç”¨æ–¼åœ¨ç·šåˆ†æžæˆ–調整方案。
+
+å¯ä»¥é€šéŽè®€å– ``stats`` 目錄下的文件(``nr_tried``, ``sz_tried``, ``nr_applied``,
+``sz_applied``, å’Œ ``qt_exceeds``))分別檢索這些統計數據。這些文件ä¸æ˜¯å¯¦æ™‚更新的,所以
+你應該è¦æ±‚DAMON sysfs接å£é€šéŽåœ¨ç›¸é—œçš„ ``kdamonds/<N>/state`` 文件中寫入一個特殊的關éµå­—
+``update_schemes_stats`` 來更新統計信æ¯çš„文件內容。
+
+schemes/<N>/tried_regions/
+--------------------------
+
+當一個特殊的關éµå­— ``update_schemes_tried_regions`` 被寫入相關的 ``kdamonds/<N>/state``
+文件時,DAMON會在這個目錄下創建從 ``0`` 開始命å的整數目錄。æ¯å€‹ç›®éŒ„包å«çš„文件暴露了關於æ¯å€‹
+內存å€åŸŸçš„詳細信æ¯ï¼Œåœ¨ä¸‹ä¸€å€‹ :ref:`èšé›†å€é–“ <sysfs_monitoring_attrs>`,相應的方案的 ``動作``
+已經嘗試在這個目錄下應用。這些信æ¯åŒ…括地å€ç¯„åœã€``nr_accesses`` 以åŠå€åŸŸçš„ ``年齡`` 。
+
+當å¦ä¸€å€‹ç‰¹æ®Šçš„é—œéµå­— ``clear_schemes_tried_regions`` 被寫入相關的 ``kdamonds/<N>/state``
+文件時,這些目錄將被刪除。
+
+tried_regions/<N>/
+------------------
+
+在æ¯å€‹å€åŸŸç›®éŒ„中,你會發ç¾å››å€‹æ–‡ä»¶(``start``, ``end``, ``nr_accesses``, and ``age``)。
+讀å–這些文件將顯示相應的基於DAMONçš„æ“作方案 ``動作`` 試圖應用的å€åŸŸçš„開始和çµæŸåœ°å€ã€``nr_accesses``
+和 ``年齡`` 。
+
+用例
+~~~~
+
+下é¢çš„命令應用了一個方案:â€å¦‚果一個大å°çˆ²[4KiB, 8KiB]的內存å€åŸŸåœ¨[10, 20]çš„èšåˆæ™‚間間隔內
+顯示出æ¯ä¸€å€‹èšåˆæ™‚é–“é–“éš”[0, 5]的訪å•é‡ï¼Œè«‹åˆ†é è©²å€åŸŸã€‚å°æ–¼åˆ†é ï¼Œæ¯ç§’最多隻能使用10ms,而且æ¯
+秒分é ä¸èƒ½è¶…éŽ1GiB。在這一é™åˆ¶ä¸‹ï¼Œé¦–先分é å‡ºå…·æœ‰è¼ƒé•·å¹´é½¡çš„內存å€åŸŸã€‚å¦å¤–,æ¯5秒é˜æª¢æŸ¥ä¸€æ¬¡ç³»çµ±
+çš„å¯ç”¨å…§å­˜çŽ‡ï¼Œç•¶å¯ç”¨å…§å­˜çŽ‡ä½Žæ–¼50%時開始監測和分é ï¼Œä½†å¦‚æžœå¯ç”¨å…§å­˜çŽ‡å¤§æ–¼60%,或低於30%,則åœ
+止監測。“ ::
+
+ # cd <sysfs>/kernel/mm/damon/admin
+ # # populate directories
+ # echo 1 > kdamonds/nr_kdamonds; echo 1 > kdamonds/0/contexts/nr_contexts;
+ # echo 1 > kdamonds/0/contexts/0/schemes/nr_schemes
+ # cd kdamonds/0/contexts/0/schemes/0
+ # # set the basic access pattern and the action
+ # echo 4096 > access_pattern/sz/min
+ # echo 8192 > access_pattern/sz/max
+ # echo 0 > access_pattern/nr_accesses/min
+ # echo 5 > access_pattern/nr_accesses/max
+ # echo 10 > access_pattern/age/min
+ # echo 20 > access_pattern/age/max
+ # echo pageout > action
+ # # set quotas
+ # echo 10 > quotas/ms
+ # echo $((1024*1024*1024)) > quotas/bytes
+ # echo 1000 > quotas/reset_interval_ms
+ # # set watermark
+ # echo free_mem_rate > watermarks/metric
+ # echo 5000000 > watermarks/interval_us
+ # echo 600 > watermarks/high
+ # echo 500 > watermarks/mid
+ # echo 300 > watermarks/low
+
+請注æ„,我們強烈建議使用用戶空間的工具,如 `damo <https://github.com/awslabs/damo>`_ ,
+而ä¸æ˜¯åƒä¸Šé¢é‚£æ¨£æ‰‹å‹•è®€å¯«æ–‡ä»¶ã€‚以上åªæ˜¯ä¸€å€‹ä¾‹å­ã€‚
+
+debugfs接å£
+===========
+
+.. note::
+
+ DAMON debugfs接å£å°‡åœ¨ä¸‹ä¸€å€‹LTS內核發佈後被移除,所以用戶應該轉移到
+ :ref:`sysfs接å£<sysfs_interface>`。
+
+DAMON導出了八個文件, ``attrs``, ``target_ids``, ``init_regions``,
+``schemes``, ``monitor_on``, ``kdamond_pid``, ``mk_contexts`` 和
+``rm_contexts`` under its debugfs directory, ``<debugfs>/damon/``.
+
+
+屬性
+----
+
+用戶å¯ä»¥é€šéŽè®€å–和寫入 ``attrs`` 文件ç²å¾—和設置 ``採樣間隔`` 〠``èšé›†é–“éš”`` 〠``æ›´æ–°é–“éš”``
+以åŠç›£æ¸¬ç›®æ¨™å€åŸŸçš„最å°/最大數é‡ã€‚è¦è©³ç´°çž­è§£ç›£æ¸¬å±¬æ€§ï¼Œè«‹åƒè€ƒ `:doc:/mm/damon/design` 。例如,
+下é¢çš„命令將這些值設置爲5msã€100msã€1000msã€10å’Œ1000,然後å†æ¬¡æª¢æŸ¥::
+
+ # cd <debugfs>/damon
+ # echo 5000 100000 1000000 10 1000 > attrs
+ # cat attrs
+ 5000 100000 1000000 10 1000
+
+
+目標ID
+------
+
+一些類型的地å€ç©ºé–“支æŒå¤šå€‹ç›£æ¸¬ç›®æ¨™ã€‚例如,虛擬內存地å€ç©ºé–“的監測å¯ä»¥æœ‰å¤šå€‹é€²ç¨‹ä½œçˆ²ç›£æ¸¬ç›®æ¨™ã€‚用戶
+å¯ä»¥é€šéŽå¯«å…¥ç›®æ¨™çš„相關id值來設置目標,並通éŽè®€å– ``target_ids`` 文件來ç²å¾—當å‰ç›®æ¨™çš„id。在監
+測虛擬地å€ç©ºé–“的情æ³ä¸‹ï¼Œé€™äº›å€¼æ‡‰è©²æ˜¯ç›£æ¸¬ç›®æ¨™é€²ç¨‹çš„pid。例如,下é¢çš„命令將pid爲42å’Œ4242的進程設
+爲監測目標,並å†æ¬¡æª¢æŸ¥::
+
+ # cd <debugfs>/damon
+ # echo 42 4242 > target_ids
+ # cat target_ids
+ 42 4242
+
+用戶還å¯ä»¥é€šéŽåœ¨æ–‡ä»¶ä¸­å¯«å…¥ä¸€å€‹ç‰¹æ®Šçš„é—œéµå­— "paddr\n" 來監測系統的物ç†å…§å­˜åœ°å€ç©ºé–“。因爲物ç†åœ°
+å€ç©ºé–“監測ä¸æ”¯æŒå¤šå€‹ç›®æ¨™ï¼Œè®€å–文件會顯示一個å‡å€¼ï¼Œå³ ``42`` ,如下圖所示::
+
+ # cd <debugfs>/damon
+ # echo paddr > target_ids
+ # cat target_ids
+ 42
+
+請注æ„,設置目標ID並ä¸å•“動監測。
+
+
+åˆå§‹ç›£æ¸¬ç›®æ¨™å€åŸŸ
+----------------
+
+在虛擬地å€ç©ºé–“監測的情æ³ä¸‹ï¼ŒDAMON自動設置和更新監測的目標å€åŸŸï¼Œé€™æ¨£å°±å¯ä»¥è¦†è“‹ç›®æ¨™é€²ç¨‹çš„整個
+內存映射。然而,用戶å¯èƒ½å¸Œæœ›å°‡ç›£æ¸¬å€åŸŸé™åˆ¶åœ¨ç‰¹å®šçš„地å€ç¯„åœå…§ï¼Œå¦‚å †ã€æ£§æˆ–特定的文件映射å€åŸŸã€‚
+或者,一些用戶å¯ä»¥çŸ¥é“他們工作負載的åˆå§‹è¨ªå•æ¨¡å¼ï¼Œå› æ­¤å¸Œæœ›çˆ²â€œè‡ªé©æ‡‰å€åŸŸèª¿æ•´â€è¨­ç½®æœ€ä½³åˆå§‹å€åŸŸã€‚
+
+相比之下,DAMON在物ç†å…§å­˜ç›£æ¸¬çš„情æ³ä¸‹ä¸æœƒè‡ªå‹•è¨­ç½®å’Œæ›´æ–°ç›£æ¸¬ç›®æ¨™å€åŸŸã€‚因此,用戶應該自己設置
+監測目標å€åŸŸã€‚
+
+在這種情æ³ä¸‹ï¼Œç”¨æˆ¶å¯ä»¥é€šéŽåœ¨ ``init_regions`` 文件中寫入é©ç•¶çš„值,明確地設置他們想è¦çš„åˆ
+始監測目標å€åŸŸã€‚輸入應該是一個由三個整數組æˆçš„隊列,用空格隔開,代表一個å€åŸŸçš„å½¢å¼å¦‚下::
+
+ <target idx> <start address> <end address>
+
+目標idx應該是 ``target_ids`` 文件中目標的索引,從 ``0`` 開始,å€åŸŸæ‡‰è©²æŒ‰ç…§åœ°å€é †åºå‚³éžã€‚
+例如,下é¢çš„命令將設置幾個地å€ç¯„åœï¼Œ ``1-100`` å’Œ ``100-200`` 作爲pid 42çš„åˆå§‹ç›£æ¸¬ç›®æ¨™
+å€åŸŸï¼Œé€™æ˜¯ ``target_ids`` 中的第一個(索引 ``0`` ),å¦å¤–幾個地å€ç¯„åœï¼Œ ``20-40`` å’Œ
+``50-100`` 作爲pid 4242的地å€ï¼Œé€™æ˜¯ ``target_ids`` 中的第二個(索引 ``1`` )::
+
+ # cd <debugfs>/damon
+ # cat target_ids
+ 42 4242
+ # echo "0 1 100 \
+ 0 100 200 \
+ 1 20 40 \
+ 1 50 100" > init_regions
+
+請注æ„,這åªæ˜¯è¨­ç½®äº†åˆå§‹çš„監測目標å€åŸŸã€‚在虛擬內存監測的情æ³ä¸‹ï¼ŒDAMON會在一個 ``æ›´æ–°é–“éš”``
+後自動更新å€åŸŸçš„邊界。因此,在這種情æ³ä¸‹ï¼Œå¦‚果用戶ä¸å¸Œæœ›æ›´æ–°çš„話,應該把 ``æ›´æ–°é–“éš”`` 設
+置得足夠大。
+
+
+方案
+----
+
+å°æ–¼é€šå¸¸çš„基於DAMON的數據訪å•æ„ŸçŸ¥çš„內存管ç†å„ªåŒ–,用戶åªæ˜¯å¸Œæœ›ç³»çµ±å°ç‰¹å®šè¨ªå•æ¨¡å¼çš„內存å€åŸŸæ‡‰ç”¨å…§
+存管ç†æ“作。DAMON從用戶那è£æŽ¥æ”¶é€™ç¨®å½¢å¼åŒ–çš„æ“作方案,並將這些方案應用到目標進程中。
+
+用戶å¯ä»¥é€šéŽè®€å–和寫入 ``scheme`` debugfs文件來ç²å¾—和設置這些方案。讀å–該文件還å¯ä»¥é¡¯ç¤ºæ¯å€‹
+方案的統計數據。在文件中,æ¯ä¸€å€‹æ–¹æ¡ˆéƒ½æ‡‰è©²åœ¨æ¯ä¸€è¡Œä¸­ä»¥ä¸‹åˆ—å½¢å¼è¡¨ç¤ºå‡ºä¾†::
+
+ <target access pattern> <action> <quota> <watermarks>
+
+ä½ å¯ä»¥é€šéŽç°¡å–®åœ°åœ¨æ–‡ä»¶ä¸­å¯«å…¥ä¸€å€‹ç©ºå­—符串來ç¦ç”¨æ–¹æ¡ˆã€‚
+
+目標訪å•æ¨¡å¼
+~~~~~~~~~~~~
+
+``<目標訪å•æ¨¡å¼>`` 是由三個範åœæ§‹æˆçš„,形å¼å¦‚下::
+
+ min-size max-size min-acc max-acc min-age max-age
+
+具體來說,å€åŸŸå¤§å°çš„字節數( `min-size` å’Œ `max-size` ),訪å•é »çŽ‡çš„æ¯èšåˆå€é–“的監測訪å•æ¬¡
+數( `min-acc` å’Œ `max-acc` ),å€åŸŸå¹´é½¡çš„èšåˆå€é–“數( `min-age` å’Œ `max-age` )都被指定。
+請注æ„,這些範åœæ˜¯å°é–‰å€é–“。
+
+動作
+~~~~
+
+``<action>`` 是一個é å®šç¾©çš„內存管ç†å‹•ä½œçš„整數,DAMON將應用於具有目標訪å•æ¨¡å¼çš„å€åŸŸã€‚支æŒ
+的數字和它們的å«ç¾©å¦‚下::
+
+ - 0: Call ``madvise()`` for the region with ``MADV_WILLNEED``
+ - 1: Call ``madvise()`` for the region with ``MADV_COLD``
+ - 2: Call ``madvise()`` for the region with ``MADV_PAGEOUT``
+ - 3: Call ``madvise()`` for the region with ``MADV_HUGEPAGE``
+ - 4: Call ``madvise()`` for the region with ``MADV_NOHUGEPAGE``
+ - 5: Do nothing but count the statistics
+
+é…é¡
+~~~~
+
+æ¯å€‹ ``動作`` 的最佳 ``目標訪å•æ¨¡å¼`` å–決於工作負載,所以ä¸å®¹æ˜“找到。更糟糕的是,將æŸå€‹
+動作的方案設置得éŽæ–¼æ¿€é€²æœƒå°Žè‡´åš´é‡çš„開銷。爲了é¿å…這種開銷,用戶å¯ä»¥é€šéŽä¸‹é¢è¡¨æ ¼ä¸­çš„ ``<quota>``
+來é™åˆ¶æ–¹æ¡ˆçš„時間和大å°é…é¡::
+
+ <ms> <sz> <reset interval> <priority weights>
+
+這使得DAMON在 ``<reset interval>`` 毫秒內,儘é‡åªç”¨ ``<ms>`` æ¯«ç§’çš„æ™‚é–“å° ``目標訪
+å•æ¨¡å¼`` 的內存å€åŸŸæ‡‰ç”¨å‹•ä½œï¼Œä¸¦åœ¨ ``<reset interval>`` å…§åªå°æœ€å¤š<sz>字節的內存å€åŸŸæ‡‰
+用動作。將 ``<ms>`` å’Œ ``<sz>`` 都設置爲零,å¯ä»¥ç¦ç”¨é…é¡é™åˆ¶ã€‚
+
+當é è¨ˆè¶…éŽé…é¡é™åˆ¶æ™‚,DAMON會根據 ``目標訪å•æ¨¡å¼`` 的大å°ã€è¨ªå•é »çŽ‡å’Œå¹´é½¡ï¼Œå°ç™¼ç¾çš„內存
+å€åŸŸé€²è¡Œå„ªå…ˆæŽ’åºã€‚爲了實ç¾å€‹æ€§åŒ–的優先級,用戶å¯ä»¥åœ¨ ``<優先級權é‡>`` 中設置這三個屬性的
+權é‡ï¼Œå…·é«”å½¢å¼å¦‚下::
+
+ <size weight> <access frequency weight> <age weight>
+
+æ°´ä½
+~~~~
+
+有些方案需è¦æ ¹æ“šç³»çµ±ç‰¹å®šæŒ‡æ¨™çš„當å‰å€¼ä¾†é‹è¡Œï¼Œå¦‚自由內存比率。å°æ–¼é€™ç¨®æƒ…æ³ï¼Œç”¨æˆ¶å¯ä»¥çˆ²è©²æ¢
+件指定水ä½ã€‚::
+
+ <metric> <check interval> <high mark> <middle mark> <low mark>
+
+``<metric>`` 是一個é å®šç¾©çš„整數,用於è¦æª¢æŸ¥çš„度é‡ã€‚支æŒçš„數字和它們的å«ç¾©å¦‚下。
+
+ - 0: 忽視水ä½
+ - 1: 系統空閒內存率 (åƒåˆ†æ¯”)
+
+æ¯éš” ``<檢查間隔>`` 微秒檢查一次公制的值。
+
+如果該值高於 ``<高標>`` 或低於 ``<低標>`` ,該方案被åœç”¨ã€‚如果該值低於 ``<中標>`` ,
+該方案將被激活。
+
+統計數據
+~~~~~~~~
+
+它還統計æ¯å€‹æ–¹æ¡ˆè¢«å˜—試應用的å€åŸŸçš„總數é‡å’Œå­—節數,æ¯å€‹æ–¹æ¡ˆè¢«æˆåŠŸæ‡‰ç”¨çš„å€åŸŸçš„兩個數é‡ï¼Œä»¥
+åŠè¶…éŽé…é¡é™åˆ¶çš„總數é‡ã€‚這些統計數據å¯ç”¨æ–¼åœ¨ç·šåˆ†æžæˆ–調整方案。
+
+統計數據å¯ä»¥é€šéŽè®€å–方案文件來顯示。讀å–該文件將顯示你在æ¯ä¸€è¡Œä¸­è¼¸å…¥çš„æ¯å€‹ ``方案`` ,
+統計的五個數字將被加在æ¯ä¸€è¡Œçš„末尾。
+
+例å­
+~~~~
+
+下é¢çš„命令應用了一個方案:â€å¦‚果一個大å°çˆ²[4KiB, 8KiB]的內存å€åŸŸåœ¨[10, 20]çš„èšåˆæ™‚é–“
+間隔內顯示出æ¯ä¸€å€‹èšåˆæ™‚é–“é–“éš”[0, 5]的訪å•é‡ï¼Œè«‹åˆ†é å‡ºè©²å€åŸŸã€‚å°æ–¼åˆ†é ï¼Œæ¯ç§’最多隻能使
+用10ms,而且æ¯ç§’分é ä¸èƒ½è¶…éŽ1GiB。在這一é™åˆ¶ä¸‹ï¼Œé¦–先分é å‡ºå…·æœ‰è¼ƒé•·å¹´é½¡çš„內存å€åŸŸã€‚å¦å¤–,
+æ¯5秒é˜æª¢æŸ¥ä¸€æ¬¡ç³»çµ±çš„å¯ç”¨å…§å­˜çŽ‡ï¼Œç•¶å¯ç”¨å…§å­˜çŽ‡ä½Žæ–¼50%時開始監測和分é ï¼Œä½†å¦‚æžœå¯ç”¨å…§å­˜çŽ‡
+大於60%,或低於30%,則åœæ­¢ç›£æ¸¬â€œ::
+
+ # cd <debugfs>/damon
+ # scheme="4096 8192 0 5 10 20 2" # target access pattern and action
+ # scheme+=" 10 $((1024*1024*1024)) 1000" # quotas
+ # scheme+=" 0 0 100" # prioritization weights
+ # scheme+=" 1 5000000 600 500 300" # watermarks
+ # echo "$scheme" > schemes
+
+
+開關
+----
+
+除éžä½ æ˜Žç¢ºåœ°å•“動監測,å¦å‰‡å¦‚上所述的文件設置ä¸æœƒç”¢ç”Ÿæ•ˆæžœã€‚ä½ å¯ä»¥é€šéŽå¯«å…¥å’Œè®€å– ``monitor_on``
+文件來啓動ã€åœæ­¢å’Œæª¢æŸ¥ç›£æ¸¬çš„當å‰ç‹€æ…‹ã€‚寫入 ``on`` 該文件å¯ä»¥å•“å‹•å°æœ‰å±¬æ€§çš„目標的監測。寫入
+``off`` 該文件則åœæ­¢é€™äº›ç›®æ¨™ã€‚如果æ¯å€‹ç›®æ¨™é€²ç¨‹è¢«çµ‚止,DAMON也會åœæ­¢ã€‚下é¢çš„示例命令開啓ã€é—œ
+閉和檢查DAMON的狀態::
+
+ # cd <debugfs>/damon
+ # echo on > monitor_on
+ # echo off > monitor_on
+ # cat monitor_on
+ off
+
+請注æ„,當監測開啓時,你ä¸èƒ½å¯«åˆ°ä¸Šè¿°çš„debugfs文件。如果你在DAMONé‹è¡Œæ™‚寫到這些文件,將會返
+回一個錯誤代碼,如 ``-EBUSY`` 。
+
+
+監測線程PID
+-----------
+
+DAMON通éŽä¸€å€‹å«åškdamond的內核線程來進行請求監測。你å¯ä»¥é€šéŽè®€å– ``kdamond_pid`` 文件ç²
+得該線程的 ``pid`` 。當監測被 ``關閉`` 時,讀å–該文件ä¸æœƒè¿”回任何信æ¯::
+
+ # cd <debugfs>/damon
+ # cat monitor_on
+ off
+ # cat kdamond_pid
+ none
+ # echo on > monitor_on
+ # cat kdamond_pid
+ 18594
+
+
+使用多個監測線程
+----------------
+
+æ¯å€‹ç›£æ¸¬ä¸Šä¸‹æ–‡éƒ½æœƒå‰µå»ºä¸€å€‹ ``kdamond`` 線程。你å¯ä»¥ä½¿ç”¨ ``mk_contexts`` å’Œ ``rm_contexts``
+文件爲多個 ``kdamond`` 需è¦çš„用例創建和刪除監測上下文。
+
+將新上下文的å稱寫入 ``mk_contexts`` 文件,在 ``DAMON debugfs`` 目錄上創建一個該å稱的目錄。
+該目錄將有該上下文的 ``DAMON debugfs`` 文件::
+
+ # cd <debugfs>/damon
+ # ls foo
+ # ls: cannot access 'foo': No such file or directory
+ # echo foo > mk_contexts
+ # ls foo
+ # attrs init_regions kdamond_pid schemes target_ids
+
+如果ä¸å†éœ€è¦ä¸Šä¸‹æ–‡ï¼Œä½ å¯ä»¥é€šéŽæŠŠä¸Šä¸‹æ–‡çš„å字放到 ``rm_contexts`` 文件中來刪除它和相應的目錄::
+
+ # echo foo > rm_contexts
+ # ls foo
+ # ls: cannot access 'foo': No such file or directory
+
+注æ„, ``mk_contexts`` 〠``rm_contexts`` å’Œ ``monitor_on`` 文件åªåœ¨æ ¹ç›®éŒ„下。
+
+
+監測çµæžœçš„監測點
+================
+
+DAMON通éŽä¸€å€‹tracepoint ``damon:damon_aggregated`` æ供監測çµæžœ. 當監測開啓時,你å¯
+以記錄追蹤點事件,並使用追蹤點支æŒå·¥å…·å¦‚perf顯示çµæžœã€‚比如說::
+
+ # echo on > monitor_on
+ # perf record -e damon:damon_aggregated &
+ # sleep 5
+ # kill 9 $(pidof perf)
+ # echo off > monitor_on
+ # perf script
+
diff --git a/Documentation/translations/zh_TW/admin-guide/mm/index.rst b/Documentation/translations/zh_TW/admin-guide/mm/index.rst
new file mode 100644
index 000000000000..0b04d925b68c
--- /dev/null
+++ b/Documentation/translations/zh_TW/admin-guide/mm/index.rst
@@ -0,0 +1,50 @@
+.. include:: ../../disclaimer-zh_TW.rst
+
+:Original: Documentation/admin-guide/mm/index.rst
+
+:翻譯:
+
+ å¾é‘« xu xin <xu.xin16@zte.com.cn>
+
+
+========
+內存管ç†
+========
+
+Linux內存管ç†å­ç³»çµ±ï¼Œé¡§åæ€ç¾©ï¼Œæ˜¯è² è²¬ç³»çµ±ä¸­çš„內存管ç†ã€‚它包括了虛擬內存與請求
+分é çš„實ç¾ï¼Œå…§æ ¸å…§éƒ¨çµæ§‹å’Œç”¨æˆ¶ç©ºé–“程åºçš„內存分é…ã€å°‡æ–‡ä»¶æ˜ å°„到進程地å€ç©ºé–“以
+åŠè¨±å¤šå…¶ä»–很酷的事情。
+
+Linux內存管ç†æ˜¯ä¸€å€‹å…·æœ‰è¨±å¤šå¯é…置設置的複雜系統, 且這些設置中的大多數都å¯ä»¥é€š
+éŽ ``/proc`` 文件系統ç²å¾—,並且å¯ä»¥ä½¿ç”¨ ``sysctl`` 進行查詢和調整。這些API接
+å£è¢«æ述在Documentation/admin-guide/sysctl/vm.rst文件和 `man 5 proc`_ 中。
+
+.. _man 5 proc: http://man7.org/linux/man-pages/man5/proc.5.html
+
+Linux內存管ç†æœ‰å®ƒè‡ªå·±çš„術語,如果你還ä¸ç†Ÿæ‚‰å®ƒï¼Œè«‹è€ƒæ…®é–±è®€ä¸‹é¢åƒè€ƒï¼š
+Documentation/admin-guide/mm/concepts.rst.
+
+在此目錄下,我們詳細æ述瞭如何與Linux內存管ç†ä¸­çš„å„種機制交互。
+
+.. toctree::
+ :maxdepth: 1
+
+ damon/index
+ ksm
+
+Todolist:
+* concepts
+* cma_debugfs
+* hugetlbpage
+* idle_page_tracking
+* memory-hotplug
+* nommu-mmap
+* numa_memory_policy
+* numaperf
+* pagemap
+* soft-dirty
+* swap_numa
+* transhuge
+* userfaultfd
+* zswap
+
diff --git a/Documentation/translations/zh_TW/admin-guide/mm/ksm.rst b/Documentation/translations/zh_TW/admin-guide/mm/ksm.rst
new file mode 100644
index 000000000000..1b4944b3cf61
--- /dev/null
+++ b/Documentation/translations/zh_TW/admin-guide/mm/ksm.rst
@@ -0,0 +1,199 @@
+.. include:: ../../disclaimer-zh_TW.rst
+
+:Original: Documentation/admin-guide/mm/ksm.rst
+
+:翻譯:
+
+ å¾é‘« xu xin <xu.xin16@zte.com.cn>
+
+
+============
+內核åŒé åˆä½µ
+============
+
+
+概述
+====
+
+KSM是一種能節çœå…§å­˜çš„數據去é‡åŠŸèƒ½ï¼Œç”±CONFIG_KSM=y啓用,並在2.6.32版本時被添
+加到Linux內核。詳見 ``mm/ksm.c`` 的實ç¾ï¼Œä»¥åŠhttp://lwn.net/Articles/306704
+å’Œhttps://lwn.net/Articles/330589
+
+KSM最åˆç›®çš„是爲了與KVM(å³è‘—å的內核共享內存)一起使用而開發的,通éŽå…±äº«è™›æ“¬æ©Ÿ
+之間的公共數據,將更多虛擬機放入物ç†å…§å­˜ã€‚但它å°æ–¼ä»»ä½•æœƒç”Ÿæˆå¤šå€‹ç›¸åŒæ•¸æ“šå¯¦ä¾‹çš„
+應用程åºéƒ½æ˜¯å¾ˆæœ‰ç”¨çš„。
+
+KSM的守護進程ksmd會定期掃æ那些已註冊的用戶內存å€åŸŸï¼ŒæŸ¥æ‰¾å…§å®¹ç›¸åŒçš„é é¢ï¼Œé€™äº›
+é é¢å¯ä»¥è¢«å–®å€‹å¯«ä¿è­·é é¢æ›¿æ›ï¼ˆå¦‚果進程以後想è¦æ›´æ–°å…¶å…§å®¹ï¼Œå°‡è‡ªå‹•è¤‡è£½ï¼‰ã€‚使用:
+引用:`sysfs intraface <ksm_sysfs>` 接å£ä¾†é…ç½®KSM守護程åºåœ¨å–®å€‹éŽç¨‹ä¸­æ‰€æŽƒæçš„é 
+數以åŠå…©å€‹éŽç¨‹ä¹‹é–“的間隔時間。
+
+KSMåªåˆä¸¦åŒ¿å(ç§æœ‰ï¼‰é é¢ï¼Œå¾žä¸åˆä¸¦é ç·©å­˜ï¼ˆæ–‡ä»¶ï¼‰é é¢ã€‚KSMçš„åˆä½µé é¢æœ€åˆåªèƒ½è¢«
+鎖定在內核內存中,但ç¾åœ¨å¯ä»¥å°±åƒå…¶ä»–用戶é é¢ä¸€æ¨£è¢«æ›å‡ºï¼ˆä½†ç•¶å®ƒå€‘被交æ›å›žä¾†æ™‚å…±
+享會被破壞: ksmdå¿…é ˆé‡æ–°ç™¼ç¾å®ƒå€‘的身份並å†æ¬¡åˆä½µï¼‰ã€‚
+
+以madvise控制KSM
+================
+
+KSM僅在特定的地å€ç©ºé–“å€åŸŸæ™‚é‹è¡Œï¼Œå³æ‡‰ç”¨ç¨‹åºé€šéŽä½¿ç”¨å¦‚下所示的madvise(2)系統調
+用來請求æŸå¡Šåœ°å€æˆçˆ²å¯èƒ½çš„åˆä½µå€™é¸è€…的地å€ç©ºé–“::
+
+ int madvise(addr, length, MADV_MERGEABLE)
+
+應用程åºç•¶ç„¶ä¹Ÿå¯ä»¥é€šéŽèª¿ç”¨::
+
+ int madvise(addr, length, MADV_UNMERGEABLE)
+
+來å–消該請求,並æ¢å¾©çˆ²éžå…±äº«é é¢ï¼šæ­¤æ™‚KSM將去除åˆä½µåœ¨è©²ç¯„åœå…§çš„任何åˆä½µé ã€‚注æ„:
+這個去除åˆä½µçš„調用å¯èƒ½çªç„¶éœ€è¦çš„內存é‡è¶…éŽå¯¦éš›å¯ç”¨çš„內存é‡-那麼å¯èƒ½æœƒå‡ºç¾EAGAIN
+失敗,但更å¯èƒ½æœƒå–šé†’OOM killer。
+
+如果KSM未被é…置到正在é‹è¡Œçš„內核中,則madvise MADV_MERGEABLE å’Œ MADV_UNMERGEABLE
+的調用åªæœƒä»¥EINVAL 失敗。如果正在é‹è¡Œçš„內核是用CONFIG_KSM=yæ–¹å¼æ§‹å»ºçš„,那麼這些
+調用通常會æˆåŠŸï¼šå³ä½¿KSM守護程åºç•¶å‰æ²’有é‹è¡Œï¼ŒMADV_MERGEABLE ä»ç„¶æœƒåœ¨KSM守護程åº
+啓動時註冊範åœï¼Œå³ä½¿è©²ç¯„åœä¸èƒ½åŒ…å«KSM實際å¯ä»¥åˆä½µçš„任何é é¢ï¼Œå³ä½¿MADV_UNMERGEABLE
+應用於從未標記爲MADV_MERGEABLE的範åœã€‚
+
+如果一塊內存å€åŸŸå¿…須被拆分爲至少一個新的MADV_MERGEABLEå€åŸŸæˆ–MADV_UNMERGEABLEå€åŸŸï¼Œ
+ç•¶è©²é€²ç¨‹å°‡è¶…éŽ ``vm.max_map_count`` 的設定,則madviseå¯èƒ½è¿”回ENOMEM。(請åƒé–±æ–‡æª”
+Documentation/admin-guide/sysctl/vm.rst)。
+
+與其他madvise調用一樣,它們在用戶地å€ç©ºé–“的映射å€åŸŸä¸Šä½¿ç”¨ï¼šå¦‚果指定的範åœåŒ…å«æœª
+映射的間隙(儘管在中間的映射å€åŸŸå·¥ä½œï¼‰ï¼Œå®ƒå€‘將報告ENOMEM,如果沒有足夠的內存用於
+內部çµæ§‹ï¼Œå‰‡å¯èƒ½æœƒå› EAGAIN而失敗。
+
+KSM守護進程sysfs接å£
+====================
+
+KSM守護進程å¯ä»¥ç”±``/sys/kernel/mm/ksm/`` 中的sysfs文件控制,所有人都å¯ä»¥è®€å–,但
+åªèƒ½ç”±root用戶寫入。å„接å£è§£é‡‹å¦‚下:
+
+
+pages_to_scan
+ ksmd進程進入ç¡çœ å‰è¦æŽƒæçš„é æ•¸ã€‚
+ 例如, ``echo 100 > /sys/kernel/mm/ksm/pages_to_scan``
+
+ 默èªå€¼ï¼š100(該值被é¸æ“‡ç”¨æ–¼æ¼”示目的)
+
+sleep_millisecs
+ ksmd在下次掃æå‰æ‡‰ä¼‘眠多少毫秒
+ 例如, ``echo 20 > /sys/kernel/mm/ksm/sleep_millisecs``
+
+ 默èªå€¼ï¼š20(該值被é¸æ“‡ç”¨æ–¼æ¼”示目的)
+
+merge_across_nodes
+ 指定是å¦å¯ä»¥åˆä½µä¾†è‡ªä¸åŒNUMA節點的é é¢ã€‚當設置爲0時,ksm僅åˆä½µåœ¨ç‰©ç†ä¸Šä½
+ æ–¼åŒä¸€NUMA節點的內存å€åŸŸä¸­çš„é é¢ã€‚這é™ä½Žäº†è¨ªå•å…±äº«é é¢çš„延é²ã€‚在有明顯的
+ NUMAè·é›¢ä¸Šï¼Œå…·æœ‰æ›´å¤šç¯€é»žçš„系統å¯èƒ½å—益於設置該值爲0時的更低延é²ã€‚而å°æ–¼
+ 需è¦å°å…§å­˜ä½¿ç”¨é‡æœ€å°åŒ–的較å°ç³»çµ±ä¾†èªªï¼Œè¨­ç½®è©²å€¼çˆ²1(默èªè¨­ç½®ï¼‰å‰‡å¯èƒ½æœƒå—
+ 益於更大共享é é¢ã€‚在決定使用哪種設置之å‰ï¼Œæ‚¨å¯èƒ½å¸Œæœ›æ¯”較系統在æ¯ç¨®è¨­ç½®ä¸‹
+ 的性能。 ``merge_across_nodes`` 僅當系統中沒有ksm共享é é¢æ™‚,æ‰èƒ½è¢«æ›´æ”¹è¨­
+ 置:首先將接å£`run` 設置爲2從而å°é é€²è¡ŒåŽ»åˆä½µï¼Œç„¶å¾Œåœ¨ä¿®æ”¹
+ ``merge_across_nodes`` 後å†å°‡â€˜run’åˆè¨­ç½®çˆ²1,以根據新設置來é‡æ–°åˆä½µã€‚
+
+ 默èªå€¼ï¼š1(如早期的發佈版本一樣åˆä½µè·¨ç«™é»žï¼‰
+
+run
+ * 設置爲0å¯åœæ­¢ksmdé‹è¡Œï¼Œä½†ä¿ç•™åˆä½µé é¢ï¼Œ
+ * 設置爲1å¯é‹è¡Œksmd,例如, ``echo 1 > /sys/kernel/mm/ksm/run`` ,
+ * 設置爲2å¯åœæ­¢ksmdé‹è¡Œï¼Œä¸¦ä¸”å°æ‰€æœ‰ç›®å‰å·²åˆä½µçš„é é€²è¡ŒåŽ»åˆä½µï¼Œä½†ä¿ç•™å¯åˆä½µ
+ å€åŸŸä»¥ä¾›ä¸‹æ¬¡é‹è¡Œã€‚
+
+ 默èªå€¼ï¼š0(必須設置爲1æ‰èƒ½æ¿€æ´»KSM,除éžç¦ç”¨äº†CONFIG_SYSFS)
+
+use_zero_pages
+ 指定是å¦æ‡‰ç•¶ç‰¹æ®Šè™•ç†ç©ºé ï¼ˆå³é‚£äº›åƒ…å«zero的已分é…é ï¼‰ã€‚當該值設置爲1時,
+ 空é èˆ‡å…§æ ¸é›¶é åˆä½µï¼Œè€Œä¸æ˜¯åƒé€šå¸¸æƒ…æ³ä¸‹é‚£æ¨£ç©ºé è‡ªèº«å½¼æ­¤åˆä½µã€‚這å¯ä»¥æ ¹æ“š
+ 工作負載的ä¸åŒï¼Œåœ¨å…·æœ‰ç€è‰²é›¶é çš„架構上å¯ä»¥æ高性能。啓用此設置時應å°å¿ƒï¼Œ
+ 因爲它å¯èƒ½æœƒé™ä½ŽæŸäº›å·¥ä½œè² è¼‰çš„KSM性能,比如,當待åˆä½µçš„候é¸é é¢çš„æ ¡é©—å’Œ
+ 與空é é¢çš„æ ¡é©—å’Œæ°å¥½åŒ¹é…的時候。此設置å¯éš¨æ™‚更改,僅å°é‚£äº›æ›´æ”¹å¾Œå†åˆä½µ
+ çš„é é¢æœ‰æ•ˆã€‚
+
+ 默èªå€¼ï¼š0(如åŒæ—©æœŸç‰ˆæœ¬çš„KSM正常表ç¾ï¼‰
+
+max_page_sharing
+ 單個KSMé é¢å…許的最大共享站點數。這將強制執行é‡è¤‡æ•¸æ“šæ¶ˆé™¤é™åˆ¶ï¼Œä»¥é¿å…涉
+ åŠé歷共享KSMé é¢çš„虛擬映射的虛擬內存æ“作的高延é²ã€‚最å°å€¼çˆ²2,因爲新創
+ 建的KSMé é¢å°‡è‡³å°‘有兩個共享者。該值越高,KSMåˆä½µå…§å­˜çš„速度越快,去é‡
+ å› å­ä¹Ÿè¶Šé«˜ï¼Œä½†æ˜¯å°æ–¼ä»»ä½•çµ¦å®šçš„KSMé é¢ï¼Œè™›æ“¬æ˜ å°„的最壞情æ³é歷的速度也會
+ 越慢。減慢了這種é歷速度就æ„味ç€åœ¨äº¤æ›ã€å£“縮ã€NUMA平衡和é é¢é·ç§»æœŸé–“,
+ æŸäº›è™›æ“¬å…§å­˜æ“作將有更高的延é²ï¼Œå¾žè€Œé™ä½Žé€™äº›è™›æ“¬å…§å­˜æ“作調用者的響應能力。
+ 其他任務如果ä¸æ¶‰åŠåŸ·è¡Œè™›æ“¬æ˜ å°„éæ­·çš„VMæ“作,其任務調度延é²ä¸å—æ­¤åƒæ•¸çš„å½±
+ 響,因爲這些é歷本身是調度å‹å¥½çš„。
+
+stable_node_chains_prune_millisecs
+ 指定KSM檢查特定é é¢çš„元數據的頻率(å³é‚£äº›é”到éŽæ™‚ä¿¡æ¯æ•¸æ“šåŽ»é‡é™åˆ¶æ¨™æº–çš„
+ é é¢ï¼‰å–®ä½æ˜¯æ¯«ç§’。較å°çš„毫秒值將以更低的延é²ä¾†é‡‹æ”¾KSM元數據,但它們將使
+ ksmd在掃æ期間使用更多CPU。如果還沒有一個KSMé é¢é”到 ``max_page_sharing``
+ 標準,那就沒有什麼用。
+
+KSM與MADV_MERGEABLE的工作有效性體ç¾æ–¼ ``/sys/kernel/mm/ksm/`` 路徑下的接å£ï¼š
+
+pages_shared
+ 表示多少共享é æ­£åœ¨è¢«ä½¿ç”¨
+pages_sharing
+ 表示還有多少站點正在共享這些共享é ï¼Œå³ç¯€çœäº†å¤šå°‘
+pages_unshared
+ 表示有多少é æ˜¯å”¯ä¸€çš„,但被å覆檢查以進行åˆä½µ
+pages_volatile
+ 表示有多少é å› è®ŠåŒ–太快而無法放在tree中
+full_scans
+ 表示所有å¯åˆä½µå€åŸŸå·²æŽƒæ多少次
+stable_node_chains
+ é”到 ``max_page_sharing`` é™åˆ¶çš„KSMé æ•¸
+stable_node_dups
+ é‡è¤‡çš„KSMé æ•¸
+
+比值 ``pages_sharing/pages_shared`` 的最大值å—é™åˆ¶æ–¼ ``max_page_sharing``
+的設定。è¦æƒ³å¢žåŠ è©²æ¯”值,則相應地è¦å¢žåŠ  ``max_page_sharing`` 的值。
+
+監測KSM的收益
+=============
+
+KSMå¯ä»¥é€šéŽåˆä½µç›¸åŒçš„é é¢ä¾†ç¯€çœå…§å­˜ï¼Œä½†ä¹Ÿæœƒæ¶ˆè€—é¡å¤–的內存,因爲它需è¦ç”Ÿæˆä¸€äº›rmap_items
+來ä¿å­˜æ¯å€‹æŽƒæé é¢çš„ç°¡è¦rmapä¿¡æ¯ã€‚其中有些é é¢å¯èƒ½æœƒè¢«åˆä½µï¼Œä½†æœ‰äº›é é¢åœ¨è¢«æª¢æŸ¥å¹¾æ¬¡
+後å¯èƒ½ç„¡æ³•è¢«åˆä½µï¼Œé€™äº›éƒ½æ˜¯ç„¡ç›Šçš„內存消耗。
+
+1) 如何確定KSM在全系統範åœå…§æ˜¯ç¯€çœå…§å­˜é‚„是消耗內存?這è£æœ‰ä¸€å€‹ç°¡å–®çš„近似計算方法供åƒè€ƒ::
+
+ general_profit =~ pages_sharing * sizeof(page) - (all_rmap_items) *
+ sizeof(rmap_item);
+
+ 其中all_rmap_itemså¯ä»¥é€šéŽå° ``pages_sharing`` 〠``pages_shared`` 〠``pages_unshared``
+ å’Œ ``pages_volatile`` 的求和而輕鬆ç²å¾—。
+
+2) 單一進程中KSM的收益也å¯ä»¥é€šéŽä»¥ä¸‹è¿‘似的計算得到::
+
+ process_profit =~ ksm_merging_pages * sizeof(page) -
+ ksm_rmap_items * sizeof(rmap_item).
+
+ 其中ksm_merging_pages顯示在 ``/proc/<pid>/`` 目錄下,而ksm_rmap_items
+ 顯示在 ``/proc/<pid>/ksm_stat`` 。
+
+從應用的角度來看, ``ksm_rmap_items`` å’Œ ``ksm_merging_pages`` 的高比例æ„
+味ç€ä¸å¥½çš„madvise-applied策略,所以開發者或管ç†å“¡å¿…é ˆé‡æ–°è€ƒæ…®å¦‚何改變madvisç­–
+略。舉個例å­ä¾›åƒè€ƒï¼Œä¸€å€‹é é¢çš„大å°é€šå¸¸æ˜¯4K,而rmap_item的大å°åœ¨32ä½CPU架構上分
+別是32B,在64ä½CPU架構上是64B。所以如果 ``ksm_rmap_items/ksm_merging_pages``
+的比例在64ä½CPU上超éŽ64,或者在32ä½CPU上超éŽ128,那麼應用程åºçš„madvise策略應
+該被放棄,因爲ksm收益大約爲零或負值。
+
+監控KSM事件
+===========
+
+在/proc/vmstat中有一些計數器,å¯ä»¥ç”¨ä¾†ç›£æŽ§KSM事件。KSMå¯èƒ½æœ‰åŠ©æ–¼ç¯€çœå…§å­˜ï¼Œé€™æ˜¯
+一種權衡,因爲它å¯èƒ½æœƒåœ¨KSM COW或複製中的交æ›ä¸Šé­å—延é²ã€‚這些事件å¯ä»¥å¹«åŠ©ç”¨æˆ¶è©•ä¼°
+是å¦æˆ–如何使用KSM。例如,如果cow_ksm增加得太快,用戶å¯ä»¥æ¸›å°‘madvise(, , MADV_MERGEABLE)
+的範åœã€‚
+
+cow_ksm
+ 在æ¯æ¬¡KSMé é¢è§¸ç™¼å¯«æ™‚æ‹·è²ï¼ˆCOW)時都會被éžå¢žï¼Œç•¶ç”¨æˆ¶è©¦åœ–寫入KSMé é¢æ™‚,
+ 我們必須åšä¸€å€‹æ‹·è²ã€‚
+
+ksm_swpin_copy
+ 在æ›å…¥æ™‚,æ¯æ¬¡KSMé è¢«è¤‡åˆ¶æ™‚都會被éžå¢žã€‚請注æ„,KSMé åœ¨æ›å…¥æ™‚å¯èƒ½æœƒè¢«è¤‡
+ 制,因爲do_swap_page()ä¸èƒ½åšæ‰€æœ‰çš„鎖,而需è¦é‡çµ„一個跨anon_vmaçš„KSMé ã€‚
+
+--
+Izik Eidus,
+Hugh Dickins, 2009年11月17日。
+
diff --git a/Documentation/translations/zh_TW/admin-guide/reporting-issues.rst b/Documentation/translations/zh_TW/admin-guide/reporting-issues.rst
index ea51342879c0..fe5a5a07d51a 100644
--- a/Documentation/translations/zh_TW/admin-guide/reporting-issues.rst
+++ b/Documentation/translations/zh_TW/admin-guide/reporting-issues.rst
@@ -1,13 +1,6 @@
.. SPDX-License-Identifier: (GPL-2.0+ OR CC-BY-4.0)
-..
- If you want to distribute this text under CC-BY-4.0 only, please use 'The
- Linux kernel developers' for author attribution and link this as source:
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/Documentation/admin-guide/reporting-issues.rst
-..
- Note: Only the content of this RST file as found in the Linux kernel sources
- is available under CC-BY-4.0, as versions of this text that were processed
- (for example by the kernel's build system) might contain content taken from
- files which use a more restrictive license.
+.. See the bottom of this file for additional redistribution information.
+
.. include:: ../disclaimer-zh_TW.rst
@@ -26,14 +19,16 @@
簡明指å—ï¼ˆäº¦å³ å¤ªé•·ä¸çœ‹ï¼‰
==========================
-您é¢è‡¨çš„是å¦çˆ²åŒç³»åˆ—穩定版或長期支æŒå…§æ ¸çš„普通內核的回歸?是å¦ä»ç„¶å—支æŒï¼Ÿ
+您é¢è‡¨çš„是å¦çˆ²åŒç³»åˆ—穩定版或長期支æŒå…§æ ¸çš„普通內核的迴歸?是å¦ä»ç„¶å—支æŒï¼Ÿ
è«‹æœç´¢ `LKML內核郵件列表 <https://lore.kernel.org/lkml/>`_ å’Œ
`Linux穩定版郵件列表 <https://lore.kernel.org/stable/>`_ 存檔中匹é…的報告並
加入討論。如果找ä¸åˆ°åŒ¹é…的報告,請安è£è©²ç³»åˆ—的最新版本。如果它ä»ç„¶å‡ºç¾å•é¡Œï¼Œ
-報告給穩定版郵件列表(stable@vger.kernel.org)。
+請報告給穩定版郵件列表(stable@vger.kernel.org)並抄é€å›žæ­¸éƒµä»¶åˆ—表
+(regressions@lists.linux.dev);ç†æƒ³æƒ…æ³ä¸‹ï¼Œé‚„å¯ä»¥æŠ„é€ç¶­è­·è€…和相關å­ç³»çµ±çš„
+郵件列表。
在所有其他情æ³ä¸‹ï¼Œè«‹å„˜å¯èƒ½çŒœæ¸¬æ˜¯å“ªå€‹å…§æ ¸éƒ¨åˆ†å°Žè‡´äº†å•é¡Œã€‚查看MAINTAINERS文件,
-了解開發人員希望如何得知å•é¡Œï¼Œå¤§å¤šæ•¸æƒ…æ³ä¸‹ï¼Œå ±å‘Šå•é¡Œéƒ½æ˜¯é€šéŽé›»å­éƒµä»¶å’ŒæŠ„é€
+瞭解開發人員希望如何得知å•é¡Œï¼Œå¤§å¤šæ•¸æƒ…æ³ä¸‹ï¼Œå ±å‘Šå•é¡Œéƒ½æ˜¯é€šéŽé›»å­éƒµä»¶å’ŒæŠ„é€
相關郵件列表進行的。檢查報告目的地的存檔中是å¦å·²æœ‰åŒ¹é…的報告;也請æœç´¢
`LKML <https://lore.kernel.org/lkml/>`_ 和網絡。如果找ä¸åˆ°å¯åŠ å…¥çš„討論,請
å®‰è£ `最新的主線內核 <https://kernel.org/>`_ 。如果ä»å­˜åœ¨å•é¡Œï¼Œè«‹ç™¼é€å ±å‘Šã€‚
@@ -45,21 +40,22 @@
**通用æ醒** :當安è£å’Œæ¸¬è©¦ä¸Šè¿°å…§æ ¸æ™‚,請確ä¿å®ƒæ˜¯æ™®é€šçš„(å³ï¼šæ²’有補ä¸ï¼Œä¹Ÿæ²’
有使用附加模塊)。還è¦ç¢ºä¿å®ƒæ˜¯åœ¨ä¸€å€‹æ­£å¸¸çš„環境中構建和é‹è¡Œï¼Œä¸¦ä¸”在å•é¡Œç™¼ç”Ÿ
-之å‰æ²’有被汙染(tainted)。
+之å‰æ²’有被污染(tainted)。
-在編寫報告時,è¦æ¶µè“‹èˆ‡å•é¡Œç›¸é—œçš„所有信æ¯ï¼Œå¦‚使用的內核和發行版。在碰見回歸時,
-嘗試給出引入它的更改的æ交ID,二分å¯ä»¥æ‰¾åˆ°å®ƒã€‚如果您åŒæ™‚é¢è‡¨Linux內核的多個
-å•é¡Œï¼Œè«‹åˆ†åˆ¥å ±å‘Šæ¯å€‹å•é¡Œã€‚
+當你åŒæ™‚é¢è‡¨Linux內核的多個å•é¡Œæ™‚,請分別報告。在編寫報告時,è¦æ¶µè“‹èˆ‡å•é¡Œ
+相關的所有信æ¯ï¼Œå¦‚使用的內核和發行版。如果碰見迴歸,請把報告抄é€å›žæ­¸éƒµä»¶åˆ—表
+(regressions@lists.linux.dev)。也請試試用二分法找出æºé ­ï¼›å¦‚æžœæˆåŠŸæ‰¾åˆ°ï¼Œè«‹
+在報告中寫上它的æ交ID並抄é€sign-off-byéˆä¸­çš„所有人。
一旦報告發出,請回答任何出ç¾çš„å•é¡Œï¼Œä¸¦å„˜å¯èƒ½åœ°æ供幫助。這包括通éŽä¸æ™‚é‡æ–°
-測試新版本並發é€ç‹€æ…‹æ›´æ–°ä¾†æŽ¨å‹•é€²å±•ã€‚
+測試新版本併發é€ç‹€æ…‹æ›´æ–°ä¾†æŽ¨å‹•é€²å±•ã€‚
如何å‘內核維護人員報告å•é¡Œçš„é€æ­¥æŒ‡å—
=====================================
-上é¢çš„簡明指å—概述了如何å‘Linux內核開發人員報告å•é¡Œã€‚å°æ–¼å·²ç¶“熟悉å‘自由和開
-æºè»Ÿé«”(FLOSS)項目報告å•é¡Œçš„人來說,這å¯èƒ½æ˜¯ä»–們所需è¦çš„全部內容。å°æ–¼å…¶ä»–
+上é¢çš„簡明指å—概述瞭如何å‘Linux內核開發人員報告å•é¡Œã€‚å°æ–¼å·²ç¶“熟悉å‘自由和開
+æºè»Ÿä»¶ï¼ˆFLOSS)項目報告å•é¡Œçš„人來說,這å¯èƒ½æ˜¯ä»–們所需è¦çš„全部內容。å°æ–¼å…¶ä»–
人,本部分更爲詳細,並一步一步地æ述。爲了便於閱讀,它ä»ç„¶å„˜é‡ç°¡æ½”,並çœç•¥
了許多細節;這些在é€æ­¥æŒ‡å—後的åƒè€ƒç« ç¯€ä¸­é€²è¡Œäº†æ述,該章節更詳細地解釋了æ¯
個步驟。
@@ -68,16 +64,16 @@
儘早æ„識到看起來åƒLinux內核毛病的å•é¡Œå¯èƒ½å¯¦éš›ä¸Šæ˜¯ç”±å…¶ä»–原因引起的。這些步驟
å¯ä»¥ç¢ºä¿ä½ æœ€çµ‚ä¸æœƒè¦ºå¾—在這一éŽç¨‹ä¸­æŠ•å…¥çš„時間是浪費:
- * 您是å¦é¢è‡¨ç¡¬é«”或軟體供應商æ供的Linux內核的å•é¡Œï¼Ÿé‚£éº¼åŸºæœ¬ä¸Šæ‚¨æœ€å¥½åœæ­¢é–±è®€
+ * 您是å¦é¢è‡¨ç¡¬ä»¶æˆ–軟件供應商æ供的Linux內核的å•é¡Œï¼Ÿé‚£éº¼åŸºæœ¬ä¸Šæ‚¨æœ€å¥½åœæ­¢é–±è®€
本文檔,轉而å‘您的供應商報告å•é¡Œï¼Œé™¤éžæ‚¨é¡˜æ„自己安è£æœ€æ–°çš„Linux版本。尋找
和解決å•é¡Œå¾€å¾€éœ€è¦å¾Œè€…。
- * 使用您喜愛的網絡æœå°‹å¼•æ“Žå°ç¾æœ‰å ±å‘Šé€²è¡Œç²—ç•¥æœç´¢ï¼›æ­¤å¤–,請檢查
+ * 使用您喜愛的網絡æœç´¢å¼•æ“Žå°ç¾æœ‰å ±å‘Šé€²è¡Œç²—ç•¥æœç´¢ï¼›æ­¤å¤–,請檢查
`Linux內核郵件列表(LKML) <https://lore.kernel.org/lkml/>`_ 的存檔。如果
找到匹é…的報告,請加入討論而ä¸æ˜¯ç™¼é€æ–°å ±å‘Šã€‚
- * 看看你正在處ç†çš„å•é¡Œæ˜¯å¦çˆ²å›žæ­¸å•é¡Œã€å®‰å…¨å•é¡Œæˆ–éžå¸¸åš´é‡çš„å•é¡Œï¼šé€™äº›éƒ½æ˜¯éœ€
- è¦åœ¨æŽ¥ä¸‹ä¾†çš„一些步驟中特別處ç†çš„「高優先級å•é¡Œã€ã€‚
+ * 看看你正在處ç†çš„å•é¡Œæ˜¯å¦çˆ²è¿´æ­¸å•é¡Œã€å®‰å…¨å•é¡Œæˆ–éžå¸¸åš´é‡çš„å•é¡Œï¼šé€™äº›éƒ½æ˜¯éœ€
+ è¦åœ¨æŽ¥ä¸‹ä¾†çš„一些步驟中特別處ç†çš„“高優先級å•é¡Œâ€ã€‚
* 確ä¿ä¸æ˜¯å…§æ ¸ç’°å¢ƒå°Žè‡´äº†æ‚¨é¢è‡¨çš„å•é¡Œã€‚
@@ -86,15 +82,15 @@
* 確ä¿æ‚¨çš„系統ä¸æœƒé€šéŽå‹•æ…‹æ§‹å»ºé¡å¤–的內核模塊來增強其內核,åƒDKMS這樣的解決
方案å¯èƒ½åœ¨æ‚¨ä¸çŸ¥æƒ…的情æ³ä¸‹å°±åœ¨æœ¬åœ°é€²è¡Œäº†é€™æ¨£çš„工作。
- * 當å•é¡Œç™¼ç”Ÿæ™‚,檢查您的內核是å¦è¢«ã€Œæ±™æŸ“ã€ï¼Œå› çˆ²ä½¿å…§æ ¸è¨­ç½®é€™å€‹æ¨™èªŒçš„事件å¯èƒ½
+ * 當å•é¡Œç™¼ç”Ÿæ™‚,檢查您的內核是å¦è¢«â€œæ±¡æŸ“â€ï¼Œå› çˆ²ä½¿å…§æ ¸è¨­ç½®é€™å€‹æ¨™èªŒçš„事件å¯èƒ½
會導致您é¢è‡¨çš„å•é¡Œã€‚
* 粗略地寫下如何é‡ç¾é€™å€‹å•é¡Œã€‚如果您åŒæ™‚處ç†å¤šå€‹å•é¡Œï¼Œè«‹çˆ²æ¯å€‹å•é¡Œå–®ç¨å¯«æ³¨
釋,並確ä¿å®ƒå€‘在新啓動的系統上ç¨ç«‹å‡ºç¾ã€‚這是必è¦çš„,因爲æ¯å€‹å•é¡Œéƒ½éœ€è¦åˆ†
別報告給內核開發人員,除éžå®ƒå€‘åš´é‡ç³¾çºåœ¨ä¸€èµ·ã€‚
- * 如果您正é¢è‡¨ç©©å®šç‰ˆæˆ–長期支æŒç‰ˆæœ¬ç·šçš„回歸(例如從5.10.4更新到5.10.5時出ç¾
- 故障),請查看後文「報告穩定版和長期支æŒå…§æ ¸ç·šçš„回歸ã€å°ç¯€ã€‚
+ * 如果您正é¢è‡¨ç©©å®šç‰ˆæˆ–長期支æŒç‰ˆæœ¬ç·šçš„迴歸(例如從5.10.4更新到5.10.5時出ç¾
+ 故障),請查看後文“報告穩定版和長期支æŒå…§æ ¸ç·šçš„è¿´æ­¸â€å°ç¯€ã€‚
* 定ä½å¯èƒ½å¼•èµ·å•é¡Œçš„驅動程åºæˆ–內核å­ç³»çµ±ã€‚找出其開發人員期望的報告的方å¼å’Œ
ä½ç½®ã€‚注æ„:大多數情æ³ä¸‹ä¸æœƒæ˜¯ bugzilla.kernel.org,因爲å•é¡Œé€šå¸¸éœ€è¦é€š
@@ -105,61 +101,62 @@
在完æˆé€™äº›æº–備之後,你將進入主è¦éƒ¨åˆ†ï¼š
- * 除éžæ‚¨å·²ç¶“在é‹è¡Œæœ€æ–°çš„「主線ã€Linux內核,å¦å‰‡æœ€å¥½åœ¨å ±å‘Šæµç¨‹å‰å®‰è£å®ƒã€‚在æŸäº›
- 情æ³ä¸‹ï¼Œä½¿ç”¨æœ€æ–°çš„「穩定版ã€Linux進行測試和報告也是å¯ä»¥æŽ¥å—的替代方案;在
+ * 除éžæ‚¨å·²ç¶“在é‹è¡Œæœ€æ–°çš„“主線â€Linux內核,å¦å‰‡æœ€å¥½åœ¨å ±å‘Šæµç¨‹å‰å®‰è£å®ƒã€‚在æŸäº›
+ 情æ³ä¸‹ï¼Œä½¿ç”¨æœ€æ–°çš„“穩定版â€Linux進行測試和報告也是å¯ä»¥æŽ¥å—的替代方案;在
åˆä½µçª—å£æœŸé–“,這實際上å¯èƒ½æ˜¯æœ€å¥½çš„方法,但在開發階段最好還是暫åœå¹¾å¤©ã€‚ç„¡è«–
- ä½ é¸æ“‡ä»€éº¼ç‰ˆæœ¬ï¼Œæœ€å¥½ä½¿ç”¨ã€Œæ™®é€šã€æ§‹å»ºã€‚忽略這些建議會大大增加您的報告被拒絕
+ ä½ é¸æ“‡ä»€éº¼ç‰ˆæœ¬ï¼Œæœ€å¥½ä½¿ç”¨â€œæ™®é€šâ€æ§‹å»ºã€‚忽略這些建議會大大增加您的報告被拒絕
或忽略的風險。
- * 確ä¿æ‚¨å‰›å‰›å®‰è£çš„內核在é‹è¡Œæ™‚ä¸æœƒã€Œæ±™æŸ“ã€è‡ªå·±ã€‚
+ * 確ä¿æ‚¨å‰›å‰›å®‰è£çš„內核在é‹è¡Œæ™‚ä¸æœƒâ€œæ±¡æŸ“â€è‡ªå·±ã€‚
* 在您剛剛安è£çš„內核中復ç¾é€™å€‹å•é¡Œã€‚如果它沒有出ç¾ï¼Œè«‹æŸ¥çœ‹ä¸‹æ–¹åªç™¼ç”Ÿåœ¨
穩定版和長期支æŒå…§æ ¸çš„å•é¡Œçš„說明。
- * 優化你的筆記:試著找到並寫出最直接的復ç¾å•é¡Œçš„方法。確ä¿æœ€çµ‚çµæžœåŒ…å«æ‰€æœ‰
+ * 優化你的筆記:試ç€æ‰¾åˆ°ä¸¦å¯«å‡ºæœ€ç›´æŽ¥çš„復ç¾å•é¡Œçš„方法。確ä¿æœ€çµ‚çµæžœåŒ…å«æ‰€æœ‰
é‡è¦çš„細節,åŒæ™‚讓第一次è½èªªçš„人容易閱讀和ç†è§£ã€‚如果您在此éŽç¨‹ä¸­å­¸åˆ°äº†ä¸€
些æ±è¥¿ï¼Œè«‹è€ƒæ…®å†æ¬¡æœç´¢é—œæ–¼è©²å•é¡Œçš„ç¾æœ‰å ±å‘Šã€‚
- * 如果失敗涉åŠã€Œpanicã€ã€ã€ŒOopsã€ã€ã€Œwarningã€æˆ–「BUGã€ï¼Œè«‹è€ƒæ…®è§£ç¢¼å…§æ ¸æ—¥èªŒä»¥æŸ¥æ‰¾è§¸
+ * 如果失敗涉åŠâ€œpanicâ€ã€â€œOopsâ€ã€â€œwarningâ€æˆ–“BUGâ€ï¼Œè«‹è€ƒæ…®è§£ç¢¼å…§æ ¸æ—¥èªŒä»¥æŸ¥æ‰¾è§¸
發錯誤的代碼行。
- * 如果您的å•é¡Œæ˜¯å›žæ­¸å•é¡Œï¼Œè«‹å„˜å¯èƒ½ç¸®å°å¼•å…¥å•é¡Œæ™‚的範åœã€‚
+ * 如果您的å•é¡Œæ˜¯è¿´æ­¸å•é¡Œï¼Œè«‹å„˜å¯èƒ½ç¸®å°å¼•å…¥å•é¡Œæ™‚的範åœã€‚
* 通éŽè©³ç´°æè¿°å•é¡Œä¾†é–‹å§‹ç·¨å¯«å ±å‘Šã€‚記得包括以下æ¢ç›®ï¼šæ‚¨çˆ²å¾©ç¾è€Œå®‰è£çš„最新內
核版本ã€ä½¿ç”¨çš„Linux發行版以åŠé—œæ–¼å¦‚何復ç¾è©²å•é¡Œçš„說明。如果å¯èƒ½ï¼Œå°‡å…§æ ¸
- 構建é…置(.config)和 ``dmesg`` 的輸出放在網上的æŸå€‹åœ°æ–¹ï¼Œä¸¦é€£çµåˆ°å®ƒã€‚包
+ 構建é…置(.config)和 ``dmesg`` 的輸出放在網上的æŸå€‹åœ°æ–¹ï¼Œä¸¦éˆæŽ¥åˆ°å®ƒã€‚包
å«æˆ–上傳所有其他å¯èƒ½ç›¸é—œçš„ä¿¡æ¯ï¼Œå¦‚Oops的輸出/截圖或來自 ``lspci`` 的輸出
。一旦你寫完了這個主è¦éƒ¨åˆ†ï¼Œè«‹åœ¨ä¸Šæ–¹æ’入一個正常長度的段è½å¿«é€Ÿæ¦‚è¿°å•é¡Œå’Œ
影響。å†åœ¨æ­¤ä¹‹ä¸Šæ·»åŠ ä¸€å€‹ç°¡å–®æè¿°å•é¡Œçš„å¥å­ï¼Œä»¥å¾—到人們的閱讀。ç¾åœ¨çµ¦å‡ºä¸€
個更短的æ述性標題或主題。然後就å¯ä»¥åƒMAINTAINERS文件告訴你的那樣發é€æˆ–
- æ交報告了,除éžä½ åœ¨è™•ç†ä¸€å€‹ã€Œé«˜å„ªå…ˆç´šå•é¡Œã€ï¼šå®ƒå€‘需è¦æŒ‰ç…§ä¸‹é¢ã€Œé«˜å„ªå…ˆç´šå•
- 題的特殊處ç†ã€æ‰€è¿°ç‰¹åˆ¥é—œç…§ã€‚
+ æ交報告了,除éžä½ åœ¨è™•ç†ä¸€å€‹â€œé«˜å„ªå…ˆç´šå•é¡Œâ€ï¼šå®ƒå€‘需è¦æŒ‰ç…§ä¸‹é¢â€œé«˜å„ªå…ˆç´šå•
+ 題的特殊處ç†â€æ‰€è¿°ç‰¹åˆ¥é—œç…§ã€‚
* 等待別人的å應,繼續推進事情,直到你能夠接å—這樣或那樣的çµæžœã€‚因此,請公
é–‹å’ŒåŠæ™‚地回應任何詢å•ã€‚測試æ出的修復。ç©æ¥µåœ°æ¸¬è©¦ï¼šè‡³å°‘é‡æ–°æ¸¬è©¦æ¯å€‹æ–°ä¸»
線版本的首個候é¸ç‰ˆæœ¬ï¼ˆRC),並報告你的çµæžœã€‚如果出ç¾æ‹–延,就å‹å¥½åœ°æ醒一
- 下。如果你沒有得到任何幫助或者未能滿æ„,請試著自己幫助自己。
+ 下。如果你沒有得到任何幫助或者未能滿æ„,請試ç€è‡ªå·±å¹«åŠ©è‡ªå·±ã€‚
-報告穩定版和長期支æŒå…§æ ¸ç·šçš„回歸
+報告穩定版和長期支æŒå…§æ ¸ç·šçš„è¿´æ­¸
----------------------------------
-如果您發ç¾äº†ç©©å®šç‰ˆæˆ–長期支æŒå…§æ ¸ç‰ˆæœ¬ç·šä¸­çš„回歸å•é¡Œä¸¦æŒ‰ä¸Šè¿°æµç¨‹è·³åˆ°é€™è£¡ï¼Œé‚£éº¼
+如果您發ç¾äº†ç©©å®šç‰ˆæˆ–長期支æŒå…§æ ¸ç‰ˆæœ¬ç·šä¸­çš„è¿´æ­¸å•é¡Œä¸¦æŒ‰ä¸Šè¿°æµç¨‹è·³åˆ°é€™è£ï¼Œé‚£éº¼
請閱讀本å°ç¯€ã€‚å³ä¾‹å¦‚您在從5.10.4更新到5.10.5時出ç¾äº†å•é¡Œï¼ˆå¾ž5.9.15到5.10.5則
-ä¸æ˜¯ï¼‰ã€‚開發人員希望儘快修復此類回歸,因此有一個簡化æµç¨‹ä¾†å ±å‘Šå®ƒå€‘:
+ä¸æ˜¯ï¼‰ã€‚開發人員希望儘快修復此類迴歸,因此有一個簡化æµç¨‹ä¾†å ±å‘Šå®ƒå€‘:
* 檢查內核開發人員是å¦ä»ç„¶ç¶­è­·ä½ é—œå¿ƒçš„Linux內核版本線:去 `kernel.org 的首é 
- <https://kernel.org/>`_ ,確ä¿æ­¤ç‰¹å®šç‰ˆæœ¬ç·šçš„最新版沒有「[EOL]ã€æ¨™è¨˜ã€‚
+ <https://kernel.org/>`_ ,確ä¿æ­¤ç‰¹å®šç‰ˆæœ¬ç·šçš„最新版沒有“[EOL]â€æ¨™è¨˜ã€‚
* 檢查 `Linux穩定版郵件列表 <https://lore.kernel.org/stable/>`_ 中的ç¾æœ‰å ±å‘Šã€‚
- * 從特定的版本線安è£æœ€æ–°ç‰ˆæœ¬ä½œçˆ²ç´”淨內核。確ä¿é€™å€‹å…§æ ¸æ²’有被汙染,並且ä»ç„¶
- 存在å•é¡Œï¼Œå› çˆ²å•é¡Œå¯èƒ½å·²ç¶“在那裡被修復了。如果您第一次發ç¾ä¾›æ‡‰å•†å…§æ ¸çš„å•é¡Œï¼Œ
+ * 從特定的版本線安è£æœ€æ–°ç‰ˆæœ¬ä½œçˆ²ç´”淨內核。確ä¿é€™å€‹å…§æ ¸æ²’有被污染,並且ä»ç„¶
+ 存在å•é¡Œï¼Œå› çˆ²å•é¡Œå¯èƒ½å·²ç¶“在那è£è¢«ä¿®å¾©äº†ã€‚如果您第一次發ç¾ä¾›æ‡‰å•†å…§æ ¸çš„å•é¡Œï¼Œ
請檢查已知最新版本的普通構建是å¦å¯ä»¥æ­£å¸¸é‹è¡Œã€‚
- * å‘Linux穩定版郵件列表發é€ä¸€å€‹ç°¡çŸ­çš„å•é¡Œå ±å‘Š(stable@vger.kernel.org)。大致
- æè¿°å•é¡Œï¼Œä¸¦è§£é‡‹å¦‚何復ç¾ã€‚講清楚首個出ç¾å•é¡Œçš„版本和最後一個工作正常的版本。
- 然後等待進一步的指示。
+ * å‘Linux穩定版郵件列表發é€ä¸€å€‹ç°¡çŸ­çš„å•é¡Œå ±å‘Šï¼ˆstable@vger.kernel.org)並抄é€
+ Linux迴歸郵件列表(regressions@lists.linux.dev);如果你懷疑是由æŸå­ç³»çµ±
+ 引起的,請抄é€å…¶ç¶­è­·äººå“¡å’Œå­ç³»çµ±éƒµä»¶åˆ—表。大致æè¿°å•é¡Œï¼Œä¸¦è§£é‡‹å¦‚何復ç¾ã€‚
+ 講清楚首個出ç¾å•é¡Œçš„版本和最後一個工作正常的版本。然後等待進一步的指示。
下é¢çš„åƒè€ƒç« ç¯€éƒ¨åˆ†è©³ç´°è§£é‡‹äº†é€™äº›æ­¥é©Ÿä¸­çš„æ¯ä¸€æ­¥ã€‚
@@ -167,14 +164,14 @@
報告åªç™¼ç”Ÿåœ¨è¼ƒèˆŠå…§æ ¸ç‰ˆæœ¬ç·šçš„å•é¡Œ
----------------------------------
-若您嘗試了上述的最新主線內核,但未能在那裡復ç¾å•é¡Œï¼Œé‚£éº¼æœ¬å°ç¯€é©ç”¨æ–¼æ‚¨ï¼›ä»¥ä¸‹
+若您嘗試了上述的最新主線內核,但未能在那è£å¾©ç¾å•é¡Œï¼Œé‚£éº¼æœ¬å°ç¯€é©ç”¨æ–¼æ‚¨ï¼›ä»¥ä¸‹
æµç¨‹æœ‰åŠ©æ–¼ä½¿å•é¡Œåœ¨ä»ç„¶æ”¯æŒçš„穩定版或長期支æŒç‰ˆæœ¬ç·šï¼Œæˆ–者定期基於最新穩定版或
長期支æŒå…§æ ¸çš„供應商內核中得到修復。如果是這種情æ³ï¼Œè«‹åŸ·è¡Œä»¥ä¸‹æ­¥é©Ÿï¼š
* è«‹åšå¥½æº–備,接下來的幾個步驟å¯èƒ½ç„¡æ³•åœ¨èˆŠç‰ˆæœ¬ä¸­è§£æ±ºå•é¡Œï¼šä¿®å¾©å¯èƒ½å¤ªå¤§æˆ–太
- 冒險,無法移æ¤åˆ°é‚£è£¡ã€‚
+ 冒險,無法移æ¤åˆ°é‚£è£ã€‚
- * 執行å‰ç¯€ã€Œå ±å‘Šç©©å®šç‰ˆå’Œé•·æœŸæ”¯æŒå…§æ ¸ç·šçš„回歸ã€ä¸­çš„å‰ä¸‰å€‹æ­¥é©Ÿã€‚
+ * 執行å‰ç¯€â€œå ±å‘Šç©©å®šç‰ˆå’Œé•·æœŸæ”¯æŒå…§æ ¸ç·šçš„è¿´æ­¸â€ä¸­çš„å‰ä¸‰å€‹æ­¥é©Ÿã€‚
* 在Linux內核版本控制系統中æœç´¢ä¿®å¾©ä¸»ç·šå•é¡Œçš„更改,因爲它的æ交消æ¯å¯èƒ½æœƒ
告訴你修復是å¦å·²ç¶“計劃好了支æŒã€‚如果你沒有找到,æœç´¢é©ç•¶çš„郵件列表,尋找
@@ -219,14 +216,14 @@
確ä¿æ‚¨ä½¿ç”¨çš„是上游Linux內核
----------------------------
- *您是å¦é¢è‡¨ç¡¬é«”或軟體供應商æ供的Linux內核的å•é¡Œï¼Ÿé‚£éº¼åŸºæœ¬ä¸Šæ‚¨æœ€å¥½åœæ­¢é–±
+ *您是å¦é¢è‡¨ç¡¬ä»¶æˆ–軟件供應商æ供的Linux內核的å•é¡Œï¼Ÿé‚£éº¼åŸºæœ¬ä¸Šæ‚¨æœ€å¥½åœæ­¢é–±
讀本文檔,轉而å‘您的供應商報告å•é¡Œï¼Œé™¤éžæ‚¨é¡˜æ„自己安è£æœ€æ–°çš„Linux版本。
尋找和解決å•é¡Œå¾€å¾€éœ€è¦å¾Œè€…。*
-與大多數程å¼è¨­è¨ˆå¸«ä¸€æ¨£ï¼ŒLinux內核開發人員ä¸å–œæ­¡èŠ±æ™‚間處ç†ä»–們維護的原始碼中根本
-ä¸æœƒç™¼ç”Ÿçš„å•é¡Œçš„報告。這åªæœƒæµªè²»æ¯å€‹äººçš„時間,尤其是你的時間。ä¸å¹¸çš„是,當
+與大多數程åºå“¡ä¸€æ¨£ï¼ŒLinux內核開發人員ä¸å–œæ­¡èŠ±æ™‚間處ç†ä»–們維護的æºä»£ç¢¼ä¸­æ ¹æœ¬
+ä¸æœƒç™¼ç”Ÿçš„å•é¡Œçš„報告。這隻會浪費æ¯å€‹äººçš„時間,尤其是你的時間。ä¸å¹¸çš„是,當
涉åŠåˆ°å…§æ ¸æ™‚,這樣的情æ³å¾ˆå®¹æ˜“發生,並且常常導致雙方氣餒。這是因爲幾乎所有é 
-è£åœ¨è¨­å‚™ï¼ˆå°å¼æ©Ÿã€ç­†è¨˜æœ¬é›»è…¦ã€æ™ºæ…§åž‹æ‰‹æ©Ÿã€è·¯ç”±å™¨ç­‰ï¼‰ä¸Šçš„Linux內核,以åŠå¤§å¤šæ•¸
+è£åœ¨è¨­å‚™ï¼ˆè‡ºå¼æ©Ÿã€ç­†è¨˜æœ¬é›»è…¦ã€æ™ºèƒ½æ‰‹æ©Ÿã€è·¯ç”±å™¨ç­‰ï¼‰ä¸Šçš„Linux內核,以åŠå¤§å¤šæ•¸
ç”±Linux發行商æ供的內核,都與由kernel.org發行的官方Linux內核相è·ç”šé ï¼šå¾žLinux
開發的角度來看,這些供應商æ供的內核通常是å¤è€çš„或者經éŽäº†å¤§é‡ä¿®æ”¹ï¼Œé€šå¸¸å…©é»ž
兼具。
@@ -235,19 +232,19 @@
å¯èƒ½å·²ç¶“ç”±Linux內核開發人員在數月或數年å‰ä¿®å¾©ï¼›æ­¤å¤–,供應商的修改和增強å¯èƒ½
會導致您é¢è‡¨çš„å•é¡Œï¼Œå³ä½¿å®ƒå€‘看起來很å°æˆ–者完全ä¸ç›¸é—œã€‚這就是爲什麼您應該å‘
供應商報告這些內核的å•é¡Œã€‚它的開發者應該查看報告,如果它是一個上游å•é¡Œï¼Œç›´æŽ¥
-於上游修復或將報告轉發到那裡。在實è¸ä¸­ï¼Œé€™æœ‰æ™‚è¡Œä¸é€šã€‚因此,您å¯èƒ½éœ€è¦è€ƒæ…®
+於上游修復或將報告轉發到那è£ã€‚在實è¸ä¸­ï¼Œé€™æœ‰æ™‚è¡Œä¸é€šã€‚因此,您å¯èƒ½éœ€è¦è€ƒæ…®
通éŽè‡ªå·±å®‰è£æœ€æ–°çš„Linux內核內核來繞éŽä¾›æ‡‰å•†ã€‚如果如果您é¸æ“‡æ­¤æ–¹æ³•ï¼Œé‚£éº¼æœ¬æŒ‡
å—後é¢çš„步驟將解釋如何在排除了其他å¯èƒ½å°Žè‡´æ‚¨çš„å•é¡Œçš„原因後執行此æ“作。
-注æ„å‰æ®µä½¿ç”¨çš„詞語是「大多數ã€ï¼Œå› çˆ²æœ‰æ™‚候開發人員實際上願æ„處ç†ä¾›æ‡‰å•†å…§æ ¸å‡ºç¾
+注æ„å‰æ®µä½¿ç”¨çš„詞語是“大多數â€ï¼Œå› çˆ²æœ‰æ™‚候開發人員實際上願æ„處ç†ä¾›æ‡‰å•†å…§æ ¸å‡ºç¾
çš„å•é¡Œå ±å‘Šã€‚他們是å¦é€™éº¼åšå¾ˆå¤§ç¨‹åº¦ä¸Šå–決於開發人員和相關å•é¡Œã€‚如果發行版åª
根據最近的Linux版本å°å…§æ ¸é€²è¡Œäº†è¼ƒå°ä¿®æ”¹ï¼Œé‚£éº¼æ©Ÿæœƒå°±æ¯”較大;例如å°æ–¼Debian
GNU/Linux Sid或Fedora Rawhide所æ供的主線內核。一些開發人員還將接å—基於最新
穩定內核的發行版內核å•é¡Œå ±å‘Šï¼Œåªè¦å®ƒæ”¹å‹•ä¸å¤§ï¼›ä¾‹å¦‚Arch Linuxã€å¸¸è¦Fedora版本
å’ŒopenSUSE Turboweed。但是請記ä½ï¼Œæ‚¨æœ€å¥½ä½¿ç”¨ä¸»ç·šLinux,並é¿å…在此æµç¨‹ä¸­ä½¿ç”¨
-穩定版內核,如「安è£ä¸€å€‹æ–°çš„內核進行測試ã€ä¸€ç¯€ä¸­æ‰€è©³è¿°ã€‚
+穩定版內核,如“安è£ä¸€å€‹æ–°çš„內核進行測試â€ä¸€ç¯€ä¸­æ‰€è©³è¿°ã€‚
-當然,您å¯ä»¥å¿½ç•¥æ‰€æœ‰é€™äº›å»ºè­°ï¼Œä¸¦å‘上游Linux開發人員報告舊的或經éŽå¤§é‡ä¿®æ”¹çš„
+當然,您å¯ä»¥å¿½ç•¥æ‰€æœ‰é€™äº›å»ºè­°ï¼Œä¸¦å‘上éŠLinux開發人員報告舊的或經éŽå¤§é‡ä¿®æ”¹çš„
供應商內核的å•é¡Œã€‚但是注æ„,這樣的報告經常被拒絕或忽視,所以自行å°å¿ƒè€ƒæ…®ä¸€ä¸‹ã€‚
ä¸éŽé€™é‚„是比根本ä¸å ±å‘Šå•é¡Œè¦å¥½ï¼šæœ‰æ™‚候這樣的報告會直接或間接地幫助解決之後的
å•é¡Œã€‚
@@ -256,64 +253,61 @@ GNU/Linux Sid或Fedora Rawhide所æ供的主線內核。一些開發人員還å°
æœç´¢ç¾æœ‰å ±å‘Šï¼ˆç¬¬ä¸€éƒ¨åˆ†ï¼‰
-------------------------
- *使用您喜愛的網絡æœå°‹å¼•æ“Žå°ç¾æœ‰å ±å‘Šé€²è¡Œç²—ç•¥æœç´¢ï¼›æ­¤å¤–,請檢查Linux內核
+ *使用您喜愛的網絡æœç´¢å¼•æ“Žå°ç¾æœ‰å ±å‘Šé€²è¡Œç²—ç•¥æœç´¢ï¼›æ­¤å¤–,請檢查Linux內核
郵件列表(LKML)的存檔。如果找到匹é…的報告,請加入討論而ä¸æ˜¯ç™¼é€æ–°å ±å‘Šã€‚*
報告一個別人已經æ出的å•é¡Œï¼Œå°æ¯å€‹äººä¾†èªªéƒ½æ˜¯æµªè²»æ™‚間,尤其是作爲報告人的你。
所以徹底檢查是å¦æœ‰äººå·²ç¶“報告了這個å•é¡Œï¼Œé€™å°ä½ è‡ªå·±æ˜¯æœ‰åˆ©çš„。在æµç¨‹ä¸­çš„這一步,
-å¯ä»¥åªåŸ·è¡Œä¸€å€‹ç²—略的æœç´¢ï¼šä¸€æ—¦æ‚¨çŸ¥é“您的å•é¡Œéœ€è¦å ±å‘Šåˆ°å“ªè£¡ï¼Œç¨å¾Œçš„步驟將告訴
+å¯ä»¥åªåŸ·è¡Œä¸€å€‹ç²—略的æœç´¢ï¼šä¸€æ—¦æ‚¨çŸ¥é“您的å•é¡Œéœ€è¦å ±å‘Šåˆ°å“ªè£ï¼Œç¨å¾Œçš„步驟將告訴
您如何詳細æœç´¢ã€‚儘管如此,ä¸è¦å€‰ä¿ƒå®Œæˆé€™ä¸€æ­¥ï¼Œå®ƒå¯ä»¥ç¯€çœæ‚¨çš„時間和減少麻煩。
-åªéœ€å…ˆç”¨ä½ æœ€å–œæ­¡çš„æœå°‹å¼•æ“Žåœ¨ç¶²éš›ç¶²è·¯ä¸Šæœç´¢ã€‚然後å†æœç´¢Linux內核郵件列表(LKML)
+åªéœ€å…ˆç”¨ä½ æœ€å–œæ­¡çš„æœç´¢å¼•æ“Žåœ¨äº’è¯ç¶²ä¸Šæœç´¢ã€‚然後å†æœç´¢Linux內核郵件列表(LKML)
存檔。
-如果æœç´¢çµæžœå¯¦åœ¨å¤ªå¤šï¼Œå¯ä»¥è€ƒæ…®è®“ä½ çš„æœå°‹å¼•æ“Žå°‡æœç´¢æ™‚間範åœé™åˆ¶åœ¨éŽåŽ»çš„一個
-月或一年。而且無論你在哪裡æœç´¢ï¼Œä¸€å®šè¦ç”¨æ°ç•¶çš„æœç´¢é—œéµè©žï¼›ä¹Ÿè¦è®ŠåŒ–幾次關éµ
-詞。åŒæ™‚,試著從別人的角度看å•é¡Œï¼šé€™å°‡å¹«åŠ©ä½ æƒ³å‡ºå…¶ä»–çš„é—œéµè©žã€‚å¦å¤–,一定ä¸
+如果æœç´¢çµæžœå¯¦åœ¨å¤ªå¤šï¼Œå¯ä»¥è€ƒæ…®è®“ä½ çš„æœç´¢å¼•æ“Žå°‡æœç´¢æ™‚間範åœé™åˆ¶åœ¨éŽåŽ»çš„一個
+月或一年。而且無論你在哪è£æœç´¢ï¼Œä¸€å®šè¦ç”¨æ°ç•¶çš„æœç´¢é—œéµè©žï¼›ä¹Ÿè¦è®ŠåŒ–幾次關éµ
+詞。åŒæ™‚,試ç€å¾žåˆ¥äººçš„角度看å•é¡Œï¼šé€™å°‡å¹«åŠ©ä½ æƒ³å‡ºå…¶ä»–çš„é—œéµè©žã€‚å¦å¤–,一定ä¸
è¦åŒæ™‚使用éŽå¤šçš„é—œéµè©žã€‚記ä½æœç´¢æ™‚è¦åŒæ™‚嘗試包å«å’Œä¸åŒ…å«å…§æ ¸é©…動程åºçš„å稱
-或å—影響的硬體組件的å稱等信æ¯ã€‚但其確切的å“牌å稱(比如說「è¯ç¢©ç´…é­” Radeon
-RX 5700 XT Gaming OCã€ï¼‰å¾€å¾€å¹«åŠ©ä¸å¤§ï¼Œå› çˆ²å®ƒå¤ªå…·é«”了。相å,嘗試æœç´¢è¡“語,如
-型號(Radeon 5700 或 Radeon 5000)和核心代號(「Naviã€æˆ–「Navi10ã€ï¼‰ï¼Œä»¥åŠåŒ…å«
-å’Œä¸åŒ…å«å…¶è£½é€ å•†ï¼ˆã€ŒAMDã€ï¼‰ã€‚
+或å—影響的硬件組件的å稱等信æ¯ã€‚但其確切的å“牌å稱(比如說“è¯ç¢©ç´…é­” Radeon
+RX 5700 XT Gaming OCâ€ï¼‰å¾€å¾€å¹«åŠ©ä¸å¤§ï¼Œå› çˆ²å®ƒå¤ªå…·é«”了。相å,嘗試æœç´¢è¡“語,如
+型號(Radeon 5700 或 Radeon 5000)和核心代號(“Naviâ€æˆ–“Navi10â€ï¼‰ï¼Œä»¥åŠåŒ…å«
+å’Œä¸åŒ…å«å…¶è£½é€ å•†ï¼ˆâ€œAMDâ€ï¼‰ã€‚
如果你發ç¾äº†é—œæ–¼ä½ çš„å•é¡Œçš„ç¾æœ‰å ±å‘Šï¼Œè«‹åŠ å…¥è¨Žè«–,因爲你å¯èƒ½æœƒæ供有價值的é¡
外信æ¯ã€‚這一點很é‡è¦ï¼Œå³ä½¿æ˜¯åœ¨ä¿®å¾©ç¨‹åºå·²ç¶“準備好或處於最後階段,因爲開發人
-å“¡å¯èƒ½æœƒå°‹æ‰¾èƒ½å¤ æä¾›é¡å¤–ä¿¡æ¯æˆ–測試建議修復程åºçš„人。跳到「發布報告後的責任ã€
-一節,了解有關如何正確åƒèˆ‡çš„細節。
+å“¡å¯èƒ½æœƒå°‹æ‰¾èƒ½å¤ æä¾›é¡å¤–ä¿¡æ¯æˆ–測試建議修復程åºçš„人。跳到“發佈報告後的責任â€
+一節,瞭解有關如何正確åƒèˆ‡çš„細節。
注æ„,æœç´¢ `bugzilla.kernel.org <https://bugzilla.kernel.org/>`_ 網站å¯èƒ½
也是一個好主æ„,因爲這å¯èƒ½æœƒæ供有價值的見解或找到匹é…的報告。如果您發ç¾å¾Œè€…,
-請記ä½ï¼šå¤§å¤šæ•¸å­ç³»çµ±éƒ½å¸Œæœ›åœ¨ä¸åŒçš„ä½ç½®å ±å‘Šï¼Œå¦‚下é¢ã€Œä½ éœ€è¦å°‡å•é¡Œå ±å‘Šåˆ°ä½•è™•ã€
+請記ä½ï¼šå¤§å¤šæ•¸å­ç³»çµ±éƒ½å¸Œæœ›åœ¨ä¸åŒçš„ä½ç½®å ±å‘Šï¼Œå¦‚下é¢â€œä½ éœ€è¦å°‡å•é¡Œå ±å‘Šåˆ°ä½•è™•â€
一節中所述。因此本應處ç†é€™å€‹å•é¡Œçš„開發人員甚至å¯èƒ½ä¸çŸ¥é“bugzilla的工單。所以
請檢查工單中的å•é¡Œæ˜¯å¦å·²ç¶“按照本文檔所述得到報告,如果沒有,請考慮這樣åšã€‚
高優先級的å•é¡Œï¼Ÿ
-----------------
- *看看你正在處ç†çš„å•é¡Œæ˜¯å¦æ˜¯å›žæ­¸å•é¡Œã€å®‰å…¨å•é¡Œæˆ–éžå¸¸åš´é‡çš„å•é¡Œï¼šé€™äº›éƒ½æ˜¯
- 需è¦åœ¨æŽ¥ä¸‹ä¾†çš„一些步驟中特別處ç†çš„「高優先級å•é¡Œã€ã€‚*
+ *看看你正在處ç†çš„å•é¡Œæ˜¯å¦æ˜¯è¿´æ­¸å•é¡Œã€å®‰å…¨å•é¡Œæˆ–éžå¸¸åš´é‡çš„å•é¡Œï¼šé€™äº›éƒ½æ˜¯
+ 需è¦åœ¨æŽ¥ä¸‹ä¾†çš„一些步驟中特別處ç†çš„“高優先級å•é¡Œâ€ã€‚*
Linus Torvalds和主è¦çš„Linux內核開發人員希望看到一些å•é¡Œå„˜å¿«å¾—到解決,因此在
-報告éŽç¨‹ä¸­æœ‰ä¸€äº›ã€Œé«˜å„ªå…ˆç´šå•é¡Œã€çš„處ç†ç•¥æœ‰ä¸åŒã€‚有三種情æ³ç¬¦åˆæ¢ä»¶:回歸ã€å®‰å…¨
+報告éŽç¨‹ä¸­æœ‰ä¸€äº›â€œé«˜å„ªå…ˆç´šå•é¡Œâ€çš„處ç†ç•¥æœ‰ä¸åŒã€‚有三種情æ³ç¬¦åˆæ¢ä»¶:è¿´æ­¸ã€å®‰å…¨
å•é¡Œå’Œéžå¸¸åš´é‡çš„å•é¡Œã€‚
-如果在舊版本的Linux內核中工作的æ±è¥¿ä¸èƒ½åœ¨æ–°ç‰ˆæœ¬çš„Linux內核中工作,或者æŸç¨®
-程度上在新版本的Linux內核中工作得更差,那麼你就需è¦è™•ç†ã€Œå›žæ­¸ã€ã€‚因此,當一個
-在Linux 5.7中表ç¾è‰¯å¥½çš„WiFi驅動程åºåœ¨5.8中表ç¾ä¸ä½³æˆ–根本ä¸èƒ½å·¥ä½œæ™‚,這是一
-種回歸。如果應用程å¼åœ¨æ–°çš„內核中出ç¾ä¸ç©©å®šçš„ç¾è±¡ï¼Œé€™ä¹Ÿæ˜¯ä¸€ç¨®å›žæ­¸ï¼Œé€™å¯èƒ½æ˜¯
-由於內核和用戶空間之間的接å£ï¼ˆå¦‚procfså’Œsysfs)發生ä¸å…¼å®¹çš„更改造æˆçš„。顯著
-的性能é™ä½Žæˆ–功耗增加也å¯ä»¥ç¨±çˆ²å›žæ­¸ã€‚但是請記ä½:新內核需è¦ä½¿ç”¨èˆ‡èˆŠå…§æ ¸ç›¸ä¼¼çš„
-é…置來構建(åƒè¦‹ä¸‹é¢å¦‚何實ç¾é€™ä¸€é»žï¼‰ã€‚這是因爲內核開發人員在實ç¾æ–°ç‰¹æ€§æ™‚有
-時無法é¿å…ä¸å…¼å®¹æ€§ï¼›ä½†æ˜¯çˆ²äº†é¿å…回歸,這些特性必須在構建é…置期間顯å¼åœ°å•“用。
+如果æŸå€‹æ‡‰ç”¨ç¨‹åºæˆ–實際用例在原先的Linux內核上é‹è¡Œè‰¯å¥½ï¼Œä½†åœ¨ä½¿ç”¨é¡žä¼¼é…置編譯的
+較新版本上效果更差ã€æˆ–者根本ä¸èƒ½ç”¨ï¼Œé‚£éº¼ä½ å°±éœ€è¦è™•ç†è¿´æ­¸å•é¡Œã€‚
+Documentation/admin-guide/reporting-regressions.rst å°æ­¤é€²è¡Œäº†æ›´è©³ç´°çš„解釋。
+它還æ供了很多你å¯èƒ½æƒ³çŸ¥é“的關於迴歸的其他信æ¯ï¼›ä¾‹å¦‚,它解釋瞭如何將您的å•é¡Œ
+添加到迴歸跟蹤列表中,以確ä¿å®ƒä¸æœƒè¢«å¿½ç•¥ã€‚
什麼是安全å•é¡Œç•™çµ¦æ‚¨è‡ªå·±åˆ¤æ–·ã€‚在繼續之å‰ï¼Œè«‹è€ƒæ…®é–±è®€
-「Documentation/translations/zh_TW/admin-guide/security-bugs.rstã€ï¼Œ
-因爲它æ供了如何最æ°ç•¶åœ°è™•ç†å®‰å…¨å•é¡Œçš„é¡å¤–細節。
+Documentation/translations/zh_CN/admin-guide/security-bugs.rst ,
+因爲它æ供瞭如何最æ°ç•¶åœ°è™•ç†å®‰å…¨å•é¡Œçš„é¡å¤–細節。
-當發生了完全無法接å—的糟糕事情時,此å•é¡Œå°±æ˜¯ä¸€å€‹ã€Œéžå¸¸åš´é‡çš„å•é¡Œã€ã€‚例如,
-Linux內核破壞了它處ç†çš„數據或æ壞了它é‹è¡Œçš„硬體。當內核çªç„¶é¡¯ç¤ºéŒ¯èª¤æ¶ˆæ¯
-(「kernel panicã€ï¼‰ä¸¦åœæ­¢å·¥ä½œï¼Œæˆ–者根本沒有任何åœæ­¢ä¿¡æ¯æ™‚,您也在處ç†ä¸€å€‹åš´é‡
-çš„å•é¡Œã€‚注æ„:ä¸è¦æ··æ·†ã€Œpanicã€ï¼ˆå…§æ ¸åœæ­¢è‡ªèº«çš„致命錯誤)和「Oopsã€ï¼ˆå¯æ¢å¾©éŒ¯èª¤ï¼‰ï¼Œ
+當發生了完全無法接å—的糟糕事情時,此å•é¡Œå°±æ˜¯ä¸€å€‹â€œéžå¸¸åš´é‡çš„å•é¡Œâ€ã€‚例如,
+Linux內核破壞了它處ç†çš„數據或æ壞了它é‹è¡Œçš„硬件。當內核çªç„¶é¡¯ç¤ºéŒ¯èª¤æ¶ˆæ¯
+(“kernel panicâ€ï¼‰ä¸¦åœæ­¢å·¥ä½œï¼Œæˆ–者根本沒有任何åœæ­¢ä¿¡æ¯æ™‚,您也在處ç†ä¸€å€‹åš´é‡
+çš„å•é¡Œã€‚注æ„:ä¸è¦æ··æ·†â€œpanicâ€ï¼ˆå…§æ ¸åœæ­¢è‡ªèº«çš„致命錯誤)和“Oopsâ€ï¼ˆå¯æ¢å¾©éŒ¯èª¤ï¼‰ï¼Œ
因爲顯示後者之後內核ä»ç„¶åœ¨é‹è¡Œã€‚
@@ -325,22 +319,22 @@ Linux內核破壞了它處ç†çš„數據或æ壞了它é‹è¡Œçš„硬體。當內核
看起來很åƒå…§æ ¸å•é¡Œçš„å•é¡Œæœ‰æ™‚是由構建或é‹è¡Œæ™‚環境引起的。很難完全排除這種å•
題,但你應該儘é‡æ¸›å°‘這種å•é¡Œï¼š
- * 構建內核時,請使用經éŽé©—證的工具,因爲編譯器或二進ä½æ–‡ä»¶ä¸­çš„錯誤å¯èƒ½æœƒå°Ž
+ * 構建內核時,請使用經éŽé©—證的工具,因爲編譯器或二進制文件中的錯誤å¯èƒ½æœƒå°Ž
致內核出ç¾éŒ¯èª¤è¡Œçˆ²ã€‚
* 確ä¿æ‚¨çš„計算機組件在其設計è¦ç¯„å…§é‹è¡Œï¼›é€™å°è™•ç†å™¨ã€å…§å­˜å’Œä¸»æ¿å°¤çˆ²é‡è¦ã€‚å› 
此,當é¢è‡¨æ½›åœ¨çš„內核å•é¡Œæ™‚,åœæ­¢ä½Žé›»å£“或超頻。
- * 儘é‡ç¢ºä¿ä¸æ˜¯ç¡¬é«”故障導致了你的å•é¡Œã€‚例如,內存æ壞會導致大é‡çš„å•é¡Œï¼Œé€™äº›
+ * 儘é‡ç¢ºä¿ä¸æ˜¯ç¡¬ä»¶æ•…障導致了你的å•é¡Œã€‚例如,內存æ壞會導致大é‡çš„å•é¡Œï¼Œé€™äº›
å•é¡Œæœƒè¡¨ç¾çˆ²çœ‹èµ·ä¾†åƒå…§æ ¸å•é¡Œã€‚
* 如果你正在處ç†ä¸€å€‹æ–‡ä»¶ç³»çµ±å•é¡Œï¼Œä½ å¯èƒ½éœ€è¦ç”¨ ``fsck`` 檢查一下文件系統,
因爲它å¯èƒ½æœƒä»¥æŸç¨®æ–¹å¼è¢«æ壞,從而導致無法é æœŸçš„內核行爲。
- * 在處ç†å›žæ­¸å•é¡Œæ™‚,è¦ç¢ºä¿æ²’有在更新內核的åŒæ™‚發生了其他變化。例如,這個å•
- é¡Œå¯èƒ½æ˜¯ç”±åŒæ™‚更新的其他軟體引起的。也有å¯èƒ½æ˜¯åœ¨ä½ ç¬¬ä¸€æ¬¡é‡å•“進入新內核時,
- æŸå€‹ç¡¬é«”å·§åˆåœ°å£žäº†ã€‚更新系統 BIOS 或改變 BIOS 設置中的æŸäº›å…§å®¹ä¹Ÿæœƒå°Žè‡´
- 一些看起來很åƒå…§æ ¸å›žæ­¸çš„å•é¡Œã€‚
+ * 在處ç†è¿´æ­¸å•é¡Œæ™‚,è¦ç¢ºä¿æ²’有在更新內核的åŒæ™‚發生了其他變化。例如,這個å•
+ é¡Œå¯èƒ½æ˜¯ç”±åŒæ™‚更新的其他軟件引起的。也有å¯èƒ½æ˜¯åœ¨ä½ ç¬¬ä¸€æ¬¡é‡å•“進入新內核時,
+ æŸå€‹ç¡¬ä»¶å·§åˆåœ°å£žäº†ã€‚更新系統 BIOS 或改變 BIOS 設置中的æŸäº›å…§å®¹ä¹Ÿæœƒå°Žè‡´
+ 一些看起來很åƒå…§æ ¸è¿´æ­¸çš„å•é¡Œã€‚
爲緊急情æ³åšå¥½æº–å‚™
@@ -349,8 +343,8 @@ Linux內核破壞了它處ç†çš„數據或æ壞了它é‹è¡Œçš„硬體。當內核
*創建一個全新的備份,並將系統修復和還原工具放在手邊*
我得æ醒您,您正在和計算機打交é“,計算機有時會出ç¾æ„想ä¸åˆ°çš„事情,尤其是當
-您折騰其作業系統的內核等關éµéƒ¨ä»¶æ™‚。而這就是你在這個éŽç¨‹ä¸­è¦åšçš„事情。因此,
-一定è¦å‰µå»ºä¸€å€‹å…¨æ–°çš„備份;還è¦ç¢ºä¿ä½ æ‰‹é ­æœ‰ä¿®å¾©æˆ–é‡è£ä½œæ¥­ç³»çµ±çš„所有工具,
+您折騰其æ“作系統的內核等關éµéƒ¨ä»¶æ™‚。而這就是你在這個éŽç¨‹ä¸­è¦åšçš„事情。因此,
+一定è¦å‰µå»ºä¸€å€‹å…¨æ–°çš„備份;還è¦ç¢ºä¿ä½ æ‰‹é ­æœ‰ä¿®å¾©æˆ–é‡è£æ“作系統的所有工具,
以åŠæ¢å¾©å‚™ä»½æ‰€éœ€çš„一切。
@@ -366,67 +360,67 @@ Linux內核破壞了它處ç†çš„數據或æ壞了它é‹è¡Œçš„硬體。當內核
的任何模塊。然後é‡æ–°å•“å‹•å†ç¹¼çºŒã€‚
注æ„,你å¯èƒ½ä¸çŸ¥é“ä½ çš„ç³»çµ±æ­£åœ¨ä½¿ç”¨é€™äº›è§£æ±ºæ–¹æ¡ˆä¹‹ä¸€ï¼šç•¶ä½ å®‰è£ Nvidia 專有圖
-形驅動程åºã€VirtualBox æˆ–å…¶ä»–éœ€è¦ Linux 內核以外的模塊支æŒçš„軟體時,它們通
-常會éœé»˜è¨­ç½®ã€‚這就是爲什麼你å¯èƒ½éœ€è¦å¸è¼‰é€™äº›è»Ÿé«”的軟體包,以擺脫任何第三方
+形驅動程åºã€VirtualBox æˆ–å…¶ä»–éœ€è¦ Linux 內核以外的模塊支æŒçš„軟件時,它們通
+常會éœé»˜è¨­ç½®ã€‚這就是爲什麼你å¯èƒ½éœ€è¦å¸è¼‰é€™äº›è»Ÿä»¶çš„軟件包,以擺脫任何第三方
內核模塊。
-檢測「汙染ã€æ¨™èªŒ
+檢查“污染â€æ¨™èªŒ
----------------
- *當å•é¡Œç™¼ç”Ÿæ™‚,檢查您的內核是å¦è¢«ã€Œæ±™æŸ“ã€ï¼Œå› çˆ²ä½¿å…§æ ¸è¨­ç½®é€™å€‹æ¨™èªŒçš„事件å¯
+ *當å•é¡Œç™¼ç”Ÿæ™‚,檢查您的內核是å¦è¢«â€œæ±¡æŸ“â€ï¼Œå› çˆ²ä½¿å…§æ ¸è¨­ç½®é€™å€‹æ¨™èªŒçš„事件å¯
能會導致您é¢è‡¨çš„å•é¡Œã€‚*
-當æŸäº›å¯èƒ½æœƒå°Žè‡´çœ‹èµ·ä¾†å®Œå…¨ä¸ç›¸é—œçš„後續錯誤的事情發生時,內核會用「汙染
-(taint)ã€æ¨™èªŒæ¨™è¨˜è‡ªå·±ã€‚如果您的內核å—到汙染,那麼您é¢è‡¨çš„å¯èƒ½æ˜¯é€™æ¨£çš„錯誤。
+當æŸäº›å¯èƒ½æœƒå°Žè‡´çœ‹èµ·ä¾†å®Œå…¨ä¸ç›¸é—œçš„後續錯誤的事情發生時,內核會用“污染
+(taint)â€æ¨™èªŒæ¨™è¨˜è‡ªå·±ã€‚如果您的內核å—到污染,那麼您é¢è‡¨çš„å¯èƒ½æ˜¯é€™æ¨£çš„錯誤。
因此在投入更多時間到這個éŽç¨‹ä¸­ä¹‹å‰ï¼Œå„˜æ—©æŽ’除此情æ³å¯èƒ½å°ä½ æœ‰å¥½è™•ã€‚這是這個
-步驟出ç¾åœ¨é€™è£¡çš„唯一原因,因爲這個éŽç¨‹ç¨å¾Œæœƒå‘Šè¨´æ‚¨å®‰è£æœ€æ–°çš„主線內核;然後
-您將需è¦å†æ¬¡æª¢æŸ¥æ±™æŸ“標誌,因爲當它出å•é¡Œçš„時候內核報告會關注它。
+步驟出ç¾åœ¨é€™è£çš„唯一原因,因爲這個éŽç¨‹ç¨å¾Œæœƒå‘Šè¨´æ‚¨å®‰è£æœ€æ–°çš„主線內核;然後
+您將需è¦å†æ¬¡æª¢æŸ¥æ±¡æŸ“標誌,因爲當它出å•é¡Œçš„時候內核報告會關注它。
-在正在é‹è¡Œçš„系統上檢查內核是å¦æ±™æŸ“éžå¸¸å®¹æ˜“:如果 ``cat /proc/sys/kernel/tainted``
-返回「0ã€ï¼Œé‚£éº¼å…§æ ¸æ²’有被汙染,一切正常。在æŸäº›æƒ…æ³ä¸‹ç„¡æ³•æª¢æŸ¥è©²æ–‡ä»¶ï¼›é€™å°±æ˜¯
-爲什麼當內核報告內部å•é¡Œï¼ˆã€Œkernel bugã€ï¼‰ã€å¯æ¢å¾©éŒ¯èª¤ï¼ˆã€Œkernel Oopsã€ï¼‰æˆ–åœæ­¢
-æ“作å‰ä¸å¯æ¢å¾©çš„錯誤(「kernel panicã€ï¼‰æ™‚,它也會æ到汙染狀態。當其中一個錯
-誤發生時,查看列å°çš„錯誤消æ¯çš„頂部,æœç´¢ä»¥ã€ŒCPU:ã€é–‹é ­çš„行。如果發ç¾å•é¡Œæ™‚å…§
-核未被汙染,那麼它應該以「Not infectedã€çµæŸï¼›å¦‚果你看到「Tainted:ã€ä¸”後跟一些
-空格和字æ¯ï¼Œé‚£å°±è¢«æ±™æŸ“了。
+在正在é‹è¡Œçš„系統上檢查內核是å¦æ±¡æŸ“éžå¸¸å®¹æ˜“:如果 ``cat /proc/sys/kernel/tainted``
+返回“0â€ï¼Œé‚£éº¼å…§æ ¸æ²’有被污染,一切正常。在æŸäº›æƒ…æ³ä¸‹ç„¡æ³•æª¢æŸ¥è©²æ–‡ä»¶ï¼›é€™å°±æ˜¯
+爲什麼當內核報告內部å•é¡Œï¼ˆâ€œkernel bugâ€ï¼‰ã€å¯æ¢å¾©éŒ¯èª¤ï¼ˆâ€œkernel Oopsâ€ï¼‰æˆ–åœæ­¢
+æ“作å‰ä¸å¯æ¢å¾©çš„錯誤(“kernel panicâ€ï¼‰æ™‚,它也會æ到污染狀態。當其中一個錯
+誤發生時,查看打å°çš„錯誤消æ¯çš„頂部,æœç´¢ä»¥â€œCPU:â€é–‹é ­çš„行。如果發ç¾å•é¡Œæ™‚å…§
+核未被污染,那麼它應該以“Not infectedâ€çµæŸï¼›å¦‚果你看到“Tainted:â€ä¸”後跟一些
+空格和字æ¯ï¼Œé‚£å°±è¢«æ±¡æŸ“了。
-如果你的內核被汙染了,請閱讀「Documentation/translations/zh_TW/admin-guide/tainted-kernels.rstã€
-以找出原因。設法消除汙染因素。通常是由以下三種因素之一引起的:
+如果你的內核被污染了,請閱讀 Documentation/translations/zh_CN/admin-guide/tainted-kernels.rst
+以找出原因。設法消除污染因素。通常是由以下三種因素之一引起的:
- 1. 發生了一個å¯æ¢å¾©çš„錯誤(「kernel Oopsã€ï¼‰ï¼Œå…§æ ¸æ±™æŸ“了自己,因爲內核知é“在
+ 1. 發生了一個å¯æ¢å¾©çš„錯誤(“kernel Oopsâ€ï¼‰ï¼Œå…§æ ¸æ±¡æŸ“了自己,因爲內核知é“在
此之後它å¯èƒ½æœƒå‡ºç¾å¥‡æ€ªçš„行爲錯亂。在這種情æ³ä¸‹ï¼Œæª¢æŸ¥æ‚¨çš„內核或系統日誌,
並尋找以下列文字開頭的部分::
Oops: 0000 [#1] SMP
- 如方括號中的「#1ã€æ‰€ç¤ºï¼Œé€™æ˜¯è‡ªå•“動以來的第一次Oops。æ¯å€‹Oops和此後發生的
+ 如方括號中的“#1â€æ‰€ç¤ºï¼Œé€™æ˜¯è‡ªå•“動以來的第一次Oops。æ¯å€‹Oops和此後發生的
任何其他å•é¡Œéƒ½å¯èƒ½æ˜¯é¦–個Oops的後續å•é¡Œï¼Œå³ä½¿é€™å…©å€‹å•é¡Œçœ‹èµ·ä¾†å®Œå…¨ä¸ç›¸é—œã€‚
通éŽæ¶ˆé™¤é¦–個Oops的原因並在之後復ç¾è©²å•é¡Œï¼Œå¯ä»¥æŽ’除這種情æ³ã€‚有時僅僅
é‡æ–°å•“動就足夠了,有時更改é…置後é‡æ–°å•“å‹•å¯ä»¥æ¶ˆé™¤Oops。但是在這個æµç¨‹ä¸­
ä¸è¦èŠ±è²»å¤ªå¤šæ™‚間在這一點上,因爲引起Oops的原因å¯èƒ½å·²ç¶“在您ç¨å¾Œå°‡æŒ‰æµç¨‹
安è£çš„æ–°Linux內核版本中修復了。
- 2. 您的系統使用的軟體安è£äº†è‡ªå·±çš„內核模塊,例如Nvidia的專有圖形驅動程åºæˆ–
- VirtualBox。當內核從外部æºï¼ˆå³ä½¿å®ƒå€‘是開æºçš„)加載此類模塊時,它會汙染
+ 2. 您的系統使用的軟件安è£äº†è‡ªå·±çš„內核模塊,例如Nvidia的專有圖形驅動程åºæˆ–
+ VirtualBox。當內核從外部æºï¼ˆå³ä½¿å®ƒå€‘是開æºçš„)加載此類模塊時,它會污染
自己:它們有時會在ä¸ç›¸é—œçš„內核å€åŸŸå°Žè‡´éŒ¯èª¤ï¼Œå¾žè€Œå¯èƒ½å°Žè‡´æ‚¨é¢è‡¨çš„å•é¡Œã€‚
因此,當您想è¦å‘Linux內核開發人員報告å•é¡Œæ™‚,您必須阻止這些模塊加載。
- 大多數情æ³ä¸‹æœ€ç°¡å–®çš„方法是:臨時å¸è¼‰é€™äº›è»Ÿé«”,包括它們å¯èƒ½å·²ç¶“安è£çš„ä»»
+ 大多數情æ³ä¸‹æœ€ç°¡å–®çš„方法是:臨時å¸è¼‰é€™äº›è»Ÿä»¶ï¼ŒåŒ…括它們å¯èƒ½å·²ç¶“安è£çš„ä»»
何模塊。之後é‡æ–°å•“動。
- 3. 當內核加載é§ç•™åœ¨Linux內核原始碼staging樹中的模塊時,它也會汙染自身。這
+ 3. 當內核加載é§ç•™åœ¨Linux內核æºä»£ç¢¼staging樹中的模塊時,它也會污染自身。這
是一個特殊的å€åŸŸï¼Œä»£ç¢¼ï¼ˆä¸»è¦æ˜¯é©…動程åºï¼‰é‚„沒有é”到正常Linux內核的質é‡
- 標準。當您報告此種模塊的å•é¡Œæ™‚,內核å—到汙染顯然是沒有å•é¡Œçš„ï¼›åªéœ€ç¢ºä¿
- å•é¡Œæ¨¡å¡Šæ˜¯é€ æˆæ±™æŸ“的唯一原因。如果å•é¡Œç™¼ç”Ÿåœ¨ä¸€å€‹ä¸ç›¸é—œçš„å€åŸŸï¼Œé‡æ–°å•“å‹•
+ 標準。當您報告此種模塊的å•é¡Œæ™‚,內核å—到污染顯然是沒有å•é¡Œçš„ï¼›åªéœ€ç¢ºä¿
+ å•é¡Œæ¨¡å¡Šæ˜¯é€ æˆæ±¡æŸ“的唯一原因。如果å•é¡Œç™¼ç”Ÿåœ¨ä¸€å€‹ä¸ç›¸é—œçš„å€åŸŸï¼Œé‡æ–°å•“å‹•
並通éŽæŒ‡å®š ``foo.blacklist=1`` 作爲內核åƒæ•¸è‡¨æ™‚阻止該模塊被加載(用有
- å•é¡Œçš„模塊å替æ›ã€Œfooã€ï¼‰ã€‚
+ å•é¡Œçš„模塊å替æ›â€œfooâ€ï¼‰ã€‚
記錄如何é‡ç¾å•é¡Œ
------------------
*粗略地寫下如何é‡ç¾é€™å€‹å•é¡Œã€‚如果您åŒæ™‚處ç†å¤šå€‹å•é¡Œï¼Œè«‹çˆ²æ¯å€‹å•é¡Œå–®ç¨å¯«
- 注釋,並確ä¿å®ƒå€‘在新啓動的系統上ç¨ç«‹å‡ºç¾ã€‚這是必è¦çš„,因爲æ¯å€‹å•é¡Œéƒ½éœ€
+ 註釋,並確ä¿å®ƒå€‘在新啓動的系統上ç¨ç«‹å‡ºç¾ã€‚這是必è¦çš„,因爲æ¯å€‹å•é¡Œéƒ½éœ€
è¦åˆ†åˆ¥å ±å‘Šçµ¦å…§æ ¸é–‹ç™¼äººå“¡ï¼Œé™¤éžå®ƒå€‘åš´é‡ç³¾çºåœ¨ä¸€èµ·ã€‚*
如果你åŒæ™‚處ç†å¤šå€‹å•é¡Œï¼Œå¿…須分別報告æ¯å€‹å•é¡Œï¼Œå› çˆ²å®ƒå€‘å¯èƒ½ç”±ä¸åŒçš„開發人員
@@ -438,20 +432,20 @@ Linux內核破壞了它處ç†çš„數據或æ壞了它é‹è¡Œçš„硬體。當內核
注æ„:報告åªç™¼ç”ŸéŽä¸€æ¬¡çš„å•é¡Œå¾€å¾€æ˜¯æ²’有çµæžœçš„,因爲它們å¯èƒ½æ˜¯ç”±æ–¼å®‡å®™è¼»å°„å°Ž
致的ä½ç¿»è½‰ã€‚所以你應該嘗試通éŽé‡ç¾å•é¡Œä¾†æŽ’除這種情æ³ï¼Œç„¶å¾Œå†ç¹¼çºŒã€‚如果你有
-足夠的經驗來å€åˆ†ç”±æ–¼ç¡¬é«”故障引起的一次性錯誤和難以é‡ç¾çš„罕見內核å•é¡Œï¼Œå¯ä»¥
+足夠的經驗來å€åˆ†ç”±æ–¼ç¡¬ä»¶æ•…障引起的一次性錯誤和難以é‡ç¾çš„罕見內核å•é¡Œï¼Œå¯ä»¥
忽略這個建議。
-穩定版或長期支æŒå…§æ ¸çš„回歸?
+穩定版或長期支æŒå…§æ ¸çš„迴歸?
-----------------------------
- *如果您正é¢è‡¨ç©©å®šç‰ˆæˆ–長期支æŒç‰ˆæœ¬ç·šçš„回歸(例如從5.10.4更新到5.10.5時出ç¾
- 故障),請查看後文「報告穩定版和長期支æŒå…§æ ¸ç·šçš„回歸ã€å°ç¯€ã€‚*
+ *如果您正é¢è‡¨ç©©å®šç‰ˆæˆ–長期支æŒç‰ˆæœ¬ç·šçš„迴歸(例如從5.10.4更新到5.10.5時出ç¾
+ 故障),請查看後文“報告穩定版和長期支æŒå…§æ ¸ç·šçš„è¿´æ­¸â€å°ç¯€ã€‚*
-穩定版和長期支æŒå…§æ ¸ç‰ˆæœ¬ç·šä¸­çš„回歸是Linux開發人員éžå¸¸å¸Œæœ›è§£æ±ºçš„å•é¡Œï¼Œé€™æ¨£çš„
-å•é¡Œç”šè‡³æ¯”主線開發分支中的回歸更ä¸æ‡‰å‡ºç¾ï¼Œå› çˆ²å®ƒå€‘會很快影響到很多人。開發人員
-希望儘快了解此類å•é¡Œï¼Œå› æ­¤æœ‰ä¸€å€‹ç°¡åŒ–æµç¨‹ä¾†å ±å‘Šé€™äº›å•é¡Œã€‚注æ„,使用更新內核版
-本線的回歸(比如從5.9.15切æ›åˆ°5.10.5時出ç¾æ•…障)ä¸ç¬¦åˆæ¢ä»¶ã€‚
+穩定版和長期支æŒå…§æ ¸ç‰ˆæœ¬ç·šä¸­çš„迴歸是Linux開發人員éžå¸¸å¸Œæœ›è§£æ±ºçš„å•é¡Œï¼Œé€™æ¨£çš„
+å•é¡Œç”šè‡³æ¯”主線開發分支中的迴歸更ä¸æ‡‰å‡ºç¾ï¼Œå› çˆ²å®ƒå€‘會很快影響到很多人。開發人員
+希望儘快瞭解此類å•é¡Œï¼Œå› æ­¤æœ‰ä¸€å€‹ç°¡åŒ–æµç¨‹ä¾†å ±å‘Šé€™äº›å•é¡Œã€‚注æ„,使用更新內核版
+本線的迴歸(比如從5.9.15切æ›åˆ°5.10.5時出ç¾æ•…障)ä¸ç¬¦åˆæ¢ä»¶ã€‚
你需è¦å°‡å•é¡Œå ±å‘Šåˆ°ä½•è™•
@@ -462,9 +456,9 @@ Linux內核破壞了它處ç†çš„數據或æ壞了它é‹è¡Œçš„硬體。當內核
éŽéƒµä»¶ç™¼é€çµ¦ç¶­è­·äººå“¡å’Œå…¬å…±éƒµä»¶åˆ—表。*
將報告發é€çµ¦åˆé©çš„人是至關é‡è¦çš„,因爲Linux內核是一個大項目,大多數開發人員
-åªç†Ÿæ‚‰å…¶ä¸­çš„一å°éƒ¨åˆ†ã€‚例如,相當多的程å¼è¨­è¨ˆå¸«åªé—œå¿ƒä¸€å€‹é©…動程åºï¼Œæ¯”如一個WiFi
-晶片驅動程åºï¼›å®ƒçš„開發人員å¯èƒ½å°ç–é çš„或ä¸ç›¸é—œçš„「å­ç³»çµ±ã€ï¼ˆå¦‚TCP堆棧ã€
-PCIe/PCIå­ç³»çµ±ã€å…§å­˜ç®¡ç†æˆ–文件系統)的內部知識了解很少或完全ä¸äº†è§£ã€‚
+åªç†Ÿæ‚‰å…¶ä¸­çš„一å°éƒ¨åˆ†ã€‚例如,相當多的程åºå“¡åªé—œå¿ƒä¸€å€‹é©…動程åºï¼Œæ¯”如一個WiFi
+芯片驅動程åºï¼›å®ƒçš„開發人員å¯èƒ½å°ç–é çš„或ä¸ç›¸é—œçš„“å­ç³»çµ±â€ï¼ˆå¦‚TCP堆棧ã€
+PCIe/PCIå­ç³»çµ±ã€å…§å­˜ç®¡ç†æˆ–文件系統)的內部知識瞭解很少或完全ä¸çž­è§£ã€‚
å•é¡Œåœ¨æ–¼ï¼šLinux內核缺少一個,å¯ä»¥ç°¡å–®åœ°å°‡å•é¡Œæ­¸æª”並讓需è¦äº†è§£å®ƒçš„開發人員了
解它的,中心化缺陷跟蹤器。這就是爲什麼你必須找到正確的途徑來自己報告å•é¡Œã€‚
@@ -476,10 +470,10 @@ PCIe/PCIå­ç³»çµ±ã€å…§å­˜ç®¡ç†æˆ–文件系統)的內部知識了解很少或
爲了說明如何使用 :ref:`MAINTAINERS <maintainers>` 文件,讓我們å‡è¨­æ‚¨çš„筆記
本電腦中的WiFi在更新內核後çªç„¶å‡ºç¾äº†éŒ¯èª¤è¡Œçˆ²ã€‚這種情æ³ä¸‹å¯èƒ½æ˜¯WiFié©…å‹•çš„å•
-題。顯然,它也å¯èƒ½ç”±æ–¼é©…動基於的æŸäº›ä»£ç¢¼ï¼Œä½†é™¤éžä½ æ‡·ç–‘有這樣的æ±è¥¿æœƒé™„著在
-驅動程åºä¸Šã€‚如果真的是其他的å•é¡Œï¼Œé©…動程åºçš„開發人員會讓åˆé©çš„人åƒèˆ‡é€²ä¾†ã€‚
+題。顯然,它也å¯èƒ½ç”±æ–¼é©…動基於的æŸäº›ä»£ç¢¼ï¼Œä½†é™¤éžä½ æ‡·ç–‘有這樣的æ±è¥¿æœƒé™„ç€åœ¨
+驅動程åºä¸Šã€‚如果真的是其他的å•é¡Œï¼Œé©…動程åºçš„開發人員會讓åˆé©çš„人蔘與進來。
-éºæ†¾çš„是,沒有通用且簡單的辦法來檢查哪個代碼驅動了特定硬體組件。
+éºæ†¾çš„是,沒有通用且簡單的辦法來檢查哪個代碼驅動了特定硬件組件。
在WiFi驅動出ç¾å•é¡Œçš„情æ³ä¸‹ï¼Œä½ å¯èƒ½æƒ³æŸ¥çœ‹ ``lspci -k`` 的輸出,因爲它列出了
PCI/PCIe總線上的設備和驅動它的內核模塊::
@@ -492,19 +486,19 @@ PCI/PCIe總線上的設備和驅動它的內核模塊::
Kernel modules: ath10k_pci
[...]
-但如果你的WiFi晶片通éŽUSB或其他內部總線連接,這種方法就行ä¸é€šäº†ã€‚在這種情æ³
+但如果你的WiFi芯片通éŽUSB或其他內部總線連接,這種方法就行ä¸é€šäº†ã€‚在這種情æ³
下,您å¯èƒ½éœ€è¦æª¢æŸ¥æ‚¨çš„WiFi管ç†å™¨æˆ– ``ip link`` 的輸出。尋找有å•é¡Œçš„網絡接å£
-çš„å稱,它å¯èƒ½é¡žä¼¼æ–¼ã€Œwlp58s0ã€ã€‚æ­¤å稱å¯ä»¥ç”¨ä¾†æ‰¾åˆ°é©…動它的模塊::
+çš„å稱,它å¯èƒ½é¡žä¼¼æ–¼â€œwlp58s0â€ã€‚æ­¤å稱å¯ä»¥ç”¨ä¾†æ‰¾åˆ°é©…動它的模塊::
[user@something ~]$ realpath --relative-to=/sys/module//sys/class/net/wlp58s0/device/driver/module
ath10k_pci
如果這些技巧ä¸èƒ½é€²ä¸€æ­¥å¹«åŠ©æ‚¨ï¼Œè«‹å˜—試在網上æœç´¢å¦‚何縮å°ç›¸é—œé©…動程åºæˆ–å­ç³»çµ±
-的範åœã€‚如果你ä¸ç¢ºå®šæ˜¯å“ªä¸€å€‹ï¼šè©¦è‘—猜一下,å³ä½¿ä½ çŒœå¾—ä¸å¥½ï¼Œä¹Ÿæœƒæœ‰äººæœƒå¹«åŠ©ä½ 
+的範åœã€‚如果你ä¸ç¢ºå®šæ˜¯å“ªä¸€å€‹ï¼šè©¦ç€çŒœä¸€ä¸‹ï¼Œå³ä½¿ä½ çŒœå¾—ä¸å¥½ï¼Œä¹Ÿæœƒæœ‰äººæœƒå¹«åŠ©ä½ 
的。
一旦您知é“了相應的驅動程åºæˆ–å­ç³»çµ±ï¼Œæ‚¨å°±å¸Œæœ›åœ¨MAINTAINERS文件中æœç´¢å®ƒã€‚如果
-是「ath10k_pciã€ï¼Œæ‚¨ä¸æœƒæ‰¾åˆ°ä»»ä½•æ±è¥¿ï¼Œå› çˆ²å稱太具體了。有時你需è¦åœ¨ç¶²ä¸Šå°‹æ‰¾
+是“ath10k_pciâ€ï¼Œæ‚¨ä¸æœƒæ‰¾åˆ°ä»»ä½•æ±è¥¿ï¼Œå› çˆ²å稱太具體了。有時你需è¦åœ¨ç¶²ä¸Šå°‹æ‰¾
幫助;但在此之å‰ï¼Œè«‹å˜—試使用一個ç¨çŸ­æˆ–修改éŽçš„å稱來æœç´¢MAINTAINERS文件,因
爲這樣你å¯èƒ½æœƒç™¼ç¾é¡žä¼¼é€™æ¨£çš„æ±è¥¿::
@@ -516,23 +510,23 @@ PCI/PCIe總線上的設備和驅動它的內核模塊::
SCM: git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
Files: drivers/net/wireless/ath/ath10k/
-注æ„:如果您閱讀在Linux原始碼樹的根目錄中找到的原始維護者文件,則行æ述將是
-縮寫。例如,「Mail:(郵件)ã€å°‡æ˜¯ã€ŒM:ã€ï¼Œã€ŒMailing list:(郵件列表)ã€å°‡æ˜¯ã€ŒLã€ï¼Œ
-「Status:(狀態)ã€å°‡æ˜¯ã€ŒS:ã€ã€‚此文件頂部有一段解釋了這些和其他縮寫。
+注æ„:如果您閱讀在Linuxæºä»£ç¢¼æ¨¹çš„根目錄中找到的原始維護者文件,則行æ述將是
+縮寫。例如,“Mail:(郵件)â€å°‡æ˜¯â€œM:â€ï¼Œâ€œMailing list:(郵件列表)â€å°‡æ˜¯â€œLâ€ï¼Œ
+“Status:(狀態)â€å°‡æ˜¯â€œS:â€ã€‚此文件頂部有一段解釋了這些和其他縮寫。
-首先查看「Statusã€ç‹€æ…‹è¡Œã€‚ç†æƒ³æƒ…æ³ä¸‹ï¼Œå®ƒæ‡‰è©²å¾—到「Supported(支æŒï¼‰ã€æˆ–
-「Maintained(維護)ã€ã€‚如果狀態爲「Obsolete(éŽæ™‚的)ã€ï¼Œé‚£éº¼ä½ åœ¨ä½¿ç”¨ä¸€äº›éŽæ™‚çš„
-方法,需è¦è½‰æ›åˆ°æ–°çš„解決方案上。有時候,åªæœ‰åœ¨æ„Ÿåˆ°æœ‰å‹•åŠ›æ™‚,æ‰æœƒæœ‰äººçˆ²ä»£ç¢¼
-æ供「Odd Fixesã€ã€‚如果碰見「Orphanã€ï¼Œä½ å°±å®Œå…¨ä¸èµ°é‹äº†ï¼Œå› çˆ²å†ä¹Ÿæ²’有人關心代碼
-了,åªå‰©ä¸‹é€™äº›é¸é …:準備好與å•é¡Œå…±å­˜ï¼Œè‡ªå·±ä¿®å¾©å®ƒï¼Œæˆ–者找一個願æ„修復它的程å¼è¨­è¨ˆå¸«ã€‚
+首先查看“Statusâ€ç‹€æ…‹è¡Œã€‚ç†æƒ³æƒ…æ³ä¸‹ï¼Œå®ƒæ‡‰è©²å¾—到“Supported(支æŒï¼‰â€æˆ–
+“Maintained(維護)â€ã€‚如果狀態爲“Obsolete(éŽæ™‚的)â€ï¼Œé‚£éº¼ä½ åœ¨ä½¿ç”¨ä¸€äº›éŽæ™‚çš„
+方法,需è¦è½‰æ›åˆ°æ–°çš„解決方案上。有時候,åªæœ‰åœ¨æ„Ÿåˆ°æœ‰å‹•åŠ›æ™‚,纔會有人爲代碼
+æ供“Odd Fixesâ€ã€‚如果碰見“Orphanâ€ï¼Œä½ å°±å®Œå…¨ä¸èµ°é‹äº†ï¼Œå› çˆ²å†ä¹Ÿæ²’有人關心代碼
+了,åªå‰©ä¸‹é€™äº›é¸é …:準備好與å•é¡Œå…±å­˜ï¼Œè‡ªå·±ä¿®å¾©å®ƒï¼Œæˆ–者找一個願æ„修復它的程åºå“¡ã€‚
-檢查狀態後,尋找以「bug:ã€é–‹é ­çš„一行:它將告訴你在哪裡å¯ä»¥æ‰¾åˆ°å­ç³»çµ±ç‰¹å®šçš„缺
+檢查狀態後,尋找以“bug:â€é–‹é ­çš„一行:它將告訴你在哪è£å¯ä»¥æ‰¾åˆ°å­ç³»çµ±ç‰¹å®šçš„缺
陷跟蹤器來æ交你的å•é¡Œã€‚上é¢çš„例å­æ²’有此行。大多數部分都是這樣,因爲 Linux
內核的開發完全是由郵件驅動的。很少有å­ç³»çµ±ä½¿ç”¨ç¼ºé™·è·Ÿè¹¤å™¨ï¼Œä¸”其中åªæœ‰ä¸€éƒ¨åˆ†
ä¾è³´æ–¼ bugzilla.kernel.org。
-在這種以åŠå…¶ä»–很多情æ³ä¸‹ï¼Œä½ å¿…須尋找以「Mail:ã€é–‹é ­çš„行。這些行æ到了特定代碼
-的維護者的å字和電å­éƒµä»¶åœ°å€ã€‚也å¯ä»¥æŸ¥æ‰¾ä»¥ã€ŒMailing list:ã€é–‹é ­çš„行,它告訴你
+在這種以åŠå…¶ä»–很多情æ³ä¸‹ï¼Œä½ å¿…須尋找以“Mail:â€é–‹é ­çš„行。這些行æ到了特定代碼
+的維護者的å字和電å­éƒµä»¶åœ°å€ã€‚也å¯ä»¥æŸ¥æ‰¾ä»¥â€œMailing list:â€é–‹é ­çš„行,它告訴你
開發代碼的公共郵件列表。你的報告之後需è¦é€šéŽéƒµä»¶ç™¼åˆ°é€™äº›åœ°å€ã€‚å¦å¤–,å°æ–¼æ‰€æœ‰
通éŽé›»å­éƒµä»¶ç™¼é€çš„å•é¡Œå ±å‘Šï¼Œä¸€å®šè¦æŠ„é€ Linux Kernel Mailing List(LKML)
<linux-kernel@vger.kernel.org>。在以後通éŽéƒµä»¶ç™¼é€å•é¡Œå ±å‘Šæ™‚,ä¸è¦éºæ¼ä»»ä½•
@@ -544,8 +538,8 @@ PCI/PCIe總線上的設備和驅動它的內核模塊::
~~~~~~~~~~~~~~~~~~~~
å°æ–¼æ‰‹é ­æœ‰Linuxæºç¢¼çš„人來說,有第二個å¯ä»¥æ‰¾åˆ°åˆé©çš„報告地點的é¸æ“‡ï¼šè…³æœ¬
-「scripts/get_maintainer.plã€ï¼Œå®ƒå˜—試找到所有è¦è¯ç¹«çš„人。它會查詢MAINTAINERS
-文件,並需è¦ç”¨ç›¸é—œåŽŸå§‹ç¢¼çš„路徑來調用。å°æ–¼ç·¨è­¯æˆæ¨¡å¡Šçš„驅動程åºï¼Œç¶“常å¯ä»¥ç”¨
+“scripts/get_maintainer.plâ€ï¼Œå®ƒå˜—試找到所有è¦è¯ç¹«çš„人。它會查詢MAINTAINERS
+文件,並需è¦ç”¨ç›¸é—œæºä»£ç¢¼çš„路徑來調用。å°æ–¼ç·¨è­¯æˆæ¨¡å¡Šçš„驅動程åºï¼Œç¶“常å¯ä»¥ç”¨
這樣的命令找到::
$ modinfo ath10k_pci | grep filename | sed 's!/lib/modules/.*/kernel/!!; s!filename:!!; s!\.ko\(\|\.xz\)!!'
@@ -561,13 +555,13 @@ PCI/PCIe總線上的設備和驅動它的內核模塊::
netdev@vger.kernel.org (open list:NETWORKING DRIVERS)
linux-kernel@vger.kernel.org (open list)
-ä¸è¦æŠŠä½ çš„報告發給所有的人。發é€çµ¦ç¶­è­·è€…,腳本稱之爲「supporter:ã€ï¼›å¦å¤–抄é€
+ä¸è¦æŠŠä½ çš„報告發給所有的人。發é€çµ¦ç¶­è­·è€…,腳本稱之爲“supporter:â€ï¼›å¦å¤–抄é€
ä»£ç¢¼æœ€ç›¸é—œçš„éƒµä»¶åˆ—è¡¨ï¼Œä»¥åŠ Linux 內核郵件列表(LKML)。在此例中,你需è¦å°‡å ±
-告發é€çµ¦ 「Some Human <shuman@example.com>〠,並抄é€
-「ath10k@lists.infradead.orgã€å’Œã€Œlinux-kernel@vger.kernel.orgã€ã€‚
+告發é€çµ¦ “Some Human <shuman@example.com>†,並抄é€
+“ath10k@lists.infradead.orgâ€å’Œâ€œlinux-kernel@vger.kernel.orgâ€ã€‚
-注æ„:如果你用 git 克隆了 Linux 原始碼,你å¯èƒ½éœ€è¦ç”¨--git å†æ¬¡èª¿ç”¨
-get_maintainer.pl。腳本會查看æ交歷å²ï¼Œä»¥æ‰¾åˆ°æœ€è¿‘哪些人åƒèˆ‡äº†ç›¸é—œä»£ç¢¼çš„編寫,
+注æ„:如果你用 git 克隆了 Linux æºä»£ç¢¼ï¼Œä½ å¯èƒ½éœ€è¦ç”¨--git å†æ¬¡èª¿ç”¨
+get_maintainer.pl。腳本會查看æ交歷å²ï¼Œä»¥æ‰¾åˆ°æœ€è¿‘哪些人蔘與了相關代碼的編寫,
因爲他們å¯èƒ½æœƒæ供幫助。但è¦å°å¿ƒä½¿ç”¨é€™äº›çµæžœï¼Œå› çˆ²å®ƒå¾ˆå®¹æ˜“讓你誤入歧途。
例如,這種情æ³å¸¸å¸¸æœƒç™¼ç”Ÿåœ¨å¾ˆå°‘被修改的地方(比如è€èˆŠçš„或未維護的驅動程åºï¼‰ï¼š
有時這樣的代碼會在樹級清ç†æœŸé–“被根本ä¸é—œå¿ƒæ­¤é©…動程åºçš„開發者修改。
@@ -580,73 +574,74 @@ get_maintainer.pl。腳本會查看æ交歷å²ï¼Œä»¥æ‰¾åˆ°æœ€è¿‘哪些人åƒèˆ‡
如果找到匹é…的報告,請加入討論而ä¸æ˜¯ç™¼é€æ–°å ±å‘Šã€‚*
如å‰æ‰€è¿°ï¼šå ±å‘Šä¸€å€‹åˆ¥äººå·²ç¶“æ出的å•é¡Œï¼Œå°æ¯å€‹äººä¾†èªªéƒ½æ˜¯æµªè²»æ™‚間,尤其是作爲報告
-人的你。這就是爲什麼你應該å†æ¬¡æœç´¢ç¾æœ‰çš„報告。ç¾åœ¨ä½ å·²ç¶“知é“å•é¡Œéœ€è¦å ±å‘Šåˆ°å“ªè£¡ã€‚
+人的你。這就是爲什麼你應該å†æ¬¡æœç´¢ç¾æœ‰çš„報告。ç¾åœ¨ä½ å·²ç¶“知é“å•é¡Œéœ€è¦å ±å‘Šåˆ°å“ªè£ã€‚
如果是郵件列表,那麼一般在 `lore.kernel.org <https://lore.kernel.org/>`_ å¯ä»¥
找到相應存檔。
但有些列表é‹è¡Œåœ¨å…¶ä»–地方。例如å‰é¢æ­¥é©Ÿä¸­ç•¶ä¾‹å­çš„ath10k WiFi驅動程åºå°±æ˜¯é€™ç¨®
-情æ³ã€‚但是你通常å¯ä»¥åœ¨ç¶²ä¸Šå¾ˆå®¹æ˜“地找到這些列表的檔案。例如æœç´¢ã€Œarchive
-ath10k@lists.infradead.orgã€ï¼Œå°‡å¼•å°Žæ‚¨åˆ°ath10k郵件列表的信æ¯é ï¼Œè©²é é¢é ‚部連çµ
+情æ³ã€‚但是你通常å¯ä»¥åœ¨ç¶²ä¸Šå¾ˆå®¹æ˜“地找到這些列表的檔案。例如æœç´¢â€œarchive
+ath10k@lists.infradead.orgâ€ï¼Œå°‡å¼•å°Žæ‚¨åˆ°ath10k郵件列表的信æ¯é ï¼Œè©²é é¢é ‚部éˆæŽ¥
到其 `列表存檔 <https://lists.infradead.org/pipermail/ath10k/>`_ 。éºæ†¾çš„是,
-這個列表和其他一些列表缺ä¹æœç´¢å…¶å­˜æª”的功能。在這種情æ³ä¸‹å¯ä»¥ä½¿ç”¨å¸¸è¦çš„網際網路
-æœå°‹å¼•æ“Žï¼Œä¸¦æ·»åŠ é¡žä¼¼ã€Œsite:lists.infadead.org/pipermail/ath10k/ã€é€™
-樣的æœç´¢æ¢ä»¶ï¼Œé€™æœƒæŠŠçµæžœé™åˆ¶åœ¨è©²é€£çµä¸­çš„檔案。
+這個列表和其他一些列表缺ä¹æœç´¢å…¶å­˜æª”的功能。在這種情æ³ä¸‹å¯ä»¥ä½¿ç”¨å¸¸è¦çš„互è¯ç¶²
+æœç´¢å¼•æ“Žï¼Œä¸¦æ·»åŠ é¡žä¼¼â€œsite:lists.infadead.org/pipermail/ath10k/â€é€™
+樣的æœç´¢æ¢ä»¶ï¼Œé€™æœƒæŠŠçµæžœé™åˆ¶åœ¨è©²éˆæŽ¥ä¸­çš„檔案。
-也請進一步æœç´¢ç¶²çµ¡ã€LKMLå’Œbugzilla.kernel.org網站。
+也請進一步æœç´¢ç¶²çµ¡ã€LKMLå’Œbugzilla.kernel.org網站。如果你的報告需è¦ç™¼é€åˆ°ç¼ºé™·
+跟蹤器中,那麼您å¯èƒ½é‚„需è¦æª¢æŸ¥å­ç³»çµ±çš„郵件列表存檔,因爲å¯èƒ½æœ‰äººåªåœ¨é‚£è£å ±å‘Šäº†å®ƒã€‚
-有關如何æœç´¢ä»¥åŠåœ¨æ‰¾åˆ°åŒ¹é…報告時如何æ“作的詳細信æ¯ï¼Œè«‹åƒé–±ä¸Šé¢çš„「æœç´¢ç¾æœ‰å ±å‘Š
-(第一部分)ã€ã€‚
+有關如何æœç´¢ä»¥åŠåœ¨æ‰¾åˆ°åŒ¹é…報告時如何æ“作的詳細信æ¯ï¼Œè«‹åƒé–±ä¸Šé¢çš„“æœç´¢ç¾æœ‰å ±å‘Š
+(第一部分)â€ã€‚
-ä¸è¦æ€¥è‘—完æˆå ±å‘ŠéŽç¨‹çš„這一步:花30到60分é˜ç”šè‡³æ›´å¤šçš„時間å¯ä»¥çˆ²ä½ å’Œå…¶ä»–äººç¯€çœ /
+ä¸è¦æ€¥ç€å®Œæˆå ±å‘ŠéŽç¨‹çš„這一步:花30到60分é˜ç”šè‡³æ›´å¤šçš„時間å¯ä»¥çˆ²ä½ å’Œå…¶ä»–äººç¯€çœ /
減少相當多的時間和麻煩。
安è£ä¸€å€‹æ–°çš„內核進行測試
--------------------------
- *除éžæ‚¨å·²ç¶“在é‹è¡Œæœ€æ–°çš„「主線ã€Linux內核,å¦å‰‡æœ€å¥½åœ¨å ±å‘Šæµç¨‹å‰å®‰è£å®ƒã€‚在
- æŸäº›æƒ…æ³ä¸‹ï¼Œä½¿ç”¨æœ€æ–°çš„「穩定版ã€Linux進行測試和報告也是å¯ä»¥æŽ¥å—的替代方案;
+ *除éžæ‚¨å·²ç¶“在é‹è¡Œæœ€æ–°çš„“主線â€Linux內核,å¦å‰‡æœ€å¥½åœ¨å ±å‘Šæµç¨‹å‰å®‰è£å®ƒã€‚在
+ æŸäº›æƒ…æ³ä¸‹ï¼Œä½¿ç”¨æœ€æ–°çš„“穩定版â€Linux進行測試和報告也是å¯ä»¥æŽ¥å—的替代方案;
在åˆä½µçª—å£æœŸé–“,這實際上å¯èƒ½æ˜¯æœ€å¥½çš„方法,但在開發階段最好還是暫åœå¹¾å¤©ã€‚
- ç„¡è«–ä½ é¸æ“‡ä»€éº¼ç‰ˆæœ¬ï¼Œæœ€å¥½ä½¿ç”¨ã€Œæ™®é€šã€æ§‹å»ºã€‚忽略這些建議會大大增加您的報告
+ ç„¡è«–ä½ é¸æ“‡ä»€éº¼ç‰ˆæœ¬ï¼Œæœ€å¥½ä½¿ç”¨â€œæ™®é€šâ€æ§‹å»ºã€‚忽略這些建議會大大增加您的報告
被拒絕或忽略的風險。*
-正如第一步的詳細解釋中所æ到的:與大多數程å¼è¨­è¨ˆå¸«ä¸€æ¨£ï¼Œèˆ‡å¤§å¤šæ•¸ç¨‹å¼è¨­è¨ˆå¸«ä¸€æ¨£ï¼ŒLinux
-內核開發人員ä¸å–œæ­¡èŠ±æ™‚間處ç†ä»–們維護的原始碼中根本ä¸æœƒç™¼ç”Ÿçš„å•é¡Œçš„報告。這隻
+正如第一步的詳細解釋中所æ到的:與大多數程åºå“¡ä¸€æ¨£ï¼Œèˆ‡å¤§å¤šæ•¸ç¨‹åºå“¡ä¸€æ¨£ï¼ŒLinux
+內核開發人員ä¸å–œæ­¡èŠ±æ™‚間處ç†ä»–們維護的æºä»£ç¢¼ä¸­æ ¹æœ¬ä¸æœƒç™¼ç”Ÿçš„å•é¡Œçš„報告。這隻
會浪費æ¯å€‹äººçš„時間,尤其是你的時間。這就是爲什麼在報告å•é¡Œä¹‹å‰ï¼Œæ‚¨å¿…須先確èª
å•é¡Œä»ç„¶å­˜åœ¨æ–¼æœ€æ–°çš„上游代碼中,這符åˆæ¯å€‹äººçš„利益。您å¯ä»¥å¿½ç•¥æ­¤å»ºè­°ï¼Œä½†å¦‚å‰
所述:這樣åšæœƒæ¥µå¤§åœ°å¢žåŠ å•é¡Œå ±å‘Šè¢«æ‹’絕或被忽略的風險。
-內核「最新上游ã€çš„範åœé€šå¸¸æŒ‡ï¼š
+內核“最新上游â€çš„範åœé€šå¸¸æŒ‡ï¼š
* 安è£ä¸€å€‹ä¸»ç·šå…§æ ¸ï¼›æœ€æ–°çš„穩定版內核也å¯ä»¥æ˜¯ä¸€å€‹é¸æ“‡ï¼Œä½†å¤§å¤šæ•¸æ™‚候都最好é¿å…。
- 長期支æŒå…§æ ¸ï¼ˆæœ‰æ™‚稱爲「LTS內核ã€ï¼‰ä¸é©åˆæ­¤æµç¨‹ã€‚下一å°ç¯€å°‡æ›´è©³ç´°åœ°è§£é‡‹æ‰€æœ‰
+ 長期支æŒå…§æ ¸ï¼ˆæœ‰æ™‚稱爲“LTS內核â€ï¼‰ä¸é©åˆæ­¤æµç¨‹ã€‚下一å°ç¯€å°‡æ›´è©³ç´°åœ°è§£é‡‹æ‰€æœ‰
這些。
* 下一å°ç¯€æè¿°ç²å–和安è£é€™æ¨£ä¸€å€‹å…§æ ¸çš„方法。它還指出了使用é ç·¨è­¯å…§æ ¸æ˜¯å¯ä»¥çš„,
- 但普通的內核更好,這æ„味著:它是直接使用從 `kernel.org <https://kernel.org/>`_
- ç²å¾—çš„Linux原始碼構建並且沒有任何方å¼ä¿®æ”¹æˆ–增強。
+ 但普通的內核更好,這æ„味ç€ï¼šå®ƒæ˜¯ç›´æŽ¥ä½¿ç”¨å¾ž `kernel.org <https://kernel.org/>`_
+ ç²å¾—çš„Linuxæºä»£ç¢¼æ§‹å»ºä¸¦ä¸”沒有任何方å¼ä¿®æ”¹æˆ–增強。
é¸æ“‡é©åˆæ¸¬è©¦çš„版本
~~~~~~~~~~~~~~~~~~~~
-å‰å¾€ `kernel.org <https://kernel.org/>`_ 來決定使用哪個版本。忽略那個寫著
-「Latest release最新版本ã€çš„巨大黃色按鈕,往下看有一個表格。在表格的頂部,你會
-看到一行以「mainlineã€é–‹é ­çš„字樣,大多數情æ³ä¸‹å®ƒæœƒæŒ‡å‘一個版本號類似「5.8-rc2ã€
-çš„é ç™¼å¸ƒç‰ˆæœ¬ã€‚如果是這樣的話,你將需è¦ä½¿ç”¨é€™å€‹ä¸»ç·šå…§æ ¸é€²è¡Œæ¸¬è©¦ã€‚ä¸è¦è®“「rcã€
-嚇到你,這些「開發版內核ã€å¯¦éš›ä¸Šéžå¸¸å¯é â€”—而且你已經按照上é¢çš„指示åšäº†å‚™ä»½ï¼Œ
+å‰å¾€ `kernel.org <https://kernel.org/>`_ 來決定使用哪個版本。忽略那個寫ç€
+“Latest release最新版本â€çš„巨大黃色按鈕,往下看有一個表格。在表格的頂部,你會
+看到一行以“mainlineâ€é–‹é ­çš„字樣,大多數情æ³ä¸‹å®ƒæœƒæŒ‡å‘一個版本號類似“5.8-rc2â€
+çš„é ç™¼ä½ˆç‰ˆæœ¬ã€‚如果是這樣的話,你將需è¦ä½¿ç”¨é€™å€‹ä¸»ç·šå…§æ ¸é€²è¡Œæ¸¬è©¦ã€‚ä¸è¦è®““rcâ€
+嚇到你,這些“開發版內核â€å¯¦éš›ä¸Šéžå¸¸å¯é â€”—而且你已經按照上é¢çš„指示åšäº†å‚™ä»½ï¼Œ
ä¸æ˜¯å—Žï¼Ÿ
-大概æ¯ä¹åˆ°å周,「mainlineã€å¯èƒ½æœƒçµ¦ä½ æŒ‡å‡ºä¸€å€‹ç‰ˆæœ¬è™Ÿé¡žä¼¼ã€Œ5.7ã€çš„æ­£å¼ç‰ˆæœ¬ã€‚如果
-碰見這種情æ³ï¼Œè«‹è€ƒæ…®æš«åœå ±å‘ŠéŽç¨‹ï¼Œç›´åˆ°ä¸‹ä¸€å€‹ç‰ˆæœ¬çš„第一個é ç™¼å¸ƒï¼ˆ5.8-rc1)出
-ç¾åœ¨ `kernel.org <https://kernel.org/>`_ 上。這是因爲 Linux 的開發周期正在
-兩周的「åˆä½µçª—å£ã€å…§ã€‚大部分的改動和所有干擾性的改動都會在這段時間內被åˆä½µåˆ°
+大概æ¯ä¹åˆ°å週,“mainlineâ€å¯èƒ½æœƒçµ¦ä½ æŒ‡å‡ºä¸€å€‹ç‰ˆæœ¬è™Ÿé¡žä¼¼â€œ5.7â€çš„æ­£å¼ç‰ˆæœ¬ã€‚如果
+碰見這種情æ³ï¼Œè«‹è€ƒæ…®æš«åœå ±å‘ŠéŽç¨‹ï¼Œç›´åˆ°ä¸‹ä¸€å€‹ç‰ˆæœ¬çš„第一個é ç™¼ä½ˆï¼ˆ5.8-rc1)出
+ç¾åœ¨ `kernel.org <https://kernel.org/>`_ 上。這是因爲 Linux 的開發週期正在
+兩週的“åˆä½µçª—å£â€å…§ã€‚大部分的改動和所有干擾性的改動都會在這段時間內被åˆä½µåˆ°
下一個版本中。在此期間使用主線是比較å±éšªçš„。內核開發者通常也很忙,å¯èƒ½æ²’有
多餘的時間來處ç†å•é¡Œå ±å‘Šã€‚這也是很有å¯èƒ½åœ¨åˆä½µçª—å£ä¸­æ‡‰ç”¨äº†è¨±å¤šä¿®æ”¹ä¾†ä¿®å¾©ä½ 
-所é¢è‡¨çš„å•é¡Œï¼›é€™å°±æ˜¯çˆ²ä»€éº¼ä½ å¾ˆå¿«å°±å¾—用一個新的內核版本é‡æ–°æ¸¬è©¦ï¼Œå°±åƒä¸‹é¢ã€Œç™¼
-布報告後的責任ã€ä¸€ç¯€ä¸­æ‰€è¿°çš„那樣。
+所é¢è‡¨çš„å•é¡Œï¼›é€™å°±æ˜¯çˆ²ä»€éº¼ä½ å¾ˆå¿«å°±å¾—用一個新的內核版本é‡æ–°æ¸¬è©¦ï¼Œå°±åƒä¸‹é¢â€œç™¼
+布報告後的責任â€ä¸€ç¯€ä¸­æ‰€è¿°çš„那樣。
-這就是爲什麼è¦ç­‰åˆ°åˆä½µçª—å£çµæŸå¾Œæ‰åŽ»åšã€‚但是如果你處ç†çš„是一些ä¸æ‡‰è©²ç­‰å¾…çš„
+這就是爲什麼è¦ç­‰åˆ°åˆä½µçª—å£çµæŸå¾Œçº”去åšã€‚但是如果你處ç†çš„是一些ä¸æ‡‰è©²ç­‰å¾…çš„
æ±è¥¿ï¼Œå‰‡ç„¡éœ€é€™æ¨£åšã€‚在這種情æ³ä¸‹ï¼Œå¯ä»¥è€ƒæ…®é€šéŽ git ç²å–最新的主線內核(見下
文),或者使用 kernel.org 上æ供的最新穩定版本。如果 mainline 因爲æŸäº›åŽŸå› 
ä¸ç„¡æ³•æ­£å¸¸å·¥ä½œï¼Œé‚£éº¼ä½¿ç”¨å®ƒä¹Ÿæ˜¯å¯ä»¥æŽ¥å—的。總的來說:用它來é‡ç¾å•é¡Œä¹Ÿæ¯”完全
@@ -657,7 +652,7 @@ ath10k@lists.infradead.orgã€ï¼Œå°‡å¼•å°Žæ‚¨åˆ°ath10k郵件列表的信æ¯é ï¼Œ
需è¦å…ˆåœ¨ä¸»ç·šä¿®å¾©ï¼Œç„¶å¾Œæ‰èƒ½å¾—到回傳,這å¯èƒ½éœ€è¦å¹¾å¤©æˆ–幾周。å¦ä¸€å€‹åŽŸå› æ˜¯ï¼šæ‚¨
希望的修復å°æ–¼å›žå‚³ä¾†èªªå¯èƒ½å¤ªé›£æˆ–太冒險;因此å†æ¬¡å ±å‘Šå•é¡Œä¸å¤ªå¯èƒ½æ”¹è®Šä»»ä½•äº‹æƒ…。
-這些方é¢ä¹Ÿéƒ¨åˆ†è¡¨æ˜Žäº†çˆ²ä»€éº¼é•·æœŸæ”¯æŒå…§æ ¸ï¼ˆæœ‰æ™‚稱爲「LTS內核ã€ï¼‰ä¸é©åˆå ±å‘Šæµç¨‹ï¼š
+這些方é¢ä¹Ÿéƒ¨åˆ†è¡¨æ˜Žäº†çˆ²ä»€éº¼é•·æœŸæ”¯æŒå…§æ ¸ï¼ˆæœ‰æ™‚稱爲“LTS內核â€ï¼‰ä¸é©åˆå ±å‘Šæµç¨‹ï¼š
它們與當å‰ä»£ç¢¼çš„è·é›¢å¤ªé ã€‚因此,先去測試主線,然後å†æŒ‰æµç¨‹èµ°ï¼šå¦‚果主線沒有
出ç¾å•é¡Œï¼Œæµç¨‹å°‡æŒ‡å°Žæ‚¨å¦‚何在舊版本線中修復它。
@@ -669,31 +664,31 @@ ath10k@lists.infradead.orgã€ï¼Œå°‡å¼•å°Žæ‚¨åˆ°ath10k郵件列表的信æ¯é ï¼Œ
**使用é ç·¨è­¯çš„內核** :這往往是最快速ã€æœ€ç°¡å–®ã€æœ€å®‰å…¨çš„方法——尤其是在你ä¸ç†Ÿ
悉 Linux 內核的情æ³ä¸‹ã€‚å•é¡Œæ˜¯ï¼šç™¼è¡Œå•†æˆ–附加存儲庫æ供的大多數版本都是從修改
-éŽçš„Linux原始碼構建的。因此它們ä¸æ˜¯æ™®é€šçš„,通常ä¸é©åˆæ–¼æ¸¬è©¦å’Œå•é¡Œå ±å‘Šï¼šé€™äº›
+éŽçš„Linuxæºä»£ç¢¼æ§‹å»ºçš„。因此它們ä¸æ˜¯æ™®é€šçš„,通常ä¸é©åˆæ–¼æ¸¬è©¦å’Œå•é¡Œå ±å‘Šï¼šé€™äº›
更改å¯èƒ½æœƒå°Žè‡´æ‚¨é¢è‡¨çš„å•é¡Œæˆ–以æŸç¨®æ–¹å¼å½±éŸ¿å•é¡Œã€‚
但是如果您使用的是æµè¡Œçš„Linux發行版,那麼您就很幸é‹äº†ï¼šå°æ–¼å¤§éƒ¨åˆ†çš„發行版,
您å¯ä»¥åœ¨ç¶²ä¸Šæ‰¾åˆ°åŒ…å«æœ€æ–°ä¸»ç·šæˆ–穩定版本Linux內核包的存儲庫。使用這些是完全å¯
-以的,åªè¦å¾žå­˜å„²åº«çš„æ述中確èªå®ƒå€‘是普通的或者至少接近普通。此外,請確ä¿è»Ÿé«”
-包包å«kernel.org上æ供的最新版本內核。如果這些軟體包的時間超éŽä¸€å‘¨ï¼Œé‚£éº¼å®ƒå€‘
-å¯èƒ½å°±ä¸åˆé©äº†ï¼Œå› çˆ²æ–°çš„主線和穩定版內核通常至少æ¯å‘¨ç™¼å¸ƒä¸€æ¬¡ã€‚
+以的,åªè¦å¾žå­˜å„²åº«çš„æ述中確èªå®ƒå€‘是普通的或者至少接近普通。此外,請確ä¿è»Ÿä»¶
+包包å«kernel.org上æ供的最新版本內核。如果這些軟件包的時間超éŽä¸€é€±ï¼Œé‚£éº¼å®ƒå€‘
+å¯èƒ½å°±ä¸åˆé©äº†ï¼Œå› çˆ²æ–°çš„主線和穩定版內核通常至少æ¯é€±ç™¼ä½ˆä¸€æ¬¡ã€‚
請注æ„,您以後å¯èƒ½éœ€è¦æ‰‹å‹•æ§‹å»ºè‡ªå·±çš„內核:有時這是調試或測試修復程åºæ‰€å¿…需的,
如後文所述。還è¦æ³¨æ„,é ç·¨è­¯çš„內核å¯èƒ½ç¼ºå°‘在出ç¾panicã€Oopsã€warning或BUG時
-解碼內核列å°çš„消æ¯æ‰€éœ€çš„調試符號;如果您計劃解碼這些消æ¯ï¼Œæœ€å¥½è‡ªå·±ç·¨è­¯å…§æ ¸
-(有關詳細信æ¯ï¼Œè«‹åƒé–±æœ¬å°ç¯€çµå°¾å’Œã€Œè§£ç¢¼å¤±æ•—ä¿¡æ¯ã€å°ç¯€ï¼‰ã€‚
+解碼內核打å°çš„消æ¯æ‰€éœ€çš„調試符號;如果您計劃解碼這些消æ¯ï¼Œæœ€å¥½è‡ªå·±ç·¨è­¯å…§æ ¸
+(有關詳細信æ¯ï¼Œè«‹åƒé–±æœ¬å°ç¯€çµå°¾å’Œâ€œè§£ç¢¼å¤±æ•—ä¿¡æ¯â€å°ç¯€ï¼‰ã€‚
**使用git** :熟悉 git 的開發者和有經驗的 Linux 用戶通常最好直接從
`kernel.org 上的官方開發倉庫
<https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/>`_
-中ç²å–最新的 Linux 內核原始碼。這些很å¯èƒ½æ¯”最新的主線é ç™¼å¸ƒç‰ˆæœ¬æ›´æ–°ä¸€äº›ã€‚ä¸
-用擔心:它們和正å¼çš„é ç™¼å¸ƒç‰ˆæœ¬ä¸€æ¨£å¯é ï¼Œé™¤éžå…§æ ¸çš„開發周期目å‰æ­£è™•æ–¼åˆä½µçª—
+中ç²å–最新的 Linux 內核æºä»£ç¢¼ã€‚這些很å¯èƒ½æ¯”最新的主線é ç™¼ä½ˆç‰ˆæœ¬æ›´æ–°ä¸€äº›ã€‚ä¸
+用擔心:它們和正å¼çš„é ç™¼ä½ˆç‰ˆæœ¬ä¸€æ¨£å¯é ï¼Œé™¤éžå…§æ ¸çš„開發週期目å‰æ­£è™•æ–¼åˆä½µçª—
å£ä¸­ã€‚ä¸éŽå³ä¾¿å¦‚此,它們也是相當å¯é çš„。
**常è¦æ–¹æ³•** :ä¸ç†Ÿæ‚‰ git 的人通常最好從 `kernel.org <https://kernel.org/>`_
下載æºç¢¼çš„tar 存檔包。
-如何實際構建一個內核並ä¸åœ¨é€™è£¡æ述,因爲許多網站已經解釋了必è¦çš„步驟。如果
+如何實際構建一個內核並ä¸åœ¨é€™è£æ述,因爲許多網站已經解釋了必è¦çš„步驟。如果
你是新手,å¯ä»¥è€ƒæ…®æŒ‰ç…§é‚£äº›å»ºè­°ä½¿ç”¨ ``make localmodconfig`` 來åšï¼Œå®ƒå°‡å˜—試ç²
å–你當å‰å…§æ ¸çš„é…置,然後根據你的系統進行一些調整。這樣åšä¸¦ä¸èƒ½ä½¿ç·¨è­¯å‡ºä¾†çš„
內核更好,但å¯ä»¥æ›´å¿«åœ°ç·¨è­¯ã€‚
@@ -702,19 +697,19 @@ ath10k@lists.infradead.orgã€ï¼Œå°‡å¼•å°Žæ‚¨åˆ°ath10k郵件列表的信æ¯é ï¼Œ
啓用 CONFIG_KALLSYMS é¸é …。此外,還å¯ä»¥å•“用 CONFIG_DEBUG_KERNEL å’Œ
CONFIG_DEBUG_INFO;後者是相關é¸é …,但åªæœ‰å•“用å‰è€…æ‰èƒ½é–‹å•“。請注æ„,
CONFIG_DEBUG_INFO 會需è¦æ›´å¤šå„²å­˜ç©ºé–“來構建內核。但這是值得的,因爲這些é¸é …å°‡
-å…許您ç¨å¾Œç²¾ç¢ºå®šä½è§¸ç™¼å•é¡Œçš„確切代碼行。下é¢çš„「解碼失敗信æ¯ã€ä¸€ç¯€å°æ­¤é€²è¡Œäº†æ›´
+å…許您ç¨å¾Œç²¾ç¢ºå®šä½è§¸ç™¼å•é¡Œçš„確切代碼行。下é¢çš„“解碼失敗信æ¯â€ä¸€ç¯€å°æ­¤é€²è¡Œäº†æ›´
詳細的解釋。
但請記ä½ï¼šå§‹çµ‚記錄é‡åˆ°çš„å•é¡Œï¼Œä»¥é˜²é›£ä»¥é‡ç¾ã€‚發é€æœªè§£ç¢¼çš„報告總比ä¸å ±å‘Šè¦å¥½ã€‚
-檢查「汙染ã€æ¨™èªŒ
+檢查“污染â€æ¨™èªŒ
----------------
- *確ä¿æ‚¨å‰›å‰›å®‰è£çš„內核在é‹è¡Œæ™‚ä¸æœƒã€Œæ±™æŸ“ã€è‡ªå·±ã€‚*
+ *確ä¿æ‚¨å‰›å‰›å®‰è£çš„內核在é‹è¡Œæ™‚ä¸æœƒâ€œæ±¡æŸ“â€è‡ªå·±ã€‚*
正如上é¢å·²ç¶“詳細介紹éŽçš„:當發生一些å¯èƒ½æœƒå°Žè‡´ä¸€äº›çœ‹èµ·ä¾†å®Œå…¨ä¸ç›¸é—œçš„後續錯
-誤的事情時,內核會設置一個「汙染ã€æ¨™èªŒã€‚這就是爲什麼你需è¦æª¢æŸ¥ä½ å‰›å‰›å®‰è£çš„å…§
+誤的事情時,內核會設置一個“污染â€æ¨™èªŒã€‚這就是爲什麼你需è¦æª¢æŸ¥ä½ å‰›å‰›å®‰è£çš„å…§
核是å¦æœ‰è¨­ç½®æ­¤æ¨™èªŒã€‚如果有的話,幾乎在任何情æ³ä¸‹ä½ éƒ½éœ€è¦åœ¨å ±å‘Šå•é¡Œä¹‹å‰å…ˆæ¶ˆ
除它。詳細的æ“作方法請看上é¢çš„章節。
@@ -729,43 +724,43 @@ CONFIG_DEBUG_INFO 會需è¦æ›´å¤šå„²å­˜ç©ºé–“來構建內核。但這是值得çš
å¯ä»¥è€ƒæ…®ä½¿ç”¨æ­¤ç‰ˆæœ¬ç·šï¼Œæ”¾æ£„報告å•é¡Œã€‚但是請記ä½ï¼Œåªè¦å®ƒæ²’有在 `kernel.org
<https://kernel.org/>`_ 的穩定版和長期版(以åŠç”±é€™äº›ç‰ˆæœ¬è¡ç”Ÿå‡ºä¾†çš„廠商內核)
中得到修復,其他用戶å¯èƒ½ä»ç„¶æœƒå—到它的困擾。如果你喜歡使用其中的一個,或
-者åªæ˜¯æƒ³å¹«åŠ©å®ƒå€‘的用戶,請å‰å¾€ä¸‹é¢çš„「報告åªç™¼ç”Ÿåœ¨è¼ƒèˆŠå…§æ ¸ç‰ˆæœ¬ç·šçš„å•é¡Œã€ä¸€ç¯€ã€‚
+者åªæ˜¯æƒ³å¹«åŠ©å®ƒå€‘的用戶,請å‰å¾€ä¸‹é¢çš„“報告åªç™¼ç”Ÿåœ¨è¼ƒèˆŠå…§æ ¸ç‰ˆæœ¬ç·šçš„å•é¡Œâ€ä¸€ç¯€ã€‚
優化復ç¾å•é¡Œçš„æè¿°
--------------------
- *優化你的筆記:試著找到並寫出最直接的復ç¾å•é¡Œçš„方法。確ä¿æœ€çµ‚çµæžœåŒ…å«æ‰€
+ *優化你的筆記:試ç€æ‰¾åˆ°ä¸¦å¯«å‡ºæœ€ç›´æŽ¥çš„復ç¾å•é¡Œçš„方法。確ä¿æœ€çµ‚çµæžœåŒ…å«æ‰€
有é‡è¦çš„細節,åŒæ™‚讓第一次è½èªªçš„人容易閱讀和ç†è§£ã€‚如果您在此éŽç¨‹ä¸­å­¸åˆ°
了一些æ±è¥¿ï¼Œè«‹è€ƒæ…®å†æ¬¡æœç´¢é—œæ–¼è©²å•é¡Œçš„ç¾æœ‰å ±å‘Šã€‚*
éŽæ–¼è¤‡é›œçš„報告會讓別人很難ç†è§£ã€‚因此請儘é‡æ‰¾åˆ°ä¸€å€‹å¯ä»¥ç›´æŽ¥æè¿°ã€æ˜“於以書é¢
å½¢å¼ç†è§£çš„å†ç¾æ–¹æ³•ã€‚包å«æ‰€æœ‰é‡è¦çš„細節,但åŒæ™‚也è¦å„˜é‡ä¿æŒç°¡çŸ­ã€‚
-在這在å‰é¢çš„步驟中,你很å¯èƒ½å·²ç¶“了解了一些關於你所é¢è‡¨çš„å•é¡Œçš„點。利用這些
+在這在å‰é¢çš„步驟中,你很å¯èƒ½å·²ç¶“瞭解了一些關於你所é¢è‡¨çš„å•é¡Œçš„點。利用這些
知識,å†æ¬¡æœç´¢å¯ä»¥è½‰è€ŒåŠ å…¥çš„ç¾æœ‰å ±å‘Šã€‚
解碼失敗信æ¯
-------------
- *如果失敗涉åŠã€Œpanicã€ã€ã€ŒOopsã€ã€ã€Œwarningã€æˆ–「BUGã€ï¼Œè«‹è€ƒæ…®è§£ç¢¼å…§æ ¸æ—¥èªŒä»¥æŸ¥æ‰¾
+ *如果失敗涉åŠâ€œpanicâ€ã€â€œOopsâ€ã€â€œwarningâ€æˆ–“BUGâ€ï¼Œè«‹è€ƒæ…®è§£ç¢¼å…§æ ¸æ—¥èªŒä»¥æŸ¥æ‰¾
觸發錯誤的代碼行。*
-當內核檢測到內部å•é¡Œæ™‚,它會記錄一些有關已執行代碼的信æ¯ã€‚這使得在原始碼中精
+當內核檢測到內部å•é¡Œæ™‚,它會記錄一些有關已執行代碼的信æ¯ã€‚這使得在æºä»£ç¢¼ä¸­ç²¾
確定ä½è§¸ç™¼å•é¡Œçš„行並顯示如何調用它æˆçˆ²å¯èƒ½ã€‚但åªæœ‰åœ¨é…置內核時啓用了
CONFIG_DEBUG_INFO å’Œ CONFIG_KALLSYMSé¸é …時,這種方法æ‰èµ·æ•ˆã€‚如果已啓用此é¸é …,
-請考慮解碼內核日誌中的信æ¯ã€‚這將使我們更容易ç†è§£æ˜¯ä»€éº¼å°Žè‡´äº†ã€Œpanicã€ã€ã€ŒOopsã€ã€
-「warningã€æˆ–「BUGã€ï¼Œå¾žè€Œå¢žåŠ äº†æœ‰äººæ供修復的機率。
+請考慮解碼內核日誌中的信æ¯ã€‚這將使我們更容易ç†è§£æ˜¯ä»€éº¼å°Žè‡´äº†â€œpanicâ€ã€â€œOopsâ€ã€
+“warningâ€æˆ–“BUGâ€ï¼Œå¾žè€Œå¢žåŠ äº†æœ‰äººæ供修復的幾率。
-解碼å¯ä»¥é€šéŽLinux原始碼樹中的腳本來完æˆã€‚如果您é‹è¡Œçš„內核是之å‰è‡ªå·±ç·¨è­¯çš„,
+解碼å¯ä»¥é€šéŽLinuxæºä»£ç¢¼æ¨¹ä¸­çš„腳本來完æˆã€‚如果您é‹è¡Œçš„內核是之å‰è‡ªå·±ç·¨è­¯çš„,
這樣這樣調用它::
[user@something ~]$ sudo dmesg | ./linux-5.10.5/scripts/decode_stacktrace.sh ./linux-5.10.5/vmlinux
/usr/lib/debug/lib/modules/5.10.10-4.1.x86_64/vmlinux /usr/src/kernels/5.10.10-4.1.x86_64/
如果您é‹è¡Œçš„是打包好的普通內核,則å¯èƒ½éœ€è¦å®‰è£å¸¶æœ‰èª¿è©¦ç¬¦è™Ÿçš„相應包。然後按以下
-æ–¹å¼èª¿ç”¨è…³æœ¬ï¼ˆå¦‚果發行版未打包,則å¯èƒ½éœ€è¦å¾žLinux原始碼ç²å–)::
+æ–¹å¼èª¿ç”¨è…³æœ¬ï¼ˆå¦‚果發行版未打包,則å¯èƒ½éœ€è¦å¾žLinuxæºä»£ç¢¼ç²å–)::
[user@something ~]$ sudo dmesg | ./linux-5.10.5/scripts/decode_stacktrace.sh \
/usr/lib/debug/lib/modules/5.10.10-4.1.x86_64/vmlinux /usr/src/kernels/5.10.10-4.1.x86_64/
@@ -778,10 +773,10 @@ CONFIG_DEBUG_INFO å’Œ CONFIG_KALLSYMSé¸é …時,這種方法æ‰èµ·æ•ˆã€‚如果å
[ 68.387301] RIP: 0010:test_module_init (/home/username/linux-5.10.5/test-module/test-module.c:16) test_module
-在本例中,執行的代碼是從文件「~/linux-5.10.5/test-module/test-module.cã€æ§‹å»ºçš„,
+在本例中,執行的代碼是從文件“~/linux-5.10.5/test-module/test-module.câ€æ§‹å»ºçš„,
錯誤出ç¾åœ¨ç¬¬16行的指令中。
-該腳本也會如此解碼以「Call traceã€é–‹é ­çš„部分中æ到的地å€ï¼Œè©²éƒ¨åˆ†é¡¯ç¤ºå‡ºç¾å•é¡Œçš„
+該腳本也會如此解碼以“Call traceâ€é–‹é ­çš„部分中æ到的地å€ï¼Œè©²éƒ¨åˆ†é¡¯ç¤ºå‡ºç¾å•é¡Œçš„
函數的路徑。此外,腳本還會顯示內核正在執行的代碼部分的彙編輸出。
注æ„,如果你沒法åšåˆ°é€™ä¸€é»žï¼Œåªéœ€è·³éŽé€™ä¸€æ­¥ï¼Œä¸¦åœ¨å ±å‘Šä¸­èªªæ˜ŽåŽŸå› ã€‚如果你幸é‹çš„
@@ -790,60 +785,60 @@ CONFIG_DEBUG_INFO å’Œ CONFIG_KALLSYMSé¸é …時,這種方法æ‰èµ·æ•ˆã€‚如果å
別擔心,如果您碰到的情æ³éœ€è¦é€™æ¨£åšï¼Œé–‹ç™¼äººå“¡æœƒå‘Šè¨´æ‚¨è©²æ€Žéº¼åšã€‚
-å°å›žæ­¸çš„特別關照
+å°è¿´æ­¸çš„特別關照
-----------------
- *如果您的å•é¡Œæ˜¯å›žæ­¸å•é¡Œï¼Œè«‹å„˜å¯èƒ½ç¸®å°å¼•å…¥å•é¡Œæ™‚的範åœã€‚*
+ *如果您的å•é¡Œæ˜¯è¿´æ­¸å•é¡Œï¼Œè«‹å„˜å¯èƒ½ç¸®å°å¼•å…¥å•é¡Œæ™‚的範åœã€‚*
Linux 首席開發者 Linus Torvalds èªçˆ² Linux 內核永é ä¸æ‡‰æƒ¡åŒ–,這就是爲什麼他
-èªçˆ²å›žæ­¸æ˜¯ä¸å¯æŽ¥å—的,並希望看到它們被迅速修復。這就是爲什麼引入了回歸的改
-動導致的å•é¡Œè‹¥ç„¡æ³•é€šéŽå…¶ä»–æ–¹å¼å¿«é€Ÿè§£æ±ºï¼Œé€šå¸¸æœƒè¢«è¿…速撤銷。因此,報告回歸有
-點åƒã€ŒçŽ‹ç‚¸ã€ï¼Œæœƒè¿…速得到修復。但è¦åšåˆ°é€™ä¸€é»žï¼Œéœ€è¦çŸ¥é“導致回歸的變化。通常情
+èªçˆ²è¿´æ­¸æ˜¯ä¸å¯æŽ¥å—的,並希望看到它們被迅速修復。這就是爲什麼引入了迴歸的改
+動導致的å•é¡Œè‹¥ç„¡æ³•é€šéŽå…¶ä»–æ–¹å¼å¿«é€Ÿè§£æ±ºï¼Œé€šå¸¸æœƒè¢«è¿…速撤銷。因此,報告迴歸有
+點åƒâ€œçŽ‹ç‚¸â€ï¼Œæœƒè¿…速得到修復。但è¦åšåˆ°é€™ä¸€é»žï¼Œéœ€è¦çŸ¥é“導致迴歸的變化。通常情
æ³ä¸‹ï¼Œè¦ç”±å ±å‘Šè€…來追查罪é­ç¦é¦–,因爲維護者往往沒有時間或手頭設置ä¸ä¾¿ä¾†è‡ªè¡Œ
é‡ç¾å®ƒã€‚
-有一個å«åšã€ŒäºŒåˆ†ã€çš„éŽç¨‹å¯ä»¥ä¾†å°‹æ‰¾è®ŠåŒ–,這在
-「Documentation/translations/zh_TW/admin-guide/bug-bisect.rstã€æ–‡æª”中進行了詳細
+有一個å«åšâ€œäºŒåˆ†â€çš„éŽç¨‹å¯ä»¥ä¾†å°‹æ‰¾è®ŠåŒ–,這在
+Documentation/translations/zh_CN/admin-guide/bug-bisect.rst 文檔中進行了詳細
çš„æ述,這個éŽç¨‹é€šå¸¸éœ€è¦ä½ æ§‹å»ºå到二å個內核é¡åƒï¼Œæ¯æ¬¡éƒ½å˜—試在構建下一個é¡åƒ
-之å‰é‡ç¾å•é¡Œã€‚是的,這需è¦èŠ±è²»ä¸€äº›æ™‚間,但ä¸ç”¨æ“”心,它比大多數人想åƒçš„è¦å¿«å¾—多。
-多虧了「binary search二進ä½æœç´¢ã€ï¼Œé€™å°‡å¼•å°Žä½ åœ¨åŽŸå§‹ç¢¼ç®¡ç†ç³»çµ±ä¸­æ‰¾åˆ°å°Žè‡´å›žæ­¸çš„æ交。
+之å‰é‡ç¾å•é¡Œã€‚是的,這需è¦èŠ±è²»ä¸€äº›æ™‚間,但ä¸ç”¨æ“”心,它比大多數人想象的è¦å¿«å¾—多。
+多虧了“binary search二分æœç´¢â€ï¼Œé€™å°‡å¼•å°Žä½ åœ¨æºä»£ç¢¼ç®¡ç†ç³»çµ±ä¸­æ‰¾åˆ°å°Žè‡´è¿´æ­¸çš„æ交。
一旦你找到它,就在網上æœç´¢å…¶ä¸»é¡Œã€æ交ID和縮短的æ交ID(æ交IDçš„å‰12個字符)。
如果有的話,這將引導您找到關於它的ç¾æœ‰å ±å‘Šã€‚
需è¦æ³¨æ„的是,二分法需è¦ä¸€é»žç«…門,ä¸æ˜¯æ¯å€‹äººéƒ½æ‡‚得訣竅,也需è¦ç›¸ç•¶å¤šçš„努力,
ä¸æ˜¯æ¯å€‹äººéƒ½é¡˜æ„投入。儘管如此,還是強烈建議自己進行一次二分。如果你真的
-ä¸èƒ½æˆ–者ä¸æƒ³èµ°é€™æ¢è·¯ï¼Œè‡³å°‘è¦æ‰¾å‡ºæ˜¯å“ªå€‹ä¸»ç·šå…§æ ¸å¼•å…¥çš„回歸。比如說從 5.5.15
+ä¸èƒ½æˆ–者ä¸æƒ³èµ°é€™æ¢è·¯ï¼Œè‡³å°‘è¦æ‰¾å‡ºæ˜¯å“ªå€‹ä¸»ç·šå…§æ ¸å¼•å…¥çš„迴歸。比如說從 5.5.15
切æ›åˆ° 5.8.4 的時候出ç¾äº†ä¸€äº›å•é¡Œï¼Œé‚£éº¼è‡³å°‘å¯ä»¥å˜—試一下相近的所有的主線版本
(5.6ã€5.7 å’Œ 5.8)來檢查它是什麼時候出ç¾çš„。除éžä½ æƒ³åœ¨ä¸€å€‹ç©©å®šç‰ˆæˆ–長期支æŒ
-內核中找到一個回歸,å¦å‰‡è¦é¿å…測試那些編號有三段的版本(5.6.12ã€5.7.8),因
-爲那會使çµæžœé›£ä»¥è§£é‡‹ï¼Œå¯èƒ½æœƒè®“你的測試變得無用。一旦你找到了引入回歸的主è¦
+內核中找到一個迴歸,å¦å‰‡è¦é¿å…測試那些編號有三段的版本(5.6.12ã€5.7.8),因
+爲那會使çµæžœé›£ä»¥è§£é‡‹ï¼Œå¯èƒ½æœƒè®“你的測試變得無用。一旦你找到了引入迴歸的主è¦
版本,就å¯ä»¥æ”¾å¿ƒåœ°ç¹¼çºŒå ±å‘Šäº†ã€‚但請記ä½ï¼šåœ¨ä¸çŸ¥é“罪é­ç¦é¦–的情æ³ä¸‹ï¼Œé–‹ç™¼äººå“¡
是å¦èƒ½å¤ æ供幫助å–決於手頭的å•é¡Œã€‚有時他們å¯èƒ½æœƒå¾žå ±å‘Šä¸­ç¢ºèªæ˜¯ä»€éº¼å‡ºç¾äº†å•
題,並能修復它;有時他們å¯èƒ½ç„¡æ³•æ供幫助,除éžä½ é€²è¡ŒäºŒåˆ†ã€‚
-當處ç†å›žæ­¸å•é¡Œæ™‚,請確ä¿ä½ æ‰€é¢è‡¨çš„å•é¡ŒçœŸçš„是由內核引起的,而ä¸æ˜¯ç”±å…¶ä»–æ±è¥¿
+當處ç†è¿´æ­¸å•é¡Œæ™‚,請確ä¿ä½ æ‰€é¢è‡¨çš„å•é¡ŒçœŸçš„是由內核引起的,而ä¸æ˜¯ç”±å…¶ä»–æ±è¥¿
引起的,如上文所述。
-在整個éŽç¨‹ä¸­ï¼Œè«‹è¨˜ä½ï¼šåªæœ‰ç•¶èˆŠå…§æ ¸å’Œæ–°å…§æ ¸çš„é…置相似時,å•é¡Œæ‰ç®—回歸。最好
-的方法是:把é…置文件(``.config``)從舊的工作內核直接複製到你嘗試的æ¯å€‹æ–°å…§
-核版本。之後é‹è¡Œ ``make oldnoconfig`` 來調整它以é©æ‡‰æ–°ç‰ˆæœ¬çš„需è¦ï¼Œè€Œä¸å•“用
-任何新的功能,因爲那些功能也å¯èƒ½å°Žè‡´å›žæ­¸ã€‚
+在整個éŽç¨‹ä¸­ï¼Œè«‹è¨˜ä½ï¼šåªæœ‰ç•¶èˆŠå…§æ ¸å’Œæ–°å…§æ ¸çš„é…置相似時,å•é¡Œçº”算迴歸。這å¯ä»¥
+é€šéŽ ``make olddefconfig`` 來實ç¾ï¼Œè©³ç´°è§£é‡‹åƒè¦‹
+Documentation/admin-guide/reporting-regressions.rst ;它還æ供了大é‡å…¶ä»–您
+å¯èƒ½å¸Œæœ›çž­è§£çš„有關回歸的信æ¯ã€‚
-撰寫並發é€å ±å‘Š
+撰寫併發é€å ±å‘Š
---------------
*通éŽè©³ç´°æè¿°å•é¡Œä¾†é–‹å§‹ç·¨å¯«å ±å‘Šã€‚記得包括以下æ¢ç›®ï¼šæ‚¨çˆ²å¾©ç¾è€Œå®‰è£çš„最新
內核版本ã€ä½¿ç”¨çš„Linux發行版以åŠé—œæ–¼å¦‚何復ç¾è©²å•é¡Œçš„說明。如果å¯èƒ½ï¼Œå°‡å…§
- 核構建é…置(.config)和 ``dmesg`` 的輸出放在網上的æŸå€‹åœ°æ–¹ï¼Œä¸¦é€£çµåˆ°å®ƒã€‚
+ 核構建é…置(.config)和 ``dmesg`` 的輸出放在網上的æŸå€‹åœ°æ–¹ï¼Œä¸¦éˆæŽ¥åˆ°å®ƒã€‚
包å«æˆ–上傳所有其他å¯èƒ½ç›¸é—œçš„ä¿¡æ¯ï¼Œå¦‚Oops的輸出/截圖或來自 ``lspci``
的輸出。一旦你寫完了這個主è¦éƒ¨åˆ†ï¼Œè«‹åœ¨ä¸Šæ–¹æ’入一個正常長度的段è½å¿«é€Ÿæ¦‚
è¿°å•é¡Œå’Œå½±éŸ¿ã€‚å†åœ¨æ­¤ä¹‹ä¸Šæ·»åŠ ä¸€å€‹ç°¡å–®æè¿°å•é¡Œçš„å¥å­ï¼Œä»¥å¾—到人們的閱讀。
ç¾åœ¨çµ¦å‡ºä¸€å€‹æ›´çŸ­çš„æ述性標題或主題。然後就å¯ä»¥åƒMAINTAINERS文件告訴你的
- 那樣發é€æˆ–æ交報告了,除éžä½ åœ¨è™•ç†ä¸€å€‹ã€Œé«˜å„ªå…ˆç´šå•é¡Œã€ï¼šå®ƒå€‘需è¦æŒ‰ç…§ä¸‹é¢
- 「高優先級å•é¡Œçš„特殊處ç†ã€æ‰€è¿°ç‰¹åˆ¥é—œç…§ã€‚*
+ 那樣發é€æˆ–æ交報告了,除éžä½ åœ¨è™•ç†ä¸€å€‹â€œé«˜å„ªå…ˆç´šå•é¡Œâ€ï¼šå®ƒå€‘需è¦æŒ‰ç…§ä¸‹é¢
+ “高優先級å•é¡Œçš„特殊處ç†â€æ‰€è¿°ç‰¹åˆ¥é—œç…§ã€‚*
-ç¾åœ¨ä½ å·²ç¶“準備好了一切,是時候寫你的報告了。上文å‰è¨€ä¸­é€£çµçš„三篇文檔å°å¦‚何
+ç¾åœ¨ä½ å·²ç¶“準備好了一切,是時候寫你的報告了。上文å‰è¨€ä¸­éˆæŽ¥çš„三篇文檔å°å¦‚何
寫報告åšäº†éƒ¨åˆ†è§£é‡‹ã€‚這就是爲什麼本文將åªæåˆ°ä¸€äº›åŸºæœ¬çš„å…§å®¹ä»¥åŠ Linux 內核特
有的æ±è¥¿ã€‚
@@ -855,7 +850,7 @@ Linux 首席開發者 Linus Torvalds èªçˆ² Linux 內核永é ä¸æ‡‰æƒ¡åŒ–,這
æ¯ä»½å ±å‘Šéƒ½æ‡‰æåŠçš„事項
~~~~~~~~~~~~~~~~~~~~~~~~
-詳細æè¿°ä½ çš„å•é¡Œæ˜¯å¦‚何發生在你安è£çš„新純淨內核上的。試著包å«ä½ ä¹‹å‰å¯«çš„和優
+詳細æè¿°ä½ çš„å•é¡Œæ˜¯å¦‚何發生在你安è£çš„新純淨內核上的。試ç€åŒ…å«ä½ ä¹‹å‰å¯«çš„和優
化éŽçš„分步說明,概述你和其他人如何é‡ç¾é€™å€‹å•é¡Œï¼›åœ¨æ¥µå°‘數無法é‡ç¾çš„情æ³ä¸‹ï¼Œ
儘é‡æè¿°ä½ åšäº†ä»€éº¼ä¾†è§¸ç™¼å®ƒã€‚
@@ -864,19 +859,19 @@ Linux 首席開發者 Linus Torvalds èªçˆ² Linux 內核永é ä¸æ‡‰æƒ¡åŒ–,這
* ``cat /proc/version`` çš„è¼¸å‡ºï¼Œå…¶ä¸­åŒ…å« Linux 內核版本號和構建時的編譯器。
- * 機器正在é‹è¡Œçš„ Linux 發行版( ``hostnamectl | grep 「Operating System「`` )
+ * 機器正在é‹è¡Œçš„ Linux 發行版( ``hostnamectl | grep “Operating System“`` )
- * CPU 和作業系統的架構( ``uname -mi`` )
+ * CPU å’Œæ“作系統的架構( ``uname -mi`` )
- * 如果您正在處ç†å›žæ­¸ï¼Œä¸¦é€²è¡Œäº†äºŒåˆ†ï¼Œè«‹æåŠå°Žè‡´å›žæ­¸çš„變更的主題和æ交ID。
+ * 如果您正在處ç†è¿´æ­¸ï¼Œä¸¦é€²è¡Œäº†äºŒåˆ†ï¼Œè«‹æåŠå°Žè‡´è¿´æ­¸çš„變更的主題和æ交ID。
-許多情æ³ä¸‹ï¼Œè®“讀你報告的人多了解兩件事也是明智之舉:
+許多情æ³ä¸‹ï¼Œè®“讀你報告的人多瞭解兩件事也是明智之舉:
- * 用於構建 Linux 內核的é…置(「.configã€æ–‡ä»¶ï¼‰
+ * 用於構建 Linux 內核的é…置(“.configâ€æ–‡ä»¶ï¼‰
- * 內核的信æ¯ï¼Œä½ å¾ž ``dmesg`` 得到的信æ¯å¯«åˆ°ä¸€å€‹æ–‡ä»¶é‡Œã€‚確ä¿å®ƒä»¥åƒã€ŒLinux
+ * 內核的信æ¯ï¼Œä½ å¾ž ``dmesg`` 得到的信æ¯å¯«åˆ°ä¸€å€‹æ–‡ä»¶è£ã€‚確ä¿å®ƒä»¥åƒâ€œLinux
version 5.8-1 (foobar@example.com) (gcc (GCC) 10.2.1, GNU ld version
- 2.34) #1 SMP Mon Aug 3 14:54:37 UTC 2020ã€é€™æ¨£çš„行開始,如果沒有,那麼第
+ 2.34) #1 SMP Mon Aug 3 14:54:37 UTC 2020â€é€™æ¨£çš„行開始,如果沒有,那麼第
一次啓動階段的é‡è¦ä¿¡æ¯å·²ç¶“被丟棄了。在這種情æ³ä¸‹ï¼Œå¯ä»¥è€ƒæ…®ä½¿ç”¨
``journalctl -b 0 -k`` ;或者你也å¯ä»¥é‡å•“,é‡ç¾é€™å€‹å•é¡Œï¼Œç„¶å¾Œèª¿ç”¨
``dmesg`` 。
@@ -887,39 +882,39 @@ Linux 首席開發者 Linus Torvalds èªçˆ² Linux 內核永é ä¸æ‡‰æƒ¡åŒ–,這
* 將文件上傳到æŸå€‹å…¬é–‹çš„地方(你的網站,公共文件粘貼æœå‹™ï¼Œåœ¨
`bugzilla.kernel.org <https://bugzilla.kernel.org/>`_ 上創建的工單……),
- 並在你的報告中放上連çµã€‚ç†æƒ³æƒ…æ³ä¸‹è«‹ä½¿ç”¨å…許這些文件ä¿å­˜å¾ˆå¤šå¹´çš„地方,因
+ 並在你的報告中放上éŠæŽ¥ã€‚ç†æƒ³æƒ…æ³ä¸‹è«‹ä½¿ç”¨å…許這些文件ä¿å­˜å¾ˆå¤šå¹´çš„地方,因
爲它們å¯èƒ½åœ¨å¾ˆå¤šå¹´å¾Œå°åˆ¥äººæœ‰ç”¨ï¼›ä¾‹å¦‚ 5 年或 10 年後,一個開發者正在修改
一些代碼,而這些代碼正是爲了修復你的å•é¡Œã€‚
- * 把文件放在一邊,然後說明你會在他人回復時å†å–®ç¨ç™¼é€ã€‚åªè¦è¨˜å¾—報告發出去後,
+ * 把文件放在一邊,然後說明你會在他人回覆時å†å–®ç¨ç™¼é€ã€‚åªè¦è¨˜å¾—報告發出去後,
真正åšåˆ°é€™ä¸€é»žå°±å¯ä»¥äº†ã€‚;-)
æ供這些æ±è¥¿å¯èƒ½æ˜¯æ˜Žæ™ºçš„
~~~~~~~~~~~~~~~~~~~~~~~~~~
-根據å•é¡Œçš„ä¸åŒï¼Œä½ å¯èƒ½éœ€è¦æ供更多的背景數據。這裡有一些關於æ供什麼比較好
+根據å•é¡Œçš„ä¸åŒï¼Œä½ å¯èƒ½éœ€è¦æ供更多的背景數據。這è£æœ‰ä¸€äº›é—œæ–¼æ供什麼比較好
的建議:
- * 如果你處ç†çš„是內核的「warningã€ã€ã€ŒOOPSã€æˆ–「panicã€ï¼Œè«‹åŒ…å«å®ƒã€‚如果你ä¸èƒ½è¤‡è£½
- 粘貼它,試著用netconsole網絡終端é ç¨‹è·Ÿè¹¤æˆ–者至少æ‹ä¸€å¼µå±å¹•çš„照片。
+ * 如果你處ç†çš„是內核的“warningâ€ã€â€œOOPSâ€æˆ–“panicâ€ï¼Œè«‹åŒ…å«å®ƒã€‚如果你ä¸èƒ½è¤‡è£½
+ 粘貼它,試ç€ç”¨netconsole網絡終端é ç¨‹è·Ÿè¹¤æˆ–者至少æ‹ä¸€å¼µå±å¹•çš„照片。
- * 如果å•é¡Œå¯èƒ½èˆ‡ä½ çš„電腦硬體有關,請說明你使用的是什麼系統。例如,如果你的
- 顯å¡æœ‰å•é¡Œï¼Œè«‹æåŠå®ƒçš„製造商,顯å¡çš„型號,以åŠä½¿ç”¨çš„晶片。如果是筆記本電
- 腦,請æåŠå®ƒçš„型號å稱,但儘é‡ç¢ºä¿æ„義明確。例如「戴爾 XPS 13ã€å°±ä¸å¾ˆæ˜Žç¢ºï¼Œ
+ * 如果å•é¡Œå¯èƒ½èˆ‡ä½ çš„電腦硬件有關,請說明你使用的是什麼系統。例如,如果你的
+ 顯å¡æœ‰å•é¡Œï¼Œè«‹æåŠå®ƒçš„製造商,顯å¡çš„型號,以åŠä½¿ç”¨çš„芯片。如果是筆記本電
+ 腦,請æåŠå®ƒçš„型號å稱,但儘é‡ç¢ºä¿æ„義明確。例如“戴爾 XPS 13â€å°±ä¸å¾ˆæ˜Žç¢ºï¼Œ
因爲它å¯èƒ½æ˜¯ 2012 年的那款,那款除了看起來和ç¾åœ¨éŠ·å”®çš„沒有什麼ä¸åŒä¹‹å¤–,
兩者沒有任何共åŒä¹‹è™•ã€‚因此,在這種情æ³ä¸‹ï¼Œè¦åŠ ä¸Šæº–確的型號,例如 2019
- 年內推出的 XPS 13 型號爲「9380ã€æˆ–「7390ã€ã€‚åƒã€Œè¯æƒ³ Thinkpad T590ã€é€™æ¨£çš„åå­—
+ 年內推出的 XPS 13 型號爲“9380â€æˆ–“7390â€ã€‚åƒâ€œè¯æƒ³ Thinkpad T590â€é€™æ¨£çš„åå­—
也有些å«ç³Šä¸æ¸…:這款筆記本有帶ç¨ç«‹é¡¯å¡å’Œä¸å¸¶çš„å­åž‹è™Ÿï¼Œæ‰€ä»¥è¦å„˜é‡æ‰¾åˆ°æº–確
的型號å稱或註明主è¦éƒ¨ä»¶ã€‚
- * 說明正在使用的相關軟體。如果你在加載模塊時é‡åˆ°äº†å•é¡Œï¼Œä½ è¦èªªæ˜Žæ­£åœ¨ä½¿ç”¨çš„
+ * 說明正在使用的相關軟件。如果你在加載模塊時é‡åˆ°äº†å•é¡Œï¼Œä½ è¦èªªæ˜Žæ­£åœ¨ä½¿ç”¨çš„
kmodã€systemd å’Œ udev 的版本。如果其中一個 DRM 驅動出ç¾å•é¡Œï¼Œä½ è¦èªªæ˜Ž
libdrm å’Œ Mesa 的版本;還è¦èªªæ˜Žä½ çš„ Wayland åˆæˆå™¨æˆ– X-Server åŠå…¶é©…動。
如果你有文件系統å•é¡Œï¼Œè«‹è¨»æ˜Žç›¸æ‡‰çš„文件系統實用程åºçš„版本(e2fsprogs,
btrfs-progs, xfsprogs……)。
* 從內核中收集å¯èƒ½æœ‰ç”¨çš„é¡å¤–ä¿¡æ¯ã€‚例如, ``lspci -nn`` 的輸出å¯ä»¥å¹«åŠ©åˆ¥äºº
- 識別你使用的硬體。如果你的硬體有å•é¡Œï¼Œä½ ç”šè‡³å¯ä»¥çµ¦å‡º ``sudo lspci -vvv``
+ 識別你使用的硬件。如果你的硬件有å•é¡Œï¼Œä½ ç”šè‡³å¯ä»¥çµ¦å‡º ``sudo lspci -vvv``
çš„çµæžœï¼Œå› çˆ²å®ƒæ供了組件是如何é…置的信æ¯ã€‚å°æ–¼ä¸€äº›å•é¡Œï¼Œå¯èƒ½æœ€å¥½åŒ…å«
``/proc/cpuinfo`` , ``/proc/ioports`` , ``/proc/iomem`` ,
``/proc/modules`` 或 ``/proc/scsi/scsi`` 等文件的內容。一些å­ç³»çµ±é‚„æ
@@ -936,7 +931,7 @@ Linux 首席開發者 Linus Torvalds èªçˆ² Linux 內核永é ä¸æ‡‰æƒ¡åŒ–,這
~~~~~~~~~~~~~~~~~~~~~~
ç¾åœ¨ä½ å·²ç¶“準備好了報告的詳細部分,讓我們進入最é‡è¦çš„部分:開頭幾å¥ã€‚ç¾åœ¨åˆ°
-報告的最å‰é¢ï¼Œåœ¨ä½ å‰›æ‰å¯«çš„部分之å‰åŠ ä¸Šé¡žä¼¼ã€ŒThe detailed description:ã€ï¼ˆè©³ç´°
+報告的最å‰é¢ï¼Œåœ¨ä½ å‰›çº”寫的部分之å‰åŠ ä¸Šé¡žä¼¼â€œThe detailed description:â€ï¼ˆè©³ç´°
æ述)這樣的內容,並在最å‰é¢æ’入兩個新行。ç¾åœ¨å¯«ä¸€å€‹æ­£å¸¸é•·åº¦çš„段è½ï¼Œå¤§è‡´æ¦‚
述這個å•é¡Œã€‚去掉所有枯燥的細節,把é‡é»žæ”¾åœ¨è®€è€…需è¦çŸ¥é“çš„é—œéµéƒ¨åˆ†ï¼Œä»¥è®“人了
解這是怎麼回事;如果你èªçˆ²é€™å€‹ç¼ºé™·å½±éŸ¿äº†å¾ˆå¤šç”¨æˆ¶ï¼Œå°±æ一下這點來å¸å¼•å¤§å®¶é—œ
@@ -946,10 +941,10 @@ Linux 首席開發者 Linus Torvalds èªçˆ² Linux 內核永é ä¸æ‡‰æƒ¡åŒ–,這
è¦æ›´åŠ æŠ½è±¡ï¼Œçˆ²å ±å‘Šå¯«ä¸€å€‹æ›´çŸ­çš„主題/標題。
ç¾åœ¨ä½ å·²ç¶“寫好了這部分,請花點時間來優化它,因爲它是你的報告中最é‡è¦çš„部分:
-很多人會先讀這部分,然後æ‰æœƒæ±ºå®šæ˜¯å¦å€¼å¾—花時間閱讀其他部分。
+很多人會先讀這部分,然後纔會決定是å¦å€¼å¾—花時間閱讀其他部分。
ç¾åœ¨å°±åƒ :ref:`MAINTAINERS <maintainers>` 維護者文件告訴你的那樣發é€æˆ–æ交
-報告,除éžå®ƒæ˜¯å‰é¢æ¦‚述的那些「高優先級å•é¡Œã€ä¹‹ä¸€ï¼šåœ¨é€™ç¨®æƒ…æ³ä¸‹ï¼Œè«‹å…ˆé–±è®€ä¸‹ä¸€
+報告,除éžå®ƒæ˜¯å‰é¢æ¦‚述的那些“高優先級å•é¡Œâ€ä¹‹ä¸€ï¼šåœ¨é€™ç¨®æƒ…æ³ä¸‹ï¼Œè«‹å…ˆé–±è®€ä¸‹ä¸€
å°ç¯€ï¼Œç„¶å¾Œå†ç™¼é€å ±å‘Šã€‚
高優先級å•é¡Œçš„特殊處ç†
@@ -960,11 +955,19 @@ Linux 首席開發者 Linus Torvalds èªçˆ² Linux 內核永é ä¸æ‡‰æƒ¡åŒ–,這
**éžå¸¸åš´é‡çš„缺陷** :確ä¿åœ¨ä¸»é¡Œæˆ–工單標題以åŠç¬¬ä¸€æ®µä¸­æ˜Žé¡¯æ¨™å‡º severeness
(éžå¸¸åš´é‡çš„)。
-**回歸** :如果å•é¡Œæ˜¯ä¸€å€‹å›žæ­¸ï¼Œè«‹åœ¨éƒµä»¶çš„主題或缺陷跟蹤器的標題中添加
-[REGRESSION]。如果您沒有進行二分,請至少註明您測試的最新主線版本(比如 5.7)
-和出ç¾å•é¡Œçš„最新版本(比如 5.8)。如果您æˆåŠŸåœ°é€²è¡Œäº†äºŒåˆ†ï¼Œè«‹è¨»æ˜Žå°Žè‡´å›žæ­¸
-çš„æ交ID和主題。也請添加該變更的作者到你的報告中;如果您需è¦å°‡æ‚¨çš„缺陷æ交
-到缺陷跟蹤器中,請將報告以ç§äººéƒµä»¶çš„å½¢å¼è½‰ç™¼çµ¦ä»–,並註明報告æ交地點。
+**è¿´æ­¸** :報告的主題應以“[REGRESSION]â€é–‹é ­ã€‚
+
+如果您æˆåŠŸç”¨äºŒåˆ†æ³•å®šä½äº†å•é¡Œï¼Œè«‹ä½¿ç”¨å¼•å…¥è¿´æ­¸ä¹‹æ›´æ”¹çš„標題作爲主題的第二部分。
+請在報告中寫明“罪é­ç¦é¦–â€çš„æ交ID。如果未能æˆåŠŸäºŒåˆ†ï¼Œè«‹åœ¨å ±å‘Šä¸­è¬›æ˜Žæœ€å¾Œä¸€å€‹
+正常工作的版本(例如5.7)和最先發生å•é¡Œçš„版本(例如5.8-rc1)。
+
+通éŽéƒµä»¶ç™¼é€å ±å‘Šæ™‚,請抄é€Linux迴歸郵件列表(regressions@lists.linux.dev)。
+如果報告需è¦æ交到æŸå€‹web追蹤器,請繼續æ交;並在æ交後,通éŽéƒµä»¶å°‡å ±å‘Šè½‰ç™¼
+至迴歸列表;抄é€ç›¸é—œå­ç³»çµ±çš„維護人員和郵件列表。請確ä¿å ±å‘Šæ˜¯å…§è¯è½‰ç™¼çš„,ä¸è¦
+把它作爲附件。å¦å¤–請在頂部添加一個簡短的說明,在那è£å¯«ä¸Šå·¥å–®çš„網å€ã€‚
+
+在郵寄或轉發報告時,如果æˆåŠŸäºŒåˆ†ï¼Œéœ€è¦å°‡â€œç½ªé­ç¦é¦–â€çš„作者添加到收件人中;åŒæ™‚
+抄é€signed-off-byéˆä¸­çš„æ¯å€‹äººï¼Œæ‚¨å¯ä»¥åœ¨æ交消æ¯çš„末尾找到。
**安全å•é¡Œ** :å°æ–¼é€™ç¨®å•é¡Œï¼Œä½ å°‡å¿…須評估:如果細節被公開披露,是å¦æœƒå°å…¶ä»–
用戶產生短期風險。如果ä¸æœƒï¼Œåªéœ€æŒ‰ç…§æ‰€è¿°ç¹¼çºŒå ±å‘Šå•é¡Œã€‚如果有此風險,你需è¦
@@ -972,47 +975,47 @@ Linux 首席開發者 Linus Torvalds èªçˆ² Linux 內核永é ä¸æ‡‰æƒ¡åŒ–,這
* 如果 MAINTAINERS 文件指示您通éŽéƒµä»¶å ±å‘Šå•é¡Œï¼Œè«‹ä¸è¦æŠ„é€ä»»ä½•å…¬å…±éƒµä»¶åˆ—表。
- * 如果你應該在缺陷跟蹤器中æ交å•é¡Œï¼Œè«‹ç¢ºä¿å°‡å·¥å–®æ¨™è¨˜çˆ²ã€Œç§æœ‰ã€æˆ–「安全å•é¡Œã€ã€‚
+ * 如果你應該在缺陷跟蹤器中æ交å•é¡Œï¼Œè«‹ç¢ºä¿å°‡å·¥å–®æ¨™è¨˜çˆ²â€œç§æœ‰â€æˆ–“安全å•é¡Œâ€ã€‚
如果缺陷跟蹤器沒有æä¾›ä¿æŒå ±å‘Šç§å¯†æ€§çš„方法,那就別想了,把你的報告以ç§äºº
郵件的形å¼ç™¼é€çµ¦ç¶­è­·è€…å§ã€‚
-在這兩種情æ³ä¸‹ï¼Œéƒ½ä¸€å®šè¦å°‡å ±å‘Šç™¼åˆ° MAINTAINERS 文件中「安全è¯çµ¡ã€éƒ¨åˆ†åˆ—出的
+在這兩種情æ³ä¸‹ï¼Œéƒ½ä¸€å®šè¦å°‡å ±å‘Šç™¼åˆ° MAINTAINERS 文件中“安全è¯çµ¡â€éƒ¨åˆ†åˆ—出的
地å€ã€‚ç†æƒ³çš„情æ³æ˜¯åœ¨ç™¼é€å ±å‘Šçš„時候直接抄é€ä»–們。如果您在缺陷跟蹤器中æ交了
-報告,請將報告的文本轉發到這些地å€ï¼›ä½†è«‹åœ¨å ±å‘Šçš„頂部加上注釋,表明您æ交了
-報告,並附上工單連çµã€‚
+報告,請將報告的文本轉發到這些地å€ï¼›ä½†è«‹åœ¨å ±å‘Šçš„頂部加上註釋,表明您æ交了
+報告,並附上工單éˆæŽ¥ã€‚
-更多信æ¯è«‹åƒè¦‹ã€ŒDocumentation/translations/zh_TW/admin-guide/security-bugs.rstã€ã€‚
+更多信æ¯è«‹åƒè¦‹ Documentation/translations/zh_CN/admin-guide/security-bugs.rst 。
-發布報告後的責任
+發佈報告後的責任
------------------
*等待別人的å應,繼續推進事情,直到你能夠接å—這樣或那樣的çµæžœã€‚因此,請
公開和åŠæ™‚地回應任何詢å•ã€‚測試æ出的修復。ç©æ¥µåœ°æ¸¬è©¦ï¼šè‡³å°‘é‡æ–°æ¸¬è©¦æ¯å€‹
新主線版本的首個候é¸ç‰ˆæœ¬ï¼ˆRC),並報告你的çµæžœã€‚如果出ç¾æ‹–延,就å‹å¥½åœ°
- æ醒一下。如果你沒有得到任何幫助或者未能滿æ„,請試著自己幫助自己。*
+ æ醒一下。如果你沒有得到任何幫助或者未能滿æ„,請試ç€è‡ªå·±å¹«åŠ©è‡ªå·±ã€‚*
如果你的報告éžå¸¸å„ªç§€ï¼Œè€Œä¸”你真的很幸é‹ï¼Œé‚£éº¼æŸå€‹é–‹ç™¼è€…å¯èƒ½æœƒç«‹å³ç™¼ç¾å°Žè‡´å•
題的原因;然後他們å¯èƒ½æœƒå¯«ä¸€å€‹è£œä¸ä¾†ä¿®å¾©ã€æ¸¬è©¦å®ƒï¼Œä¸¦ç›´æŽ¥ç™¼é€çµ¦ä¸»ç·šé›†æˆï¼ŒåŒ
-時標記它以便以後回溯到需è¦å®ƒçš„穩定版和長期支æŒå…§æ ¸ã€‚那麼你需è¦åšçš„就是回復
-一å¥ã€ŒThank you very muchã€ï¼ˆéžå¸¸æ„Ÿè¬ï¼‰ï¼Œç„¶å¾Œåœ¨ç™¼å¸ƒå¾Œæ›ä¸Šä¿®å¾©å¥½çš„版本。
+時標記它以便以後回溯到需è¦å®ƒçš„穩定版和長期支æŒå…§æ ¸ã€‚那麼你需è¦åšçš„就是回覆
+一å¥â€œThank you very muchâ€ï¼ˆéžå¸¸æ„Ÿè¬ï¼‰ï¼Œç„¶å¾Œåœ¨ç™¼ä½ˆå¾Œæ›ä¸Šä¿®å¾©å¥½çš„版本。
-但這種ç†æƒ³ç‹€æ³å¾ˆå°‘發生。這就是爲什麼你把報告拿出來之後工作æ‰é–‹å§‹ã€‚ä½ è¦åšçš„
-事情è¦è¦–情æ³è€Œå®šï¼Œä½†é€šå¸¸æœƒæ˜¯ä¸‹é¢åˆ—出的事情。但在深入研究細節之å‰ï¼Œé€™è£¡æœ‰å¹¾
+但這種ç†æƒ³ç‹€æ³å¾ˆå°‘發生。這就是爲什麼你把報告拿出來之後工作纔開始。你è¦åšçš„
+事情è¦è¦–情æ³è€Œå®šï¼Œä½†é€šå¸¸æœƒæ˜¯ä¸‹é¢åˆ—出的事情。但在深入研究細節之å‰ï¼Œé€™è£æœ‰å¹¾
件é‡è¦çš„事情,你需è¦è¨˜ä½é€™éƒ¨åˆ†çš„éŽç¨‹ã€‚
關於進一步互動的一般建議
~~~~~~~~~~~~~~~~~~~~~~~~~~
-**總是公開回復** :當你在缺陷跟蹤器中æ交å•é¡Œæ™‚,一定è¦åœ¨é‚£è£¡å›žå¾©ï¼Œä¸è¦ç§ä¸‹
-è¯ç¹«ä»»ä½•é–‹ç™¼è€…。å°æ–¼éƒµä»¶å ±å‘Šï¼Œåœ¨å›žå¾©æ‚¨æ”¶åˆ°çš„任何郵件時,總是使用「全部回復ã€
+**總是公開回復** :當你在缺陷跟蹤器中æ交å•é¡Œæ™‚,一定è¦åœ¨é‚£è£å›žè¦†ï¼Œä¸è¦ç§ä¸‹
+è¯ç¹«ä»»ä½•é–‹ç™¼è€…。å°æ–¼éƒµä»¶å ±å‘Šï¼Œåœ¨å›žè¦†æ‚¨æ”¶åˆ°çš„任何郵件時,總是使用“全部回覆â€
功能。這包括帶有任何你å¯èƒ½æƒ³è¦æ·»åŠ åˆ°ä½ çš„報告中的é¡å¤–數據的郵件:進入郵件應
-用程åºã€Œå·²ç™¼é€ã€æ–‡ä»¶å¤¾ï¼Œä¸¦åœ¨éƒµä»¶ä¸Šä½¿ç”¨ã€Œå…¨éƒ¨å›žå¾©ã€ä¾†å›žå¾©å ±å‘Šã€‚這種方法å¯ä»¥ç¢ºä¿
-公共郵件列表和其他所有åƒèˆ‡è€…都能åŠæ™‚了解情æ³ï¼›å®ƒé‚„能ä¿æŒéƒµä»¶ç·šç¨‹çš„完整性,
+用程åºâ€œå·²ç™¼é€â€æ–‡ä»¶å¤¾ï¼Œä¸¦åœ¨éƒµä»¶ä¸Šä½¿ç”¨â€œå…¨éƒ¨å›žè¦†â€ä¾†å›žå¾©å ±å‘Šã€‚這種方法å¯ä»¥ç¢ºä¿
+公共郵件列表和其他所有åƒèˆ‡è€…都能åŠæ™‚瞭解情æ³ï¼›å®ƒé‚„能ä¿æŒéƒµä»¶ç·šç¨‹çš„完整性,
這å°æ–¼éƒµä»¶åˆ—表將所有相關郵件歸爲一類是éžå¸¸é‡è¦çš„。
-åªæœ‰å…©ç¨®æƒ…æ³ä¸é©åˆåœ¨ç¼ºé™·è·Ÿè¹¤å™¨æˆ–「全部回復ã€ä¸­ç™¼è¡¨è©•è«–:
+åªæœ‰å…©ç¨®æƒ…æ³ä¸é©åˆåœ¨ç¼ºé™·è·Ÿè¹¤å™¨æˆ–“全部回覆â€ä¸­ç™¼è¡¨è©•è«–:
* 有人讓你ç§ä¸‹ç™¼æ±è¥¿ã€‚
@@ -1022,32 +1025,32 @@ Linux 首席開發者 Linus Torvalds èªçˆ² Linux 內核永é ä¸æ‡‰æƒ¡åŒ–,這
**在請求解釋或幫助之å‰å…ˆç ”究一下** :在這部分éŽç¨‹ä¸­ï¼Œæœ‰äººå¯èƒ½æœƒå‘Šè¨´ä½ ç”¨å°šæœª
掌æ¡çš„技能åšä¸€äº›äº‹æƒ…。例如你å¯èƒ½æœƒè¢«è¦æ±‚使用一些你從未è½èªªéŽçš„測試工具;或
-者你å¯èƒ½æœƒè¢«è¦æ±‚在 Linux 內核原始碼上應用一個補ä¸ä¾†æ¸¬è©¦å®ƒæ˜¯å¦æœ‰å¹«åŠ©ã€‚在æŸäº›
-情æ³ä¸‹ï¼Œç™¼å€‹å›žå¾©è©¢å•å¦‚何åšå°±å¯ä»¥äº†ã€‚但在走這æ¢è·¯ä¹‹å‰ï¼Œå„˜é‡é€šéŽåœ¨ç¶²éš›ç¶²è·¯ä¸Šæœ
+者你å¯èƒ½æœƒè¢«è¦æ±‚在 Linux 內核æºä»£ç¢¼ä¸Šæ‡‰ç”¨ä¸€å€‹è£œä¸ä¾†æ¸¬è©¦å®ƒæ˜¯å¦æœ‰å¹«åŠ©ã€‚在æŸäº›
+情æ³ä¸‹ï¼Œç™¼å€‹å›žè¦†è©¢å•å¦‚何åšå°±å¯ä»¥äº†ã€‚但在走這æ¢è·¯ä¹‹å‰ï¼Œå„˜é‡é€šéŽåœ¨äº’è¯ç¶²ä¸Šæœ
索自行找到答案;或者考慮在其他地方詢å•å»ºè­°ã€‚比如詢å•æœ‹å‹ï¼Œæˆ–者到你平時常去
çš„èŠå¤©å®¤æˆ–論壇發帖諮詢。
**è¦æœ‰è€å¿ƒ** :如果你真的很幸é‹ï¼Œä½ å¯èƒ½æœƒåœ¨å¹¾å€‹å°æ™‚內收到å°ä½ çš„報告的答覆。
但大多數情æ³ä¸‹æœƒèŠ±è²»æ›´å¤šçš„時間,因爲維護者分散在全çƒå„地,因此å¯èƒ½åœ¨ä¸åŒçš„
-時å€â€”—在那裡他們已經享å—è‘—é é›¢éµç›¤çš„夜晚。
+時å€â€”—在那è£ä»–們已經享å—ç€é é›¢éµç›¤çš„夜晚。
一般來說,內核開發者需è¦ä¸€åˆ°äº”個工作日來回復報告。有時會花費更長的時間,因
爲他們å¯èƒ½æ­£å¿™æ–¼åˆä½µçª—å£ã€å…¶ä»–工作ã€åƒåŠ é–‹ç™¼è€…會議,或者åªæ˜¯åœ¨äº«å—一個漫長
çš„æš‘å‡ã€‚
-「高優先級的å•é¡Œã€ï¼ˆè¦‹ä¸Šé¢çš„解釋)例外:維護者應該儘快解決這些å•é¡Œï¼›é€™å°±æ˜¯çˆ²
+“高優先級的å•é¡Œâ€ï¼ˆè¦‹ä¸Šé¢çš„解釋)例外:維護者應該儘快解決這些å•é¡Œï¼›é€™å°±æ˜¯çˆ²
什麼你應該最多等待一個星期(如果是緊急的事情,則åªéœ€å…©å¤©ï¼‰ï¼Œç„¶å¾Œå†ç™¼é€å‹å¥½
çš„æ醒。
-有時維護者å¯èƒ½æ²’有åŠæ™‚回復;有時候å¯èƒ½æœƒå‡ºç¾åˆ†æ­§ï¼Œä¾‹å¦‚一個å•é¡Œæ˜¯å¦ç¬¦åˆå›žæ­¸
+有時維護者å¯èƒ½æ²’有åŠæ™‚回覆;有時候å¯èƒ½æœƒå‡ºç¾åˆ†æ­§ï¼Œä¾‹å¦‚一個å•é¡Œæ˜¯å¦ç¬¦åˆè¿´æ­¸
çš„æ¢ä»¶ã€‚在這種情æ³ä¸‹ï¼Œåœ¨éƒµä»¶åˆ—表上æ出你的顧慮,並請求其他人公開或ç§ä¸‹å›žå¾©
如何繼續推進。如果失敗了,å¯èƒ½æ‡‰è©²è®“更高級別的維護者介入。如果是 WiFi 驅動,
那就是無線維護者;如果沒有更高級別的維護者,或者其他一切努力都失敗了,那
這å¯èƒ½æ˜¯ä¸€ç¨®ç½•è¦‹çš„ã€å¯ä»¥è®“ Linus Torvalds åƒèˆ‡é€²ä¾†çš„情æ³ã€‚
-**主動測試** :æ¯ç•¶ä¸€å€‹æ–°çš„主線內核版本的第一個é ç™¼å¸ƒç‰ˆæœ¬ï¼ˆrc1)發布的時候,
+**主動測試** :æ¯ç•¶ä¸€å€‹æ–°çš„主線內核版本的第一個é ç™¼ä½ˆç‰ˆæœ¬ï¼ˆrc1)發佈的時候,
去檢查一下這個å•é¡Œæ˜¯å¦å¾—到了解決,或者是å¦æœ‰ä»€éº¼é‡è¦çš„變化。在工單中或在
-回復報告的郵件中æåŠçµæžœï¼ˆç¢ºä¿æ‰€æœ‰åƒèˆ‡è¨Žè«–的人都被抄é€ï¼‰ã€‚這將表明你的承諾
+回覆報告的郵件中æåŠçµæžœï¼ˆç¢ºä¿æ‰€æœ‰åƒèˆ‡è¨Žè«–的人都被抄é€ï¼‰ã€‚這將表明你的承諾
和你願æ„幫忙。如果å•é¡ŒæŒçºŒå­˜åœ¨ï¼Œå®ƒä¹Ÿæœƒæ醒開發者確ä¿ä»–們ä¸æœƒå¿˜è¨˜å®ƒã€‚其他一
些ä¸å®šæœŸçš„é‡æ–°æ¸¬è©¦ï¼ˆä¾‹å¦‚用rc3ã€rc5 和最終版本)也是一個好主æ„,但åªæœ‰åœ¨ç›¸é—œ
çš„æ±è¥¿ç™¼ç”Ÿè®ŠåŒ–或者你正在寫什麼æ±è¥¿çš„時候æ‰å ±å‘Šä½ çš„çµæžœã€‚
@@ -1057,10 +1060,10 @@ Linux 首席開發者 Linus Torvalds èªçˆ² Linux 內核永é ä¸æ‡‰æƒ¡åŒ–,這
查詢和測試請求
~~~~~~~~~~~~~~~
-如果你的報告得到了回復則需履行以下責任:
+如果你的報告得到了回覆則需履行以下責任:
**檢查與你打交é“的人** :大多數情æ³ä¸‹ï¼Œæœƒæ˜¯ç¶­è­·è€…或特定代碼å€åŸŸçš„開發人員å°
-你的報告åšå‡ºå›žæ‡‰ã€‚但由於å•é¡Œé€šå¸¸æ˜¯å…¬é–‹å ±å‘Šçš„,所以回復的å¯èƒ½æ˜¯ä»»ä½•äººâ€”—包括
+你的報告åšå‡ºå›žæ‡‰ã€‚但由於å•é¡Œé€šå¸¸æ˜¯å…¬é–‹å ±å‘Šçš„,所以回覆的å¯èƒ½æ˜¯ä»»ä½•äººâ€”—包括
那些想è¦å¹«å¿™çš„人,但最後å¯èƒ½æœƒç”¨ä»–們的å•é¡Œæˆ–請求引導你完全å離軌é“。這很少
發生,但這是快速上網æœæœçœ‹ä½ æ­£åœ¨èˆ‡èª°äº’動是明智之舉的許多原因之一。通éŽé€™æ¨£
åšï¼Œä½ ä¹Ÿå¯ä»¥çŸ¥é“你的報告是å¦è¢«æ­£ç¢ºçš„人è½åˆ°ï¼Œå› çˆ²å¦‚果討論沒有導致滿æ„çš„å•é¡Œ
@@ -1086,63 +1089,63 @@ Linux 首席開發者 Linus Torvalds èªçˆ² Linux 內核永é ä¸æ‡‰æƒ¡åŒ–,這
報告到é”時,維護者剛剛離開éµç›¤ä¸€æ®µæ™‚間,或者有更é‡è¦çš„事情è¦è™•ç†ã€‚在寫æ醒
信的時候,è¦å–„æ„地å•ä¸€ä¸‹ï¼Œæ˜¯å¦é‚„需è¦ä½ é€™é‚Šæ供什麼來讓事情推進下去。如果報
告是通éŽéƒµä»¶ç™¼å‡ºä¾†çš„,那就在郵件的第一行回覆你的åˆå§‹éƒµä»¶ï¼ˆè¦‹ä¸Šæ–‡ï¼‰ï¼Œå…¶ä¸­åŒ…
-括下方的原始報告的完整引用:這是少數幾種情æ³ä¸‹ï¼Œé€™æ¨£çš„「TOFUã€ï¼ˆText Over,
+括下方的原始報告的完整引用:這是少數幾種情æ³ä¸‹ï¼Œé€™æ¨£çš„“TOFUâ€ï¼ˆText Over,
Fullquote Under文字在上,完整引用在下)是正確的åšæ³•ï¼Œå› çˆ²é€™æ¨£æ‰€æœ‰çš„收件人都
會以é©ç•¶çš„é †åºç«‹å³è®“細節到手頭上來。
-在æ醒之後,å†ç­‰ä¸‰å‘¨çš„回覆。如果你ä»ç„¶æ²’有得到é©ç•¶çš„å饋,你首先應該é‡æ–°è€ƒ
+在æ醒之後,å†ç­‰ä¸‰é€±çš„回覆。如果你ä»ç„¶æ²’有得到é©ç•¶çš„å饋,你首先應該é‡æ–°è€ƒ
慮你的方法。你是å¦å¯èƒ½å˜—試接觸了錯誤的人?是ä¸æ˜¯å ±å‘Šä¹Ÿè¨±ä»¤äººå感或者太混亂,
以至於人們決定完全é é›¢å®ƒï¼ŸæŽ’除這些因素的最好方法是:把報告給一兩個熟悉
FLOSS å•é¡Œå ±å‘Šçš„人看,詢å•ä»–們的æ„見。åŒæ™‚徵求他們關於如何繼續推進的建議。
-這å¯èƒ½æ„味著:準備一份更好的報告,讓這些人在你發出去之å‰å°å®ƒé€²è¡Œå¯©æŸ¥ã€‚這樣
+這å¯èƒ½æ„味ç€ï¼šæº–備一份更好的報告,讓這些人在你發出去之å‰å°å®ƒé€²è¡Œå¯©æŸ¥ã€‚這樣
的方法完全å¯ä»¥ï¼›åªéœ€èªªæ˜Žé€™æ˜¯é—œæ–¼é€™å€‹å•é¡Œçš„第二份改進的報告,並附上第一份報
-告的連çµã€‚
+å‘Šçš„éˆæŽ¥ã€‚
如果報告是æ°ç•¶çš„,你å¯ä»¥ç™¼é€ç¬¬äºŒå°æ醒信;在其中詢å•çˆ²ä»€éº¼å ±å‘Šæ²’有得到任何
-回復。第二å°æ醒郵件的好時機是在新 Linux 內核版本的首個é ç™¼å¸ƒç‰ˆæœ¬ï¼ˆ'rc1')
-發布後ä¸ä¹…,因爲無論如何你都應該在那個時候é‡æ–°æ¸¬è©¦ä¸¦æ供狀態更新(見上文)。
+回覆。第二å°æ醒郵件的好時機是在新 Linux 內核版本的首個é ç™¼ä½ˆç‰ˆæœ¬ï¼ˆ'rc1')
+發佈後ä¸ä¹…,因爲無論如何你都應該在那個時候é‡æ–°æ¸¬è©¦ä¸¦æ供狀態更新(見上文)。
-如果第二次æ醒的çµæžœåˆåœ¨ä¸€å‘¨å…§æ²’有任何å應,å¯ä»¥å˜—試è¯ç¹«ä¸Šç´šç¶­è­·è€…è©¢å•æ„見:
+如果第二次æ醒的çµæžœåˆåœ¨ä¸€é€±å…§æ²’有任何å應,å¯ä»¥å˜—試è¯ç¹«ä¸Šç´šç¶­è­·è€…è©¢å•æ„見:
å³ä½¿å†å¿™çš„維護者在這時候也至少應該發éŽæŸç¨®ç¢ºèªã€‚
記ä½è¦åšå¥½å¤±æœ›çš„準備:ç†æƒ³ç‹€æ³ä¸‹ç¶­è­·è€…最好å°æ¯ä¸€å€‹å•é¡Œå ±å‘Šåšå‡ºå›žæ‡‰ï¼Œä½†ä»–們
-åªæœ‰ç¾©å‹™è§£æ±ºä¹‹å‰åˆ—出的「高優先級å•é¡Œã€ã€‚所以,如果你得到的回覆是「è¬è¬ä½ çš„報告,
-我目å‰æœ‰æ›´é‡è¦çš„å•é¡Œè¦è™•ç†ï¼Œåœ¨å¯é è¦‹çš„未來沒有時間去研究這個å•é¡Œã€ï¼Œé‚£è«‹ä¸
+åªæœ‰ç¾©å‹™è§£æ±ºä¹‹å‰åˆ—出的“高優先級å•é¡Œâ€ã€‚所以,如果你得到的回覆是“è¬è¬ä½ çš„報告,
+我目å‰æœ‰æ›´é‡è¦çš„å•é¡Œè¦è™•ç†ï¼Œåœ¨å¯é è¦‹çš„未來沒有時間去研究這個å•é¡Œâ€ï¼Œé‚£è«‹ä¸
è¦å¤ªæ²®å–ªã€‚
也有å¯èƒ½åœ¨ç¼ºé™·è·Ÿè¹¤å™¨æˆ–列表中進行了一些討論之後,什麼都沒有發生,æ醒也無助
於激勵大家進行修復。這種情æ³å¯èƒ½æ˜¯æ¯€æ»…性的,但在 Linux 內核開發中確實會發生。
-這些和其他得ä¸åˆ°å¹«åŠ©çš„原因在本文çµå°¾è™•çš„「爲什麼有些å•é¡Œåœ¨è¢«å ±å‘Šå¾Œæ²’有得到
-任何回應或者ä»ç„¶æ²’有修復ã€ä¸­é€²è¡Œäº†è§£é‡‹ã€‚
+這些和其他得ä¸åˆ°å¹«åŠ©çš„原因在本文çµå°¾è™•çš„“爲什麼有些å•é¡Œåœ¨è¢«å ±å‘Šå¾Œæ²’有得到
+任何回應或者ä»ç„¶æ²’有修復â€ä¸­é€²è¡Œäº†è§£é‡‹ã€‚
如果你沒有得到任何幫助或å•é¡Œæœ€çµ‚沒有得到解決,ä¸è¦æ²®å–ªï¼šLinux 內核是 FLOSS,
-因此你ä»ç„¶å¯ä»¥è‡ªå·±å¹«åŠ©è‡ªå·±ã€‚例如,你å¯ä»¥è©¦è‘—找到其他å—影響的人,和他們一
+因此你ä»ç„¶å¯ä»¥è‡ªå·±å¹«åŠ©è‡ªå·±ã€‚例如,你å¯ä»¥è©¦ç€æ‰¾åˆ°å…¶ä»–å—影響的人,和他們一
èµ·åˆä½œä¾†è§£æ±ºé€™å€‹å•é¡Œã€‚這樣的團隊å¯ä»¥ä¸€èµ·æº–備一份新的報告,æ到團隊有多少人,
爲什麼你們èªçˆ²é€™æ˜¯æ‡‰è©²å¾—到解決的事情。也許你們還å¯ä»¥ä¸€èµ·ç¸®å°ç¢ºåˆ‡åŽŸå› æˆ–引
-入回歸的變化,這往往會使修復更容易。而且如果é‹æ°£å¥½çš„話,團隊中å¯èƒ½æœƒæœ‰æ‡‚點
-編程的人,也許能寫出一個修複方案。
+入迴歸的變化,這往往會使修復更容易。而且如果é‹æ°£å¥½çš„話,團隊中å¯èƒ½æœƒæœ‰æ‡‚點
+編程的人,也許能寫出一個修復方案。
-「報告穩定版和長期支æŒå…§æ ¸ç·šçš„回歸ã€çš„åƒè€ƒ
+“報告穩定版和長期支æŒå…§æ ¸ç·šçš„è¿´æ­¸â€çš„åƒè€ƒ
------------------------------------------
-本å°ç¯€æ供了在穩定版和長期支æŒå…§æ ¸ç·šä¸­é¢å°å›žæ­¸æ™‚需è¦åŸ·è¡Œçš„步驟的詳細信æ¯ã€‚
+本å°ç¯€æ供了在穩定版和長期支æŒå…§æ ¸ç·šä¸­é¢å°è¿´æ­¸æ™‚需è¦åŸ·è¡Œçš„步驟的詳細信æ¯ã€‚
確ä¿ç‰¹å®šç‰ˆæœ¬ç·šä»ç„¶å—支æŒ
~~~~~~~~~~~~~~~~~~~~~~~~~
*檢查內核開發人員是å¦ä»ç„¶ç¶­è­·ä½ é—œå¿ƒçš„Linux內核版本線:去 kernel.org çš„
- 首é ï¼Œç¢ºä¿æ­¤ç‰¹å®šç‰ˆæœ¬ç·šçš„最新版沒有「[EOL]ã€æ¨™è¨˜ã€‚*
+ 首é ï¼Œç¢ºä¿æ­¤ç‰¹å®šç‰ˆæœ¬ç·šçš„最新版沒有“[EOL]â€æ¨™è¨˜ã€‚*
大多數內核版本線åªæ”¯æŒä¸‰å€‹æœˆå·¦å³ï¼Œå› çˆ²å»¶é•·ç¶­è­·æ™‚間會帶來相當多的工作。因此,
æ¯å¹´åªæœƒé¸æ“‡ä¸€å€‹ç‰ˆæœ¬ä¾†æ”¯æŒè‡³å°‘兩年(通常是六年)。這就是爲什麼你需è¦æª¢æŸ¥
內核開發者是å¦é‚„支æŒä½ é—œå¿ƒçš„版本線。
-注æ„,如果 `kernel.org <https://kernel.org/>`_ 在首é ä¸Šåˆ—出了兩個「穩定ã€ç‰ˆæœ¬ï¼Œ
+注æ„,如果 `kernel.org <https://kernel.org/>`_ 在首é ä¸Šåˆ—出了兩個“穩定â€ç‰ˆæœ¬ï¼Œ
你應該考慮切æ›åˆ°è¼ƒæ–°çš„版本,而忘掉較舊的版本:å°å®ƒçš„支æŒå¯èƒ½å¾ˆå¿«å°±æœƒçµæŸã€‚
-然後,它將被標記爲「生命周期çµæŸã€ï¼ˆEOL)。é”到這個程度的版本線ä»ç„¶æœƒåœ¨
-`kernel.org <https://kernel.org/>`_ 首é ä¸Šè¢«é¡¯ç¤ºä¸€å…©å‘¨ï¼Œä½†ä¸é©åˆç”¨æ–¼æ¸¬è©¦å’Œ
+然後,它將被標記爲“生命週期çµæŸâ€ï¼ˆEOL)。é”到這個程度的版本線ä»ç„¶æœƒåœ¨
+`kernel.org <https://kernel.org/>`_ 首é ä¸Šè¢«é¡¯ç¤ºä¸€å…©é€±ï¼Œä½†ä¸é©åˆç”¨æ–¼æ¸¬è©¦å’Œ
報告。
æœç´¢ç©©å®šç‰ˆéƒµä»¶åˆ—表
@@ -1158,57 +1161,63 @@ FLOSS å•é¡Œå ±å‘Šçš„人看,詢å•ä»–們的æ„見。åŒæ™‚徵求他們關於å¦
用最新版本復ç¾å•é¡Œ
~~~~~~~~~~~~~~~~~~~
- *從特定的版本線安è£æœ€æ–°ç‰ˆæœ¬ä½œçˆ²ç´”淨內核。確ä¿é€™å€‹å…§æ ¸æ²’有被汙染,並且ä»
- 然存在å•é¡Œï¼Œå› çˆ²å•é¡Œå¯èƒ½å·²ç¶“在那裡被修復了。*
+ *從特定的版本線安è£æœ€æ–°ç‰ˆæœ¬ä½œçˆ²ç´”淨內核。確ä¿é€™å€‹å…§æ ¸æ²’有被污染,並且ä»
+ 然存在å•é¡Œï¼Œå› çˆ²å•é¡Œå¯èƒ½å·²ç¶“在那è£è¢«ä¿®å¾©äº†ã€‚*
在投入更多時間到這個éŽç¨‹ä¸­ä¹‹å‰ï¼Œä½ è¦æª¢æŸ¥é€™å€‹å•é¡Œæ˜¯å¦åœ¨ä½ é—œæ³¨çš„版本線的最新
-版本中已經得到了修復。這個內核需è¦æ˜¯ç´”淨的,在å•é¡Œç™¼ç”Ÿä¹‹å‰ä¸æ‡‰è©²è¢«æ±™æŸ“,正
+版本中已經得到了修復。這個內核需è¦æ˜¯ç´”淨的,在å•é¡Œç™¼ç”Ÿä¹‹å‰ä¸æ‡‰è©²è¢«æ±¡æŸ“,正
如上é¢å·²ç¶“在測試主線的éŽç¨‹ä¸­è©³ç´°ä»‹ç´¹éŽçš„一樣。
-您是å¦æ˜¯ç¬¬ä¸€æ¬¡æ³¨æ„到供應商內核的回歸?供應商的更改å¯èƒ½æœƒç™¼ç”Ÿè®ŠåŒ–。你需è¦é‡æ–°
+您是å¦æ˜¯ç¬¬ä¸€æ¬¡æ³¨æ„到供應商內核的迴歸?供應商的更改å¯èƒ½æœƒç™¼ç”Ÿè®ŠåŒ–。你需è¦é‡æ–°
檢查排除來這個å•é¡Œã€‚當您從5.10.4-vendor.42更新到5.10.5-vendor.43時,記錄æ壞
çš„ä¿¡æ¯ã€‚然後在測試了å‰ä¸€æ®µä¸­æ‰€è¿°çš„最新5.10版本之後,檢查Linux 5.10.4的普通版本
-是å¦ä¹Ÿå¯ä»¥æ­£å¸¸å·¥ä½œã€‚如果å•é¡Œåœ¨é‚£è£¡å‡ºç¾ï¼Œé‚£å°±ä¸ç¬¦åˆä¸Šæ¸¸å›žæ­¸çš„æ¢ä»¶ï¼Œæ‚¨éœ€è¦åˆ‡æ›
+是å¦ä¹Ÿå¯ä»¥æ­£å¸¸å·¥ä½œã€‚如果å•é¡Œåœ¨é‚£è£å‡ºç¾ï¼Œé‚£å°±ä¸ç¬¦åˆä¸Šæ¸¸è¿´æ­¸çš„æ¢ä»¶ï¼Œæ‚¨éœ€è¦åˆ‡æ›
回主é€æ­¥æŒ‡å—來報告å•é¡Œã€‚
-報告回歸
+報告迴歸
~~~~~~~~~~
- *å‘Linux穩定版郵件列表發é€ä¸€å€‹ç°¡çŸ­çš„å•é¡Œå ±å‘Š(stable@vger.kernel.org)。
- 大致æè¿°å•é¡Œï¼Œä¸¦è§£é‡‹å¦‚何復ç¾ã€‚講清楚首個出ç¾å•é¡Œçš„版本和最後一個工作正常
- 的版本。然後等待進一步的指示。*
+ *å‘Linux穩定版郵件列表發é€ä¸€å€‹ç°¡çŸ­çš„å•é¡Œå ±å‘Š(stable@vger.kernel.org)並
+ 抄é€Linux迴歸郵件列表(regressions@lists.linux.dev);如果你懷疑是由æŸ
+ å­ç³»çµ±å¼•èµ·çš„,請抄é€å…¶ç¶­è­·äººå“¡å’Œå­ç³»çµ±éƒµä»¶åˆ—表。大致æè¿°å•é¡Œï¼Œä¸¦è§£é‡‹å¦‚
+ 何復ç¾ã€‚講清楚首個出ç¾å•é¡Œçš„版本和最後一個工作正常的版本。然後等待進一
+ 步的指示。*
-當報告在穩定版或長期支æŒå…§æ ¸ç·šå…§ç™¼ç”Ÿçš„回歸(例如在從5.10.4更新到5.10.5時),
-一份簡短的報告足以快速報告å•é¡Œã€‚å› æ­¤åªéœ€è¦ç²—略的æ述。
+當報告在穩定版或長期支æŒå…§æ ¸ç·šå…§ç™¼ç”Ÿçš„迴歸(例如在從5.10.4更新到5.10.5時),
+一份簡短的報告足以快速報告å•é¡Œã€‚å› æ­¤åªéœ€å‘穩定版和迴歸郵件列表發é€ç²—略的æè¿°ï¼›
+ä¸éŽå¦‚果你懷疑æŸå­ç³»çµ±å°Žè‡´æ­¤å•é¡Œçš„話,請一併抄é€å…¶ç¶­è­·äººå“¡å’Œå­ç³»çµ±éƒµä»¶åˆ—表,
+這會加快進程。
-但是請注æ„,如果您能夠指明引入å•é¡Œçš„確切版本,這將å°é–‹ç™¼äººå“¡æœ‰å¾ˆå¤§å¹«åŠ©ã€‚å› æ­¤
-如果有時間的話,請嘗試使用普通內核找到該版本。讓我們å‡è¨­ç™¼è¡Œç‰ˆç™¼å¸ƒLinux內核
+請注æ„,如果您能夠指明引入å•é¡Œçš„確切版本,這將å°é–‹ç™¼äººå“¡æœ‰å¾ˆå¤§å¹«åŠ©ã€‚å› æ­¤
+如果有時間的話,請嘗試使用普通內核找到該版本。讓我們å‡è¨­ç™¼è¡Œç‰ˆç™¼ä½ˆLinux內核
5.10.5到5.10.8的更新時發生了故障。那麼按照上é¢çš„指示,去檢查該版本線中的最新
內核,比如5.10.9。如果å•é¡Œå‡ºç¾ï¼Œè«‹å˜—試普通5.10.5,以確ä¿ä¾›æ‡‰å•†æ‡‰ç”¨çš„補ä¸ä¸æœƒ
干擾。如果å•é¡Œæ²’有出ç¾ï¼Œé‚£éº¼å˜—試5.10.7,然後直到5.10.8或5.10.6(å–決於çµæžœï¼‰
找到第一個引入å•é¡Œçš„版本。在報告中寫明這一點,並指出5.10.9ä»ç„¶å­˜åœ¨æ•…障。
-å‰ä¸€æ®µåŸºæœ¬ç²—略地概述了「二分ã€æ–¹æ³•ã€‚一旦報告出來,您å¯èƒ½æœƒè¢«è¦æ±‚åšä¸€å€‹æ­£ç¢ºçš„
+å‰ä¸€æ®µåŸºæœ¬ç²—略地概述了“二分â€æ–¹æ³•ã€‚一旦報告出來,您å¯èƒ½æœƒè¢«è¦æ±‚åšä¸€å€‹æ­£ç¢ºçš„
報告,因爲它å…許精確地定ä½å°Žè‡´å•é¡Œçš„確切更改(然後很容易被æ¢å¾©ä»¥å¿«é€Ÿä¿®å¾©å•é¡Œï¼‰ã€‚
-因此如果時間å…許,考慮立å³é€²è¡Œé©ç•¶çš„二分。有關如何詳細信æ¯ï¼Œè«‹åƒé–±ã€Œå°å›žæ­¸çš„
-特別關照ã€éƒ¨åˆ†å’Œæ–‡æª”「Documentation/translations/zh_TW/admin-guide/bug-bisect.rstã€ã€‚
+因此如果時間å…許,考慮立å³é€²è¡Œé©ç•¶çš„二分。有關如何詳細信æ¯ï¼Œè«‹åƒé–±â€œå°è¿´æ­¸çš„
+特別關照â€éƒ¨åˆ†å’Œæ–‡æª” Documentation/translations/zh_CN/admin-guide/bug-bisect.rst 。
+如果æˆåŠŸäºŒåˆ†çš„話,請將“罪é­ç¦é¦–â€çš„作者添加到收件人中;åŒæ™‚抄é€æ‰€æœ‰åœ¨
+signed-off-byéˆä¸­çš„人,您å¯ä»¥åœ¨æ交消æ¯çš„末尾找到。
-「報告僅在舊內核版本線中發生的å•é¡Œã€çš„åƒè€ƒ
-------------------------------------------
+“報告僅在舊內核版本線中發生的å•é¡Œâ€çš„åƒè€ƒ
+----------------------------------------
-本節詳細介紹了如果無法用主線內核é‡ç¾å•é¡Œï¼Œä½†å¸Œæœ›åœ¨èˆŠç‰ˆæœ¬ç·šï¼ˆåˆç¨±ç©©å®šç‰ˆå…§æ ¸å’Œ
+本節詳細介紹瞭如果無法用主線內核é‡ç¾å•é¡Œï¼Œä½†å¸Œæœ›åœ¨èˆŠç‰ˆæœ¬ç·šï¼ˆåˆç¨±ç©©å®šç‰ˆå…§æ ¸å’Œ
長期支æŒå…§æ ¸ï¼‰ä¸­ä¿®å¾©å•é¡Œæ™‚需è¦æŽ¡å–的步驟。
有些修復太複雜
~~~~~~~~~~~~~~~
*è«‹åšå¥½æº–備,接下來的幾個步驟å¯èƒ½ç„¡æ³•åœ¨èˆŠç‰ˆæœ¬ä¸­è§£æ±ºå•é¡Œï¼šä¿®å¾©å¯èƒ½å¤ªå¤§æˆ–
- 太冒險,無法移æ¤åˆ°é‚£è£¡ã€‚*
+ 太冒險,無法移æ¤åˆ°é‚£è£ã€‚*
å³ä½¿æ˜¯å¾®å°çš„ã€çœ‹ä¼¼æ˜Žé¡¯çš„代碼變化,有時也會帶來新的ã€å®Œå…¨æ„想ä¸åˆ°çš„å•é¡Œã€‚ç©©
定版和長期支æŒå…§æ ¸çš„維護者éžå¸¸æ¸…楚這一點,因此他們åªå°é€™äº›å…§æ ¸é€²è¡Œç¬¦åˆ
-「Documentation/translations/zh_TW/process/stable-kernel-rules.rstã€ä¸­æ‰€åˆ—出的
+Documentation/translations/zh_CN/process/stable-kernel-rules.rst 中所列出的
è¦å‰‡çš„修改。
複雜或有風險的修改ä¸ç¬¦åˆæ¢ä»¶ï¼Œå› æ­¤åªèƒ½æ‡‰ç”¨æ–¼ä¸»ç·šã€‚其他的修復很容易被回溯到
@@ -1220,7 +1229,7 @@ FLOSS å•é¡Œå ±å‘Šçš„人看,詢å•ä»–們的æ„見。åŒæ™‚徵求他們關於å¦
通用準備
~~~~~~~~~~
- *執行上é¢ã€Œå ±å‘Šåƒ…在舊內核版本線中發生的å•é¡Œã€ä¸€ç¯€ä¸­çš„å‰ä¸‰å€‹æ­¥é©Ÿã€‚*
+ *執行上é¢â€œå ±å‘Šåƒ…在舊內核版本線中發生的å•é¡Œâ€ä¸€ç¯€ä¸­çš„å‰ä¸‰å€‹æ­¥é©Ÿã€‚*
您需è¦åŸ·è¡Œæœ¬æŒ‡å—å¦ä¸€ç¯€ä¸­å·²ç¶“æ述的幾個步驟。這些步驟將讓您:
@@ -1242,21 +1251,21 @@ FLOSS å•é¡Œå ±å‘Šçš„人看,詢å•ä»–們的æ„見。åŒæ™‚徵求他們關於å¦
在許多情æ³ä¸‹ï¼Œä½ æ‰€è™•ç†çš„å•é¡Œæœƒç™¼ç”Ÿåœ¨ä¸»ç·šä¸Šï¼Œä½†å·²åœ¨ä¸»ç·šä¸Šå¾—到了解決。修正它
çš„æ交也需è¦è¢«å›žæº¯æ‰èƒ½è§£æ±ºé€™å€‹å•é¡Œã€‚這就是爲什麼你è¦æœç´¢å®ƒæˆ–任何相關討論。
- * 首先嘗試在存放 Linux 內核原始碼的 Git 倉庫中找到修復。你å¯ä»¥é€šéŽ
+ * 首先åšè©¦åœ¨å­˜æ”¾ Linux 內核æºä»£ç¢¼çš„ Git 倉庫中找到修復。你å¯ä»¥é€šéŽ
`kernel.org 上的網é 
<https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/>`_
或 `GitHub 上的é¡åƒ <https://github.com/torvalds/linux>`_ 來實ç¾ï¼›å¦‚果你
有一個本地克隆,你也å¯ä»¥åœ¨å‘½ä»¤è¡Œç”¨ ``git log --grep=<pattern>`` 來æœç´¢ã€‚
- 如果你找到了修復,請查看æ交消æ¯çš„尾部是å¦åŒ…å«äº†é¡žä¼¼é€™æ¨£çš„「穩定版標籤ã€ï¼š
+ 如果你找到了修復,請查看æ交消æ¯çš„尾部是å¦åŒ…å«äº†é¡žä¼¼é€™æ¨£çš„“穩定版標籤â€ï¼š
Cc: <stable@vger.kernel.org> # 5.4+
åƒä¸Šé¢é€™è¡Œï¼Œé–‹ç™¼è€…標記了安全修復å¯ä»¥å›žå‚³åˆ° 5.4 åŠä»¥å¾Œçš„版本。大多數情æ³
- 下,它會在兩周內被應用到那裡,但有時需è¦æ›´é•·çš„時間。
+ 下,它會在兩週內被應用到那è£ï¼Œä½†æœ‰æ™‚需è¦æ›´é•·çš„時間。
* 如果æ交沒有告訴你任何æ±è¥¿ï¼Œæˆ–者你找ä¸åˆ°ä¿®å¾©ï¼Œè«‹å†æ‰¾æ‰¾é—œæ–¼é€™å€‹å•é¡Œçš„討論。
- 用你最喜歡的æœå°‹å¼•æ“Žæœç´¢ç¶²çµ¡ï¼Œä»¥åŠ `Linux kernel developers mailing
+ 用你最喜歡的æœç´¢å¼•æ“Žæœç´¢ç¶²çµ¡ï¼Œä»¥åŠ `Linux kernel developers mailing
list 內核開發者郵件列表 <https://lore.kernel.org/lkml/>`_ 的檔案。也å¯ä»¥
閱讀上é¢çš„ `定ä½å°Žè‡´å•é¡Œçš„內核å€åŸŸ` 一節,然後按照說明找到導致å•é¡Œçš„å­ç³»
統:它的缺陷跟蹤器或郵件列表存檔中å¯èƒ½æœ‰ä½ è¦æ‰¾çš„答案。
@@ -1286,41 +1295,41 @@ FLOSS å•é¡Œå ±å‘Šçš„人看,詢å•ä»–們的æ„見。åŒæ™‚徵求他們關於å¦
爲什麼有些å•é¡Œåœ¨å ±å‘Šå¾Œæ²’有任何回應或ä»æœªè§£æ±ºï¼Ÿ
===============================================
-ç•¶å‘ Linux 開發者報告å•é¡Œæ™‚,è¦æ³¨æ„åªæœ‰ã€Œé«˜å„ªå…ˆç´šçš„å•é¡Œã€ï¼ˆå›žæ­¸ã€å®‰å…¨å•é¡Œã€åš´
+ç•¶å‘ Linux 開發者報告å•é¡Œæ™‚,è¦æ³¨æ„åªæœ‰â€œé«˜å„ªå…ˆç´šçš„å•é¡Œâ€ï¼ˆè¿´æ­¸ã€å®‰å…¨å•é¡Œã€åš´
é‡å•é¡Œï¼‰æ‰ä¸€å®šæœƒå¾—到解決。如果維護者或其他人都失敗了,Linus Torvalds 他自己
會確ä¿é€™ä¸€é»žã€‚他們和其他內核開發者也會解決很多其他å•é¡Œã€‚但是è¦çŸ¥é“,有時他
們也會ä¸èƒ½æˆ–ä¸é¡˜å¹«å¿™ï¼›æœ‰æ™‚甚至沒有人發報告給他們。
最好的解釋就是那些內核開發者常常是在業餘時間爲 Linux 內核åšå‡ºè²¢ç»ã€‚內核中的
-ä¸å°‘驅動程åºéƒ½æ˜¯ç”±é€™æ¨£çš„程å¼è¨­è¨ˆå¸«ç·¨å¯«çš„,往往åªæ˜¯å› çˆ²ä»–們想讓自己的硬體å¯ä»¥åœ¨
-自己喜歡的作業系統上使用。
+ä¸å°‘驅動程åºéƒ½æ˜¯ç”±é€™æ¨£çš„程åºå“¡ç·¨å¯«çš„,往往åªæ˜¯å› çˆ²ä»–們想讓自己的硬件å¯ä»¥åœ¨
+自己喜歡的æ“作系統上使用。
-這些程å¼è¨­è¨ˆå¸«å¤§å¤šæ•¸æ™‚候會很樂æ„修復別人報告的å•é¡Œã€‚但是沒有人å¯ä»¥å¼·è¿«ä»–們這樣
+這些程åºå“¡å¤§å¤šæ•¸æ™‚候會很樂æ„修復別人報告的å•é¡Œã€‚但是沒有人å¯ä»¥å¼·è¿«ä»–們這樣
åšï¼Œå› çˆ²ä»–們是自願貢ç»çš„。
還有一些情æ³ä¸‹ï¼Œé€™äº›é–‹ç™¼è€…真的很想解決一個å•é¡Œï¼Œä½†å»ä¸èƒ½è§£æ±ºï¼šæœ‰æ™‚他們缺ä¹
-硬體編程文檔來解決å•é¡Œã€‚這種情æ³å¾€å¾€ç”±æ–¼å…¬é–‹çš„文檔太簡陋,或者驅動程åºæ˜¯é€š
+硬件編程文檔來解決å•é¡Œã€‚這種情æ³å¾€å¾€ç”±æ–¼å…¬é–‹çš„文檔太簡陋,或者驅動程åºæ˜¯é€š
éŽé€†å‘工程編寫的。
-業餘開發者é²æ—©ä¹Ÿæœƒä¸å†é—œå¿ƒæŸé©…動。也許他們的測試硬體壞了,被更高級的玩æ„å–
-代了,或者是太è€äº†ä»¥è‡³æ–¼åªèƒ½åœ¨è¨ˆç®—æ©Ÿåšç‰©é¤¨è£¡æ‰¾åˆ°ã€‚有時開發者根本就ä¸é—œå¿ƒä»–
+業餘開發者é²æ—©ä¹Ÿæœƒä¸å†é—œå¿ƒæŸé©…動。也許他們的測試硬件壞了,被更高級的玩æ„å–
+代了,或者是太è€äº†ä»¥è‡³æ–¼åªèƒ½åœ¨è¨ˆç®—æ©Ÿåšç‰©é¤¨è£æ‰¾åˆ°ã€‚有時開發者根本就ä¸é—œå¿ƒä»–
們的代碼和 Linux 了,因爲在他們的生活中一些ä¸åŒçš„æ±è¥¿è®Šå¾—æ›´é‡è¦äº†ã€‚在æŸäº›æƒ…
æ³ä¸‹ï¼Œæ²’有人願æ„接手維護者的工作——也沒有人å¯ä»¥è¢«å¼·è¿«ï¼Œå› çˆ²å° Linux 內核的貢
ç»æ˜¯è‡ªé¡˜çš„。然而被éºæ£„的驅動程åºä»ç„¶å­˜åœ¨æ–¼å…§æ ¸ä¸­ï¼šå®ƒå€‘å°äººå€‘ä»ç„¶æœ‰ç”¨ï¼Œåˆªé™¤
-它們å¯èƒ½å°Žè‡´å›žæ­¸ã€‚
+它們å¯èƒ½å°Žè‡´è¿´æ­¸ã€‚
å°æ–¼é‚£äº›çˆ² Linux 內核工作而ç²å¾—報酬的開發者來說,情æ³ä¸¦æ²’有什麼ä¸åŒã€‚這些人
ç¾åœ¨è²¢ç»äº†å¤§éƒ¨åˆ†çš„變更。但是他們的僱主é²æ—©ä¹Ÿæœƒåœæ­¢é—œæ³¨ä»–們的代碼或者讓程åº
-員專注於其他事情。例如,硬體廠商主è¦é€šéŽéŠ·å”®æ–°ç¡¬é«”來賺錢;因此,他們中的ä¸
+員專注於其他事情。例如,硬件廠商主è¦é€šéŽéŠ·å”®æ–°ç¡¬ä»¶ä¾†è³ºéŒ¢ï¼›å› æ­¤ï¼Œä»–們中的ä¸
少人並沒有投入太多時間和精力來維護他們多年å‰å°±åœæ­¢éŠ·å”®çš„æ±è¥¿çš„ Linux 內核驅
動。ä¼æ¥­ç´š Linux 發行商往往æŒçºŒç¶­è­·çš„時間比較長,但在新版本中往往會把å°è€èˆŠ
-和稀有硬體的支æŒæ”¾åœ¨ä¸€é‚Šï¼Œä»¥é™åˆ¶ç¯„åœã€‚一旦公å¸æ‹‹æ£„了一些代碼,往往由業餘貢
+和稀有硬件的支æŒæ”¾åœ¨ä¸€é‚Šï¼Œä»¥é™åˆ¶ç¯„åœã€‚一旦公å¸æ‹‹æ£„了一些代碼,往往由業餘貢
ç»è€…接手,但正如上é¢æ到的:他們é²æ—©ä¹Ÿæœƒæ”¾ä¸‹ä»£ç¢¼ã€‚
優先級是一些å•é¡Œæ²’有被修復的å¦ä¸€å€‹åŽŸå› ï¼Œå› çˆ²ç¶­è­·è€…相當多的時候是被迫設置這
些優先級的,因爲在 Linux 上工作的時間是有é™çš„。å°æ–¼æ¥­é¤˜æ™‚間或者僱主給予他們
的開發人員用於上游內核維護工作的時間也是如此。有時維護人員也會被報告淹沒,
-å³ä½¿ä¸€å€‹é©…動程åºå¹¾ä¹Žå®Œç¾Žåœ°å·¥ä½œã€‚爲了ä¸è¢«å®Œå…¨çºä½ï¼Œç¨‹å¼è¨­è¨ˆå¸«å¯èƒ½åˆ¥ç„¡é¸æ“‡ï¼Œåªèƒ½
+å³ä½¿ä¸€å€‹é©…動程åºå¹¾ä¹Žå®Œç¾Žåœ°å·¥ä½œã€‚爲了ä¸è¢«å®Œå…¨çºä½ï¼Œç¨‹åºå“¡å¯èƒ½åˆ¥ç„¡é¸æ“‡ï¼Œåªèƒ½
å°å•é¡Œå ±å‘Šé€²è¡Œå„ªå…ˆç´šæŽ’åºè€Œæ‹’絕其中的一些報告。
ä¸éŽé€™äº›éƒ½ä¸ç”¨å¤ªéŽæ“”心,很多驅動都有ç©æ¥µçš„維護者,他們å°å„˜å¯èƒ½å¤šçš„解決å•é¡Œ
@@ -1330,8 +1339,32 @@ FLOSS å•é¡Œå ±å‘Šçš„人看,詢å•ä»–們的æ„見。åŒæ™‚徵求他們關於å¦
çµæŸèªž
=======
-與其他å…è²»/自由&é–‹æºè»Ÿé«”(Free/Libre & Open Source Software,FLOSS)相比,
-å‘ Linux 內核開發者報告å•é¡Œæ˜¯å¾ˆé›£çš„:這個文檔的長度和複雜性以åŠå­—裡行間的內
+與其他å…è²»/自由&é–‹æºè»Ÿä»¶ï¼ˆFree/Libre & Open Source Software,FLOSS)相比,
+å‘ Linux 內核開發者報告å•é¡Œæ˜¯å¾ˆé›£çš„:這個文檔的長度和複雜性以åŠå­—è£è¡Œé–“çš„å…§
涵都說明了這一點。但目å‰å°±æ˜¯é€™æ¨£äº†ã€‚這篇文字的主è¦ä½œè€…希望通éŽè¨˜éŒ„ç¾ç‹€ä¾†çˆ²
以後改善這種狀æ³æ‰“下一些基礎。
+
+..
+ end-of-content
+..
+ This English version of this document is maintained by Thorsten Leemhuis
+ <linux@leemhuis.info>. If you spot a typo or small mistake, feel free to
+ let him know directly and he'll fix it. For translation problems, please
+ contact with translators. You are free to do the same in a mostly informal
+ way if you want to contribute changes to the text, but for copyright
+ reasons please CC linux-doc@vger.kernel.org and "sign-off" your
+ contribution as Documentation/process/submitting-patches.rst outlines in
+ the section "Sign your work - the Developer's Certificate of Origin".
+..
+ This text is available under GPL-2.0+ or CC-BY-4.0, as stated at the top
+ of the file. If you want to distribute this text under CC-BY-4.0 only,
+ please use "The Linux kernel developers" for author attribution and link
+ this as source:
+ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/Documentation/admin-guide/reporting-issues.rst
+..
+ Note: Only the content of this RST file as found in the Linux kernel sources
+ is available under CC-BY-4.0, as versions of this text that were processed
+ (for example by the kernel's build system) might contain content taken from
+ files which use a more restrictive license.
+
diff --git a/Documentation/translations/zh_TW/admin-guide/reporting-regressions.rst b/Documentation/translations/zh_TW/admin-guide/reporting-regressions.rst
new file mode 100644
index 000000000000..d7dcb2a26564
--- /dev/null
+++ b/Documentation/translations/zh_TW/admin-guide/reporting-regressions.rst
@@ -0,0 +1,371 @@
+.. SPDX-License-Identifier: (GPL-2.0+ OR CC-BY-4.0)
+.. ã€é‡åˆ†ç™¼ä¿¡æ¯åƒè¦‹æœ¬æ–‡ä»¶çµå°¾ã€‘
+
+.. include:: ../disclaimer-zh_TW.rst
+
+:Original: Documentation/admin-guide/reporting-regressions.rst
+
+:譯者:
+
+ å³æƒ³æˆ Wu XiangCheng <bobwxc@email.cn>
+
+
+============
+報告迴歸å•é¡Œ
+============
+
+“*我們拒絕出ç¾è¿´æ­¸*â€æ˜¯Linux內核開發的首è¦è¦å‰‡ï¼›Linux的發起者和領è»é–‹ç™¼è€…Linus
+Torvalds立下了此è¦å‰‡ä¸¦ç¢ºä¿å®ƒè¢«è½å¯¦ã€‚
+
+本文檔æ述了這æ¢è¦å‰‡å°ç”¨æˆ¶çš„æ„義,以åŠLinux內核開發模型如何確ä¿è§£æ±ºæ‰€æœ‰è¢«å ±å‘Š
+的迴歸;關於內核開發者如何處ç†çš„æ–¹é¢åƒè¦‹ Documentation/process/handling-regressions.rst 。
+
+
+本文é‡é»žï¼ˆäº¦å³â€œå¤ªé•·ä¸çœ‹â€ï¼‰
+==========================
+
+#. 如果æŸç¨‹åºåœ¨åŽŸå…ˆçš„Linux內核上é‹è¡Œè‰¯å¥½ï¼Œä½†åœ¨è¼ƒæ–°ç‰ˆæœ¬ä¸Šæ•ˆæžœæ›´å·®ã€æˆ–者根本ä¸
+ 能用,那麼你就碰見迴歸å•é¡Œäº†ã€‚注æ„,新內核需è¦ä½¿ç”¨é¡žä¼¼é…置編譯;更多相關細
+ 節åƒè¦‹ä¸‹æ–¹ã€‚
+
+#. 按照 Documentation/translations/zh_CN/admin-guide/reporting-issues.rst 中
+ 所說的報告你的å•é¡Œï¼Œè©²æ–‡æª”已經包å«äº†æ‰€æœ‰é—œæ–¼è¿´æ­¸çš„é‡è¦æ–¹é¢ï¼Œçˆ²äº†æ–¹ä¾¿èµ·è¦‹ä¹Ÿ
+ 複製到了下é¢ã€‚兩個é‡é»žï¼šåœ¨å ±å‘Šä¸»é¡Œä¸­ä½¿ç”¨â€œ[REGRESSION]â€é–‹é ­ä¸¦æŠ„é€æˆ–轉發到
+ `迴歸郵件列表 <https://lore.kernel.org/regressions/>`_
+ (regressions@lists.linux.dev)。
+
+#. å¯é¸ä½†æ˜¯å»ºè­°ï¼šåœ¨ç™¼é€æˆ–轉發報告時,指明該回歸發生的起點,以便Linux內核迴歸
+ 追蹤機器人“regzbotâ€å¯ä»¥è¿½è¹¤æ­¤å•é¡Œ::
+
+ #regzbot introduced v5.13..v5.14-rc1
+
+
+與用戶相關的所有Linux內核迴歸細節
+=================================
+
+
+基本é‡é»ž
+--------
+
+
+什麼是“迴歸â€ä»¥åŠä»€éº¼æ˜¯â€œç„¡è¿´æ­¸è¦å‰‡â€ï¼Ÿ
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+如果æŸç¨‹åº/實例在原先的Linux內核上é‹è¡Œè‰¯å¥½ï¼Œä½†åœ¨è¼ƒæ–°ç‰ˆæœ¬ä¸Šæ•ˆæžœæ›´å·®ã€æˆ–者根本
+ä¸èƒ½ç”¨ï¼Œé‚£éº¼ä½ å°±ç¢°è¦‹è¿´æ­¸å•é¡Œäº†ã€‚“無迴歸è¦å‰‡â€ä¸å…許出ç¾é€™ç¨®æƒ…æ³ã€‚如果å¶ç„¶ç™¼
+生了,導致å•é¡Œçš„開發者應當迅速修復å•é¡Œã€‚
+
+也就是說,若Linux 5.13中的WiFi驅動程åºé‹è¡Œè‰¯å¥½ï¼Œä½†æ˜¯åœ¨5.14版本上å»ä¸èƒ½ç”¨ã€é€Ÿ
+度明顯變慢或出ç¾éŒ¯èª¤ï¼Œé‚£å°±å‡ºç¾äº†è¿´æ­¸ã€‚如果æŸæ­£å¸¸å·¥ä½œçš„應用程åºçªç„¶åœ¨æ–°å…§æ ¸ä¸Š
+出ç¾ä¸ç©©å®šï¼Œé€™ä¹Ÿæ˜¯è¿´æ­¸ï¼›é€™äº›å•é¡Œå¯èƒ½æ˜¯ç”±æ–¼procfsã€sysfs或Linuxæ供給用戶空間
+軟件的許多其他接å£ä¹‹ä¸€çš„變化。但請記ä½ï¼Œå‰è¿°ä¾‹å­ä¸­çš„5.14需è¦ä½¿ç”¨é¡žä¼¼æ–¼5.13çš„
+é…置構建。這å¯ä»¥ç”¨ ``make olddefconfig`` 實ç¾ï¼Œè©³ç´°è§£é‡‹è¦‹ä¸‹ã€‚
+
+注æ„本節第一å¥è©±ä¸­çš„“實例â€ï¼šå³ä½¿é–‹ç™¼è€…需è¦éµå¾ªâ€œç„¡è¿´æ­¸â€è¦å‰‡ï¼Œä½†ä»å¯è‡ªç”±åœ°æ”¹
+變內核的任何方é¢ï¼Œç”šè‡³æ˜¯å°Žå‡ºåˆ°ç”¨æˆ¶ç©ºé–“çš„API或ABI,åªè¦åˆ¥ç ´å£žç¾æœ‰çš„應用程åºæˆ–
+用例。
+
+還需注æ„,“無迴歸â€è¦å‰‡åªé™åˆ¶å…§æ ¸æ供給用戶空間的接å£ã€‚它ä¸é©ç”¨æ–¼å…§æ ¸å…§éƒ¨æŽ¥
+å£ï¼Œæ¯”如一些外部開發的驅動程åºç”¨ä¾†æ’入鉤å­åˆ°å…§æ ¸çš„模塊API。
+
+如何報告迴歸?
+~~~~~~~~~~~~~~
+
+åªéœ€æŒ‰ç…§ Documentation/translations/zh_CN/admin-guide/reporting-issues.rst 中
+所說的報告你的å•é¡Œï¼Œè©²æ–‡æª”已經包å«äº†è¦é»žã€‚下é¢å¹¾é»žæ¦‚述了一下åªåœ¨è¿´æ­¸ä¸­é‡è¦çš„
+æ–¹é¢ï¼š
+
+ * 在檢查å¯åŠ å…¥è¨Žè«–çš„ç¾æœ‰å ±å‘Šæ™‚,別忘了æœç´¢ `Linux迴歸郵件列表
+ <https://lore.kernel.org/regressions/>`_ å’Œ `regzbot網é ç•Œé¢
+ <https://linux-regtracking.leemhuis.info/regzbot/>`_ 。
+
+ * 在報告主題的開頭加上“[REGRESSION]â€ã€‚
+
+ * 在你的報告中明確最後一個正常工作的內核版本和首個出å•é¡Œçš„版本。如若å¯èƒ½ï¼Œ
+ 用二分法嘗試找出導致迴歸的變更,更多細節見下。
+
+ * 記得把報告發到Linux迴歸郵件列表(regressions@lists.linux.dev)。
+
+ * 如果通éŽéƒµä»¶å ±å‘Šè¿´æ­¸ï¼Œè«‹æŠ„é€å›žæ­¸åˆ—表。
+
+ * 如果你使用æŸäº›ç¼ºé™·è¿½è¹¤å™¨å ±å‘Šè¿´æ­¸ï¼Œè«‹é€šéŽéƒµä»¶è½‰ç™¼å·²æ交的報告到迴歸列表,
+ 並抄é€ç¶­è­·è€…以åŠå‡ºå•é¡Œçš„相關å­ç³»çµ±çš„郵件列表。
+
+ 如果是穩定版或長期支æŒç‰ˆç³»åˆ—(如v5.15.3…v5.15.5)的迴歸,請記得抄é€
+ `Linux穩定版郵件列表 <https://lore.kernel.org/stable/>`_ (stable@vger.kernel.org)。
+
+ 如果你æˆåŠŸåœ°åŸ·è¡Œäº†äºŒåˆ†ï¼Œè«‹æŠ„é€è‚‡äº‹æ交的信æ¯ä¸­æ‰€æœ‰ç°½äº†â€œSigned-off-by:â€çš„人。
+
+在抄é€ä½ çš„報告到列表時,也請記得通知å‰è¿°çš„Linux內核迴歸追蹤機器人。åªéœ€åœ¨éƒµä»¶
+中包å«å¦‚下片段::
+
+ #regzbot introduced: v5.13..v5.14-rc1
+
+Regzbot會就將你的郵件視爲在æŸå€‹ç‰¹å®šç‰ˆæœ¬å€é–“的迴歸報告。上例中å³linux v5.13ä»
+然正常,而Linux 5.14-rc1是首個您é‡åˆ°å•é¡Œçš„版本。如果你執行了二分以查找導致回
+歸的æ交,請使用指定肇事æ交的id代替::
+
+ #regzbot introduced: 1f2e3d4c5d
+
+添加這樣的“regzbot命令â€å°ä½ æ˜¯æœ‰å¥½è™•çš„,它會確ä¿å ±å‘Šä¸æœƒè¢«å¿½ç•¥ã€‚如果你çœç•¥äº†
+它,Linux內核的迴歸跟蹤者會把你的迴歸告訴regzbot,åªè¦ä½ ç™¼é€äº†ä¸€å€‹å‰¯æœ¬åˆ°è¿´æ­¸
+郵件列表。但是迴歸跟蹤者åªæœ‰ä¸€å€‹äººï¼Œæœ‰æ™‚ä¸å¾—ä¸ä¼‘æ¯æˆ–甚至å¶çˆ¾äº«å—å¯ä»¥é é›¢é›»è…¦
+的時光(è½èµ·ä¾†å¾ˆç˜‹ç‹‚)。因此,ä¾è³´æ­¤äººæ‰‹å‹•å°‡å›žæ­¸æ·»åŠ åˆ° `已追蹤且尚未解決的
+Linux內核迴歸列表 <https://linux-regtracking.leemhuis.info/regzbot/>`_ 和
+regzbot發é€çš„æ¯é€±è¿´æ­¸å ±å‘Šï¼Œå¯èƒ½æœƒå‡ºç¾å»¶é²ã€‚ 這樣的延誤會導致Linus Torvalds
+在決定“繼續開發還是發佈新版本?â€æ™‚忽略嚴é‡çš„迴歸。
+
+真的修復了所有的迴歸嗎?
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+幾乎所有都是,åªè¦å¼•èµ·å•é¡Œçš„變更(肇事æ交)被å¯é å®šä½ã€‚也有些迴歸å¯ä»¥ä¸ç”¨é€™
+樣,但通常是必須的。
+
+誰需è¦æ‰¾å‡ºè¿´æ­¸çš„根本原因?
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+å—影響代碼å€åŸŸçš„開發者應該自行嘗試定ä½å•é¡Œæ‰€åœ¨ã€‚但僅é ä»–們的努力往往是ä¸å¯
+能åšåˆ°çš„,很多å•é¡Œåªç™¼ç”Ÿåœ¨é–‹ç™¼è€…的無法接觸的其他特定外部環境中——例如特定的
+硬件平臺ã€å›ºä»¶ã€Linux發行版ã€ç³»çµ±çš„é…置或應用程åºã€‚這就是爲什麼最終往往是報
+告者定ä½è‚‡äº‹æ交;有時用戶甚至需è¦å†é‹è¡Œé¡å¤–測試以查明確切的根本原因。開發
+者應該æ供建議和å¯èƒ½çš„幫助,以使普通用戶更容易完æˆè©²æµç¨‹ã€‚
+
+如何找到罪é­ç¦é¦–?
+~~~~~~~~~~~~~~~~~~
+
+如 Documentation/translations/zh_CN/admin-guide/reporting-issues.rst (簡è¦ï¼‰
+和 Documentation/translations/zh_CN/admin-guide/bug-bisect.rst (詳細)中所
+述,執行二分。è½èµ·ä¾†å·¥ä½œé‡å¾ˆå¤§ï¼Œä½†å¤§éƒ¨åˆ†æƒ…æ³ä¸‹å¾ˆå¿«å°±èƒ½æ‰¾åˆ°ç½ªé­ç¦é¦–。如果這很
+困難或å¯é åœ°é‡ç¾å•é¡Œå¾ˆè€—時,請考慮與其他å—影響的用戶åˆä½œï¼Œä¸€èµ·ç¸®å°æœç´¢ç¯„åœã€‚
+
+當出ç¾è¿´æ­¸æ™‚我å¯ä»¥å‘誰尋求建議?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+發é€éƒµä»¶åˆ°è¿´æ­¸éƒµä»¶åˆ—表(regressions@lists.linux.dev)åŒæ™‚抄é€Linux內核的迴歸
+跟蹤者(regressions@leemhuis.info);如果å•é¡Œéœ€è¦ä¿å¯†è™•ç†ï¼Œå¯ä»¥çœç•¥åˆ—表。
+
+
+關於迴歸的更多細節
+------------------
+
+
+“無迴歸è¦å‰‡â€çš„目標是什麼?
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+用戶應該放心å‡ç´šå…§æ ¸ç‰ˆæœ¬ï¼Œè€Œä¸å¿…擔心有程åºå¯èƒ½å´©æ½°ã€‚這符åˆå…§æ ¸é–‹ç™¼è€…的利益,
+å¯ä»¥ä½¿æ›´æ–°æœ‰å¸å¼•åŠ›ï¼šä»–們ä¸å¸Œæœ›ç”¨æˆ¶åœç•™åœ¨åœæ­¢ç¶­è­·æˆ–超éŽä¸€å¹´åŠçš„穩定/長期Linux
+版本系列上。這也符åˆæ‰€æœ‰äººçš„利益,因爲 `那些系列å¯èƒ½å«æœ‰å·²çŸ¥çš„缺陷ã€å®‰å…¨å•é¡Œ
+或其他後續版本已經修復的å•é¡Œ
+<http://www.kroah.com/log/blog/2018/08/24/what-stable-kernel-should-i-use/>`_ 。
+此外,內核開發者希望使用戶測試最新的é ç™¼è¡Œç‰ˆæˆ–常è¦ç™¼è¡Œç‰ˆè®Šå¾—簡單而有å¸å¼•åŠ›ã€‚
+這åŒæ¨£ç¬¦åˆæ‰€æœ‰äººçš„利益,如果新版本出來後很快就有相關報告,會使追蹤和修復å•é¡Œ
+更容易。
+
+實際中“無迴歸â€è¦å‰‡çœŸçš„å¯è¡Œå—Žï¼Ÿ
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+這ä¸æ˜¯å¥çŽ©ç¬‘話,請見Linux創建者和主è¦é–‹ç™¼äººå“¡Linus Torvalds在郵件列表中的許
+多發言,其中一些在 Documentation/process/handling-regressions.rst 中被引用。
+
+æ­¤è¦å‰‡çš„例外情æ³æ¥µçˆ²ç½•è¦‹ï¼›ä¹‹å‰ç•¶é–‹ç™¼è€…èªçˆ²æŸå€‹ç‰¹å®šçš„情æ³æœ‰å¿…è¦æ´å¼•ä¾‹å¤–時,
+基本都被證明錯了。
+
+誰來確ä¿â€œç„¡è¿´æ­¸â€è¢«è½å¯¦ï¼Ÿ
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+照看和支æ’樹的å­ç³»çµ±ç¶­è­·è€…應該關心這一點——例如,Linus Torvalds之於主線,
+Greg Kroah-Hartman等人之於å„種穩定/長期系列。
+
+他們都得到了別人的幫助,以確ä¿è¿´æ­¸å ±å‘Šä¸æœƒè¢«éºæ¼ã€‚其中之一是Thorsten
+Leemhuis,他目å‰æ“”ä»»Linux內核的“迴歸跟蹤者â€ï¼›çˆ²äº†åšå¥½é€™é …工作,他使用了
+regzbot——Linux內核迴歸跟蹤機器人。所以這就是爲什麼è¦æŠ„é€æˆ–轉發你的報告到
+迴歸郵件列表來通知這些人,已經最好在你的郵件中包å«â€œregzbot命令â€ä¾†ç«‹å³è¿½è¹¤å®ƒã€‚
+
+迴歸通常多久能修復?
+~~~~~~~~~~~~~~~~~~~~
+
+開發者應該儘快修復任何被報告的迴歸,以æä¾›åŠæ™‚爲å—影響的用戶æ供解決方案,並
+防止更多用戶é‡åˆ°å•é¡Œï¼›ç„¶è€Œï¼Œé–‹ç™¼äººå“¡éœ€è¦èŠ±è¶³å¤ çš„時間和注æ„力確ä¿è¿´æ­¸ä¿®å¾©ä¸æœƒ
+造æˆé¡å¤–çš„æ害。
+
+因此,答案å–決於å„種因素,如迴歸的影響ã€å­˜åœ¨æ™‚長或出ç¾æ–¼å“ªå€‹Linux版本系列。
+但最終,大多數的迴歸應該在兩週內修復。
+
+當å•é¡Œå¯ä»¥é€šéŽå‡ç´šæŸäº›è»Ÿä»¶è§£æ±ºæ™‚,是迴歸嗎?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+基本都是。如果開發人員告訴您其他情æ³ï¼Œè«‹è«®è©¢ä¸Šè¿°è¿´æ­¸è·Ÿè¹¤è€…。
+
+當新內核變慢或能耗增加,是迴歸嗎?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+是的,但有一些差別。在微型基準測試中變慢5%ä¸å¤ªå¯èƒ½è¢«è¦–爲迴歸,除éžå®ƒä¹Ÿæœƒå°
+廣泛基準測試的çµæžœç”¢ç”Ÿè¶…éŽ1%的影響。如果有疑å•ï¼Œè«‹å°‹æ±‚建議。
+
+當更新Linux時外部內核模塊崩潰了,是迴歸嗎?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ä¸ï¼Œå› çˆ²â€œç„¡è¿´æ­¸â€è¦å‰‡åƒ…é™æ–¼Linux內核æ供給用戶空間的接å£å’Œæœå‹™ã€‚因此,它ä¸åŒ…括
+構建或é‹è¡Œå¤–部開發的內核模塊,因爲它們在內核空間中é‹è¡Œèˆ‡æŽ›é€²å…§æ ¸ä½¿ç”¨çš„內部接
+å£å¶çˆ¾æœƒè®ŠåŒ–。
+
+如何處ç†å®‰å…¨ä¿®å¾©å¼•èµ·çš„迴歸?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+在極爲罕見的情æ³ä¸‹ï¼Œå®‰å…¨å•é¡Œç„¡æ³•åœ¨ä¸å¼•èµ·è¿´æ­¸çš„情æ³ä¸‹ä¿®å¾©ï¼›é€™äº›ä¿®å¾©éƒ½è¢«æ”¾æ£„了,
+因爲它們終究會引起å•é¡Œã€‚幸é‹çš„是這種兩難境地基本都å¯ä»¥é¿å…,å—影響å€åŸŸçš„主è¦
+開發者以åŠLinus Torvalds本人通常都會努力在ä¸å¼•å…¥è¿´æ­¸çš„情æ³ä¸‹è§£æ±ºå®‰å…¨å•é¡Œã€‚
+
+如果你ä»ç„¶é¢è‡¨æ­¤ç¨®æƒ…æ³ï¼Œè«‹æŸ¥çœ‹éƒµä»¶åˆ—表檔案是å¦æœ‰äººç›¡åŠ›é¿å…éŽè¿´æ­¸ã€‚如果沒有,
+請報告它;如有疑å•ï¼Œè«‹å¦‚上所述尋求建議。
+
+當修復迴歸時ä¸å¯é¿å…會引入å¦ä¸€å€‹ï¼Œå¦‚何處ç†ï¼Ÿ
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+很éºæ†¾é€™ç¨®äº‹ç¢ºå¯¦æœƒå‡ºç¾ï¼Œä½†å¹¸é‹çš„是並ä¸ç¶“常出ç¾ï¼›å¦‚果發生了,å—影響代碼å€çš„資
+深開發者應當調查該å•é¡Œä»¥æ‰¾åˆ°é¿å…迴歸的解決方法,至少é¿å…它們的影響。如果你é‡
+到這樣的情æ³ï¼Œå¦‚上所述:檢查之å‰çš„討論是å¦æœ‰äººå·²ç¶“盡了最大努力,如有疑å•è«‹å°‹
+求建議。
+
+å°æ示:如果人們在æ¯å€‹é–‹ç™¼é€±æœŸä¸­å®šæœŸçµ¦å‡ºä¸»ç·šé ç™¼ä½ˆï¼ˆå³v5.15-rc1或-rc3)以供
+測試,則å¯ä»¥é¿å…這種情æ³ã€‚爲了更好地解釋,å¯ä»¥è¨­æƒ³ä¸€å€‹åœ¨Linux v5.14å’Œv5.15-rc1
+之間集æˆçš„更改,該更改導致了迴歸,但åŒæ™‚是應用於5.15-rc1的其他改進的強ä¾è³´ã€‚
+如果有人在5.15發佈之å‰å°±ç™¼ç¾ä¸¦å ±å‘Šäº†é€™å€‹å•é¡Œï¼Œé‚£éº¼æ‰€æœ‰æ›´æ”¹éƒ½å¯ä»¥ç›´æŽ¥æ’¤éŠ·ï¼Œå¾ž
+而解決迴歸å•é¡Œã€‚而就在幾天或幾周後,此解決方案變æˆäº†ä¸å¯èƒ½ï¼Œå› çˆ²ä¸€äº›è»Ÿä»¶å¯èƒ½
+已經開始ä¾è³´æ–¼å¾ŒçºŒæ›´æ”¹ä¹‹ä¸€ï¼šæ’¤éŠ·æ‰€æœ‰æ›´æ”¹å°‡å°Žè‡´ä¸Šè¿°ç”¨æˆ¶è»Ÿä»¶å‡ºç¾è¿´æ­¸ï¼Œé€™æ˜¯ä¸å¯
+接å—的。
+
+若我所ä¾è³´çš„功能在數月å‰è¢«ç§»é™¤äº†ï¼Œæ˜¯è¿´æ­¸å—Žï¼Ÿ
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+是的,但如å‰ç¯€æ‰€è¿°ï¼Œé€šå¸¸å¾ˆé›£ä¿®å¾©æ­¤é¡žè¿´æ­¸ã€‚因此需è¦é€æ¡ˆè™•ç†ã€‚這也是定期測試主
+ç·šé ç™¼ä½ˆå°æ‰€æœ‰äººæœ‰å¥½è™•çš„å¦ä¸€å€‹åŽŸå› ã€‚
+
+如果我似乎是唯一å—影響的人,是å¦ä»é©ç”¨â€œç„¡è¿´æ­¸â€è¦å‰‡ï¼Ÿ
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+é©ç”¨ï¼Œä½†åƒ…é™æ–¼å¯¦éš›ä½¿ç”¨ï¼šLinux開發人員希望能夠自由地å–消那些åªèƒ½åœ¨é–£æ¨“å’Œåšç‰©
+館中找到的硬件的支æŒã€‚
+
+請注æ„,有時爲了å–得進展,ä¸å¾—ä¸å‡ºç¾è¿´æ­¸â€”—後者也是防止Linuxåœæ»¯ä¸å‰æ‰€å¿…需
+的。因此如果迴歸所影響的用戶很少,那麼爲了他們和其他人更大的利益,還是讓事情
+éŽåŽ»å§ã€‚尤其是存在æŸç¨®è¦é¿è¿´æ­¸çš„簡單方法,例如更新一些軟件或者使用專門爲此目
+的創建的內核åƒæ•¸ã€‚
+
+è¿´æ­¸è¦å‰‡æ˜¯å¦ä¹Ÿé©ç”¨æ–¼staging樹中的代碼?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ä¸ï¼Œåƒè¦‹ `é©ç”¨æ–¼æ‰€æœ‰staging代碼é…ç½®é¸é …的幫助文本
+<https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/staging/Kconfig>`_ ,
+其早已è²æ˜Ž::
+
+ 請注æ„:這些驅動正在ç©æ¥µé–‹ç™¼ä¸­ï¼Œå¯èƒ½ç„¡æ³•æ­£å¸¸å·¥ä½œï¼Œä¸¦å¯èƒ½åŒ…å«æœƒåœ¨ä¸ä¹…çš„
+ 將來發生變化的用戶接å£ã€‚
+
+雖然staging開發人員通常堅æŒâ€œç„¡è¿´æ­¸â€çš„原則,但有時爲了å–得進展也會é•èƒŒå®ƒã€‚這就
+是爲什麼當staging樹的WiFi驅動被基本推倒é‡ä¾†æ™‚,有些用戶ä¸å¾—ä¸è™•ç†è¿´æ­¸ï¼ˆé€šå¸¸å¯
+以忽略)。
+
+爲什麼較新版本必須“使用相似é…置編譯â€ï¼Ÿ
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+因爲Linux內核開發人員有時會集æˆå·²çŸ¥çš„會導致迴歸的變更,但使它們æˆçˆ²å¯é¸çš„,並
+在內核的默èªé…置下ç¦ç”¨å®ƒå€‘。這一技巧å…許進步,å¦å‰‡â€œç„¡è¿´æ­¸â€è¦å‰‡å°‡å°Žè‡´åœæ»¯ã€‚
+
+例如,試想一個新的å¯ä»¥é˜»æ­¢æƒ¡æ„軟件濫用æŸå€‹å…§æ ¸çš„接å£çš„安全特性,åŒæ™‚åˆéœ€è¦æ»¿è¶³
+å¦ä¸€å€‹å¾ˆç½•è¦‹çš„應用程åºã€‚上述的方法å¯ä½¿å…©æ–¹éƒ½æ»¿æ„:使用這些應用程åºçš„人å¯ä»¥é—œé–‰
+新的安全功能,而其他ä¸æœƒé‡åˆ°éº»ç…©çš„人å¯ä»¥å•“用它。
+
+如何創建與舊內核相似的é…置?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+用一個已知良好的內核啓動機器,並用 ``make olddefconfig`` é…置新版的Linux。這
+會讓內核的構建腳本從正在é‹è¡Œçš„內核中摘錄é…置文件(“.configâ€æ–‡ä»¶ï¼‰ï¼Œä½œçˆ²å³å°‡ç·¨
+譯的新版本的基礎é…置;åŒæ™‚將所有新的é…ç½®é¸é …設爲默èªå€¼ï¼Œä»¥ç¦ç”¨å¯èƒ½å°Žè‡´è¿´æ­¸çš„
+新功能。
+
+如何報告在é ç·¨è­¯çš„普通內核中發ç¾çš„迴歸?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+您需è¦ç¢ºä¿æ–°çš„內核是用與舊版相似的é…置編譯(見上文),因爲那些構建它們的人å¯
+能啓用了一些已知的與新內核ä¸å…¼å®¹çš„特性。如有疑å•ï¼Œè«‹å‘內核的æ供者報告å•é¡Œä¸¦
+尋求建議。
+
+
+用“regzbotâ€è¿½è¹¤è¿´æ­¸çš„更多信æ¯
+-----------------------------
+
+什麼是迴歸追蹤?爲啥我需è¦é—œå¿ƒå®ƒï¼Ÿ
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+åƒâ€œç„¡è¿´æ­¸â€é€™æ¨£çš„è¦å‰‡éœ€è¦æœ‰äººä¾†ç¢ºä¿å®ƒå€‘被éµå®ˆï¼Œå¦å‰‡æœƒè¢«æœ‰æ„/ç„¡æ„打破。歷å²è­‰
+明瞭這一點å°æ–¼Linux內核開發也é©ç”¨ã€‚這就是爲什麼Linux內核的迴歸跟蹤者Thorsten
+Leemhuis,,和å¦ä¸€äº›äººç›¡åŠ›é—œæ³¨æ‰€æœ‰çš„迴歸直到他們解決。他們從未爲此ç²å¾—報酬,
+因此這項工作是在盡最大努力的基礎上完æˆçš„。
+
+爲什麼/如何使用機器人追蹤Linux內核迴歸?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+由於Linux內核開發éŽç¨‹çš„分佈å¼å’Œé¬†æ•£çµæ§‹ï¼Œå®Œå…¨æ‰‹å‹•è·Ÿè¹¤è¿´æ­¸å·²ç¶“被證明是相當困難
+的。因此Linux內核的迴歸跟蹤者開發了regzbot來促進這項工作,其長期目標是儘å¯èƒ½çˆ²
+所有相關人員自動化迴歸跟蹤。
+
+Regzbot通éŽç›£è¦–跟蹤的迴歸報告的回覆來工作。此外,它還查找用“Link:â€æ¨™ç±¤å¼•ç”¨é€™
+些報告的補ä¸ï¼›å°é€™äº›è£œä¸çš„回覆也會被跟蹤。çµåˆé€™äº›æ•¸æ“šï¼Œå¯ä»¥å¾ˆå¥½åœ°çž­è§£ç•¶å‰ä¿®
+復éŽç¨‹çš„狀態。
+
+如何查看regzbot當å‰è¿½è¹¤çš„迴歸?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+åƒè¦‹ `regzbot在線 <https://linux-regtracking.leemhuis.info/regzbot/>`_ 。
+
+何種å•é¡Œå¯ä»¥ç”±regzbot追蹤?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+該機器人åªçˆ²äº†è·Ÿè¹¤è¿´æ­¸ï¼Œå› æ­¤è«‹ä¸è¦è®“regzbot涉åŠå¸¸è¦å•é¡Œã€‚但是å°æ–¼Linux內核的
+迴歸跟蹤者來說,讓regzbot跟蹤嚴é‡å•é¡Œä¹Ÿå¯ä»¥ï¼Œå¦‚有關掛起ã€æ壞數據或內部錯誤
+(Panicã€Oopsã€BUG()ã€warning…)的報告。
+
+如何修改被追蹤迴歸的相關信æ¯ï¼Ÿ
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+在直接或間接回復報告郵件時使用“regzbot命令â€å³å¯ã€‚最簡單的方法是:在“已發é€â€æ–‡
+件夾或郵件列表存檔中找到報告,然後使用郵件客戶端的“全部回覆â€åŠŸèƒ½å°å…¶é€²è¡Œå›žè¦†ã€‚
+在該郵件中的ç¨ç«‹æ®µè½ä¸­å¯ä½¿ç”¨ä»¥ä¸‹å‘½ä»¤ä¹‹ä¸€ï¼ˆå³ä½¿ç”¨ç©ºè¡Œå°‡é€™äº›å‘½ä»¤ä¸­çš„一個或多個與
+其餘郵件文本分隔開)。
+
+ * 更新迴歸引入起點,例如在執行二分之後::
+
+ #regzbot introduced: 1f2e3d4c5d
+
+ * 設置或更新標題::
+
+ #regzbot title: foo
+
+ * 監視討論或bugzilla.kernel.org上有關討論或修復的工單::
+
+ #regzbot monitor: https://lore.kernel.org/r/30th.anniversary.repost@klaava.Helsinki.FI/
+ #regzbot monitor: https://bugzilla.kernel.org/show_bug.cgi?id=123456789
+
+ * 標記一個有更多相關細節的地方,例如有關但主題ä¸åŒçš„郵件列表帖å­æˆ–缺陷追蹤器中的工單::
+
+ #regzbot link: https://bugzilla.kernel.org/show_bug.cgi?id=123456789
+
+ * 標記迴歸已失效::
+
+ #regzbot invalid: wasn't a regression, problem has always existed
+
+Regzbot還支æŒå…¶ä»–一些主è¦ç”±é–‹ç™¼äººå“¡æˆ–迴歸追蹤人員使用的命令。命令的更多細節請
+åƒè€ƒ `å…¥é–€æŒ‡å— <https://gitlab.com/knurd42/regzbot/-/blob/main/docs/getting_started.md>`_
+å’Œ `åƒè€ƒæ‰‹å†Š <https://gitlab.com/knurd42/regzbot/-/blob/main/docs/reference.md>`_ 。
+
+..
+ 正文çµæŸ
+..
+ 如本文件開頭所述,本文以GPL-2.0+或CC-BY-4.0許å¯ç™¼è¡Œã€‚如您想僅在CC-BY-4.0許
+ å¯ä¸‹é‡åˆ†ç™¼æœ¬æ–‡ï¼Œè«‹ç”¨â€œLinux內核開發者â€ä½œçˆ²ä½œè€…,並用如下éˆæŽ¥ä½œçˆ²ä¾†æºï¼š
+ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/Documentation/translations/zh_CN/admin-guide/reporting-regressions.rst
+..
+ 注æ„:本RST文件內容åªæœ‰åœ¨ä¾†è‡ªLinux內核æºä»£ç¢¼æ™‚是使用CC-BY-4.0許å¯çš„,因爲經
+ éŽè™•ç†çš„版本(如經內核的構建系統)å¯èƒ½åŒ…å«ä¾†è‡ªä½¿ç”¨æ›´åš´æ ¼è¨±å¯è­‰çš„文件的內容。
+
diff --git a/Documentation/translations/zh_TW/admin-guide/security-bugs.rst b/Documentation/translations/zh_TW/admin-guide/security-bugs.rst
index 65c8dd24c96d..c0e9fc247695 100644
--- a/Documentation/translations/zh_TW/admin-guide/security-bugs.rst
+++ b/Documentation/translations/zh_TW/admin-guide/security-bugs.rst
@@ -19,17 +19,17 @@ Linux內核開發人員éžå¸¸é‡è¦–安全性。因此我們想知é“何時發ç¾
-----
å¯ä»¥é€šéŽé›»å­éƒµä»¶<security@kernel.org>è¯ç¹«Linux內核安全團隊。這是一個安全人員
-çš„ç§æœ‰åˆ—表,他們將幫助驗證錯誤報告並開發和發布修復程åºã€‚如果您已經有了一個
+çš„ç§æœ‰åˆ—表,他們將幫助驗證錯誤報告並開發和發佈修復程åºã€‚如果您已經有了一個
修復,請將其包å«åœ¨æ‚¨çš„報告中,這樣å¯ä»¥å¤§å¤§åŠ å¿«é€²ç¨‹ã€‚安全團隊å¯èƒ½æœƒå¾žå€åŸŸç¶­è­·
-人員那裡ç²å¾—é¡å¤–的幫助,以ç†è§£å’Œä¿®å¾©å®‰å…¨æ¼æ´žã€‚
+人員那è£ç²å¾—é¡å¤–的幫助,以ç†è§£å’Œä¿®å¾©å®‰å…¨æ¼æ´žã€‚
與任何缺陷一樣,æ供的信æ¯è¶Šå¤šï¼Œè¨ºæ–·å’Œä¿®å¾©å°±è¶Šå®¹æ˜“。如果您ä¸æ¸…楚哪些信æ¯æœ‰ç”¨ï¼Œ
-請查看「Documentation/translations/zh_TW/admin-guide/reporting-issues.rstã€ä¸­
+請查看“Documentation/translations/zh_CN/admin-guide/reporting-issues.rstâ€ä¸­
概述的步驟。任何利用æ¼æ´žçš„攻擊代碼都éžå¸¸æœ‰ç”¨ï¼Œæœªç¶“報告者åŒæ„ä¸æœƒå°å¤–發布,除
éžå·²ç¶“公開。
-請儘å¯èƒ½ç™¼é€ç„¡é™„件的純文本電å­éƒµä»¶ã€‚如果所有的細節都è—在附件里,那麼就很難å°
-一個複雜的å•é¡Œé€²è¡Œä¸Šä¸‹æ–‡å¼•ç”¨çš„討論。把它想åƒæˆä¸€å€‹
+請儘å¯èƒ½ç™¼é€ç„¡é™„件的純文本電å­éƒµä»¶ã€‚如果所有的細節都è—在附件è£ï¼Œé‚£éº¼å°±å¾ˆé›£å°
+一個複雜的å•é¡Œé€²è¡Œä¸Šä¸‹æ–‡å¼•ç”¨çš„討論。把它想象æˆä¸€å€‹
:doc:`常è¦çš„補ä¸æ交 <../process/submitting-patches>` (å³ä½¿ä½ é‚„沒有補ä¸ï¼‰ï¼š
æè¿°å•é¡Œå’Œå½±éŸ¿ï¼Œåˆ—出復ç¾æ­¥é©Ÿï¼Œç„¶å¾Œçµ¦å‡ºä¸€å€‹å»ºè­°çš„解決方案,所有這些都是純文本的。
@@ -38,15 +38,15 @@ Linux內核開發人員éžå¸¸é‡è¦–安全性。因此我們想知é“何時發ç¾
安全列表ä¸æ˜¯å…¬é–‹æ¸ é“。爲此,請åƒè¦‹ä¸‹é¢çš„å”作。
-一旦開發出了å¥å£¯çš„補ä¸ï¼Œç™¼å¸ƒéŽç¨‹å°±é–‹å§‹äº†ã€‚å°å…¬é–‹çš„缺陷的修復會立å³ç™¼å¸ƒã€‚
+一旦開發出了å¥å£¯çš„補ä¸ï¼Œç™¼ä½ˆéŽç¨‹å°±é–‹å§‹äº†ã€‚å°å…¬é–‹çš„缺陷的修復會立å³ç™¼ä½ˆã€‚
-儘管我們傾å‘於在未公開缺陷的修復å¯ç”¨æ™‚å³ç™¼å¸ƒè£œä¸ï¼Œä½†æ‡‰å ±å‘Šè€…或å—影響方的請求,
-這å¯èƒ½æœƒè¢«æŽ¨é²åˆ°ç™¼å¸ƒéŽç¨‹é–‹å§‹å¾Œçš„7日內,如果根據缺陷的嚴é‡æ€§éœ€è¦æ›´å¤šçš„時間,
-則å¯é¡å¤–延長到14天。推é²ç™¼å¸ƒä¿®å¾©çš„唯一有效原因是爲了é©æ‡‰QAçš„é‚輯和需è¦ç™¼å¸ƒ
+儘管我們傾å‘於在未公開缺陷的修復å¯ç”¨æ™‚å³ç™¼ä½ˆè£œä¸ï¼Œä½†æ‡‰å ±å‘Šè€…或å—影響方的請求,
+這å¯èƒ½æœƒè¢«æŽ¨é²åˆ°ç™¼ä½ˆéŽç¨‹é–‹å§‹å¾Œçš„7日內,如果根據缺陷的嚴é‡æ€§éœ€è¦æ›´å¤šçš„時間,
+則å¯é¡å¤–延長到14天。推é²ç™¼ä½ˆä¿®å¾©çš„唯一有效原因是爲了é©æ‡‰QAçš„é‚輯和需è¦ç™¼ä½ˆ
å”調的大è¦æ¨¡éƒ¨ç½²ã€‚
雖然å¯èƒ½èˆ‡å—信任的個人共享å—é™ä¿¡æ¯ä»¥é–‹ç™¼ä¿®å¾©ï¼Œä½†æœªç¶“報告者許å¯ï¼Œæ­¤é¡žä¿¡æ¯ä¸æœƒ
-與修復程åºä¸€èµ·ç™¼å¸ƒæˆ–發布在任何其他披露渠é“上。這包括但ä¸é™æ–¼åŽŸå§‹éŒ¯èª¤å ±å‘Šå’Œ
+與修復程åºä¸€èµ·ç™¼ä½ˆæˆ–發佈在任何其他披露渠é“上。這包括但ä¸é™æ–¼åŽŸå§‹éŒ¯èª¤å ±å‘Šå’Œ
後續討論(如有)ã€æ¼æ´žã€CVEä¿¡æ¯æˆ–報告者的身份。
æ›å¥è©±èªªï¼Œæˆ‘們唯一感興趣的是修復缺陷。æ交給安全列表的所有其他資料以åŠå°å ±å‘Š
@@ -57,10 +57,10 @@ Linux內核開發人員éžå¸¸é‡è¦–安全性。因此我們想知é“何時發ç¾
å°æ•æ„Ÿç¼ºé™·ï¼ˆä¾‹å¦‚那些å¯èƒ½å°Žè‡´æ¬Šé™æå‡çš„缺陷)的修復å¯èƒ½éœ€è¦èˆ‡ç§æœ‰éƒµä»¶åˆ—表
<linux-distros@vs.openwall.org>進行å”調,以便分發供應商åšå¥½æº–備,在公開披露
-上游補ä¸æ™‚發布一個已修復的內核。發行版將需è¦ä¸€äº›æ™‚間來測試建議的補ä¸ï¼Œé€šå¸¸
-會è¦æ±‚至少幾天的é™åˆ¶ï¼Œè€Œä¾›æ‡‰å•†æ›´æ–°ç™¼å¸ƒæ›´å‚¾å‘於周二至周四。若åˆé©ï¼Œå®‰å…¨åœ˜éšŠ
+上游補ä¸æ™‚發佈一個已修復的內核。發行版將需è¦ä¸€äº›æ™‚間來測試建議的補ä¸ï¼Œé€šå¸¸
+會è¦æ±‚至少幾天的é™åˆ¶ï¼Œè€Œä¾›æ‡‰å•†æ›´æ–°ç™¼å¸ƒæ›´å‚¾å‘於週二至週四。若åˆé©ï¼Œå®‰å…¨åœ˜éšŠ
å¯ä»¥å”助這種å”調,或者報告者å¯ä»¥å¾žä¸€é–‹å§‹å°±åŒ…括linux發行版。在這種情æ³ä¸‹ï¼Œè«‹
-記ä½åœ¨é›»å­éƒµä»¶ä¸»é¡Œè¡Œå‰é¢åŠ ä¸Šã€Œ[vs]ã€ï¼Œå¦‚linux發行版wiki中所述:
+記ä½åœ¨é›»å­éƒµä»¶ä¸»é¡Œè¡Œå‰é¢åŠ ä¸Šâ€œ[vs]â€ï¼Œå¦‚linux發行版wiki中所述:
<http://oss-security.openwall.org/wiki/mailing-lists/distros#how-to-use-the-lists>。
CVE分é…
diff --git a/Documentation/translations/zh_TW/admin-guide/sysrq.rst b/Documentation/translations/zh_TW/admin-guide/sysrq.rst
new file mode 100644
index 000000000000..4a08db00a495
--- /dev/null
+++ b/Documentation/translations/zh_TW/admin-guide/sysrq.rst
@@ -0,0 +1,281 @@
+.. include:: ../disclaimer-zh_TW.rst
+
+:Original: Documentation/admin-guide/sysrq.rst
+
+:翻譯:
+
+ 黃è»è¯ Junhua Huang <huang.junhua@zte.com.cn>
+
+:æ ¡è­¯:
+
+ å¸å»¶é¨° Yanteng Si <siyanteng@loongson.cn>
+
+.. _tw_admin-guide_sysrq:
+
+Linux 魔法系統請求éµé§­å®¢
+========================
+
+é‡å° sysrq.c 的文檔說明
+
+什麼是魔法 SysRq éµï¼Ÿ
+~~~~~~~~~~~~~~~~~~~~~
+
+它是一個你å¯ä»¥è¼¸å…¥çš„具有魔法般的組åˆéµã€‚
+無論內核在åšä»€éº¼ï¼Œå…§æ ¸éƒ½æœƒéŸ¿æ‡‰ SysRq éµçš„輸入,除éžå…§æ ¸å®Œå…¨å¡æ­»ã€‚
+
+如何使能魔法 SysRq éµï¼Ÿ
+~~~~~~~~~~~~~~~~~~~~~~~
+
+在é…置內核時,我們需è¦è¨­ç½® 'Magic SysRq key (CONFIG_MAGIC_SYSRQ)' 爲 'Y'。
+當é‹è¡Œä¸€å€‹ç·¨è­¯é€² sysrq 功能的內核時,/proc/sys/kernel/sysrq 控制ç€è¢«
+SysRq éµèª¿ç”¨çš„功能許å¯ã€‚這個文件的默èªå€¼ç”± CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE
+é…置符號設定,文件本身默èªè¨­ç½®çˆ² 1。以下是 /proc/sys/kernel/sysrq 中å¯èƒ½çš„
+值列表:
+
+ - 0 - 完全ä¸ä½¿èƒ½ SysRq éµ
+ - 1 - 使能 SysRq éµçš„全部功能
+ - >1 - å°æ–¼å…許的 SysRq éµåŠŸèƒ½çš„比特掩碼(åƒè¦‹ä¸‹é¢æ›´è©³ç´°çš„功能æ述)::
+
+ 2 = 0x2 - 使能å°æŽ§åˆ¶æª¯æ—¥èªŒè¨˜éŒ„級別的控制
+ 4 = 0x4 - 使能å°éµç›¤çš„控制 (SAK, unraw)
+ 8 = 0x8 - 使能å°é€²ç¨‹çš„調試導出等
+ 16 = 0x10 - 使能åŒæ­¥å‘½ä»¤
+ 32 = 0x20 - 使能é‡æ–°æŽ›è¼‰åªè®€
+ 64 = 0x40 - 使能å°é€²ç¨‹çš„信號æ“作 (term, kill, oom-kill)
+ 128 = 0x80 - å…許é‡å•“ã€æ–·é›»
+ 256 = 0x100 - å…許讓所有實時任務變普通任務
+
+ä½ å¯ä»¥é€šéŽå¦‚下命令把值設置到這個文件中::
+
+ echo "number" >/proc/sys/kernel/sysrq
+
+這è£è¢«å¯«å…¥çš„ number å¯ä»¥æ˜¯ 10 é€²åˆ¶æ•¸ï¼Œæˆ–è€…æ˜¯å¸¶ç€ 0x å‰ç¶´çš„ 16 進制數。
+CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE 必須是以 16 進制數寫入。
+
+注æ„,``/proc/sys/kernel/sysrq`` 的值隻影響通éŽéµç›¤è§¸ç™¼ SySRq 的調用,å°æ–¼
+é€šéŽ ``/proc/sysrq-trigger`` 的任何æ“作調用都是å…許的
+(通éŽå…·æœ‰ç³»çµ±æ¬Šé™çš„用戶)。
+
+如何使用魔法 SysRq éµï¼Ÿ
+~~~~~~~~~~~~~~~~~~~~~~~
+
+在 x86 架構上
+ ä½ å¯ä»¥æŒ‰ä¸‹éµç›¤çµ„åˆéµ :kbd:`ALT-SysRq-<command key>`。
+
+ .. note::
+ 一些éµç›¤å¯èƒ½æ²’有標識 'SySRq' éµã€‚'SySRq' éµä¹Ÿè¢«ç•¶åš 'Print Screen'éµã€‚
+ åŒæ™‚有些éµç›¤ç„¡æ³•è™•ç†åŒæ™‚按下這麼多éµï¼Œå› æ­¤ä½ å¯ä»¥å…ˆæŒ‰ä¸‹éµç›¤ :kbd:`Alt` éµï¼Œ
+ 然後按下éµç›¤ :kbd:`SysRq` éµï¼Œå†é‡‹æ”¾éµç›¤ :kbd:`SysRq` éµï¼Œä¹‹å¾ŒæŒ‰ä¸‹éµç›¤ä¸Šå‘½ä»¤éµ
+ :kbd:`<command key>`,最後釋放所有éµã€‚
+
+在 SPARC 架構上
+ ä½ å¯ä»¥æŒ‰ä¸‹éµç›¤çµ„åˆéµ :kbd:`ALT-STOP-<command key>` 。
+
+在串行控制檯(åªé‡å° PC 類型的標準串å£ï¼‰
+ ä½ å¯ä»¥ç™¼ä¸€å€‹ ``BREAK`` ,然後在 5 秒內發é€ä¸€å€‹å‘½ä»¤éµï¼Œ
+ ç™¼é€ ``BREAK`` 兩次將被翻譯爲一個正常的 BREAK æ“作。
+
+在 PowerPC 架構上
+ 按下éµç›¤çµ„åˆéµ :kbd:`ALT - Print Screen` (或者 :kbd:`F13`) - :kbd:`<命令éµ>` 。
+ :kbd:`Print Screen` (或者 :kbd:`F13`) - :kbd:`<命令éµ>` 或許也能實ç¾ã€‚
+
+在其他架構上
+ 如果你知é“其他架構的組åˆéµï¼Œè«‹å‘Šè¨´æˆ‘,我å¯ä»¥æŠŠå®ƒå€‘添加到這部分。
+
+在所有架構上
+ 寫一個字符到 /proc/sysrq-trigger 文件,例如::
+
+ echo t > /proc/sysrq-trigger
+
+é€™å€‹å‘½ä»¤éµ :kbd:`<command key>` 是å€åˆ†å¤§å°å¯«çš„。
+
+什麼是命令éµï¼Ÿ
+~~~~~~~~~~~~~~
+
+=========== ================================================================
+å‘½ä»¤éµ åŠŸèƒ½
+=========== ================================================================
+``b`` 將立å³é‡å•“系統,ä¸æœƒåŒæ­¥æˆ–者å¸è¼‰ç£ç›¤ã€‚
+
+``c`` 將執行系統 crash,如果é…置了系統 crashdump,將執行 crashdump。
+
+``d`` 顯示所有æŒæœ‰çš„鎖。
+
+``e`` ç™¼é€ SIGTERM 信號給所有進程,除了 init 進程。
+
+``f`` 將調用 oom killer 殺掉一個éŽåº¦ä½”用內存的進程,如果什麼任務都沒殺,
+ 也ä¸æœƒ panic。
+
+``g`` kgdb 使用(內核調試器)。
+
+``h`` 將會顯示幫助。(實際上除了這è£åˆ—舉的éµï¼Œå…¶ä»–的都將顯示幫助,
+ 但是 ``h`` 容易記ä½ï¼‰:-)
+
+``i`` ç™¼é€ SIGKILL 給所有進程,除了 init 進程。
+
+``j`` 強制性的 “解å‡å®ƒâ€ - 用於被 FIFREEZE ioctl æ“作å‡ä½çš„文件系統。
+
+``k`` 安全訪å•ç¥•é‘°(SAK)殺掉在當å‰è™›æ“¬æŽ§åˆ¶æª¯çš„所有程åºï¼Œæ³¨æ„:åƒè€ƒ
+ ä¸‹é¢ SAK 節é‡è¦è«–述。
+
+``l`` 顯示所有活動 cpu 的棧回溯。
+
+``m`` 將導出當å‰å…§å­˜ä¿¡æ¯åˆ°ä½ çš„控制檯。
+
+``n`` 用於使所有實時任務變æˆæ™®é€šä»»å‹™ã€‚
+
+``o`` 將關閉系統(如果é…置和支æŒçš„話)。
+
+``p`` 將導出當å‰å¯„存器和標誌ä½åˆ°æŽ§åˆ¶æª¯ã€‚
+
+``q`` 將導出æ¯å€‹ cpu 上所有已è£å‚™çš„高精度定時器(ä¸æ˜¯å®Œæ•´çš„
+ time_list 文件顯示的 timers)和所有時é˜äº‹ä»¶è¨­å‚™çš„詳細信æ¯ã€‚
+
+``r`` 關閉éµç›¤çš„原始模å¼ï¼Œè¨­ç½®çˆ²è½‰æ›æ¨¡å¼ã€‚
+
+``s`` 將嘗試åŒæ­¥æ‰€æœ‰çš„已掛載文件系統。
+
+``t`` 將導出當å‰æ‰€æœ‰ä»»å‹™åˆ—表和它們的信æ¯åˆ°æŽ§åˆ¶æª¯ã€‚
+
+``u`` 將嘗試é‡æ–°æŽ›è¼‰å·²æŽ›è¼‰æ–‡ä»¶ç³»çµ±çˆ²åªè®€ã€‚
+
+``v`` 強制æ¢å¾©å¹€ç·©å­˜æŽ§åˆ¶æª¯ã€‚
+``v`` 觸發 ETM 緩存導出 [ARM 架構特有]
+
+``w`` 導出處於ä¸å¯ä¸­æ–·ç‹€æ…‹ï¼ˆé˜»å¡žï¼‰çš„任務。
+
+``x`` 在 ppc/powerpc 架構上用於 xmon 接å£ã€‚
+ 在 sparc64 架構上用於顯示全局的 PMU(性能監控單元)寄存器。
+ 在 MIPS 架構上導出所有的 tlb æ¢ç›®ã€‚
+
+``y`` 顯示全局 cpu 寄存器 [SPARC-64 架構特有]
+
+``z`` 導出 ftrace 緩存信æ¯
+
+``0``-``9`` 設置控制檯日誌級別,該級別控制什麼樣的內核信æ¯å°‡è¢«æ‰“å°åˆ°ä½ çš„
+ 控制檯。(比如 ``0`` ,將使得åªæœ‰ç·Šæ€¥ä¿¡æ¯ï¼Œåƒ PANICs or OOPSes
+ æ‰èƒ½åˆ°ä½ çš„控制檯。)
+=========== ================================================================
+
+好了,我能用他們åšä»€éº¼å‘¢ï¼Ÿ
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+嗯,當你的 X æœå‹™ç«¯æˆ–者 svgalib 程åºå´©æ½°ï¼Œunraw(r) éžåŽŸå§‹æ¨¡å¼å‘½ä»¤éµæ˜¯éžå¸¸
+方便的。
+
+sak(k)(安全訪å•ç¥•é‘°ï¼‰åœ¨ä½ å˜—試登陸的åŒæ™‚,åˆæƒ³ç¢ºä¿ç•¶å‰æŽ§åˆ¶æª¯æ²’有å¯ä»¥ç²å–ä½ çš„
+密碼的特洛伊木馬程åºé‹è¡Œæ™‚是有用的。它會殺掉給定控制檯的所有程åºï¼Œé€™æ¨£ä½ 
+å°±å¯ä»¥ç¢ºèªç•¶å‰çš„登陸æ示程åºæ˜¯å¯¦éš›ä¾†è‡ª init 進程的程åºï¼Œè€Œä¸æ˜¯æŸäº›ç‰¹æ´›ä¼Š
+木馬程åºã€‚
+
+.. important::
+
+ 在其實際的形å¼ä¸­ï¼Œåœ¨å…¼å®¹ C2 安全標準的系統上,它ä¸æ˜¯ä¸€å€‹çœŸæ­£çš„ SAK,
+ 它也ä¸æ‡‰è©²èª¤èªçˆ²æ­¤ã€‚
+
+似乎其他人發ç¾å…¶å¯ä»¥ä½œçˆ²ï¼ˆç³»çµ±çµ‚端è¯æ©Ÿéµï¼‰ç•¶ä½ æƒ³é€€å‡ºä¸€å€‹ç¨‹åºï¼Œ
+åŒæ™‚ä¸æœƒè®“你切æ›æŽ§åˆ¶æª¯çš„方法。(比如,X æœå‹™ç«¯æˆ–者 svgalib 程åºï¼‰
+
+``reboot(b)`` 是個好方法,當你ä¸èƒ½é—œé–‰æ©Ÿå™¨æ™‚,它等åŒæ–¼æŒ‰ä¸‹"復ä½"按鈕。
+
+``crash(c)`` å¯ä»¥ç”¨æ–¼æ‰‹å‹•è§¸ç™¼ä¸€å€‹ crashdump,當系統å¡ä½æ™‚。
+注æ„當 crashdump 機制ä¸å¯ç”¨æ™‚,這個åªæ˜¯è§¸ç™¼ä¸€å€‹å…§æ ¸ crash。
+
+``sync(s)`` 在拔掉å¯ç§»å‹•ä»‹è³ªä¹‹å‰ï¼Œæˆ–者在使用ä¸æ供優雅關機的
+æ•‘æ´ shell 之後很方便 -- 它將確ä¿ä½ çš„數據被安全地寫入ç£ç›¤ã€‚注æ„,在你看到
+å±å¹•ä¸Šå‡ºç¾ "OK" å’Œ "Done" 之å‰ï¼ŒåŒæ­¥é‚„沒有發生。
+
+``umount(u)`` å¯ä»¥ç”¨ä¾†æ¨™è¨˜æ–‡ä»¶ç³»çµ±æ­£å¸¸å¸è¼‰ï¼Œå¾žæ­£åœ¨é‹è¡Œçš„系統角度來看,它們將
+被é‡æ–°æŽ›è¼‰çˆ²åªè®€ã€‚這個é‡æ–°æŽ›è¼‰å‹•ä½œç›´åˆ°ä½ çœ‹åˆ° "OK" å’Œ "Done" ä¿¡æ¯å‡ºç¾åœ¨å±å¹•ä¸Š
+纔算完æˆã€‚
+
+日誌級別 ``0`` - ``9`` 用於當你的控制檯被大é‡çš„內核信æ¯è¡æ“Šï¼Œä½ ä¸æƒ³çœ‹è¦‹çš„時候。
+é¸æ“‡ ``0`` å°‡ç¦æ­¢é™¤äº†æœ€ç·Šæ€¥çš„內核信æ¯å¤–的所有的內核信æ¯è¼¸å‡ºåˆ°æŽ§åˆ¶æª¯ã€‚(但是如果
+syslogd/klogd 進程是é‹è¡Œçš„,它們ä»å°‡è¢«è¨˜éŒ„。)
+
+``term(e)`` å’Œ ``kill(i)`` 用於當你有些有點失控的進程,你無法通éŽå…¶ä»–æ–¹å¼æ®ºæŽ‰
+它們的時候,特別是它正在創建其他進程。
+
+"just thaw ``it(j)`` " 用於當你的系統由於一個 FIFREEZE ioctl 調用而產生的文件
+系統å‡çµï¼Œè€Œå°Žè‡´çš„ä¸éŸ¿æ‡‰æ™‚。
+
+有的時候 SysRq éµåœ¨ä½¿ç”¨å®ƒä¹‹å¾Œï¼Œçœ‹èµ·ä¾†åƒæ˜¯â€œå¡ä½â€äº†ï¼Œæˆ‘能åšäº›ä»€éº¼ï¼Ÿ
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+這也會發生在我這,我發ç¾è¼•æ•²éµç›¤å…©å´çš„ shiftã€alt å’Œ control éµï¼Œç„¶å¾Œå†æ¬¡æ•²æ“Š
+一個無效的 SysRq éµåºåˆ—å¯ä»¥è§£æ±ºå•é¡Œã€‚(比如,åƒéµç›¤çµ„åˆéµ :kbd:`alt-sysrq-z` )
+切æ›åˆ°å¦ä¸€å€‹è™›æ“¬æŽ§åˆ¶æª¯ï¼ˆéµç›¤æ“作 :kbd:`ALT+Fn` ),然後å†åˆ‡å›žä¾†æ‡‰è©²ä¹Ÿæœ‰å¹«åŠ©ã€‚
+
+我敲擊了 SysRq éµï¼Œä½†åƒæ˜¯ä»€éº¼éƒ½æ²’發生,發生了什麼錯誤?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+有一些éµç›¤å°æ–¼ SysRq éµè¨­ç½®äº†ä¸åŒçš„éµå€¼ï¼Œè€Œä¸æ˜¯æå‰å®šç¾©çš„ 99
+(查看在 ``include/uapi/linux/input-event-codes.h`` 文件中 ``KEY_SYSRQ`` 的定義)
+或者就根本沒有 SysRq éµã€‚在這些場景下,執行 ``showkey -s`` 命令來找到一個åˆé©
+的掃æ碼åºåˆ—,然後使用 ``setkeycodes <sequence> 99`` 命令映射這個åºåˆ—值到通用
+çš„ SysRq éµç·¨ç¢¼ä¸Šï¼ˆæ¯”如 ``setkeycodes e05b 99`` )。最好將這個命令放在啓動腳本
+中。
+哦,順便說一å¥ï¼Œä½ å秒é˜ä¸è¼¸å…¥ä»»ä½•æ±è¥¿å°±å°‡é€€å‡º “showkeyâ€ã€‚
+
+我想添加一個 SysRq éµäº‹ä»¶åˆ°ä¸€å€‹æ¨¡å¡Šä¸­ï¼Œå¦‚何去åšå‘¢ï¼Ÿ
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+çˆ²äº†è¨»å†Šä¸€å€‹åŸºç¤Žå‡½æ•¸åˆ°é€™å€‹è¡¨ä¸­ï¼Œé¦–å…ˆä½ å¿…é ˆåŒ…å« ``include/linux/sysrq.h`` é ­
+文件,這個頭文件定義了你所需è¦çš„所有æ±è¥¿ã€‚然後你必須創建一個 ``sysrq_key_op``
+çµæ§‹é«”,然後åˆå§‹åŒ–它,使用如下內容,A) 你將使用的這個éµçš„處ç†å‡½æ•¸ï¼Œ B) 一個
+help_msg 字符串,在 SysRq éµæ‰“å°å¹«åŠ©ä¿¡æ¯æ™‚將打å°å‡ºä¾†ï¼ŒC) 一個 action_msg å­—
+符串,就在你的處ç†å‡½æ•¸èª¿ç”¨å‰æ‰“å°å‡ºä¾†ã€‚你的處ç†å‡½æ•¸å¿…須符åˆåœ¨ 'sysrq.h' 文件中
+的函數原型。
+
+在 ``sysrq_key_op`` çµæ§‹é«”被創建後,你å¯ä»¥èª¿ç”¨å…§æ ¸å‡½æ•¸
+``register_sysrq_key(int key, const struct sysrq_key_op *op_p);``,
+該函數在表中的 'key' å°æ‡‰ä½ç½®å…§å®¹æ˜¯ç©ºçš„情æ³ä¸‹ï¼Œå°‡é€šéŽ ``op_p`` 指é‡è¨»å†Šé€™å€‹æ“作
+函數到表中 'key' å°æ‡‰ä½ç½®ä¸Šã€‚在模塊å¸è¼‰çš„時候,你必須調用
+``unregister_sysrq_key(int key, const struct sysrq_key_op *op_p)`` 函數,該函數
+åªæœ‰åœ¨ç•¶å‰è©²éµå°æ‡‰çš„處ç†å‡½æ•¸è¢«è¨»å†Šåˆ°äº† 'key' å°æ‡‰ä½ç½®æ™‚,纔會移除 'op_p' 指é‡
+å°æ‡‰çš„éµå€¼æ“作函數。這是爲了防止在你註冊之後,該ä½ç½®è¢«æ”¹å¯«çš„情æ³ã€‚
+
+魔法 SysRq éµç³»çµ±çš„工作原ç†æ˜¯å°‡éµå°æ‡‰æ“作函數註冊到éµçš„æ“作查找表,
+該表定義在 'drivers/tty/sysrq.c' 文件中。
+該éµè¡¨æœ‰è¨±å¤šåœ¨ç·¨è­¯æ™‚候就註冊進去的æ“作函數,但是是å¯è®Šçš„。
+並且有兩個函數作爲æ“作該表的接å£è¢«å°Žå‡º::
+
+ register_sysrq_key 和 unregister_sysrq_key.
+
+當然,永é ä¸è¦åœ¨è¡¨ä¸­ç•™ä¸‹ç„¡æ•ˆæŒ‡é‡ï¼Œå³ï¼Œç•¶ä½ çš„模塊存在調用 register_sysrq_key()
+函數,它一定è¦èª¿ç”¨ unregister_sysrq_key() 來清除它使用éŽçš„ SysRq éµè¡¨æ¢ç›®ã€‚
+表中的空指é‡æ˜¯å®‰å…¨çš„。:)
+
+如果å°æ–¼æŸç¨®åŽŸå› ï¼Œåœ¨ handle_sysrq 調用的處ç†å‡½æ•¸ä¸­ï¼Œä½ èªçˆ²æœ‰å¿…è¦èª¿ç”¨
+handle_sysrq 函數時,你必須æ„識到當å‰ä½ è™•æ–¼ä¸€å€‹éŽ–中(你åŒæ™‚也處於一箇中斷處ç†
+函數中,這æ„味ç€ä¸èƒ½ç¡çœ ï¼‰ã€‚所以這時你必須使用 ``__handle_sysrq_nolock`` 替代。
+
+當我敲擊一個 SysRq 組åˆéµæ™‚,åªæœ‰æ¨™é¡Œæ‰“å°å‡ºç¾åœ¨æŽ§åˆ¶æª¯ï¼Ÿ
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+SysRq éµçš„輸出和所有其他控制檯輸出一樣,å—制於控制檯日誌級別控制。
+這æ„味ç€ï¼Œå¦‚果內核以發行版內核中常見的 "quiet" æ–¹å¼å•“動,則輸出å¯èƒ½ä¸æœƒå‡ºç¾åœ¨å¯¦éš›
+的控制檯上,å³ä½¿å®ƒæœƒå‡ºç¾åœ¨ dmesg 緩存中,也å¯ä»¥é€šéŽ dmesg 命令和 ``/proc/kmsg``
+文件的消費訪å•åˆ°ã€‚作爲一個特例,來自 sysrq 命令的標題行將被傳éžçµ¦æ‰€æœ‰æŽ§åˆ¶æª¯
+使用者,就好åƒç•¶å‰æ—¥èªŒç´šåˆ¥æ˜¯æœ€å¤§çš„一樣。如果åªç™¼å‡ºæ¨™é¡Œé ­ï¼Œå‰‡å¹¾ä¹Žå¯ä»¥è‚¯å®šå…§æ ¸æ—¥èªŒ
+級別太低。如果你需è¦æŽ§åˆ¶æª¯ä¸Šçš„輸出,那麼你將需è¦è‡¨æ™‚æ高控制檯日誌級別,通éŽä½¿ç”¨
+éµç›¤çµ„åˆéµ :kbd:`alt-sysrq-8` 或者::
+
+ echo 8 > /proc/sysrq-trigger
+
+在觸發了你感興趣的 SysRq éµå‘½ä»¤å¾Œï¼Œè¨˜å¾—æ¢å¾©æ—¥èªŒç´šåˆ¥åˆ°æ­£å¸¸æƒ…æ³ã€‚
+
+我有很多å•é¡Œæ™‚,å¯ä»¥è«‹æ•™èª°ï¼Ÿ
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+請教在內核郵件列表上的人,郵箱:
+ linux-kernel@vger.kernel.org
+
+致è¬
+~~~~
+
+- Mydraal <vulpyne@vulpyne.net> 撰寫了該文件
+- Adam Sulmicki <adam@cfar.umd.edu> 進行了更新
+- Jeremy M. Dolan <jmd@turbogeek.org> 在 2001/01/28 10:15:59 進行了更新
+- Crutcher Dunnavant <crutcher+kernel@datastacks.com> 添加éµè¨»å†Šéƒ¨åˆ†
+
diff --git a/Documentation/translations/zh_TW/admin-guide/tainted-kernels.rst b/Documentation/translations/zh_TW/admin-guide/tainted-kernels.rst
index ebe3812ead82..47629f6b05de 100644
--- a/Documentation/translations/zh_TW/admin-guide/tainted-kernels.rst
+++ b/Documentation/translations/zh_TW/admin-guide/tainted-kernels.rst
@@ -9,27 +9,27 @@
å³æƒ³æˆ Wu XiangCheng <bobwxc@email.cn>
胡皓文 Hu Haowen <src.res.211@gmail.com>
-å—汙染的內核
+å—污染的內核
-------------
-當發生一些在ç¨å¾Œèª¿æŸ¥å•é¡Œæ™‚å¯èƒ½ç›¸é—œçš„事件時,內核會將自己標記爲「å—汙染
-(tainted)ã€çš„。ä¸ç”¨å¤ªéŽæ“”心,大多數情æ³ä¸‹é‹è¡Œå—汙染的內核沒有å•é¡Œï¼›é€™äº›ä¿¡æ¯
-主è¦åœ¨æœ‰äººæƒ³èª¿æŸ¥æŸå€‹å•é¡Œæ™‚æ‰æœ‰æ„義的,因爲å•é¡Œçš„真正原因å¯èƒ½æ˜¯å°Žè‡´å…§æ ¸å—汙染
-的事件。這就是爲什麼來自å—汙染內核的缺陷報告常常被開發人員忽略,因此請嘗試用
-未å—汙染的內核é‡ç¾å•é¡Œã€‚
+當發生一些在ç¨å¾Œèª¿æŸ¥å•é¡Œæ™‚å¯èƒ½ç›¸é—œçš„事件時,內核會將自己標記爲“å—污染
+(tainted)â€çš„。ä¸ç”¨å¤ªéŽæ“”心,大多數情æ³ä¸‹é‹è¡Œå—污染的內核沒有å•é¡Œï¼›é€™äº›ä¿¡æ¯
+主è¦åœ¨æœ‰äººæƒ³èª¿æŸ¥æŸå€‹å•é¡Œæ™‚纔有æ„義的,因爲å•é¡Œçš„真正原因å¯èƒ½æ˜¯å°Žè‡´å…§æ ¸å—污染
+的事件。這就是爲什麼來自å—污染內核的缺陷報告常常被開發人員忽略,因此請嘗試用
+未å—污染的內核é‡ç¾å•é¡Œã€‚
-請注æ„,å³ä½¿åœ¨æ‚¨æ¶ˆé™¤å°Žè‡´æ±™æŸ“的原因(亦å³å¸è¼‰å°ˆæœ‰å…§æ ¸æ¨¡å¡Šï¼‰ä¹‹å¾Œï¼Œå…§æ ¸ä»å°‡ä¿æŒ
-汙染狀態,以表示內核ä»ç„¶ä¸å¯ä¿¡ã€‚這也是爲什麼內核在注æ„到內部å•é¡Œï¼ˆã€Œkernel
-bugã€ï¼‰ã€å¯æ¢å¾©éŒ¯èª¤ï¼ˆã€Œkernel oopsã€ï¼‰æˆ–ä¸å¯æ¢å¾©éŒ¯èª¤ï¼ˆã€Œkernel panicã€ï¼‰æ™‚會列å°
-å—汙染狀態,並將有關此的調試信æ¯å¯«å…¥æ—¥èªŒ ``dmesg`` 輸出。也å¯ä»¥é€šéŽ
-``/proc/`` 中的文件在é‹è¡Œæ™‚檢查å—汙染的狀態。
+請注æ„,å³ä½¿åœ¨æ‚¨æ¶ˆé™¤å°Žè‡´æ±¡æŸ“的原因(亦å³å¸è¼‰å°ˆæœ‰å…§æ ¸æ¨¡å¡Šï¼‰ä¹‹å¾Œï¼Œå…§æ ¸ä»å°‡ä¿æŒ
+污染狀態,以表示內核ä»ç„¶ä¸å¯ä¿¡ã€‚這也是爲什麼內核在注æ„到內部å•é¡Œï¼ˆâ€œkernel
+bugâ€ï¼‰ã€å¯æ¢å¾©éŒ¯èª¤ï¼ˆâ€œkernel oopsâ€ï¼‰æˆ–ä¸å¯æ¢å¾©éŒ¯èª¤ï¼ˆâ€œkernel panicâ€ï¼‰æ™‚會打å°
+å—污染狀態,並將有關此的調試信æ¯å¯«å…¥æ—¥èªŒ ``dmesg`` 輸出。也å¯ä»¥é€šéŽ
+``/proc/`` 中的文件在é‹è¡Œæ™‚檢查å—污染的狀態。
-BUGã€Oops或Panics消æ¯ä¸­çš„汙染標誌
+BUGã€Oops或Panics消æ¯ä¸­çš„污染標誌
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-在頂部以「CPU:ã€é–‹é ­çš„一行中å¯ä»¥æ‰¾åˆ°å—汙染的狀態;內核是å¦å—到汙染和原因會顯示
-在進程ID(「PID:ã€ï¼‰å’Œè§¸ç™¼äº‹ä»¶å‘½ä»¤çš„縮寫å稱(「Comm:ã€ï¼‰ä¹‹å¾Œ::
+在頂部以“CPU:â€é–‹é ­çš„一行中å¯ä»¥æ‰¾åˆ°å—污染的狀態;內核是å¦å—到污染和原因會顯示
+在進程ID(“PID:â€ï¼‰å’Œè§¸ç™¼äº‹ä»¶å‘½ä»¤çš„縮寫å稱(“Comm:â€ï¼‰ä¹‹å¾Œ::
BUG: unable to handle kernel NULL pointer dereference at 0000000000000000
Oops: 0002 [#1] SMP PTI
@@ -38,27 +38,27 @@ BUGã€Oops或Panics消æ¯ä¸­çš„汙染標誌
RIP: 0010:my_oops_init+0x13/0x1000 [kpanic]
[...]
-如果內核在事件發生時沒有被汙染,您將在那裡看到「Not-tainted:ã€ï¼›å¦‚果被汙染,那
-麼它將是「Tainted:ã€ä»¥åŠå­—æ¯æˆ–空格。在上é¢çš„例å­ä¸­ï¼Œå®ƒçœ‹èµ·ä¾†æ˜¯é€™æ¨£çš„::
+如果內核在事件發生時沒有被污染,您將在那è£çœ‹åˆ°â€œNot-tainted:â€ï¼›å¦‚果被污染,那
+麼它將是“Tainted:â€ä»¥åŠå­—æ¯æˆ–空格。在上é¢çš„例å­ä¸­ï¼Œå®ƒçœ‹èµ·ä¾†æ˜¯é€™æ¨£çš„::
Tainted: P W O
下表解釋了這些字符的å«ç¾©ã€‚在本例中,由於加載了專有模塊( ``P`` ),出ç¾äº†
警告( ``W`` ),並且加載了外部構建的模塊( ``O`` ),所以內核早些時候å—到
-了汙染。è¦è§£ç¢¼å…¶ä»–字符,請使用下表。
+了污染。è¦è§£ç¢¼å…¶ä»–字符,請使用下表。
-解碼é‹è¡Œæ™‚的汙染狀態
+解碼é‹è¡Œæ™‚的污染狀態
~~~~~~~~~~~~~~~~~~~~~
-在é‹è¡Œæ™‚,您å¯ä»¥é€šéŽè®€å– ``cat /proc/sys/kernel/tainted`` 來查詢å—汙染狀態。
-如果返回 ``0`` ,則內核沒有å—到汙染;任何其他數字都表示å—到汙染的原因。解碼
+在é‹è¡Œæ™‚,您å¯ä»¥é€šéŽè®€å– ``cat /proc/sys/kernel/tainted`` 來查詢å—污染狀態。
+如果返回 ``0`` ,則內核沒有å—到污染;任何其他數字都表示å—到污染的原因。解碼
這個數字的最簡單方法是使用腳本 ``tools/debugging/kernel-chktaint`` ,您的
發行版å¯èƒ½æœƒå°‡å…¶ä½œçˆ²å爲 ``linux-tools`` 或 ``kernel-tools`` 的包的一部分æ
供;如果沒有,您å¯ä»¥å¾ž
`git.kernel.org <https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint>`_
網站下載此腳本並用 ``sh kernel-chktaint`` 執行,它會在上é¢å¼•ç”¨çš„日誌中有類似
-語å¥çš„機器上列å°é€™æ¨£çš„內容::
+語å¥çš„機器上打å°é€™æ¨£çš„內容::
Kernel is Tainted for following reasons:
* Proprietary module was loaded (#0)
@@ -69,19 +69,19 @@ BUGã€Oops或Panics消æ¯ä¸­çš„汙染標誌
a more details explanation of the various taint flags.
Raw taint value as int/string: 4609/'P W O '
-你也å¯ä»¥è©¦è‘—自己解碼這個數字。如果內核被汙染的原因åªæœ‰ä¸€å€‹ï¼Œé‚£éº¼é€™å¾ˆç°¡å–®ï¼Œ
+你也å¯ä»¥è©¦ç€è‡ªå·±è§£ç¢¼é€™å€‹æ•¸å­—。如果內核被污染的原因åªæœ‰ä¸€å€‹ï¼Œé‚£éº¼é€™å¾ˆç°¡å–®ï¼Œ
在本例中您å¯ä»¥é€šéŽä¸‹è¡¨æ‰¾åˆ°æ•¸å­—。如果你需è¦è§£ç¢¼æœ‰å¤šå€‹åŽŸå› çš„數字,因爲它是一
-個ä½åŸŸï¼ˆbitfield),其中æ¯å€‹ä½è¡¨ç¤ºä¸€å€‹ç‰¹å®šé¡žåž‹çš„汙染的存在或ä¸å­˜åœ¨ï¼Œæœ€å¥½è®“
+個ä½åŸŸï¼ˆbitfield),其中æ¯å€‹ä½è¡¨ç¤ºä¸€å€‹ç‰¹å®šé¡žåž‹çš„污染的存在或ä¸å­˜åœ¨ï¼Œæœ€å¥½è®“
å‰é¢æ到的腳本來處ç†ã€‚但是如果您需è¦å¿«é€Ÿçœ‹ä¸€ä¸‹ï¼Œå¯ä»¥ä½¿ç”¨é€™å€‹shell命令來檢查
設置了哪些ä½::
$ for i in $(seq 18); do echo $(($i-1)) $(($(cat /proc/sys/kernel/tainted)>>($i-1)&1));done
-汙染狀態代碼表
+污染狀態代碼表
~~~~~~~~~~~~~~~
=== ===== ====== ========================================================
- ä½ æ—¥èªŒ 數字 內核被汙染的原因
+ ä½ æ—¥èªŒ 數字 內核被污染的原因
=== ===== ====== ========================================================
0 G/P 1 已加載專用模塊
1 _/F 2 模塊被強制加載
@@ -89,23 +89,23 @@ BUGã€Oops或Panics消æ¯ä¸­çš„汙染標誌
3 _/R 8 模塊被強制å¸è¼‰
4 _/M 16 處ç†å™¨å ±å‘Šäº†æ©Ÿå™¨æª¢æ¸¬ç•°å¸¸ï¼ˆMCE)
5 _/B 32 引用了錯誤的é æˆ–æŸäº›æ„外的é æ¨™èªŒ
- 6 _/U 64 用戶空間應用程å¼è«‹æ±‚的汙染
+ 6 _/U 64 用戶空間應用程åºè«‹æ±‚的污染
7 _/D 128 內核最近死機了,å³æ›¾å‡ºç¾OOPS或BUG
8 _/A 256 ACPI表被用戶覆蓋
9 _/W 512 內核發出警告
10 _/C 1024 已加載staging驅動程åº
- 11 _/I 2048 已應用平å°å›ºä»¶ç¼ºé™·çš„解決方案
- 12 _/O 4096 已加載外部構建(「樹外ã€ï¼‰æ¨¡å¡Š
+ 11 _/I 2048 已應用平臺固件缺陷的解決方案
+ 12 _/O 4096 已加載外部構建(“樹外â€ï¼‰æ¨¡å¡Š
13 _/E 8192 已加載未簽å的模塊
14 _/L 16384 發生軟鎖定
15 _/K 32768 內核已實時打補ä¸
- 16 _/X 65536 備用汙染,爲發行版定義並使用
+ 16 _/X 65536 備用污染,爲發行版定義並使用
17 _/T 131072 內核是用çµæ§‹éš¨æ©ŸåŒ–æ’件構建的
=== ===== ====== ========================================================
-註:字符 ``_`` 表示空白,以便於閱讀表。
+注:字符 ``_`` 表示空白,以便於閱讀表。
-汙染的更詳細解釋
+污染的更詳細解釋
~~~~~~~~~~~~~~~~~
0) ``G`` 加載的所有模塊都有GPL或兼容許å¯è­‰ï¼Œ ``P`` 加載了任何專有模塊。
@@ -115,14 +115,14 @@ BUGã€Oops或Panics消æ¯ä¸­çš„汙染標誌
1) ``F`` 任何模塊被 ``insmod -f`` 強制加載, ``' '`` 所有模塊正常加載。
- 2) ``S`` 內核é‹è¡Œåœ¨ä¸åˆè¦ç¯„的處ç†å™¨æˆ–系統上:硬體已é‹è¡Œåœ¨ä¸å—支æŒçš„é…置中,
- 因此無法ä¿è­‰æ­£ç¢ºåŸ·è¡Œã€‚內核將被汙染,例如:
+ 2) ``S`` 內核é‹è¡Œåœ¨ä¸åˆè¦ç¯„的處ç†å™¨æˆ–系統上:硬件已é‹è¡Œåœ¨ä¸å—支æŒçš„é…置中,
+ 因此無法ä¿è­‰æ­£ç¢ºåŸ·è¡Œã€‚內核將被污染,例如:
- 在x86上:PAE是通éŽintel CPU(如Pentium M)上的forcepae強制執行的,這些
CPUä¸å ±å‘ŠPAE,但å¯èƒ½æœ‰åŠŸèƒ½å¯¦ç¾ï¼ŒSMP內核在éžå®˜æ–¹æ”¯æŒçš„SMP Athlon CPU上
é‹è¡Œï¼ŒMSR被暴露到用戶空間中。
- 在arm上:在æŸäº›CPU(如Keystone 2)上é‹è¡Œçš„內核,沒有啓用æŸäº›å…§æ ¸ç‰¹æ€§ã€‚
- - 在arm64上:CPU之間存在ä¸åŒ¹é…的硬體特性,引導加載程åºä»¥ä¸åŒçš„模å¼å¼•å°ŽCPU。
+ - 在arm64上:CPU之間存在ä¸åŒ¹é…的硬件特性,引導加載程åºä»¥ä¸åŒçš„模å¼å¼•å°ŽCPU。
- æŸäº›é©…動程åºæ­£åœ¨è¢«ç”¨åœ¨ä¸å—支æŒçš„體系çµæ§‹ä¸Šï¼ˆä¾‹å¦‚x86_64以外的其他系統
上的scsi/snic,éžx86/x86_64/itanium上的scsi/ips,已經æ壞了arm64上
irqchip/irq-gic的固件設置…)。
@@ -131,22 +131,22 @@ BUGã€Oops或Panics消æ¯ä¸­çš„汙染標誌
4) ``M`` 任何處ç†å™¨å ±å‘Šäº†æ©Ÿå™¨æª¢æ¸¬ç•°å¸¸ï¼Œ ``' '`` 未發生機器檢測異常。
- 5) ``B`` é é¢é‡‹æ”¾å‡½æ•¸ç™¼ç¾éŒ¯èª¤çš„é é¢å¼•ç”¨æˆ–æŸäº›æ„外的é é¢æ¨™èªŒã€‚這表示硬體å•é¡Œ
- 或內核錯誤;日誌中應該有其他信æ¯æŒ‡ç¤ºç™¼ç”Ÿæ­¤æ±™æŸ“的原因。
+ 5) ``B`` é é¢é‡‹æ”¾å‡½æ•¸ç™¼ç¾éŒ¯èª¤çš„é é¢å¼•ç”¨æˆ–æŸäº›æ„外的é é¢æ¨™èªŒã€‚這表示硬件å•é¡Œ
+ 或內核錯誤;日誌中應該有其他信æ¯æŒ‡ç¤ºç™¼ç”Ÿæ­¤æ±¡æŸ“的原因。
- 6) ``U`` 用戶或用戶應用程å¼ç‰¹æ„請求設置å—汙染標誌,å¦å‰‡æ‡‰çˆ² ``' '`` 。
+ 6) ``U`` 用戶或用戶應用程åºç‰¹æ„請求設置å—污染標誌,å¦å‰‡æ‡‰çˆ² ``' '`` 。
7) ``D`` 內核最近死機了,å³å‡ºç¾äº†OOPS或BUG。
8) ``A`` ACPI表被é‡å¯«ã€‚
- 9) ``W`` 內核之å‰å·²ç™¼å‡ºéŽè­¦å‘Šï¼ˆå„˜ç®¡æœ‰äº›è­¦å‘Šå¯èƒ½æœƒè¨­ç½®æ›´å…·é«”的汙染標誌)。
+ 9) ``W`` 內核之å‰å·²ç™¼å‡ºéŽè­¦å‘Šï¼ˆå„˜ç®¡æœ‰äº›è­¦å‘Šå¯èƒ½æœƒè¨­ç½®æ›´å…·é«”的污染標誌)。
10) ``C`` 已加載staging驅動程åºã€‚
- 11) ``I`` 內核正在處ç†å¹³å°å›ºä»¶ï¼ˆBIOS或類似軟體)中的嚴é‡éŒ¯èª¤ã€‚
+ 11) ``I`` 內核正在處ç†å¹³è‡ºå›ºä»¶ï¼ˆBIOS或類似軟件)中的嚴é‡éŒ¯èª¤ã€‚
- 12) ``O`` 已加載外部構建(「樹外ã€ï¼‰æ¨¡å¡Šã€‚
+ 12) ``O`` 已加載外部構建(“樹外â€ï¼‰æ¨¡å¡Šã€‚
13) ``E`` 在支æŒæ¨¡å¡Šç°½å的內核中加載了未簽å的模塊。
@@ -154,8 +154,8 @@ BUGã€Oops或Panics消æ¯ä¸­çš„汙染標誌
15) ``K`` 內核已經實時打了補ä¸ã€‚
- 16) ``X`` 備用汙染,由Linux發行版定義和使用。
+ 16) ``X`` 備用污染,由Linux發行版定義和使用。
17) ``T`` 內核構建時使用了randstructæ’件,它å¯ä»¥æœ‰æ„生æˆéžå¸¸ä¸å°‹å¸¸çš„內核çµæ§‹
- 布局(甚至是性能病態的布局),這在調試時éžå¸¸æœ‰ç”¨ã€‚於構建時設置。
+ 佈局(甚至是性能病態的佈局),這在調試時éžå¸¸æœ‰ç”¨ã€‚於構建時設置。
diff --git a/Documentation/translations/zh_TW/admin-guide/unicode.rst b/Documentation/translations/zh_TW/admin-guide/unicode.rst
index 7908b369b85b..a2b48b5d0a64 100644
--- a/Documentation/translations/zh_TW/admin-guide/unicode.rst
+++ b/Documentation/translations/zh_TW/admin-guide/unicode.rst
@@ -37,15 +37,15 @@ IBMPC_MAP IBM code page 437 ESC ( U
USER_MAP User defined ESC ( K
=============== =============================== ================
-特別是 ESC ( U ä¸å†æ˜¯ã€Œç›´é€šå­—é«”ã€ï¼Œå› çˆ²å­—é«”å¯èƒ½èˆ‡IBM字符集完全ä¸åŒã€‚
+特別是 ESC ( U ä¸å†æ˜¯â€œç›´é€šå­—é«”â€ï¼Œå› çˆ²å­—é«”å¯èƒ½èˆ‡IBM字符集完全ä¸åŒã€‚
例如,å³ä½¿åŠ è¼‰äº†ä¸€å€‹Latin-1字體,也å…許使用塊圖形(block graphics)。
請注æ„,儘管這些代碼與ISO 2022類似,但這些代碼åŠå…¶ç”¨é€”都與ISO 2022ä¸åŒ¹é…ï¼›
Linux有兩個八ä½ä»£ç¢¼ï¼ˆG0å’ŒG1),而ISO 2022有四個七ä½ä»£ç¢¼ï¼ˆG0-G3)。
-根據Unicode標準/ISO 10646,U+F000到U+F8FF被ä¿ç•™ç”¨æ–¼ä½œæ¥­ç³»çµ±ç¯„åœå…§çš„分é…
-(Unicode標準將其稱爲「團體å€åŸŸï¼ˆCorporate Zone)ã€ï¼Œå› çˆ²é€™å°æ–¼Linux是ä¸æº–確
-的,所以我們稱之爲「Linuxå€åŸŸã€ï¼‰ã€‚é¸æ“‡U+F000作爲起點,因爲它å…許直接映射
+根據Unicode標準/ISO 10646,U+F000到U+F8FF被ä¿ç•™ç”¨æ–¼æ“作系統範åœå…§çš„分é…
+(Unicode標準將其稱爲“團體å€åŸŸï¼ˆCorporate Zone)â€ï¼Œå› çˆ²é€™å°æ–¼Linux是ä¸æº–確
+的,所以我們稱之爲“Linuxå€åŸŸâ€ï¼‰ã€‚é¸æ“‡U+F000作爲起點,因爲它å…許直接映射
å€åŸŸä»¥2的大å€æ•¸é–‹å§‹ï¼ˆä»¥é˜²éœ€è¦1024或2048個字符的字體)。這就留下U+E000到
U+EFFF作爲最終用戶å€ã€‚
@@ -87,7 +87,7 @@ U+F813 KEYBOARD SYMBOL SOLID APPLE
克林貢(Klingon)語支æŒ
------------------------
-1996年,Linux是世界上第一個添加å°äººå·¥èªžè¨€å…‹æž—貢支æŒçš„作業系統,克林貢是由
+1996年,Linux是世界上第一個添加å°äººå·¥èªžè¨€å…‹æž—貢支æŒçš„æ“作系統,克林貢是由
Marc Okrand爲《星際迷航》電視連續劇創造的。這種編碼後來被徵募Unicode註冊表
(ConScript Unicode Registry,CSUR)採用,並建議(但最終被拒絕)ç´å…¥Unicode
å¹³é¢ä¸€ã€‚ä¸éŽï¼Œå®ƒä»ç„¶æ˜¯Linuxå€åŸŸä¸­çš„Linux/CSURç§æœ‰åˆ†é…。
diff --git a/Documentation/translations/zh_TW/arch/arm/Booting b/Documentation/translations/zh_TW/arch/arm/Booting
new file mode 100644
index 000000000000..a5375f262de2
--- /dev/null
+++ b/Documentation/translations/zh_TW/arch/arm/Booting
@@ -0,0 +1,176 @@
+Chinese translated version of Documentation/arch/arm/booting.rst
+
+If you have any comment or update to the content, please contact the
+original document maintainer directly. However, if you have a problem
+communicating in English you can also ask the Chinese maintainer for
+help. Contact the Chinese maintainer if this translation is outdated
+or if there is a problem with the translation.
+
+Maintainer: Russell King <linux@arm.linux.org.uk>
+Chinese maintainer: Fu Wei <tekkamanninja@gmail.com>
+---------------------------------------------------------------------
+Documentation/arch/arm/booting.rst 的中文翻譯
+
+如果想評論或更新本文的內容,請直接è¯ç¹«åŽŸæ–‡æª”的維護者。如果你使用英文
+交æµæœ‰å›°é›£çš„話,也å¯ä»¥å‘中文版維護者求助。如果本翻譯更新ä¸åŠæ™‚或者翻
+譯存在å•é¡Œï¼Œè«‹è¯ç¹«ä¸­æ–‡ç‰ˆç¶­è­·è€…。
+
+英文版維護者: Russell King <linux@arm.linux.org.uk>
+中文版維護者: 傅煒 Fu Wei <tekkamanninja@gmail.com>
+中文版翻譯者: 傅煒 Fu Wei <tekkamanninja@gmail.com>
+中文版校譯者: 傅煒 Fu Wei <tekkamanninja@gmail.com>
+
+以下爲正文
+---------------------------------------------------------------------
+
+ å•“å‹• ARM Linux
+ ==============
+
+作者:Russell King
+日期:2002年5月18日
+
+以下文檔é©ç”¨æ–¼ 2.4.18-rmk6 åŠä»¥ä¸Šç‰ˆæœ¬ã€‚
+
+爲了啓動 ARM Linux,你需è¦ä¸€å€‹å¼•å°Žè£è¼‰ç¨‹åºï¼ˆboot loader),
+它是一個在主內核啓動å‰é‹è¡Œçš„一個å°ç¨‹åºã€‚引導è£è¼‰ç¨‹åºéœ€è¦åˆå§‹åŒ–å„種
+設備,並最終調用 Linux 內核,將信æ¯å‚³éžçµ¦å…§æ ¸ã€‚
+
+從本質上講,引導è£è¼‰ç¨‹åºæ‡‰æ供(至少)以下功能:
+
+1ã€è¨­ç½®å’Œåˆå§‹åŒ– RAM。
+2ã€åˆå§‹åŒ–一個串å£ã€‚
+3ã€æª¢æ¸¬æ©Ÿå™¨çš„類型(machine type)。
+4ã€è¨­ç½®å…§æ ¸æ¨™ç±¤åˆ—表(tagged list)。
+5ã€èª¿ç”¨å…§æ ¸æ˜ åƒã€‚
+
+
+1ã€è¨­ç½®å’Œåˆå§‹åŒ– RAM
+-------------------
+
+ç¾æœ‰çš„引導加載程åº: 強制
+新開發的引導加載程åº: 強制
+
+引導è£è¼‰ç¨‹åºæ‡‰è©²æ‰¾åˆ°ä¸¦åˆå§‹åŒ–系統中所有內核用於ä¿æŒç³»çµ±è®Šé‡æ•¸æ“šçš„ RAM。
+這個æ“作的執行是設備ä¾è³´çš„。(它å¯èƒ½ä½¿ç”¨å…§éƒ¨ç®—法來自動定ä½å’Œè¨ˆç®—所有
+RAM,或å¯èƒ½ä½¿ç”¨å°é€™å€‹è¨­å‚™å·²çŸ¥çš„ RAM ä¿¡æ¯ï¼Œé‚„å¯èƒ½ä½¿ç”¨ä»»ä½•å¼•å°Žè£è¼‰ç¨‹åº
+設計者想到的匹é…方法。)
+
+
+2ã€åˆå§‹åŒ–一個串å£
+-----------------------------
+
+ç¾æœ‰çš„引導加載程åº: å¯é¸ã€å»ºè­°
+新開發的引導加載程åº: å¯é¸ã€å»ºè­°
+
+引導加載程åºæ‡‰è©²åˆå§‹åŒ–並使能一個目標æ¿ä¸Šçš„串å£ã€‚這å…許內核串å£é©…å‹•
+自動檢測哪個串å£ç”¨æ–¼å…§æ ¸æŽ§åˆ¶æª¯ã€‚(一般用於調試或與目標æ¿é€šä¿¡ã€‚)
+
+作爲替代方案,引導加載程åºä¹Ÿå¯ä»¥é€šéŽæ¨™ç±¤åˆ—表傳éžç›¸é—œçš„'console='
+é¸é …給內核以指定æŸå€‹ä¸²å£ï¼Œè€Œä¸²å£æ•¸æ“šæ ¼å¼çš„é¸é …在以下文檔中æ述:
+
+ Documentation/admin-guide/kernel-parameters.rst。
+
+
+3ã€æª¢æ¸¬æ©Ÿå™¨é¡žåž‹
+--------------------------
+
+ç¾æœ‰çš„引導加載程åº: å¯é¸
+新開發的引導加載程åº: 強制
+
+引導加載程åºæ‡‰è©²é€šéŽæŸäº›æ–¹å¼æª¢æ¸¬è‡ªèº«æ‰€è™•çš„機器類型。這是一個硬件
+代碼或通éŽæŸ¥çœ‹æ‰€é€£æŽ¥çš„硬件用æŸäº›ç®—法得到,這些超出了本文檔的範åœã€‚
+引導加載程åºæœ€çµ‚必須能æ供一個 MACH_TYPE_xxx 值給內核。
+(詳見 linux/arch/arm/tools/mach-types )。
+
+4ã€è¨­ç½®å•“動數據
+------------------
+
+ç¾æœ‰çš„引導加載程åº: å¯é¸ã€å¼·çƒˆå»ºè­°
+新開發的引導加載程åº: 強制
+
+引導加載程åºå¿…é ˆæ供標籤列表或者 dtb 映åƒä»¥å‚³éžé…置數據給內核。啓動
+數據的物ç†åœ°å€é€šéŽå¯„存器 r2 傳éžçµ¦å…§æ ¸ã€‚
+
+4aã€è¨­ç½®å…§æ ¸æ¨™ç±¤åˆ—表
+--------------------------------
+
+bootloader 必須創建和åˆå§‹åŒ–內核標籤列表。一個有效的標籤列表以
+ATAG_CORE 標籤開始,並以 ATAG_NONE 標籤çµæŸã€‚ATAG_CORE 標籤å¯ä»¥æ˜¯
+空的,也å¯ä»¥æ˜¯éžç©ºã€‚一個空 ATAG_CORE 標籤其 size 域設置爲
+‘2’(0x00000002)。ATAG_NONE 標籤的 size 域必須設置爲零。
+
+在列表中å¯ä»¥ä¿å­˜ä»»æ„數é‡çš„標籤。å°æ–¼ä¸€å€‹é‡è¤‡çš„標籤是追加到之å‰æ¨™ç±¤
+所攜帶的信æ¯ä¹‹å¾Œï¼Œé‚„是會覆蓋原來的信æ¯ï¼Œæ˜¯æœªå®šç¾©çš„。æŸäº›æ¨™ç±¤çš„行爲
+是å‰è€…,其他是後者。
+
+bootloader 必須傳éžä¸€å€‹ç³»çµ±å…§å­˜çš„ä½ç½®å’Œæœ€å°å€¼ï¼Œä»¥åŠæ ¹æ–‡ä»¶ç³»çµ±ä½ç½®ã€‚
+因此,最å°çš„標籤列表如下所示:
+
+ +-----------+
+åŸºåœ°å€ -> | ATAG_CORE | |
+ +-----------+ |
+ | ATAG_MEM | | 地å€å¢žé•·æ–¹å‘
+ +-----------+ |
+ | ATAG_NONE | |
+ +-----------+ v
+
+標籤列表應該ä¿å­˜åœ¨ç³»çµ±çš„ RAM 中。
+
+標籤列表必須置於內核自解壓和 initrd'bootp' 程åºéƒ½ä¸æœƒè¦†è“‹çš„內存å€ã€‚
+建議放在 RAM 的頭 16KiB 中。
+
+4bã€è¨­ç½®è¨­å‚™æ¨¹
+-------------------------
+
+bootloader 必須以 64bit 地å€å°é½Šçš„å½¢å¼åŠ è¼‰ä¸€å€‹è¨­å‚™æ¨¹æ˜ åƒ(dtb)到系統
+RAM 中,並用啓動數據åˆå§‹åŒ–它。dtb æ ¼å¼åœ¨æ–‡æª”
+https://www.devicetree.org/specifications/ 中。內核將會在
+dtb 物ç†åœ°å€è™•æŸ¥æ‰¾ dtb 魔數值(0xd00dfeed),以確定 dtb 是å¦å·²ç¶“代替
+標籤列表被傳éžé€²ä¾†ã€‚
+
+bootloader 必須傳éžä¸€å€‹ç³»çµ±å…§å­˜çš„ä½ç½®å’Œæœ€å°å€¼ï¼Œä»¥åŠæ ¹æ–‡ä»¶ç³»çµ±ä½ç½®ã€‚
+dtb 必須置於內核自解壓ä¸æœƒè¦†è“‹çš„內存å€ã€‚建議將其放置於 RAM çš„é ­ 16KiB
+中。但是ä¸å¯å°‡å…¶æ”¾ç½®æ–¼â€œ0â€ç‰©ç†åœ°å€è™•ï¼Œå› çˆ²å…§æ ¸èªçˆ²ï¼šr2 中爲 0,æ„味ç€
+沒有標籤列表和 dtb 傳éžéŽä¾†ã€‚
+
+5ã€èª¿ç”¨å…§æ ¸æ˜ åƒ
+---------------------------
+
+ç¾æœ‰çš„引導加載程åº: 強制
+新開發的引導加載程åº: 強制
+
+èª¿ç”¨å…§æ ¸æ˜ åƒ zImage 有兩個é¸æ“‡ã€‚如果 zImge ä¿å­˜åœ¨ flash 中,且是爲了
+在 flash 中直接é‹è¡Œè€Œè¢«æ­£ç¢ºéˆæŽ¥çš„。這樣引導加載程åºå°±å¯ä»¥åœ¨ flash 中
+直接調用 zImage。
+
+zImage 也å¯ä»¥è¢«æ”¾åœ¨ç³»çµ± RAM(任æ„ä½ç½®ï¼‰ä¸­è¢«èª¿ç”¨ã€‚注æ„:內核使用映åƒ
+基地å€çš„å‰ 16KB RAM 空間來ä¿å­˜é è¡¨ã€‚建議將映åƒç½®æ–¼ RAM çš„ 32KB 處。
+
+å°æ–¼ä»¥ä¸Šä»»æ„一種情æ³ï¼Œéƒ½å¿…須符åˆä»¥ä¸‹å•“動狀態:
+
+- åœæ­¢æ‰€æœ‰ DMA 設備,這樣內存數據就ä¸æœƒå› çˆ²è™›å‡ç¶²çµ¡åŒ…或ç£ç›¤æ•¸æ“šè€Œè¢«ç ´å£žã€‚
+ 這å¯èƒ½å¯ä»¥ç¯€çœä½ è¨±å¤šçš„調試時間。
+
+- CPU 寄存器é…ç½®
+ r0 = 0,
+ r1 = ï¼ˆåœ¨ä¸Šé¢ 3 中ç²å–的)機器類型碼。
+ r2 = 標籤列表在系統 RAM 中的物ç†åœ°å€ï¼Œæˆ–
+ 設備樹塊(dtb)在系統 RAM 中的物ç†åœ°å€
+
+- CPU 模å¼
+ 所有形å¼çš„中斷必須被ç¦æ­¢ (IRQs å’Œ FIQs)
+ CPU 必須處於 SVC 模å¼ã€‚(å°æ–¼ Angel 調試有特例存在)
+
+- 緩存,MMUs
+ MMU 必須關閉。
+ 指令緩存開啓或關閉都å¯ä»¥ã€‚
+ 數據緩存必須關閉。
+
+- 引導加載程åºæ‡‰è©²é€šéŽç›´æŽ¥è·³è½‰åˆ°å…§æ ¸æ˜ åƒçš„第一æ¢æŒ‡ä»¤ä¾†èª¿ç”¨å…§æ ¸æ˜ åƒã€‚
+
+ å°æ–¼æ”¯æŒ ARM 指令集的 CPU,跳入內核入å£æ™‚必須處在 ARM 狀態,å³ä½¿
+ å°æ–¼ Thumb-2 內核也是如此。
+
+ å°æ–¼åƒ…æ”¯æŒ Thumb 指令集的 CPU,比如 Cortex-M 系列的 CPU,跳入
+ 內核入å£æ™‚必須處於 Thumb 狀態。
+
diff --git a/Documentation/translations/zh_TW/arch/arm/kernel_user_helpers.txt b/Documentation/translations/zh_TW/arch/arm/kernel_user_helpers.txt
new file mode 100644
index 000000000000..4c0bff97af31
--- /dev/null
+++ b/Documentation/translations/zh_TW/arch/arm/kernel_user_helpers.txt
@@ -0,0 +1,285 @@
+Chinese translated version of Documentation/arch/arm/kernel_user_helpers.rst
+
+If you have any comment or update to the content, please contact the
+original document maintainer directly. However, if you have a problem
+communicating in English you can also ask the Chinese maintainer for
+help. Contact the Chinese maintainer if this translation is outdated
+or if there is a problem with the translation.
+
+Maintainer: Nicolas Pitre <nicolas.pitre@linaro.org>
+ Dave Martin <dave.martin@linaro.org>
+Chinese maintainer: Fu Wei <tekkamanninja@gmail.com>
+---------------------------------------------------------------------
+Documentation/arch/arm/kernel_user_helpers.rst 的中文翻譯
+
+如果想評論或更新本文的內容,請直接è¯ç¹«åŽŸæ–‡æª”的維護者。如果你使用英文
+交æµæœ‰å›°é›£çš„話,也å¯ä»¥å‘中文版維護者求助。如果本翻譯更新ä¸åŠæ™‚或者翻
+譯存在å•é¡Œï¼Œè«‹è¯ç¹«ä¸­æ–‡ç‰ˆç¶­è­·è€…。
+英文版維護者: Nicolas Pitre <nicolas.pitre@linaro.org>
+ Dave Martin <dave.martin@linaro.org>
+中文版維護者: 傅煒 Fu Wei <tekkamanninja@gmail.com>
+中文版翻譯者: 傅煒 Fu Wei <tekkamanninja@gmail.com>
+中文版校譯者: 宋冬生 Dongsheng Song <dongshneg.song@gmail.com>
+ å‚…ç…’ Fu Wei <tekkamanninja@gmail.com>
+
+
+以下爲正文
+---------------------------------------------------------------------
+內核æ供的用戶空間輔助代碼
+=========================
+
+在內核內存空間的固定地å€è™•ï¼Œæœ‰ä¸€å€‹ç”±å…§æ ¸æ供並å¯å¾žç”¨æˆ¶ç©ºé–“訪å•çš„代碼
+段。它用於å‘用戶空間æ供因在許多 ARM CPU 中未實ç¾çš„特性和/或指令而需
+內核æ供幫助的æŸäº›æ“作。這些代碼直接在用戶模å¼ä¸‹åŸ·è¡Œçš„想法是爲了ç²å¾—
+最佳效率,但那些與內核計數器è¯ç¹«éŽæ–¼ç·Šå¯†çš„部分,則被留給了用戶庫實ç¾ã€‚
+事實上,此代碼甚至å¯èƒ½å› ä¸åŒçš„ CPU 而異,這å–決於其å¯ç”¨çš„指令集或它
+是å¦çˆ² SMP 系統。æ›å¥è©±èªªï¼Œå…§æ ¸ä¿ç•™åœ¨ä¸ä½œå‡ºè­¦å‘Šçš„情æ³ä¸‹æ ¹æ“šéœ€è¦æ›´æ”¹
+這些代碼的權利。åªæœ‰æœ¬æ–‡æª”æè¿°çš„å…¥å£åŠå…¶çµæžœæ˜¯ä¿è­‰ç©©å®šçš„。
+
+這與完全æˆç†Ÿçš„ VDSO 實ç¾ä¸åŒï¼ˆä½†å…©è€…並ä¸è¡çªï¼‰ï¼Œå„˜ç®¡å¦‚此,VDSO å¯é˜»æ­¢
+æŸäº›é€šéŽå¸¸é‡é«˜æ•ˆè·³è½‰åˆ°é‚£äº›ä»£ç¢¼æ®µçš„彙編技巧。且由於那些代碼段在返回用戶
+代碼å‰åƒ…使用少é‡çš„代碼週期,則一個 VDSO 間接é ç¨‹èª¿ç”¨å°‡æœƒåœ¨é€™äº›ç°¡å–®çš„
+æ“作上增加一個å¯æ¸¬é‡çš„開銷。
+
+在å°é‚£äº›æ“有原生支æŒçš„新型處ç†å™¨é€²è¡Œä»£ç¢¼å„ªåŒ–時,僅在已爲其他æ“作使用
+了類似的新增指令,而導致二進制çµæžœå·²èˆ‡æ—©æœŸ ARM 處ç†å™¨ä¸å…¼å®¹çš„情æ³ä¸‹ï¼Œ
+用戶空間æ‰æ‡‰ç¹žéŽé€™äº›è¼”助代碼,並在內è¯å‡½æ•¸ä¸­å¯¦ç¾é€™äº›æ“作(無論是通éŽ
+編譯器在代碼中直接放置,還是作爲庫函數調用實ç¾çš„一部分)。也就是說,
+如果你編譯的代碼ä¸æœƒçˆ²äº†å…¶ä»–目的使用新指令,則ä¸è¦åƒ…爲了é¿å…使用這些
+內核輔助代碼,導致二進制程åºç„¡æ³•åœ¨æ—©æœŸè™•ç†å™¨ä¸Šé‹è¡Œã€‚
+
+新的輔助代碼å¯èƒ½éš¨ç€æ™‚間的推移而增加,所以新內核中的æŸäº›è¼”助代碼在舊
+內核中å¯èƒ½ä¸å­˜åœ¨ã€‚因此,程åºå¿…須在å°ä»»ä½•è¼”助代碼調用å‡è¨­æ˜¯å®‰å…¨ä¹‹å‰ï¼Œ
+檢測 __kuser_helper_version 的值(見下文)。ç†æƒ³æƒ…æ³ä¸‹ï¼Œé€™ç¨®æª¢æ¸¬æ‡‰è©²
+åªåœ¨é€²ç¨‹å•“動時執行一次;如果內核版本ä¸æ”¯æŒæ‰€éœ€è¼”助代碼,則該進程å¯å„˜æ—©
+中止執行。
+
+kuser_helper_version
+--------------------
+
+ä½ç½®: 0xffff0ffc
+
+åƒè€ƒè²æ˜Ž:
+
+ extern int32_t __kuser_helper_version;
+
+定義:
+
+ 這個å€åŸŸåŒ…å«äº†ç•¶å‰é‹è¡Œå…§æ ¸å¯¦ç¾çš„輔助代碼版本號。用戶空間å¯ä»¥é€šéŽè®€
+ å–此版本號以確定特定的輔助代碼是å¦å­˜åœ¨ã€‚
+
+使用範例:
+
+#define __kuser_helper_version (*(int32_t *)0xffff0ffc)
+
+void check_kuser_version(void)
+{
+ if (__kuser_helper_version < 2) {
+ fprintf(stderr, "can't do atomic operations, kernel too old\n");
+ abort();
+ }
+}
+
+注æ„:
+
+ 用戶空間å¯ä»¥å‡è¨­é€™å€‹åŸŸçš„值ä¸æœƒåœ¨ä»»ä½•å–®å€‹é€²ç¨‹çš„生存期內改變。也就
+ 是說,這個域å¯ä»¥åƒ…在庫的åˆå§‹åŒ–階段或進程啓動階段讀å–一次。
+
+kuser_get_tls
+-------------
+
+ä½ç½®: 0xffff0fe0
+
+åƒè€ƒåŽŸåž‹:
+
+ void * __kuser_get_tls(void);
+
+輸入:
+
+ lr = 返回地å€
+
+輸出:
+
+ r0 = TLS 值
+
+被篡改的寄存器:
+
+ ç„¡
+
+定義:
+
+ ç²å–之å‰é€šéŽ __ARM_NR_set_tls 系統調用設置的 TLS 值。
+
+使用範例:
+
+typedef void * (__kuser_get_tls_t)(void);
+#define __kuser_get_tls (*(__kuser_get_tls_t *)0xffff0fe0)
+
+void foo()
+{
+ void *tls = __kuser_get_tls();
+ printf("TLS = %p\n", tls);
+}
+
+注æ„:
+
+ - 僅在 __kuser_helper_version >= 1 時,此輔助代碼存在
+ (從內核版本 2.6.12 開始)。
+
+kuser_cmpxchg
+-------------
+
+ä½ç½®: 0xffff0fc0
+
+åƒè€ƒåŽŸåž‹:
+
+ int __kuser_cmpxchg(int32_t oldval, int32_t newval, volatile int32_t *ptr);
+
+輸入:
+
+ r0 = oldval
+ r1 = newval
+ r2 = ptr
+ lr = 返回地å€
+
+輸出:
+
+ r0 = æˆåŠŸä»£ç¢¼ (零或éžé›¶)
+ C flag = 如果 r0 == 0 則置 1,如果 r0 != 0 則清零。
+
+被篡改的寄存器:
+
+ r3, ip, flags
+
+定義:
+
+ 僅在 *ptr 爲 oldval 時原å­ä¿å­˜ newval æ–¼ *ptr 中。
+ 如果 *ptr 被改變,則返回值爲零,å¦å‰‡çˆ²éžé›¶å€¼ã€‚
+ 如果 *ptr 被改變,則 C flag 也會被置 1,以實ç¾èª¿ç”¨ä»£ç¢¼ä¸­çš„彙編
+ 優化。
+
+使用範例:
+
+typedef int (__kuser_cmpxchg_t)(int oldval, int newval, volatile int *ptr);
+#define __kuser_cmpxchg (*(__kuser_cmpxchg_t *)0xffff0fc0)
+
+int atomic_add(volatile int *ptr, int val)
+{
+ int old, new;
+
+ do {
+ old = *ptr;
+ new = old + val;
+ } while(__kuser_cmpxchg(old, new, ptr));
+
+ return new;
+}
+
+注æ„:
+
+ - 這個例程已根據需è¦åŒ…å«äº†å…§å­˜å±éšœã€‚
+
+ - 僅在 __kuser_helper_version >= 2 時,此輔助代碼存在
+ (從內核版本 2.6.12 開始)。
+
+kuser_memory_barrier
+--------------------
+
+ä½ç½®: 0xffff0fa0
+
+åƒè€ƒåŽŸåž‹:
+
+ void __kuser_memory_barrier(void);
+
+輸入:
+
+ lr = 返回地å€
+
+輸出:
+
+ ç„¡
+
+被篡改的寄存器:
+
+ ç„¡
+
+定義:
+
+ 應用於任何需è¦å…§å­˜å±éšœä»¥é˜²æ­¢æ‰‹å‹•æ•¸æ“šä¿®æ”¹å¸¶ä¾†çš„一致性å•é¡Œï¼Œä»¥åŠ
+ __kuser_cmpxchg 中。
+
+使用範例:
+
+typedef void (__kuser_dmb_t)(void);
+#define __kuser_dmb (*(__kuser_dmb_t *)0xffff0fa0)
+
+注æ„:
+
+ - 僅在 __kuser_helper_version >= 3 時,此輔助代碼存在
+ (從內核版本 2.6.15 開始)。
+
+kuser_cmpxchg64
+---------------
+
+ä½ç½®: 0xffff0f60
+
+åƒè€ƒåŽŸåž‹:
+
+ int __kuser_cmpxchg64(const int64_t *oldval,
+ const int64_t *newval,
+ volatile int64_t *ptr);
+
+輸入:
+
+ r0 = æŒ‡å‘ oldval
+ r1 = æŒ‡å‘ newval
+ r2 = 指å‘目標值
+ lr = 返回地å€
+
+輸出:
+
+ r0 = æˆåŠŸä»£ç¢¼ (零或éžé›¶)
+ C flag = 如果 r0 == 0 則置 1,如果 r0 != 0 則清零。
+
+被篡改的寄存器:
+
+ r3, lr, flags
+
+定義:
+
+ 僅在 *ptr 等於 *oldval 指å‘çš„ 64 ä½å€¼æ™‚,原å­ä¿å­˜ *newval
+ 指å‘çš„ 64 ä½å€¼æ–¼ *ptr 中。如果 *ptr 被改變,則返回值爲零,
+ å¦å‰‡çˆ²éžé›¶å€¼ã€‚
+
+ 如果 *ptr 被改變,則 C flag 也會被置 1,以實ç¾èª¿ç”¨ä»£ç¢¼ä¸­çš„彙編
+ 優化。
+
+使用範例:
+
+typedef int (__kuser_cmpxchg64_t)(const int64_t *oldval,
+ const int64_t *newval,
+ volatile int64_t *ptr);
+#define __kuser_cmpxchg64 (*(__kuser_cmpxchg64_t *)0xffff0f60)
+
+int64_t atomic_add64(volatile int64_t *ptr, int64_t val)
+{
+ int64_t old, new;
+
+ do {
+ old = *ptr;
+ new = old + val;
+ } while(__kuser_cmpxchg64(&old, &new, ptr));
+
+ return new;
+}
+
+注æ„:
+
+ - 這個例程已根據需è¦åŒ…å«äº†å…§å­˜å±éšœã€‚
+
+ - 由於這個éŽç¨‹çš„代碼長度(此輔助代碼跨越 2 個常è¦çš„ kuser “槽â€ï¼‰ï¼Œ
+ å› æ­¤ 0xffff0f80 ä¸è¢«ä½œçˆ²æœ‰æ•ˆçš„å…¥å£é»žã€‚
+
+ - 僅在 __kuser_helper_version >= 5 時,此輔助代碼存在
+ (從內核版本 3.1 開始)。
+
diff --git a/Documentation/translations/zh_TW/arch/arm64/amu.rst b/Documentation/translations/zh_TW/arch/arm64/amu.rst
index 21ac0db63889..1b451eae2bee 100644
--- a/Documentation/translations/zh_TW/arch/arm64/amu.rst
+++ b/Documentation/translations/zh_TW/arch/arm64/amu.rst
@@ -28,11 +28,11 @@ AArch64 Linux 中擴展的活動監控單元
AMUv1 架構實ç¾äº†ä¸€å€‹ç”±4個固定的64ä½äº‹ä»¶è¨ˆæ•¸å™¨çµ„æˆçš„計數器組。
- - CPU å‘¨æœŸè¨ˆæ•¸å™¨ï¼šåŒ CPU 的頻率增長
+ - CPU é€±æœŸè¨ˆæ•¸å™¨ï¼šåŒ CPU 的頻率增長
- 常é‡è¨ˆæ•¸å™¨ï¼šåŒå›ºå®šçš„系統時é˜é »çŽ‡å¢žé•·
- 淘汰指令計數器: åŒæ¯æ¬¡æž¶æ§‹æŒ‡ä»¤åŸ·è¡Œå¢žé•·
- - 內存åœé “周期計數器:計算由在時é˜åŸŸå…§çš„最後一級緩存中未命中而引起
- 的指令調度åœé “周期數
+ - 內存åœé “週期計數器:計算由在時é˜åŸŸå…§çš„最後一級緩存中未命中而引起
+ 的指令調度åœé “週期數
當處於 WFI 或者 WFE 狀態時,計數器ä¸æœƒå¢žé•·ã€‚
diff --git a/Documentation/translations/zh_TW/arch/arm64/booting.txt b/Documentation/translations/zh_TW/arch/arm64/booting.txt
index 3cc8f593e006..be0de91ecebd 100644
--- a/Documentation/translations/zh_TW/arch/arm64/booting.txt
+++ b/Documentation/translations/zh_TW/arch/arm64/booting.txt
@@ -41,8 +41,8 @@ AArch64 異常模型由多個異常級(EL0 - EL3)組æˆï¼Œå°æ–¼ EL0 å’Œ EL1
有å°æ‡‰çš„安全和éžå®‰å…¨æ¨¡å¼ã€‚EL2 是系統管ç†ç´šï¼Œä¸”僅存在於éžå®‰å…¨æ¨¡å¼ä¸‹ã€‚
EL3 是最高特權級,且僅存在於安全模å¼ä¸‹ã€‚
-基於本文檔的目的,我們將簡單地使用『引導è£è¼‰ç¨‹åºã€ï¼ˆã€Žboot loaderã€ï¼‰
-這個術語來定義在將控制權交給 Linux å…§æ ¸å‰ CPU 上執行的所有軟體。
+基於本文檔的目的,我們將簡單地使用‘引導è£è¼‰ç¨‹åºâ€™ï¼ˆâ€˜boot loader’)
+這個術語來定義在將控制權交給 Linux å…§æ ¸å‰ CPU 上執行的所有軟件。
這å¯èƒ½åŒ…å«å®‰å…¨ç›£æŽ§å’Œç³»çµ±ç®¡ç†ä»£ç¢¼ï¼Œæˆ–者它å¯èƒ½åªæ˜¯ä¸€äº›ç”¨æ–¼æº–備最å°å•“å‹•
環境的指令。
@@ -74,7 +74,7 @@ RAM,或å¯èƒ½ä½¿ç”¨å°é€™å€‹è¨­å‚™å·²çŸ¥çš„ RAM ä¿¡æ¯ï¼Œé‚„å¯èƒ½æ˜¯å¼•å°Žè£
數據塊將在使能緩存的情æ³ä¸‹ä»¥ 2MB 粒度被映射,故其ä¸èƒ½è¢«ç½®æ–¼å¿…須以特定
屬性映射的2Må€åŸŸå…§ã€‚
-註: v4.2 之å‰çš„版本åŒæ™‚è¦æ±‚設備樹數據塊被置於從內核映åƒä»¥ä¸‹
+注: v4.2 之å‰çš„版本åŒæ™‚è¦æ±‚設備樹數據塊被置於從內核映åƒä»¥ä¸‹
text_offset 字節處算起第一個 512MB 內。
3ã€è§£å£“內核映åƒ
@@ -106,7 +106,7 @@ AArch64 內核當å‰æ²’有æ供自解壓代碼,因此如果使用了壓縮內
u32 res5; /* ä¿ç•™ (用於 PE COFF å移) */
-映åƒé ­æ³¨é‡‹ï¼š
+映åƒé ­è¨»é‡‹ï¼š
- 自 v3.17 起,除éžå¦æœ‰èªªæ˜Žï¼Œæ‰€æœ‰åŸŸéƒ½æ˜¯å°ç«¯æ¨¡å¼ã€‚
@@ -143,7 +143,7 @@ AArch64 內核當å‰æ²’有æ供自解壓代碼,因此如果使用了壓縮內
字節處,並從該處被調用。2MB å°é½ŠåŸºå€å’Œå…§æ ¸æ˜ åƒèµ·å§‹åœ°å€ä¹‹é–“çš„å€åŸŸå°æ–¼
內核來說沒有特殊æ„義,且å¯èƒ½è¢«ç”¨æ–¼å…¶ä»–目的。
從映åƒèµ·å§‹åœ°å€ç®—起,最少必須準備 image_size 字節的空閒內存供內核使用。
-註: v4.6 之å‰çš„版本無法使用內核映åƒç‰©ç†å移以下的內存,所以當時建議
+注: v4.6 之å‰çš„版本無法使用內核映åƒç‰©ç†å移以下的內存,所以當時建議
將映åƒå„˜é‡æ”¾ç½®åœ¨é è¿‘系統內存起始的地方。
任何æ供給內核的內存(甚至在映åƒèµ·å§‹åœ°å€ä¹‹å‰ï¼‰ï¼Œè‹¥æœªå¾žå…§æ ¸ä¸­æ¨™è¨˜çˆ²ä¿ç•™
@@ -151,7 +151,7 @@ AArch64 內核當å‰æ²’有æ供自解壓代碼,因此如果使用了壓縮內
在跳轉入內核å‰ï¼Œå¿…須符åˆä»¥ä¸‹ç‹€æ…‹ï¼š
-- åœæ­¢æ‰€æœ‰ DMA 設備,這樣內存數據就ä¸æœƒå› çˆ²è™›å‡ç¶²çµ¡åŒ…或ç£ç¢Ÿæ•¸æ“šè€Œ
+- åœæ­¢æ‰€æœ‰ DMA 設備,這樣內存數據就ä¸æœƒå› çˆ²è™›å‡ç¶²çµ¡åŒ…或ç£ç›¤æ•¸æ“šè€Œ
被破壞。這å¯èƒ½å¯ä»¥ç¯€çœä½ è¨±å¤šçš„調試時間。
- 主 CPU 通用寄存器設置
@@ -175,7 +175,7 @@ AArch64 內核當å‰æ²’有æ供自解壓代碼,因此如果使用了壓縮內
而ä¸é€šéŽè™›æ“¬åœ°å€æ“作維護構架緩存的系統緩存(ä¸æŽ¨è–¦ï¼‰ï¼Œå¿…須被é…置且
ç¦ç”¨ã€‚
- *譯者註:å°æ–¼ PoC 以åŠç·©å­˜ç›¸é—œå…§å®¹ï¼Œè«‹åƒè€ƒ ARMv8 構架åƒè€ƒæ‰‹å†Š
+ *譯者注:å°æ–¼ PoC 以åŠç·©å­˜ç›¸é—œå…§å®¹ï¼Œè«‹åƒè€ƒ ARMv8 構架åƒè€ƒæ‰‹å†Š
ARM DDI 0487A
- 架構計時器
@@ -189,7 +189,7 @@ AArch64 內核當å‰æ²’有æ供自解壓代碼,因此如果使用了壓縮內
接收。
- 系統寄存器
- 在進入內核映åƒçš„異常級中,所有構架中å¯å¯«çš„系統寄存器必須通éŽè»Ÿé«”
+ 在進入內核映åƒçš„異常級中,所有構架中å¯å¯«çš„系統寄存器必須通éŽè»Ÿä»¶
在一個更高的異常級別下åˆå§‹åŒ–,以防止在 未知 狀態下é‹è¡Œã€‚
å°æ–¼æ“有 GICv3 中斷控制器並以 v3 模å¼é‹è¡Œçš„系統:
@@ -214,14 +214,14 @@ AArch64 內核當å‰æ²’有æ供自解壓代碼,因此如果使用了壓縮內
引導è£è¼‰ç¨‹åºå¿…須在æ¯å€‹ CPU 處於以下狀態時跳入內核入å£ï¼š
- 主 CPU 必須直接跳入內核映åƒçš„第一æ¢æŒ‡ä»¤ã€‚通éŽæ­¤ CPU 傳éžçš„設備樹
- 數據塊必須在æ¯å€‹ CPU 節點中包å«ä¸€å€‹ 『enable-method〠屬性,所
+ 數據塊必須在æ¯å€‹ CPU 節點中包å«ä¸€å€‹ ‘enable-method’ 屬性,所
支æŒçš„ enable-method 請見下文。
引導è£è¼‰ç¨‹åºå¿…須生æˆé€™äº›è¨­å‚™æ¨¹å±¬æ€§ï¼Œä¸¦åœ¨è·³å…¥å…§æ ¸å…¥å£ä¹‹å‰å°‡å…¶æ’å…¥
數據塊。
-- enable-method 爲 「spin-table〠的 CPU 必須在它們的 CPU
- 節點中包å«ä¸€å€‹ 『cpu-release-addr〠屬性。這個屬性標識了一個
+- enable-method 爲 “spin-table†的 CPU 必須在它們的 CPU
+ 節點中包å«ä¸€å€‹ ‘cpu-release-addr’ 屬性。這個屬性標識了一個
64 ä½è‡ªç„¶å°é½Šä¸”åˆå§‹åŒ–爲零的內存ä½ç½®ã€‚
這些 CPU 必須在內存ä¿ç•™å€ï¼ˆé€šéŽè¨­å‚™æ¨¹ä¸­çš„ /memreserve/ 域傳éž
@@ -231,15 +231,15 @@ AArch64 內核當å‰æ²’有æ供自解壓代碼,因此如果使用了壓縮內
時,CPU 必須跳入此值所指å‘的地å€ã€‚此值爲一個單ç¨çš„ 64 ä½å°ç«¯å€¼ï¼Œ
å› æ­¤ CPU 須在跳轉å‰å°‡æ‰€è®€å–的值轉æ›çˆ²å…¶æœ¬èº«çš„端模å¼ã€‚
-- enable-method 爲 「psci〠的 CPU ä¿æŒåœ¨å…§æ ¸å¤–(比如,在
+- enable-method 爲 “psci†的 CPU ä¿æŒåœ¨å…§æ ¸å¤–(比如,在
memory 節點中æ述爲內核空間的內存å€å¤–,或在通éŽè¨­å‚™æ¨¹ /memreserve/
域中æ述爲內核ä¿ç•™å€çš„空間中)。內核將會發起在 ARM 文檔(編號
- ARM DEN 0022A:用於 ARM 上的電æºç‹€æ…‹å”調接å£ç³»çµ±è»Ÿé«”)中æè¿°çš„
+ ARM DEN 0022A:用於 ARM 上的電æºç‹€æ…‹å”調接å£ç³»çµ±è»Ÿä»¶ï¼‰ä¸­æè¿°çš„
CPU_ON 調用來將 CPU 帶入內核。
*譯者注: ARM DEN 0022A 已更新到 ARM DEN 0022C。
- 設備樹必須包å«ä¸€å€‹ 『psci〠節點,請åƒè€ƒä»¥ä¸‹æ–‡æª”:
+ 設備樹必須包å«ä¸€å€‹ ‘psci’ 節點,請åƒè€ƒä»¥ä¸‹æ–‡æª”:
Documentation/devicetree/bindings/arm/psci.yaml
diff --git a/Documentation/translations/zh_TW/arch/arm64/elf_hwcaps.rst b/Documentation/translations/zh_TW/arch/arm64/elf_hwcaps.rst
index ca7ff749a67b..d2c1c2f23812 100644
--- a/Documentation/translations/zh_TW/arch/arm64/elf_hwcaps.rst
+++ b/Documentation/translations/zh_TW/arch/arm64/elf_hwcaps.rst
@@ -17,11 +17,11 @@ ARM64 ELF hwcaps
1. 簡介
-------
-有些硬體或軟體功能僅在æŸäº› CPU 實ç¾ä¸Šå’Œ/或在具體æŸå€‹å…§æ ¸é…置上å¯ç”¨ï¼Œä½†
+有些硬件或軟件功能僅在æŸäº› CPU 實ç¾ä¸Šå’Œ/或在具體æŸå€‹å…§æ ¸é…置上å¯ç”¨ï¼Œä½†
å°æ–¼è™•æ–¼ EL0 的用戶空間代碼沒有å¯ç”¨çš„架構發ç¾æ©Ÿåˆ¶ã€‚內核通éŽåœ¨è¼”助å‘é‡è¡¨
公開一組稱爲 hwcaps 的標誌而把這些功能暴露給用戶空間。
-用戶空間軟體å¯ä»¥é€šéŽç²å–輔助å‘é‡çš„ AT_HWCAP 或 AT_HWCAP2 æ¢ç›®ä¾†æ¸¬è©¦åŠŸèƒ½ï¼Œ
+用戶空間軟件å¯ä»¥é€šéŽç²å–輔助å‘é‡çš„ AT_HWCAP 或 AT_HWCAP2 æ¢ç›®ä¾†æ¸¬è©¦åŠŸèƒ½ï¼Œ
並測試是å¦è¨­ç½®äº†ç›¸é—œæ¨™èªŒï¼Œä¾‹å¦‚::
bool floating_point_is_present(void)
@@ -33,7 +33,7 @@ ARM64 ELF hwcaps
return false;
}
-如果軟體ä¾è³´æ–¼ hwcap æ述的功能,在嘗試使用該功能å‰å‰‡æ‡‰æª¢æŸ¥ç›¸é—œçš„ hwcap
+如果軟件ä¾è³´æ–¼ hwcap æ述的功能,在嘗試使用該功能å‰å‰‡æ‡‰æª¢æŸ¥ç›¸é—œçš„ hwcap
標誌以驗證該功能是å¦å­˜åœ¨ã€‚
ä¸èƒ½é€šéŽå…¶ä»–æ–¹å¼æŽ¢æŸ¥é€™äº›åŠŸèƒ½ã€‚當一個功能ä¸å¯ç”¨æ™‚,嘗試使用它å¯èƒ½å°Žè‡´ä¸å¯
@@ -44,8 +44,8 @@ ARM64 ELF hwcaps
----------------
大多數 hwcaps 旨在說明通éŽæž¶æ§‹ ID 寄存器(處於 EL0 的用戶空間代碼無法訪å•)
-æ述的功能的存在。這些 hwcap é€šéŽ ID 寄存器欄ä½å®šç¾©ï¼Œä¸¦ä¸”應根據 ARM 體系
-çµæ§‹åƒè€ƒæ‰‹å†Šï¼ˆARM ARM)中定義的欄ä½ä¾†è§£é‡‹èªªæ˜Žã€‚
+æ述的功能的存在。這些 hwcap é€šéŽ ID 寄存器字段定義,並且應根據 ARM 體系
+çµæ§‹åƒè€ƒæ‰‹å†Šï¼ˆARM ARM)中定義的字段來解釋說明。
這些 hwcaps 以下é¢çš„å½¢å¼æè¿°::
diff --git a/Documentation/translations/zh_TW/arch/arm64/legacy_instructions.txt b/Documentation/translations/zh_TW/arch/arm64/legacy_instructions.txt
index c2d02cd5017d..7d1f0593d7ca 100644
--- a/Documentation/translations/zh_TW/arch/arm64/legacy_instructions.txt
+++ b/Documentation/translations/zh_TW/arch/arm64/legacy_instructions.txt
@@ -31,7 +31,7 @@ Documentation/arch/arm64/legacy_instructions.rst 的中文翻譯
以下爲正文
---------------------------------------------------------------------
Linux 內核在 arm64 上的移æ¤æ供了一個基礎框架,以支æŒæ§‹æž¶ä¸­æ­£åœ¨è¢«æ·˜æ±°æˆ–已廢棄指令的模擬執行。
-這個基礎框架的代碼使用未定義指令鉤å­ï¼ˆhooks)來支æŒæ¨¡æ“¬ã€‚如果指令存在,它也å…許在硬體中啓用該指令。
+這個基礎框架的代碼使用未定義指令鉤å­ï¼ˆhooks)來支æŒæ¨¡æ“¬ã€‚如果指令存在,它也å…許在硬件中啓用該指令。
模擬模å¼å¯é€šéŽå¯« sysctl 節點(/proc/sys/abi)來控制。
ä¸åŒçš„執行方å¼åŠ sysctl 節點的相應值,解釋如下:
@@ -42,18 +42,18 @@ Linux 內核在 arm64 上的移æ¤æ供了一個基礎框架,以支æŒæ§‹æž¶ä
* Emulate(模擬)
值: 1
- 使用軟體模擬方å¼ã€‚爲解決軟體é·ç§»å•é¡Œï¼Œé€™ç¨®æ¨¡æ“¬æŒ‡ä»¤æ¨¡å¼çš„使用是被跟蹤的,並會發出速率é™åˆ¶è­¦å‘Šã€‚
+ 使用軟件模擬方å¼ã€‚爲解決軟件é·ç§»å•é¡Œï¼Œé€™ç¨®æ¨¡æ“¬æŒ‡ä»¤æ¨¡å¼çš„使用是被跟蹤的,並會發出速率é™åˆ¶è­¦å‘Šã€‚
它是那些構架中正在被淘汰的指令,如 CP15 barriers(隔離指令),的默èªè™•ç†æ–¹å¼ã€‚
-* Hardware Execution(硬體執行)
+* Hardware Execution(硬件執行)
值: 2
- 雖然標記爲正在被淘汰,但一些實ç¾å¯èƒ½æ供硬體執行這些指令的使能/ç¦ç”¨æ“作。
- 使用硬體執行一般會有更好的性能,但將無法收集é‹è¡Œæ™‚å°æ­£è¢«æ·˜æ±°æŒ‡ä»¤çš„使用統計數據。
+ 雖然標記爲正在被淘汰,但一些實ç¾å¯èƒ½æ供硬件執行這些指令的使能/ç¦ç”¨æ“作。
+ 使用硬件執行一般會有更好的性能,但將無法收集é‹è¡Œæ™‚å°æ­£è¢«æ·˜æ±°æŒ‡ä»¤çš„使用統計數據。
默èªåŸ·è¡Œæ¨¡å¼ä¾è³´æ–¼æŒ‡ä»¤åœ¨æ§‹æž¶ä¸­ç‹€æ…‹ã€‚正在被淘汰的指令應該以模擬(Emulate)作爲默èªæ¨¡å¼ï¼Œ
而已廢棄的指令必須默èªä½¿ç”¨æœªå®šç¾©ï¼ˆUndef)模å¼
-注æ„:指令模擬å¯èƒ½ç„¡æ³•æ‡‰å°æ‰€æœ‰æƒ…æ³ã€‚更多詳情請åƒè€ƒå–®ç¨çš„指令注釋。
+注æ„:指令模擬å¯èƒ½ç„¡æ³•æ‡‰å°æ‰€æœ‰æƒ…æ³ã€‚更多詳情請åƒè€ƒå–®ç¨çš„指令註釋。
å—支æŒçš„éºç•™æŒ‡ä»¤
-------------
@@ -71,7 +71,7 @@ Linux 內核在 arm64 上的移æ¤æ供了一個基礎框架,以支æŒæ§‹æž¶ä
節點: /proc/sys/abi/setend
狀態: 正被淘汰,ä¸æŽ¨è–¦ä½¿ç”¨
默èªåŸ·è¡Œæ–¹å¼: Emulate (1)*
-註:爲了使能這個特性,系統中的所有 CPU 必須在 EL0 支æŒæ··åˆå­—節åºã€‚
+注:爲了使能這個特性,系統中的所有 CPU 必須在 EL0 支æŒæ··åˆå­—節åºã€‚
如果一個新的 CPU (ä¸æ”¯æŒæ··åˆå­—節åºï¼‰ 在使能這個特性後被熱æ’入系統,
在應用中å¯èƒ½æœƒå‡ºç¾ä¸å¯é æœŸçš„çµæžœã€‚
diff --git a/Documentation/translations/zh_TW/arch/arm64/memory.txt b/Documentation/translations/zh_TW/arch/arm64/memory.txt
index 0280200e791f..e41c518e71c6 100644
--- a/Documentation/translations/zh_TW/arch/arm64/memory.txt
+++ b/Documentation/translations/zh_TW/arch/arm64/memory.txt
@@ -28,17 +28,17 @@ Documentation/arch/arm64/memory.rst 的中文翻譯
以下爲正文
---------------------------------------------------------------------
- Linux 在 AArch64 中的內存布局
+ Linux 在 AArch64 中的內存佈局
===========================
作者: Catalin Marinas <catalin.marinas@arm.com>
-本文檔æè¿° AArch64 Linux 內核所使用的虛擬內存布局。此構架å¯ä»¥å¯¦ç¾
+本文檔æè¿° AArch64 Linux 內核所使用的虛擬內存佈局。此構架å¯ä»¥å¯¦ç¾
é å¤§å°çˆ² 4KB çš„ 4 級轉æ›è¡¨å’Œé å¤§å°çˆ² 64KB çš„ 3 級轉æ›è¡¨ã€‚
AArch64 Linux 使用 3 級或 4 級轉æ›è¡¨ï¼Œå…¶é å¤§å°é…置爲 4KB,å°æ–¼ç”¨æˆ¶å’Œå…§æ ¸
分別都有 39-bit (512GB) 或 48-bit (256TB) 的虛擬地å€ç©ºé–“。
-å°æ–¼é å¤§å°çˆ² 64KBçš„é…置,僅使用 2 級轉æ›è¡¨ï¼Œæœ‰ 42-bit (4TB) 的虛擬地å€ç©ºé–“,但內存布局相åŒã€‚
+å°æ–¼é å¤§å°çˆ² 64KBçš„é…置,僅使用 2 級轉æ›è¡¨ï¼Œæœ‰ 42-bit (4TB) 的虛擬地å€ç©ºé–“,但內存佈局相åŒã€‚
用戶地å€ç©ºé–“çš„ 63:48 ä½çˆ² 0,而內核地å€ç©ºé–“的相應ä½çˆ² 1。TTBRx çš„
é¸æ“‡ç”±è™›æ“¬åœ°å€çš„ 63 ä½çµ¦å‡ºã€‚swapper_pg_dir 僅包å«å…§æ ¸ï¼ˆå…¨å±€ï¼‰æ˜ å°„,
@@ -46,7 +46,7 @@ AArch64 Linux 使用 3 級或 4 級轉æ›è¡¨ï¼Œå…¶é å¤§å°é…置爲 4KB,å°æ–
TTBR1 中,且從ä¸å¯«å…¥ TTBR0。
-AArch64 Linux 在é å¤§å°çˆ² 4KB,並使用 3 級轉æ›è¡¨æ™‚的內存布局:
+AArch64 Linux 在é å¤§å°çˆ² 4KB,並使用 3 級轉æ›è¡¨æ™‚的內存佈局:
èµ·å§‹åœ°å€ çµæŸåœ°å€ å¤§å° ç”¨é€”
-----------------------------------------------------------------------
@@ -54,7 +54,7 @@ AArch64 Linux 在é å¤§å°çˆ² 4KB,並使用 3 級轉æ›è¡¨æ™‚的內存布局ï¼
ffffff8000000000 ffffffffffffffff 512GB 內核空間
-AArch64 Linux 在é å¤§å°çˆ² 4KB,並使用 4 級轉æ›è¡¨æ™‚的內存布局:
+AArch64 Linux 在é å¤§å°çˆ² 4KB,並使用 4 級轉æ›è¡¨æ™‚的內存佈局:
èµ·å§‹åœ°å€ çµæŸåœ°å€ å¤§å° ç”¨é€”
-----------------------------------------------------------------------
@@ -62,7 +62,7 @@ AArch64 Linux 在é å¤§å°çˆ² 4KB,並使用 4 級轉æ›è¡¨æ™‚的內存布局ï¼
ffff000000000000 ffffffffffffffff 256TB 內核空間
-AArch64 Linux 在é å¤§å°çˆ² 64KB,並使用 2 級轉æ›è¡¨æ™‚的內存布局:
+AArch64 Linux 在é å¤§å°çˆ² 64KB,並使用 2 級轉æ›è¡¨æ™‚的內存佈局:
èµ·å§‹åœ°å€ çµæŸåœ°å€ å¤§å° ç”¨é€”
-----------------------------------------------------------------------
@@ -70,7 +70,7 @@ AArch64 Linux 在é å¤§å°çˆ² 64KB,並使用 2 級轉æ›è¡¨æ™‚的內存布局ï
fffffc0000000000 ffffffffffffffff 4TB 內核空間
-AArch64 Linux 在é å¤§å°çˆ² 64KB,並使用 3 級轉æ›è¡¨æ™‚的內存布局:
+AArch64 Linux 在é å¤§å°çˆ² 64KB,並使用 3 級轉æ›è¡¨æ™‚的內存佈局:
èµ·å§‹åœ°å€ çµæŸåœ°å€ å¤§å° ç”¨é€”
-----------------------------------------------------------------------
@@ -78,7 +78,7 @@ AArch64 Linux 在é å¤§å°çˆ² 64KB,並使用 3 級轉æ›è¡¨æ™‚的內存布局ï
ffff000000000000 ffffffffffffffff 256TB 內核空間
-更詳細的內核虛擬內存布局,請åƒé–±å…§æ ¸å•“å‹•ä¿¡æ¯ã€‚
+更詳細的內核虛擬內存佈局,請åƒé–±å…§æ ¸å•“å‹•ä¿¡æ¯ã€‚
4KB é å¤§å°çš„轉æ›è¡¨æŸ¥æ‰¾ï¼š
diff --git a/Documentation/translations/zh_TW/arch/arm64/perf.rst b/Documentation/translations/zh_TW/arch/arm64/perf.rst
index 645f3944a0f4..405d5f66964f 100644
--- a/Documentation/translations/zh_TW/arch/arm64/perf.rst
+++ b/Documentation/translations/zh_TW/arch/arm64/perf.rst
@@ -59,7 +59,7 @@ EL2(VHE 內核 或 non-VHE 虛擬機監控器)。
KVM 客戶機å¯èƒ½é‹è¡Œåœ¨ EL0(用戶空間)和 EL1(內核)。
-由於宿主機和客戶機之間é‡ç–Šçš„異常級別,我們ä¸èƒ½åƒ…僅ä¾é  PMU 的硬體異
+由於宿主機和客戶機之間é‡ç–Šçš„異常級別,我們ä¸èƒ½åƒ…僅ä¾é  PMU 的硬件異
常éŽæ¿¾æ©Ÿåˆ¶-因此我們必須啓用/ç¦ç”¨å°æ–¼å®¢æˆ¶æ©Ÿé€²å…¥å’Œé€€å‡ºçš„計數。而這在
VHE å’Œ non-VHE 系統上表ç¾ä¸åŒã€‚
diff --git a/Documentation/translations/zh_TW/arch/arm64/silicon-errata.txt b/Documentation/translations/zh_TW/arch/arm64/silicon-errata.txt
index f6f41835a54a..70371807ca83 100644
--- a/Documentation/translations/zh_TW/arch/arm64/silicon-errata.txt
+++ b/Documentation/translations/zh_TW/arch/arm64/silicon-errata.txt
@@ -28,39 +28,39 @@ Documentation/arch/arm64/silicon-errata.rst 的中文翻譯
以下爲正文
---------------------------------------------------------------------
- 晶片勘誤和軟體補救措施
+ 芯片勘誤和軟件補救措施
==================
作者: Will Deacon <will.deacon@arm.com>
日期: 2015年11月27日
-一個ä¸å¹¸çš„ç¾å¯¦ï¼šç¡¬é«”經常帶有一些所謂的「瑕疵(errata)ã€ï¼Œå°Žè‡´å…¶åœ¨
-æŸäº›ç‰¹å®šæƒ…æ³ä¸‹æœƒé•èƒŒæ§‹æž¶å®šç¾©çš„行爲。就基於 ARM 的硬體而言,這些瑕疵
+一個ä¸å¹¸çš„ç¾å¯¦ï¼šç¡¬ä»¶ç¶“常帶有一些所謂的“瑕疵(errata)â€ï¼Œå°Žè‡´å…¶åœ¨
+æŸäº›ç‰¹å®šæƒ…æ³ä¸‹æœƒé•èƒŒæ§‹æž¶å®šç¾©çš„行爲。就基於 ARM 的硬件而言,這些瑕疵
大體å¯åˆ†çˆ²ä»¥ä¸‹å¹¾é¡žï¼š
A 類:無å¯è¡Œè£œæ•‘措施的嚴é‡ç¼ºé™·ã€‚
B 類:有å¯æŽ¥å—的補救措施的é‡å¤§æˆ–åš´é‡ç¼ºé™·ã€‚
C 類:在正常æ“作中ä¸æœƒé¡¯ç¾çš„å°ç‘•ç–µã€‚
-更多資訊,請在 infocenter.arm.com (需註冊)中查閱「軟體開發者勘誤
-筆記ã€ï¼ˆã€ŒSoftware Developers Errata Noticeã€ï¼‰æ–‡æª”。
+更多資訊,請在 infocenter.arm.com (需註冊)中查閱“軟件開發者勘誤
+筆記â€ï¼ˆâ€œSoftware Developers Errata Noticeâ€ï¼‰æ–‡æª”。
-å°æ–¼ Linux 而言,B 類缺陷å¯èƒ½éœ€è¦ä½œæ¥­ç³»çµ±çš„æŸäº›ç‰¹åˆ¥è™•ç†ã€‚例如,é¿å…
+å°æ–¼ Linux 而言,B 類缺陷å¯èƒ½éœ€è¦æ“作系統的æŸäº›ç‰¹åˆ¥è™•ç†ã€‚例如,é¿å…
一個特殊的代碼åºåˆ—,或是以一種特定的方å¼é…置處ç†å™¨ã€‚在æŸç¨®ä¸å¤ªå¸¸è¦‹çš„
情æ³ä¸‹ï¼Œçˆ²å°‡ A 類缺陷當作 C 類處ç†ï¼Œå¯èƒ½éœ€è¦ç”¨é¡žä¼¼çš„手段。這些手段被
-統稱爲「軟體補救措施ã€ï¼Œä¸”僅在少數情æ³éœ€è¦ï¼ˆä¾‹å¦‚,那些需è¦ä¸€å€‹é‹è¡Œåœ¨
+統稱爲“軟件補救措施â€ï¼Œä¸”僅在少數情æ³éœ€è¦ï¼ˆä¾‹å¦‚,那些需è¦ä¸€å€‹é‹è¡Œåœ¨
éžå®‰å…¨ç•°å¸¸ç´šçš„補救措施 *並且* 能被 Linux 觸發的情æ³ï¼‰ã€‚
-å°æ–¼å°šåœ¨è¨Žè«–中的å¯èƒ½å°æœªå—瑕疵影響的系統產生干擾的軟體補救措施,有一個
-相應的內核é…置(Kconfig)é¸é …被加在 「內核特性(Kernel Features)ã€->
-「基於å¯é¸æ–¹æ³•æ¡†æž¶çš„ ARM 瑕疵補救措施(ARM errata workarounds via
+å°æ–¼å°šåœ¨è¨Žè«–中的å¯èƒ½å°æœªå—瑕疵影響的系統產生干擾的軟件補救措施,有一個
+相應的內核é…置(Kconfig)é¸é …被加在 “內核特性(Kernel Features)â€->
+“基於å¯é¸æ–¹æ³•æ¡†æž¶çš„ ARM 瑕疵補救措施(ARM errata workarounds via
the alternatives framework)"。這些é¸é …被默èªé–‹å•“,若探測到å—影響的CPU,
補ä¸å°‡åœ¨é‹è¡Œæ™‚被使用。至於å°ç³»çµ±é‹è¡Œå½±éŸ¿è¼ƒå°çš„補救措施,內核é…ç½®é¸é …
-並ä¸å­˜åœ¨ï¼Œä¸”代碼以æŸç¨®è¦é¿ç‘•ç–µçš„æ–¹å¼è¢«æ§‹é€ ï¼ˆå¸¶æ³¨é‡‹çˆ²å®œï¼‰ã€‚
+並ä¸å­˜åœ¨ï¼Œä¸”代碼以æŸç¨®è¦é¿ç‘•ç–µçš„æ–¹å¼è¢«æ§‹é€ ï¼ˆå¸¶è¨»é‡‹çˆ²å®œï¼‰ã€‚
-這種åšæ³•å°æ–¼åœ¨ä»»æ„內核原始碼樹中準確地判斷出哪個瑕疵已被軟體方法所補救
-ç¨å¾®æœ‰é»žéº»ç…©ï¼Œæ‰€ä»¥åœ¨ Linux 內核中此文件作爲軟體補救措施的註冊表,
-並將在新的軟體補救措施被æ交和å‘後移æ¤ï¼ˆbackported)到穩定內核時被更新。
+這種åšæ³•å°æ–¼åœ¨ä»»æ„內核æºä»£ç¢¼æ¨¹ä¸­æº–確地判斷出哪個瑕疵已被軟件方法所補救
+ç¨å¾®æœ‰é»žéº»ç…©ï¼Œæ‰€ä»¥åœ¨ Linux 內核中此文件作爲軟件補救措施的註冊表,
+並將在新的軟件補救措施被æ交和å‘後移æ¤ï¼ˆbackported)到穩定內核時被更新。
| 實ç¾è€… | å—影響的組件 | 勘誤編號 | 內核é…ç½® |
+----------------+-----------------+-----------------+-------------------------+
diff --git a/Documentation/translations/zh_TW/arch/arm64/tagged-pointers.txt b/Documentation/translations/zh_TW/arch/arm64/tagged-pointers.txt
index c0be1d1e0d01..9812d99549ba 100644
--- a/Documentation/translations/zh_TW/arch/arm64/tagged-pointers.txt
+++ b/Documentation/translations/zh_TW/arch/arm64/tagged-pointers.txt
@@ -36,14 +36,14 @@ Documentation/arch/arm64/tagged-pointers.rst 的中文翻譯
AArch64 Linux 中的潛在用途。
內核æ供的地å€è½‰æ›è¡¨é…ç½®ä½¿é€šéŽ TTBR0 完æˆçš„虛擬地å€è½‰æ›ï¼ˆå³ç”¨æˆ¶ç©ºé–“
-映射),其虛擬地å€çš„最高 8 ä½ï¼ˆ63:56)會被轉æ›ç¡¬é«”所忽略。這種機制
-讓這些ä½å¯ä¾›æ‡‰ç”¨ç¨‹å¼è‡ªç”±ä½¿ç”¨ï¼Œå…¶æ³¨æ„事項如下:
+映射),其虛擬地å€çš„最高 8 ä½ï¼ˆ63:56)會被轉æ›ç¡¬ä»¶æ‰€å¿½ç•¥ã€‚這種機制
+讓這些ä½å¯ä¾›æ‡‰ç”¨ç¨‹åºè‡ªç”±ä½¿ç”¨ï¼Œå…¶æ³¨æ„事項如下:
(1) 內核è¦æ±‚所有傳éžåˆ° EL1 的用戶空間地å€å¸¶æœ‰ 0x00 標記。
- 這æ„味著任何攜帶用戶空間虛擬地å€çš„系統調用(syscall)
+ 這æ„味ç€ä»»ä½•æ”œå¸¶ç”¨æˆ¶ç©ºé–“虛擬地å€çš„系統調用(syscall)
åƒæ•¸ *å¿…é ˆ* 在陷入內核å‰ä½¿å®ƒå€‘的最高字節被清零。
- (2) éžé›¶æ¨™è¨˜åœ¨å‚³éžä¿¡è™Ÿæ™‚ä¸è¢«ä¿å­˜ã€‚這æ„味著在應用程å¼ä¸­åˆ©ç”¨äº†
+ (2) éžé›¶æ¨™è¨˜åœ¨å‚³éžä¿¡è™Ÿæ™‚ä¸è¢«ä¿å­˜ã€‚這æ„味ç€åœ¨æ‡‰ç”¨ç¨‹åºä¸­åˆ©ç”¨äº†
標記的信號處ç†å‡½æ•¸ç„¡æ³•ä¾è³´ siginfo_t 的用戶空間虛擬
地å€æ‰€æ”œå¸¶çš„包å«å…¶å…§éƒ¨åŸŸä¿¡æ¯çš„標記。此è¦å‰‡çš„一個例外是
當信號是在調試觀察點的異常處ç†ç¨‹åºä¸­ç”¢ç”Ÿçš„,此時標記的
@@ -53,5 +53,5 @@ AArch64 Linux 中的潛在用途。
的高字節,C 編譯器很å¯èƒ½ç„¡æ³•åˆ¤æ–·å®ƒå€‘是ä¸åŒçš„。
此構架會阻止å°å¸¶æ¨™è¨˜çš„ PC 指é‡çš„利用,因此在異常返回時,其高字節
-將被設置æˆä¸€å€‹çˆ² 「55〠的擴展符。
+將被設置æˆä¸€å€‹çˆ² “55†的擴展符。
diff --git a/Documentation/translations/zh_TW/arch/index.rst b/Documentation/translations/zh_TW/arch/index.rst
new file mode 100644
index 000000000000..7c0490589465
--- /dev/null
+++ b/Documentation/translations/zh_TW/arch/index.rst
@@ -0,0 +1,29 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+處ç†å™¨é«”ç³»çµæ§‹
+==============
+
+以下文檔æ供了具體架構實ç¾çš„編程細節。
+
+.. toctree::
+ :maxdepth: 2
+
+ mips/index
+ arm64/index
+ openrisc/index
+ parisc/index
+ loongarch/index
+
+TODOList:
+
+* arm/index
+* m68k/index
+* nios2/index
+* powerpc/index
+* s390/index
+* sh/index
+* sparc/index
+* x86/index
+* xtensa/index
+* ../riscv/index
+
diff --git a/Documentation/translations/zh_TW/arch/loongarch/booting.rst b/Documentation/translations/zh_TW/arch/loongarch/booting.rst
new file mode 100644
index 000000000000..88291090cea1
--- /dev/null
+++ b/Documentation/translations/zh_TW/arch/loongarch/booting.rst
@@ -0,0 +1,49 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+.. include:: ../../disclaimer-zh_TW.rst
+
+:Original: Documentation/arch/loongarch/booting.rst
+
+:翻譯:
+
+ å¸å»¶é¨° Yanteng Si <siyanteng@loongson.cn>
+
+====================
+å•“å‹• Linux/LoongArch
+====================
+
+:作者: å¸å»¶é¨° <siyanteng@loongson.cn>
+:日期: 2022年11月18日
+
+BootLoader傳éžçµ¦å…§æ ¸çš„ä¿¡æ¯
+==========================
+
+LoongArch支æŒACPIå’ŒFDT啓動,需è¦å‚³éžçµ¦å…§æ ¸çš„ä¿¡æ¯åŒ…括memmapã€initrdã€cmdlineã€å¯
+é¸çš„ACPI/FDT表等。
+
+內核在 `kernel_entry` å…¥å£è™•è¢«å‚³éžä»¥ä¸‹åƒæ•¸:
+
+ - a0 = efi_boot: `efi_boot` 是一個標誌,表示這個啓動環境是å¦å®Œå…¨ç¬¦åˆUEFI
+ çš„è¦æ±‚。
+
+ - a1 = cmdline: `cmdline` 是一個指å‘內核命令行的指é‡ã€‚
+
+ - a2 = systemtable: `systemtable` 指å‘EFI的系統表,在這個階段涉åŠçš„所有
+ 指é‡éƒ½æ˜¯ç‰©ç†åœ°å€ã€‚
+
+Linux/LoongArch內核é¡åƒæ–‡ä»¶é ­
+=============================
+
+內核é¡åƒæ˜¯EFIé¡åƒã€‚作爲PE文件,它們有一個64字節的頭部çµæ§‹é«”,如下所示::
+
+ u32 MZ_MAGIC /* "MZ", MS-DOS é ­ */
+ u32 res0 = 0 /* ä¿ç•™ */
+ u64 kernel_entry /* 內核入å£é»ž */
+ u64 _end - _text /* 內核é¡åƒæœ‰æ•ˆå¤§å° */
+ u64 load_offset /* 加載內核é¡åƒç›¸å°å…§å­˜èµ·å§‹åœ°å€çš„åç§»é‡ */
+ u64 res1 = 0 /* ä¿ç•™ */
+ u64 res2 = 0 /* ä¿ç•™ */
+ u64 res3 = 0 /* ä¿ç•™ */
+ u32 LINUX_PE_MAGIC /* 魔術數 */
+ u32 pe_header - _head /* 到PEé ­çš„åç§»é‡ */
+
diff --git a/Documentation/translations/zh_TW/arch/loongarch/features.rst b/Documentation/translations/zh_TW/arch/loongarch/features.rst
new file mode 100644
index 000000000000..b64e430f55ae
--- /dev/null
+++ b/Documentation/translations/zh_TW/arch/loongarch/features.rst
@@ -0,0 +1,9 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+.. include:: ../../disclaimer-zh_TW.rst
+
+:Original: Documentation/arch/loongarch/features.rst
+:Translator: Huacai Chen <chenhuacai@loongson.cn>
+
+.. kernel-feat:: $srctree/Documentation/features loongarch
+
diff --git a/Documentation/translations/zh_TW/arch/loongarch/index.rst b/Documentation/translations/zh_TW/arch/loongarch/index.rst
new file mode 100644
index 000000000000..7281e050fe1c
--- /dev/null
+++ b/Documentation/translations/zh_TW/arch/loongarch/index.rst
@@ -0,0 +1,28 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+.. include:: ../../disclaimer-zh_TW.rst
+
+:Original: Documentation/arch/loongarch/index.rst
+:Translator: Huacai Chen <chenhuacai@loongson.cn>
+
+=================
+LoongArch體系çµæ§‹
+=================
+
+.. toctree::
+ :maxdepth: 2
+ :numbered:
+
+ introduction
+ booting
+ irq-chip-model
+
+ features
+
+.. only:: subproject and html
+
+ Indices
+ =======
+
+ * :ref:`genindex`
+
diff --git a/Documentation/translations/zh_TW/arch/loongarch/introduction.rst b/Documentation/translations/zh_TW/arch/loongarch/introduction.rst
new file mode 100644
index 000000000000..a5603f9b0a1b
--- /dev/null
+++ b/Documentation/translations/zh_TW/arch/loongarch/introduction.rst
@@ -0,0 +1,354 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+.. include:: ../../disclaimer-zh_TW.rst
+
+:Original: Documentation/arch/loongarch/introduction.rst
+:Translator: Huacai Chen <chenhuacai@loongson.cn>
+
+=============
+LoongArch介紹
+=============
+
+LoongArch是一種新的RISC ISA,在一定程度上類似於MIPS和RISC-V。LoongArch指令集
+包括一個精簡32ä½ç‰ˆï¼ˆLA32R)ã€ä¸€å€‹æ¨™æº–32ä½ç‰ˆï¼ˆLA32S)ã€ä¸€å€‹64ä½ç‰ˆï¼ˆLA64)。
+LoongArch定義了四個特權級(PLV0~PLV3),其中PLV0是最高特權級,用於內核;而PLV3
+是最低特權級,用於應用程åºã€‚本文檔介紹了LoongArch的寄存器ã€åŸºç¤ŽæŒ‡ä»¤é›†ã€è™›æ“¬å…§
+存以åŠå…¶ä»–一些主題。
+
+寄存器
+======
+
+LoongArch的寄存器包括通用寄存器(GPRs)ã€æµ®é»žå¯„存器(FPRs)ã€å‘é‡å¯„存器(VRs)
+和用於特權模å¼ï¼ˆPLV0)的控制狀態寄存器(CSRs)。
+
+通用寄存器
+----------
+
+LoongArch包括32個通用寄存器( ``$r0`` ~ ``$r31`` ),LA32中æ¯å€‹å¯„存器爲32ä½å¯¬ï¼Œ
+LA64中æ¯å€‹å¯„存器爲64ä½å¯¬ã€‚ ``$r0`` 的內容總是固定爲0,而其他寄存器在體系çµæ§‹å±¤é¢
+沒有特殊功能。( ``$r1`` 算是一個例外,在BL指令中固定用作éˆæŽ¥è¿”回寄存器。)
+
+內核使用了一套LoongArch寄存器約定,定義在LoongArch ELF psABIè¦ç¯„中,詳細æè¿°åƒè¦‹
+:ref:`åƒè€ƒæ–‡ç» <loongarch-references-zh_TW>`:
+
+================= =============== =================== ==========
+寄存器å 別å 用途 跨調用ä¿æŒ
+================= =============== =================== ==========
+``$r0`` ``$zero`` 常é‡0 ä¸ä½¿ç”¨
+``$r1`` ``$ra`` è¿”å›žåœ°å€ å¦
+``$r2`` ``$tp`` TLS/線程信æ¯æŒ‡é‡ ä¸ä½¿ç”¨
+``$r3`` ``$sp`` æ£§æŒ‡é‡ æ˜¯
+``$r4``-``$r11`` ``$a0``-``$a7`` åƒæ•¸å¯„存器 å¦
+``$r4``-``$r5`` ``$v0``-``$v1`` 返回值 å¦
+``$r12``-``$r20`` ``$t0``-``$t8`` 臨時寄存器 å¦
+``$r21`` ``$u0`` æ¯CPU變é‡åŸºåœ°å€ ä¸ä½¿ç”¨
+``$r22`` ``$fp`` å¹€æŒ‡é‡ æ˜¯
+``$r23``-``$r31`` ``$s0``-``$s8`` éœæ…‹å¯„存器 是
+================= =============== =================== ==========
+
+.. note::
+ 注æ„: ``$r21`` 寄存器在ELF psABI中ä¿ç•™æœªä½¿ç”¨ï¼Œä½†æ˜¯åœ¨Linux內核用於ä¿
+ å­˜æ¯CPU變é‡åŸºåœ°å€ã€‚該寄存器沒有ABI命å,ä¸éŽåœ¨å…§æ ¸ä¸­ç¨±çˆ² ``$u0`` 。在
+ 一些éºç•™ä»£ç¢¼ä¸­æœ‰æ™‚å¯èƒ½è¦‹åˆ° ``$v0`` å’Œ ``$v1`` ,它們是 ``$a0`` å’Œ
+ ``$a1`` 的別å,屬於已經廢棄的用法。
+
+浮點寄存器
+----------
+
+當系統中存在FPU時,LoongArch有32個浮點寄存器( ``$f0`` ~ ``$f31`` )。在LA64
+çš„CPU核上,æ¯å€‹å¯„存器å‡çˆ²64ä½å¯¬ã€‚
+
+浮點寄存器的使用約定與LoongArch ELF psABIè¦ç¯„çš„æ述相åŒï¼š
+
+================= ================== =================== ==========
+寄存器å 別å 用途 跨調用ä¿æŒ
+================= ================== =================== ==========
+``$f0``-``$f7`` ``$fa0``-``$fa7`` åƒæ•¸å¯„存器 å¦
+``$f0``-``$f1`` ``$fv0``-``$fv1`` 返回值 å¦
+``$f8``-``$f23`` ``$ft0``-``$ft15`` 臨時寄存器 å¦
+``$f24``-``$f31`` ``$fs0``-``$fs7`` éœæ…‹å¯„存器 是
+================= ================== =================== ==========
+
+.. note::
+ 注æ„:在一些éºç•™ä»£ç¢¼ä¸­æœ‰æ™‚å¯èƒ½è¦‹åˆ° ``$fv0`` å’Œ ``$fv1`` ,它們是
+ ``$fa0`` å’Œ ``$fa1`` 的別å,屬於已經廢棄的用法。
+
+
+å‘é‡å¯„存器
+----------
+
+LoongArchç¾æœ‰å…©ç¨®å‘é‡æ“´å±•ï¼š
+
+- 128ä½å‘é‡æ“´å±•LSX(全稱Loongson SIMD eXtention),
+- 256ä½å‘é‡æ“´å±•LASX(全稱Loongson Advanced SIMD eXtention)。
+
+LSX使用 ``$v0`` ~ ``$v31`` å‘é‡å¯„存器,而LASX則使用 ``$x0`` ~ ``$x31`` 。
+
+浮點寄存器和å‘é‡å¯„存器是複用的,比如:在一個實ç¾äº†LSXå’ŒLASX的核上, ``$x0`` çš„
+低128ä½èˆ‡ ``$v0`` 共用, ``$v0`` 的低64ä½èˆ‡ ``$f0`` 共用,其他寄存器ä¾æ­¤é¡žæŽ¨ã€‚
+
+控制狀態寄存器
+--------------
+
+控制狀態寄存器åªèƒ½åœ¨ç‰¹æ¬Šæ¨¡å¼ï¼ˆPLV0)下訪å•:
+
+================= ==================================== ==========
+åœ°å€ å…¨ç¨±æè¿° 簡稱
+================= ==================================== ==========
+0x0 當å‰æ¨¡å¼ä¿¡æ¯ CRMD
+0x1 異常å‰æ¨¡å¼ä¿¡æ¯ PRMD
+0x2 擴展部件使能 EUEN
+0x3 雜項控制 MISC
+0x4 異常é…ç½® ECFG
+0x5 異常狀態 ESTAT
+0x6 ç•°å¸¸è¿”å›žåœ°å€ ERA
+0x7 出錯(Faulting)è™›æ“¬åœ°å€ BADV
+0x8 出錯(Faulting)指令字 BADI
+0xC 異常入å£åœ°å€ EENTRY
+0x10 TLB索引 TLBIDX
+0x11 TLBè¡¨é …é«˜ä½ TLBEHI
+0x12 TLB表項低ä½0 TLBELO0
+0x13 TLB表項低ä½1 TLBELO1
+0x18 地å€ç©ºé–“標識符 ASID
+0x19 低åŠåœ°å€ç©ºé–“é å…¨å±€ç›®éŒ„åŸºå€ PGDL
+0x1A 高åŠåœ°å€ç©ºé–“é å…¨å±€ç›®éŒ„åŸºå€ PGDH
+0x1B é å…¨å±€ç›®éŒ„åŸºå€ PGD
+0x1C é è¡¨é歷控制低åŠéƒ¨åˆ† PWCL
+0x1D é è¡¨é歷控制高åŠéƒ¨åˆ† PWCH
+0x1E STLBé å¤§å° STLBPS
+0x1F 縮減虛地å€é…ç½® RVACFG
+0x20 CPU編號 CPUID
+0x21 特權資æºé…置信æ¯1 PRCFG1
+0x22 特權資æºé…置信æ¯2 PRCFG2
+0x23 特權資æºé…置信æ¯3 PRCFG3
+0x30+n (0≤n≤15) 數據ä¿å­˜å¯„存器 SAVEn
+0x40 定時器編號 TID
+0x41 定時器é…ç½® TCFG
+0x42 定時器值 TVAL
+0x43 計時器補償 CNTC
+0x44 定時器中斷清除 TICLR
+0x60 LLBit相關控制 LLBCTL
+0x80 實ç¾ç›¸é—œæŽ§åˆ¶1 IMPCTL1
+0x81 實ç¾ç›¸é—œæŽ§åˆ¶2 IMPCTL2
+0x88 TLBé‡å¡«ç•°å¸¸å…¥å£åœ°å€ TLBRENTRY
+0x89 TLBé‡å¡«ç•°å¸¸å‡ºéŒ¯(Faulting)è™›åœ°å€ TLBRBADV
+0x8A TLBé‡å¡«ç•°å¸¸è¿”å›žåœ°å€ TLBRERA
+0x8B TLBé‡å¡«ç•°å¸¸æ•¸æ“šä¿å­˜ TLBRSAVE
+0x8C TLBé‡å¡«ç•°å¸¸è¡¨é …低ä½0 TLBRELO0
+0x8D TLBé‡å¡«ç•°å¸¸è¡¨é …低ä½1 TLBRELO1
+0x8E TLBé‡å¡«ç•°å¸¸è¡¨é …é«˜ä½ TLBEHI
+0x8F TLBé‡å¡«ç•°å¸¸å‰æ¨¡å¼ä¿¡æ¯ TLBRPRMD
+0x90 機器錯誤控制 MERRCTL
+0x91 機器錯誤信æ¯1 MERRINFO1
+0x92 機器錯誤信æ¯2 MERRINFO2
+0x93 機器錯誤異常入å£åœ°å€ MERRENTRY
+0x94 æ©Ÿå™¨éŒ¯èª¤ç•°å¸¸è¿”å›žåœ°å€ MERRERA
+0x95 機器錯誤異常數據ä¿å­˜ MERRSAVE
+0x98 高速緩存標籤 CTAG
+0x180+n (0≤n≤3) 直接映射é…置窗å£n DMWn
+0x200+2n (0≤n≤31) 性能監測é…ç½®n PMCFGn
+0x201+2n (0≤n≤31) 性能監測計數器n PMCNTn
+0x300 內存讀寫監視點整體控制 MWPC
+0x301 內存讀寫監視點整體狀態 MWPS
+0x310+8n (0≤n≤7) 內存讀寫監視點né…ç½®1 MWPnCFG1
+0x311+8n (0≤n≤7) 內存讀寫監視點né…ç½®2 MWPnCFG2
+0x312+8n (0≤n≤7) 內存讀寫監視點né…ç½®3 MWPnCFG3
+0x313+8n (0≤n≤7) 內存讀寫監視點né…ç½®4 MWPnCFG4
+0x380 å–指監視點整體控制 FWPC
+0x381 å–指監視點整體狀態 FWPS
+0x390+8n (0≤n≤7) å–指監視點né…ç½®1 FWPnCFG1
+0x391+8n (0≤n≤7) å–指監視點né…ç½®2 FWPnCFG2
+0x392+8n (0≤n≤7) å–指監視點né…ç½®3 FWPnCFG3
+0x393+8n (0≤n≤7) å–指監視點né…ç½®4 FWPnCFG4
+0x500 調試寄存器 DBG
+0x501 èª¿è©¦ç•°å¸¸è¿”å›žåœ°å€ DERA
+0x502 調試數據ä¿å­˜ DSAVE
+================= ==================================== ==========
+
+ERA,TLBRERA,MERRERA和DERA有時也分別稱爲EPC,TLBREPC,MERREPC和DEPC。
+
+基礎指令集
+==========
+
+指令格å¼
+--------
+
+LoongArch的指令字長爲32ä½ï¼Œä¸€å…±æœ‰9種基本指令格å¼ï¼ˆä»¥åŠä¸€äº›è®Šé«”):
+
+=========== ==========================
+æ ¼å¼å稱 指令構æˆ
+=========== ==========================
+2R Opcode + Rj + Rd
+3R Opcode + Rk + Rj + Rd
+4R Opcode + Ra + Rk + Rj + Rd
+2RI8 Opcode + I8 + Rj + Rd
+2RI12 Opcode + I12 + Rj + Rd
+2RI14 Opcode + I14 + Rj + Rd
+2RI16 Opcode + I16 + Rj + Rd
+1RI21 Opcode + I21L + Rj + I21H
+I26 Opcode + I26L + I26H
+=========== ==========================
+
+Opcode是指令æ“作碼,Rjå’ŒRk是æºæ“作數(寄存器),Rd是目標æ“作數(寄存器),Ra是
+4R-typeæ ¼å¼ç‰¹æœ‰çš„附加æ“作數(寄存器)。I8/I12/I14/I16/I21/I26分別是8ä½/12ä½/14ä½/
+16ä½/21ä½/26ä½çš„ç«‹å³æ•¸ã€‚其中較長的21ä½å’Œ26ä½ç«‹å³æ•¸åœ¨æŒ‡ä»¤å­—中被分割爲高ä½éƒ¨åˆ†èˆ‡ä½Žä½
+部分,所以你們在這è£çš„æ ¼å¼æ述中能夠看到I21L/I21Hå’ŒI26L/I26H這樣帶後綴的表述。
+
+指令列表
+--------
+
+爲了簡便起見,我們在此åªç¾…列一下指令å稱(助記符),需è¦è©³ç´°ä¿¡æ¯è«‹é–±è®€
+:ref:`åƒè€ƒæ–‡ç» <loongarch-references-zh_TW>` 中的文檔。
+
+1. ç®—è¡“é‹ç®—指令::
+
+ ADD.W SUB.W ADDI.W ADD.D SUB.D ADDI.D
+ SLT SLTU SLTI SLTUI
+ AND OR NOR XOR ANDN ORN ANDI ORI XORI
+ MUL.W MULH.W MULH.WU DIV.W DIV.WU MOD.W MOD.WU
+ MUL.D MULH.D MULH.DU DIV.D DIV.DU MOD.D MOD.DU
+ PCADDI PCADDU12I PCADDU18I
+ LU12I.W LU32I.D LU52I.D ADDU16I.D
+
+2. 移ä½é‹ç®—指令::
+
+ SLL.W SRL.W SRA.W ROTR.W SLLI.W SRLI.W SRAI.W ROTRI.W
+ SLL.D SRL.D SRA.D ROTR.D SLLI.D SRLI.D SRAI.D ROTRI.D
+
+3. ä½åŸŸæ“作指令::
+
+ EXT.W.B EXT.W.H CLO.W CLO.D SLZ.W CLZ.D CTO.W CTO.D CTZ.W CTZ.D
+ BYTEPICK.W BYTEPICK.D BSTRINS.W BSTRINS.D BSTRPICK.W BSTRPICK.D
+ REVB.2H REVB.4H REVB.2W REVB.D REVH.2W REVH.D BITREV.4B BITREV.8B BITREV.W BITREV.D
+ MASKEQZ MASKNEZ
+
+4. 分支轉移指令::
+
+ BEQ BNE BLT BGE BLTU BGEU BEQZ BNEZ B BL JIRL
+
+5. 訪存讀寫指令::
+
+ LD.B LD.BU LD.H LD.HU LD.W LD.WU LD.D ST.B ST.H ST.W ST.D
+ LDX.B LDX.BU LDX.H LDX.HU LDX.W LDX.WU LDX.D STX.B STX.H STX.W STX.D
+ LDPTR.W LDPTR.D STPTR.W STPTR.D
+ PRELD PRELDX
+
+6. 原å­æ“作指令::
+
+ LL.W SC.W LL.D SC.D
+ AMSWAP.W AMSWAP.D AMADD.W AMADD.D AMAND.W AMAND.D AMOR.W AMOR.D AMXOR.W AMXOR.D
+ AMMAX.W AMMAX.D AMMIN.W AMMIN.D
+
+7. 柵障指令::
+
+ IBAR DBAR
+
+8. 特殊指令::
+
+ SYSCALL BREAK CPUCFG NOP IDLE ERTN(ERET) DBCL(DBGCALL) RDTIMEL.W RDTIMEH.W RDTIME.D
+ ASRTLE.D ASRTGT.D
+
+9. 特權指令::
+
+ CSRRD CSRWR CSRXCHG
+ IOCSRRD.B IOCSRRD.H IOCSRRD.W IOCSRRD.D IOCSRWR.B IOCSRWR.H IOCSRWR.W IOCSRWR.D
+ CACOP TLBP(TLBSRCH) TLBRD TLBWR TLBFILL TLBCLR TLBFLUSH INVTLB LDDIR LDPTE
+
+虛擬內存
+========
+
+LoongArchå¯ä»¥ä½¿ç”¨ç›´æŽ¥æ˜ å°„虛擬內存和分é æ˜ å°„虛擬內存。
+
+直接映射虛擬內存通éŽCSR.DMWn(n=0~3)來進行é…置,虛擬地å€ï¼ˆVA)和物ç†åœ°å€ï¼ˆPA)
+之間有簡單的映射關係::
+
+ VA = PA + 固定å移
+
+分é æ˜ å°„的虛擬地å€ï¼ˆVA)和物ç†åœ°å€ï¼ˆPA)有任æ„的映射關係,這種關係記錄在TLBå’Œé 
+表中。LoongArchçš„TLB包括一個全相è¯çš„MTLB(Multiple Page Size TLB,多樣é å¤§å°TLB)
+和一個組相è¯çš„STLB(Single Page Size TLB,單一é å¤§å°TLB)。
+
+缺çœç‹€æ…‹ä¸‹ï¼ŒLA32的整個虛擬地å€ç©ºé–“é…置如下:
+
+============ =========================== ===========================
+å€æ®µå 地å€ç¯„åœ å±¬æ€§
+============ =========================== ===========================
+``UVRANGE`` ``0x00000000 - 0x7FFFFFFF`` 分é æ˜ å°„, å¯ç·©å­˜, PLV0~3
+``KPRANGE0`` ``0x80000000 - 0x9FFFFFFF`` 直接映射, éžç·©å­˜, PLV0
+``KPRANGE1`` ``0xA0000000 - 0xBFFFFFFF`` 直接映射, å¯ç·©å­˜, PLV0
+``KVRANGE`` ``0xC0000000 - 0xFFFFFFFF`` 分é æ˜ å°„, å¯ç·©å­˜, PLV0
+============ =========================== ===========================
+
+用戶態(PLV3)åªèƒ½è¨ªå•UVRANGE,å°æ–¼ç›´æŽ¥æ˜ å°„çš„KPRANGE0å’ŒKPRANGE1,將虛擬地å€çš„第
+30~31ä½æ¸…零就等於物ç†åœ°å€ã€‚例如:物ç†åœ°å€0x00001000å°æ‡‰çš„éžç·©å­˜ç›´æŽ¥æ˜ å°„虛擬地å€
+是0x80001000,而其å¯ç·©å­˜ç›´æŽ¥æ˜ å°„虛擬地å€æ˜¯0xA0001000。
+
+缺çœç‹€æ…‹ä¸‹ï¼ŒLA64的整個虛擬地å€ç©ºé–“é…置如下:
+
+============ ====================== ==================================
+å€æ®µå 地å€ç¯„åœ å±¬æ€§
+============ ====================== ==================================
+``XUVRANGE`` ``0x0000000000000000 - 分é æ˜ å°„, å¯ç·©å­˜, PLV0~3
+ 0x3FFFFFFFFFFFFFFF``
+``XSPRANGE`` ``0x4000000000000000 - 直接映射, å¯ç·©å­˜ / éžç·©å­˜, PLV0
+ 0x7FFFFFFFFFFFFFFF``
+``XKPRANGE`` ``0x8000000000000000 - 直接映射, å¯ç·©å­˜ / éžç·©å­˜, PLV0
+ 0xBFFFFFFFFFFFFFFF``
+``XKVRANGE`` ``0xC000000000000000 - 分é æ˜ å°„, å¯ç·©å­˜, PLV0
+ 0xFFFFFFFFFFFFFFFF``
+============ ====================== ==================================
+
+用戶態(PLV3)åªèƒ½è¨ªå•XUVRANGE,å°æ–¼ç›´æŽ¥æ˜ å°„çš„XSPRANGEå’ŒXKPRANGE,將虛擬地å€çš„第
+60~63ä½æ¸…零就等於物ç†åœ°å€ï¼Œè€Œå…¶ç·©å­˜å±¬æ€§æ˜¯é€šéŽè™›æ“¬åœ°å€çš„第60~61ä½é…置的(0表示強åº
+éžç·©å­˜ï¼Œ1表示一致å¯ç·©å­˜ï¼Œ2表示弱åºéžç·©å­˜ï¼‰ã€‚
+
+ç›®å‰ï¼Œæˆ‘們僅用XKPRANGE來進行直接映射,XSPRANGEä¿ç•™çµ¦ä»¥å¾Œç”¨ã€‚
+
+此處給出一個直接映射的例å­ï¼šç‰©ç†åœ°å€0x00000000_00001000çš„å¼·åºéžç·©å­˜ç›´æŽ¥æ˜ å°„虛擬地å€
+(在XKPRANGE中)是0x80000000_00001000,其一致å¯ç·©å­˜ç›´æŽ¥æ˜ å°„虛擬地å€ï¼ˆåœ¨XKPRANGE中)
+是0x90000000_00001000,而其弱åºéžç·©å­˜ç›´æŽ¥æ˜ å°„虛擬地å€ï¼ˆåœ¨XKPRANGE中)是0xA0000000_
+00001000。
+
+Loongson與LoongArch的關係
+=========================
+
+LoongArch是一種RISC指令集架構(ISA),ä¸åŒæ–¼ç¾å­˜çš„任何一種ISA,而Loongson(å³é¾
+芯)是一個處ç†å™¨å®¶æ—。é¾èŠ¯åŒ…括三個系列:Loongson-1(é¾èŠ¯1號)是32ä½è™•ç†å™¨ç³»åˆ—,
+Loongson-2(é¾èŠ¯2號)是低端64ä½è™•ç†å™¨ç³»åˆ—,而Loongson-3(é¾èŠ¯3號)是高端64ä½è™•ç†
+器系列。舊的é¾èŠ¯è™•ç†å™¨åŸºæ–¼MIPS架構,而新的é¾èŠ¯è™•ç†å™¨åŸºæ–¼LoongArch架構。以é¾èŠ¯3號
+爲例:é¾èŠ¯3A1000/3B1500/3A2000/3A3000/3A4000都是兼容MIPS的,而é¾èŠ¯3A5000(以åŠå°‡
+來的型號)都是基於LoongArch的。
+
+.. _loongarch-references-zh_TW:
+
+åƒè€ƒæ–‡ç»
+========
+
+Loongson官方網站(é¾èŠ¯ä¸­ç§‘技術股份有é™å…¬å¸ï¼‰ï¼š
+
+ http://www.loongson.cn/
+
+Loongson與LoongArch的開發者網站(軟件與文檔資æºï¼‰ï¼š
+
+ http://www.loongnix.cn/
+
+ https://github.com/loongson/
+
+ https://loongson.github.io/LoongArch-Documentation/
+
+LoongArch指令集架構的文檔:
+
+ https://github.com/loongson/LoongArch-Documentation/releases/latest/download/LoongArch-Vol1-v1.02-CN.pdf (中文版)
+
+ https://github.com/loongson/LoongArch-Documentation/releases/latest/download/LoongArch-Vol1-v1.02-EN.pdf (英文版)
+
+LoongArch的ELF psABI文檔:
+
+ https://github.com/loongson/LoongArch-Documentation/releases/latest/download/LoongArch-ELF-ABI-v2.01-CN.pdf (中文版)
+
+ https://github.com/loongson/LoongArch-Documentation/releases/latest/download/LoongArch-ELF-ABI-v2.01-EN.pdf (英文版)
+
+Loongson與LoongArchçš„Linux內核æºç¢¼å€‰åº«ï¼š
+
+ https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson.git
+
diff --git a/Documentation/translations/zh_TW/arch/loongarch/irq-chip-model.rst b/Documentation/translations/zh_TW/arch/loongarch/irq-chip-model.rst
new file mode 100644
index 000000000000..dbe9595bbf16
--- /dev/null
+++ b/Documentation/translations/zh_TW/arch/loongarch/irq-chip-model.rst
@@ -0,0 +1,158 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+.. include:: ../../disclaimer-zh_TW.rst
+
+:Original: Documentation/arch/loongarch/irq-chip-model.rst
+:Translator: Huacai Chen <chenhuacai@loongson.cn>
+
+==================================
+LoongArch的IRQ芯片模型(層級關係)
+==================================
+
+ç›®å‰ï¼ŒåŸºæ–¼LoongArch的處ç†å™¨ï¼ˆå¦‚é¾èŠ¯3A5000)åªèƒ½èˆ‡LS7A芯片組é…åˆå·¥ä½œã€‚LoongArch計算機
+中的中斷控制器(å³IRQ芯片)包括CPUINTC(CPU Core Interrupt Controller)ã€LIOINTC(
+Legacy I/O Interrupt Controller)ã€EIOINTC(Extended I/O Interrupt Controller)ã€
+HTVECINTC(Hyper-Transport Vector Interrupt Controller)ã€PCH-PIC(LS7A芯片組的主中
+斷控制器)ã€PCH-LPC(LS7A芯片組的LPC中斷控制器)和PCH-MSI(MSI中斷控制器)。
+
+CPUINTC是一種CPU內部的æ¯å€‹æ ¸æœ¬åœ°çš„中斷控制器,LIOINTC/EIOINTC/HTVECINTC是CPU內部的
+全局中斷控制器(æ¯å€‹èŠ¯ç‰‡ä¸€å€‹ï¼Œæ‰€æœ‰æ ¸å…±äº«ï¼‰ï¼Œè€ŒPCH-PIC/PCH-LPC/PCH-MSI是CPU外部的中
+斷控制器(在é…套芯片組è£é¢ï¼‰ã€‚這些中斷控制器(或者說IRQ芯片)以一種層次樹的組織形å¼
+ç´šè¯åœ¨ä¸€èµ·ï¼Œä¸€å…±æœ‰å…©ç¨®å±¤ç´šé—œä¿‚模型(傳統IRQ模型和擴展IRQ模型)。
+
+傳統IRQ模型
+===========
+
+在這種模型è£é¢ï¼ŒIPI(Inter-Processor Interrupt)和CPU本地時é˜ä¸­æ–·ç›´æŽ¥ç™¼é€åˆ°CPUINTC,
+CPU串å£ï¼ˆUARTs)中斷髮é€åˆ°LIOINTC,而其他所有設備的中斷則分別發é€åˆ°æ‰€é€£æŽ¥çš„PCH-PIC/
+PCH-LPC/PCH-MSI,然後被HTVECINTC統一收集,å†ç™¼é€åˆ°LIOINTC,最後到é”CPUINTC::
+
+ +-----+ +---------+ +-------+
+ | IPI | --> | CPUINTC | <-- | Timer |
+ +-----+ +---------+ +-------+
+ ^
+ |
+ +---------+ +-------+
+ | LIOINTC | <-- | UARTs |
+ +---------+ +-------+
+ ^
+ |
+ +-----------+
+ | HTVECINTC |
+ +-----------+
+ ^ ^
+ | |
+ +---------+ +---------+
+ | PCH-PIC | | PCH-MSI |
+ +---------+ +---------+
+ ^ ^ ^
+ | | |
+ +---------+ +---------+ +---------+
+ | PCH-LPC | | Devices | | Devices |
+ +---------+ +---------+ +---------+
+ ^
+ |
+ +---------+
+ | Devices |
+ +---------+
+
+擴展IRQ模型
+===========
+
+在這種模型è£é¢ï¼ŒIPI(Inter-Processor Interrupt)和CPU本地時é˜ä¸­æ–·ç›´æŽ¥ç™¼é€åˆ°CPUINTC,
+CPU串å£ï¼ˆUARTs)中斷髮é€åˆ°LIOINTC,而其他所有設備的中斷則分別發é€åˆ°æ‰€é€£æŽ¥çš„PCH-PIC/
+PCH-LPC/PCH-MSI,然後被EIOINTC統一收集,å†ç›´æŽ¥åˆ°é”CPUINTC::
+
+ +-----+ +---------+ +-------+
+ | IPI | --> | CPUINTC | <-- | Timer |
+ +-----+ +---------+ +-------+
+ ^ ^
+ | |
+ +---------+ +---------+ +-------+
+ | EIOINTC | | LIOINTC | <-- | UARTs |
+ +---------+ +---------+ +-------+
+ ^ ^
+ | |
+ +---------+ +---------+
+ | PCH-PIC | | PCH-MSI |
+ +---------+ +---------+
+ ^ ^ ^
+ | | |
+ +---------+ +---------+ +---------+
+ | PCH-LPC | | Devices | | Devices |
+ +---------+ +---------+ +---------+
+ ^
+ |
+ +---------+
+ | Devices |
+ +---------+
+
+ACPI相關的定義
+==============
+
+CPUINTC::
+
+ ACPI_MADT_TYPE_CORE_PIC;
+ struct acpi_madt_core_pic;
+ enum acpi_madt_core_pic_version;
+
+LIOINTC::
+
+ ACPI_MADT_TYPE_LIO_PIC;
+ struct acpi_madt_lio_pic;
+ enum acpi_madt_lio_pic_version;
+
+EIOINTC::
+
+ ACPI_MADT_TYPE_EIO_PIC;
+ struct acpi_madt_eio_pic;
+ enum acpi_madt_eio_pic_version;
+
+HTVECINTC::
+
+ ACPI_MADT_TYPE_HT_PIC;
+ struct acpi_madt_ht_pic;
+ enum acpi_madt_ht_pic_version;
+
+PCH-PIC::
+
+ ACPI_MADT_TYPE_BIO_PIC;
+ struct acpi_madt_bio_pic;
+ enum acpi_madt_bio_pic_version;
+
+PCH-MSI::
+
+ ACPI_MADT_TYPE_MSI_PIC;
+ struct acpi_madt_msi_pic;
+ enum acpi_madt_msi_pic_version;
+
+PCH-LPC::
+
+ ACPI_MADT_TYPE_LPC_PIC;
+ struct acpi_madt_lpc_pic;
+ enum acpi_madt_lpc_pic_version;
+
+åƒè€ƒæ–‡ç»
+========
+
+é¾èŠ¯3A5000的文檔:
+
+ https://github.com/loongson/LoongArch-Documentation/releases/latest/download/Loongson-3A5000-usermanual-1.02-CN.pdf (中文版)
+
+ https://github.com/loongson/LoongArch-Documentation/releases/latest/download/Loongson-3A5000-usermanual-1.02-EN.pdf (英文版)
+
+é¾èŠ¯LS7A芯片組的文檔:
+
+ https://github.com/loongson/LoongArch-Documentation/releases/latest/download/Loongson-7A1000-usermanual-2.00-CN.pdf (中文版)
+
+ https://github.com/loongson/LoongArch-Documentation/releases/latest/download/Loongson-7A1000-usermanual-2.00-EN.pdf (英文版)
+
+.. note::
+ - CPUINTC:å³ã€Šé¾èŠ¯æž¶æ§‹åƒè€ƒæ‰‹å†Šå·ä¸€ã€‹ç¬¬7.4節所æè¿°çš„CSR.ECFG/CSR.ESTAT寄存器åŠå…¶
+ 中斷控制é‚輯;
+ - LIOINTC:å³ã€Šé¾èŠ¯3A5000處ç†å™¨ä½¿ç”¨æ‰‹å†Šã€‹ç¬¬11.1節所æ述的“傳統I/O中斷â€ï¼›
+ - EIOINTC:å³ã€Šé¾èŠ¯3A5000處ç†å™¨ä½¿ç”¨æ‰‹å†Šã€‹ç¬¬11.2節所æ述的“擴展I/O中斷â€ï¼›
+ - HTVECINTC:å³ã€Šé¾èŠ¯3A5000處ç†å™¨ä½¿ç”¨æ‰‹å†Šã€‹ç¬¬14.3節所æ述的“HyperTransport中斷â€ï¼›
+ - PCH-PIC/PCH-MSI:å³ã€Šé¾èŠ¯7A1000橋片用戶手冊》第5章所æ述的“中斷控制器â€ï¼›
+ - PCH-LPC:å³ã€Šé¾èŠ¯7A1000橋片用戶手冊》第24.3節所æ述的“LPC中斷â€ã€‚
+
diff --git a/Documentation/translations/zh_TW/arch/mips/booting.rst b/Documentation/translations/zh_TW/arch/mips/booting.rst
new file mode 100644
index 000000000000..7e104abf5a51
--- /dev/null
+++ b/Documentation/translations/zh_TW/arch/mips/booting.rst
@@ -0,0 +1,35 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+.. include:: ../../disclaimer-zh_TW.rst
+
+:Original: Documentation/arch/mips/booting.rst
+
+:翻譯:
+
+ å¸å»¶é¨° Yanteng Si <siyanteng@loongson.cn>
+
+.. _tw_booting:
+
+BMIPS設備樹引導
+------------------------
+
+ 一些bootloadersåªæ”¯æŒåœ¨å…§æ ¸é¡åƒé–‹å§‹åœ°å€è™•çš„單一入å£é»žã€‚而其它
+ bootloaders將跳轉到ELF的開始地å€è™•ã€‚兩種方案都支æŒçš„;因爲
+ CONFIG_BOOT_RAW=y and CONFIG_NO_EXCEPT_FILL=y, 所以第一æ¢æŒ‡ä»¤
+ 會立å³è·³è½‰åˆ°kernel_entry()å…¥å£è™•åŸ·è¡Œã€‚
+
+ 與arch/arm情æ³(b)類似,dt感知的引導加載程åºéœ€è¦è¨­ç½®ä»¥ä¸‹å¯„存器:
+
+ a0 : 0
+
+ a1 : 0xffffffff
+
+ a2 : RAM中指å‘設備樹塊的物ç†æŒ‡é‡(在chapterII中定義)。
+ 設備樹å¯ä»¥ä½æ–¼å‰512MB物ç†åœ°å€ç©ºé–“(0x00000000 -
+ 0x1fffffff)的任何ä½ç½®ï¼Œä»¥64ä½é‚Šç•Œå°é½Šã€‚
+
+ 傳統bootloadersä¸æœƒä½¿ç”¨é€™æ¨£çš„約定,並且它們ä¸å‚³å…¥DT塊。
+ 在這種情æ³ä¸‹ï¼ŒLinux將通éŽé¸ä¸­CONFIG_DT_*查找DTB。
+
+ 以上約定åªåœ¨32ä½ç³»çµ±ä¸­å®šç¾©ï¼Œå› çˆ²ç›®å‰æ²’有任何64ä½çš„BMIPS實ç¾ã€‚
+
diff --git a/Documentation/translations/zh_TW/arch/mips/features.rst b/Documentation/translations/zh_TW/arch/mips/features.rst
new file mode 100644
index 000000000000..f69410420035
--- /dev/null
+++ b/Documentation/translations/zh_TW/arch/mips/features.rst
@@ -0,0 +1,14 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+.. include:: ../../disclaimer-zh_TW.rst
+
+:Original: Documentation/arch/mips/features.rst
+
+:翻譯:
+
+ å¸å»¶é¨° Yanteng Si <siyanteng@loongson.cn>
+
+.. _tw_features:
+
+.. kernel-feat:: $srctree/Documentation/features mips
+
diff --git a/Documentation/translations/zh_TW/arch/mips/index.rst b/Documentation/translations/zh_TW/arch/mips/index.rst
new file mode 100644
index 000000000000..4b7d28806489
--- /dev/null
+++ b/Documentation/translations/zh_TW/arch/mips/index.rst
@@ -0,0 +1,30 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+.. include:: ../../disclaimer-zh_TW.rst
+
+:Original: Documentation/arch/mips/index.rst
+
+:翻譯:
+
+ å¸å»¶é¨° Yanteng Si <siyanteng@loongson.cn>
+
+===========================
+MIPS特性文檔
+===========================
+
+.. toctree::
+ :maxdepth: 2
+ :numbered:
+
+ booting
+ ingenic-tcu
+
+ features
+
+.. only:: subproject and html
+
+ Indices
+ =======
+
+ * :ref:`genindex`
+
diff --git a/Documentation/translations/zh_TW/arch/mips/ingenic-tcu.rst b/Documentation/translations/zh_TW/arch/mips/ingenic-tcu.rst
new file mode 100644
index 000000000000..4385c0f3e9cd
--- /dev/null
+++ b/Documentation/translations/zh_TW/arch/mips/ingenic-tcu.rst
@@ -0,0 +1,73 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+.. include:: ../../disclaimer-zh_TW.rst
+
+:Original: Documentation/arch/mips/ingenic-tcu.rst
+
+:翻譯:
+
+ å¸å»¶é¨° Yanteng Si <siyanteng@loongson.cn>
+
+.. _tw_ingenic-tcu:
+
+===============================================
+å›æ­£ JZ47xx SoC定時器/計數器硬件單元
+===============================================
+
+å›æ­£ JZ47xx SoC中的定時器/計數器單元(TCU)是一個多功能硬件塊。它有多é”
+8個通é“,å¯ä»¥ç”¨ä½œè¨ˆæ•¸å™¨ï¼Œè¨ˆæ™‚器,或脈è¡å¯¬åº¦èª¿è£½å™¨ã€‚
+
+- JZ4725B, JZ4750, JZ4755 åªæœ‰ï¼–個TCU通é“。其它SoC都有8個通é“。
+
+- JZ4725B引入了一個ç¨ç«‹çš„通é“,稱爲æ“作系統計時器(OST)。這是一個32ä½å¯
+ 編程定時器。在JZ4760BåŠä»¥ä¸Šåž‹è™Ÿä¸Šï¼Œå®ƒæ˜¯64ä½çš„。
+
+- æ¯å€‹TCU通é“都有自己的時é˜æºï¼Œå¯ä»¥é€šéŽ TCSR 寄存器設置通é“的父級時é˜
+ æºï¼ˆpclkã€extã€rtc)ã€é–‹é—œä»¥åŠåˆ†é »ã€‚
+
+ - 看門狗和OST硬件模塊在它們的寄存器空間中也有相åŒå½¢å¼çš„TCSR寄存器。
+ - 用於關閉/é–‹å•“çš„ TCU 寄存器也å¯ä»¥é—œé–‰/開啓看門狗和 OST 時é˜ã€‚
+
+- æ¯å€‹TCU通é“在兩種模å¼çš„其中一種模å¼ä¸‹é‹è¡Œï¼š
+
+ - æ¨¡å¼ TCU1:通é“無法在ç¡çœ æ¨¡å¼ä¸‹é‹è¡Œï¼Œä½†æ›´æ˜“æ–¼æ“作。
+ - æ¨¡å¼ TCU2:通é“å¯ä»¥åœ¨ç¡çœ æ¨¡å¼ä¸‹é‹è¡Œï¼Œä½†æ“作比 TCU1 通é“複雜一些。
+
+- æ¯å€‹ TCU 通é“的模å¼å–決於使用的SoC:
+
+ - 在最è€çš„SoC(高於JZ4740),八個通é“都é‹è¡Œåœ¨TCU1模å¼ã€‚
+ - 在 JZ4725B,通é“5é‹è¡Œåœ¨TCU2,其它通é“則é‹è¡Œåœ¨TCU1。
+ - 在最新的SoC(JZ4750åŠä¹‹å¾Œï¼‰ï¼Œé€šé“1-2é‹è¡Œåœ¨TCU2,其它通é“則é‹è¡Œ
+ 在TCU1。
+
+- æ¯å€‹é€šé“都å¯ä»¥ç”Ÿæˆä¸­æ–·ã€‚有些通é“共享一æ¢ä¸­æ–·ç·šï¼Œè€Œæœ‰äº›æ²’有,其在SoCåž‹
+ 號之間的變更:
+
+ - 在很è€çš„SoC(JZ4740åŠæ›´ä½Žï¼‰ï¼Œé€šé“0和通é“1有它們自己的中斷線;通
+ é“2-7共享最後一æ¢ä¸­æ–·ç·šã€‚
+ - 在 JZ4725B,通é“0有它自己的中斷線;通é“1-5共享一æ¢ä¸­æ–·ç·šï¼›OST
+ 使用最後一æ¢ä¸­æ–·ç·šã€‚
+ - 在比較新的SoC(JZ4750åŠä»¥å¾Œï¼‰ï¼Œé€šé“5有它自己的中斷線;通
+ é“0-4和(如果是8通é“)6-7全部共享一æ¢ä¸­æ–·ç·šï¼›OST使用最後一æ¢ä¸­
+ 斷線。
+
+實ç¾
+====
+
+TCU硬件的功能分佈在多個驅動程åºï¼š
+
+============== ===================================
+æ™‚é˜ drivers/clk/ingenic/tcu.c
+中斷 drivers/irqchip/irq-ingenic-tcu.c
+定時器 drivers/clocksource/ingenic-timer.c
+OST drivers/clocksource/ingenic-ost.c
+脈è¡å¯¬åº¦èª¿è£½å™¨ drivers/pwm/pwm-jz4740.c
+看門狗 drivers/watchdog/jz4740_wdt.c
+============== ===================================
+
+因爲å¯ä»¥å¾žç›¸åŒçš„寄存器控制屬於ä¸åŒé©…動程åºå’Œæ¡†æž¶çš„TCUçš„å„種功能,所以
+所有這些驅動程åºéƒ½é€šéŽç›¸åŒçš„控制總線通用接å£è¨ªå•å®ƒå€‘的寄存器。
+
+有關TCU驅動程åºçš„設備樹ç¶å®šçš„更多信æ¯ï¼Œè«‹åƒé–±:
+Documentation/devicetree/bindings/timer/ingenic,tcu.yaml.
+
diff --git a/Documentation/translations/zh_TW/arch/openrisc/index.rst b/Documentation/translations/zh_TW/arch/openrisc/index.rst
new file mode 100644
index 000000000000..7585960783fc
--- /dev/null
+++ b/Documentation/translations/zh_TW/arch/openrisc/index.rst
@@ -0,0 +1,33 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+.. include:: ../../disclaimer-zh_TW.rst
+
+:Original: Documentation/arch/openrisc/index.rst
+
+:翻譯:
+
+ å¸å»¶é¨° Yanteng Si <siyanteng@loongson.cn>
+
+.. _tw_openrisc_index:
+
+=================
+OpenRISC 體系架構
+=================
+
+.. toctree::
+ :maxdepth: 2
+
+ openrisc_port
+ todo
+
+Todolist:
+ features
+
+
+.. only:: subproject and html
+
+ Indices
+ =======
+
+ * :ref:`genindex`
+
diff --git a/Documentation/translations/zh_TW/arch/openrisc/openrisc_port.rst b/Documentation/translations/zh_TW/arch/openrisc/openrisc_port.rst
new file mode 100644
index 000000000000..422fe9f7a3f2
--- /dev/null
+++ b/Documentation/translations/zh_TW/arch/openrisc/openrisc_port.rst
@@ -0,0 +1,128 @@
+.. include:: ../../disclaimer-zh_TW.rst
+
+:Original: Documentation/arch/openrisc/openrisc_port.rst
+
+:翻譯:
+
+ å¸å»¶é¨° Yanteng Si <siyanteng@loongson.cn>
+
+.. _tw_openrisc_port:
+
+==============
+OpenRISC Linux
+==============
+
+這是Linuxå°OpenRISC類微處ç†å™¨çš„移æ¤ï¼›å…·é«”來說,最早移æ¤ç›®æ¨™æ˜¯32ä½
+OpenRISC 1000系列(或1k)。
+
+關於OpenRISC處ç†å™¨å’Œæ­£åœ¨é€²è¡Œä¸­çš„開發的信æ¯:
+
+ ======= =============================
+ 網站 https://openrisc.io
+ 郵箱 openrisc@lists.librecores.org
+ ======= =============================
+
+---------------------------------------------------------------------
+
+OpenRISC工具éˆå’ŒLinux的構建指å—
+===============================
+
+爲了構建和é‹è¡ŒLinux for OpenRISC,你至少需è¦ä¸€å€‹åŸºæœ¬çš„工具éˆï¼Œæˆ–許
+還需è¦æž¶æ§‹æ¨¡æ“¬å™¨ã€‚ 這è£æ¦‚述了準備就ä½é€™äº›éƒ¨åˆ†çš„步驟。
+
+1) 工具éˆ
+
+工具éˆäºŒé€²åˆ¶æ–‡ä»¶å¯ä»¥å¾žopenrisc.io或我們的github發佈é é¢ç²å¾—。ä¸åŒ
+工具éˆçš„構建指å—å¯ä»¥åœ¨openrisc.io或Stafford的工具éˆæ§‹å»ºå’Œç™¼ä½ˆè…³æœ¬
+中找到。
+
+ ====== =================================================
+ 二進制 https://github.com/openrisc/or1k-gcc/releases
+ å·¥å…·éˆ https://openrisc.io/software
+ 構建 https://github.com/stffrdhrn/or1k-toolchain-build
+ ====== =================================================
+
+2) 構建
+
+åƒå¾€å¸¸ä¸€æ¨£æ§‹å»ºLinux內核::
+
+ make ARCH=openrisc CROSS_COMPILE="or1k-linux-" defconfig
+ make ARCH=openrisc CROSS_COMPILE="or1k-linux-"
+
+3) 在FPGA上é‹è¡Œï¼ˆå¯é¸)
+
+OpenRISC社å€é€šå¸¸ä½¿ç”¨FuseSoC來管ç†æ§‹å»ºå’Œç·¨ç¨‹SoC到FPGA中。 下é¢æ˜¯ç”¨
+OpenRISC SoCå°De0 Nano開發æ¿é€²è¡Œç·¨ç¨‹çš„一個例å­ã€‚ 在構建éŽç¨‹ä¸­ï¼Œ
+FPGA RTL是從FuseSoC IP核庫中下載的代碼,並使用FPGA供應商工具構建。
+二進制文件用openocd加載到電路æ¿ä¸Šã€‚
+
+::
+
+ git clone https://github.com/olofk/fusesoc
+ cd fusesoc
+ sudo pip install -e .
+
+ fusesoc init
+ fusesoc build de0_nano
+ fusesoc pgm de0_nano
+
+ openocd -f interface/altera-usb-blaster.cfg \
+ -f board/or1k_generic.cfg
+
+ telnet localhost 4444
+ > init
+ > halt; load_image vmlinux ; reset
+
+4) 在模擬器上é‹è¡Œï¼ˆå¯é¸ï¼‰
+
+QEMU是一個處ç†å™¨ä»¿çœŸå™¨ï¼Œæˆ‘們推薦它來模擬OpenRISC平臺。 請按照QEMU網
+站上的OpenRISC說明,讓Linux在QEMU上é‹è¡Œã€‚ ä½ å¯ä»¥è‡ªå·±æ§‹å»ºQEMU,但你的
+Linux發行版å¯èƒ½æ供了支æŒOpenRISC的二進制包。
+
+ ============= ======================================================
+ qemu openrisc https://wiki.qemu.org/Documentation/Platforms/OpenRISC
+ ============= ======================================================
+
+---------------------------------------------------------------------
+
+術語表
+======
+
+代碼中使用了以下符號約定以將範åœé™åˆ¶åœ¨å¹¾å€‹ç‰¹å®šè™•ç†å™¨å¯¦ç¾ä¸Šï¼š
+
+========= =======================
+openrisc: OpenRISC類型處ç†å™¨
+or1k: OpenRISC 1000系列處ç†å™¨
+or1200: OpenRISC 1200處ç†å™¨
+========= =======================
+
+---------------------------------------------------------------------
+
+æ­·å²
+====
+
+2003-11-18 Matjaz Breskvar (phoenix@bsemi.com)
+ å°‡linuxåˆæ­¥ç§»æ¤åˆ°OpenRISC或32架構。
+ 所有的核心功能都實ç¾äº†ï¼Œä¸¦ä¸”å¯ä»¥ä½¿ç”¨ã€‚
+
+2003-12-08 Matjaz Breskvar (phoenix@bsemi.com)
+ 徹底改變TLB失誤處ç†ã€‚
+ é‡å¯«ç•°å¸¸è™•ç†ã€‚
+ 在默èªçš„initrd中實ç¾äº†sash-3.6的所有功能。
+ 大幅改進的版本。
+
+2004-04-10 Matjaz Breskvar (phoenix@bsemi.com)
+ 大é‡çš„bug修復。
+ 支æŒä»¥å¤ªç¶²ï¼Œhttpå’Œtelnetæœå‹™å™¨åŠŸèƒ½ã€‚
+ å¯ä»¥é‹è¡Œè¨±å¤šæ¨™æº–çš„linux應用程åºã€‚
+
+2004-06-26 Matjaz Breskvar (phoenix@bsemi.com)
+ 移æ¤åˆ°2.6.x。
+
+2004-11-30 Matjaz Breskvar (phoenix@bsemi.com)
+ 大é‡çš„bug修復和增強功能。
+ 增加了opencores framebuffer驅動。
+
+2010-10-09 Jonas Bonn (jonas@southpole.se)
+ é‡å¤§é‡å¯«ï¼Œä½¿å…¶èˆ‡ä¸Šæ¸¸çš„Linux 2.6.36看齊。
+
diff --git a/Documentation/translations/zh_TW/arch/openrisc/todo.rst b/Documentation/translations/zh_TW/arch/openrisc/todo.rst
new file mode 100644
index 000000000000..df261b9e3002
--- /dev/null
+++ b/Documentation/translations/zh_TW/arch/openrisc/todo.rst
@@ -0,0 +1,24 @@
+.. include:: ../../disclaimer-zh_TW.rst
+
+:Original: Documentation/arch/openrisc/todo.rst
+
+:翻譯:
+
+ å¸å»¶é¨° Yanteng Si <siyanteng@loongson.cn>
+
+.. _tw_openrisc_todo.rst:
+
+========
+待辦事項
+========
+
+OpenRISC Linux的移æ¤å·²ç¶“完全投入使用,並且從 2.6.35 開始就一直在上游åŒæ­¥ã€‚
+然而,還有一些剩餘的項目需è¦åœ¨æœªä¾†å¹¾å€‹æœˆå…§å®Œæˆã€‚ 下é¢æ˜¯ä¸€å€‹å³å°‡é€²è¡Œèª¿æŸ¥çš„已知
+ä¸ç›¡å®Œç¾Žçš„項目列表,å³æˆ‘們的待辦事項列表。
+
+- 實ç¾å…¶é¤˜çš„DMA API……dma_map_sg等。
+
+- 完æˆé‡å‘½å清ç†å·¥ä½œâ€¦â€¦ä»£ç¢¼ä¸­æ到了or32,這是架構的一個è€å字。 我們
+ 已經確定的å字是or1k,這個改變正在以緩慢ç©ç´¯çš„æ–¹å¼é€²è¡Œã€‚ ç›®å‰ï¼Œor32相當
+ 於or1k。
+
diff --git a/Documentation/translations/zh_TW/arch/parisc/debugging.rst b/Documentation/translations/zh_TW/arch/parisc/debugging.rst
new file mode 100644
index 000000000000..c9ee804aebbd
--- /dev/null
+++ b/Documentation/translations/zh_TW/arch/parisc/debugging.rst
@@ -0,0 +1,46 @@
+.. include:: ../../disclaimer-zh_TW.rst
+
+:Original: Documentation/arch/parisc/debugging.rst
+
+:翻譯:
+
+ å¸å»¶é¨° Yanteng Si <siyanteng@loongson.cn>
+
+.. _tw_parisc_debugging:
+
+=================
+調試PA-RISC
+=================
+
+好å§ï¼Œé€™è£æœ‰ä¸€äº›é—œæ–¼èª¿è©¦linux/parisc的較底層部分的信æ¯ã€‚
+
+
+1. 絕å°åœ°å€
+=====================
+
+很多彙編代碼目å‰é‹è¡Œåœ¨å¯¦æ¨¡å¼ä¸‹ï¼Œé€™æ„味ç€æœƒä½¿ç”¨çµ•å°åœ°å€ï¼Œè€Œä¸æ˜¯åƒå…§æ ¸å…¶ä»–
+部分那樣使用虛擬地å€ã€‚è¦å°‡çµ•å°åœ°å€è½‰æ›çˆ²è™›æ“¬åœ°å€ï¼Œä½ å¯ä»¥åœ¨System.map中查
+找,添加__PAGE_OFFSET(目å‰æ˜¯0x10000000)。
+
+
+2. HPMCs
+========
+
+當實模å¼çš„代碼試圖訪å•ä¸å­˜åœ¨çš„內存時,會出ç¾HPMC(high priority machine
+check)而ä¸æ˜¯å…§æ ¸oops。若è¦èª¿è©¦HPMC,請嘗試找到系統響應程åº/請求程åºåœ°å€ã€‚
+系統請求程åºåœ°å€æ‡‰è©²èˆ‡ï¼ˆæŸï¼‰è™•ç†å™¨çš„HPA(I/O範åœå…§çš„高地å€ï¼‰ç›¸åŒ¹é…;系統響應程
+åºåœ°å€æ˜¯å¯¦æ¨¡å¼ä»£ç¢¼è©¦åœ–訪å•çš„地å€ã€‚
+
+系統響應程åºåœ°å€çš„典型值是大於__PAGE_OFFSET (0x10000000)的地å€ï¼Œé€™æ„味ç€
+在實模å¼è©¦åœ–訪å•å®ƒä¹‹å‰ï¼Œè™›æ“¬åœ°å€æ²’有被翻譯æˆç‰©ç†åœ°å€ã€‚
+
+
+3. 有趣的Qä½
+============
+
+æŸäº›éžå¸¸é—œéµçš„代碼必須清除PSW中的Qä½ã€‚當Qä½è¢«æ¸…除時,CPUä¸æœƒæ›´æ–°ä¸­æ–·è™•ç†
+程åºæ‰€è®€å–的寄存器,以找出機器被中斷的ä½ç½®â€”—所以如果你在清除Qä½çš„指令和å†
+次設置Qä½çš„RFI之間é‡åˆ°ä¸­æ–·ï¼Œä½ ä¸çŸ¥é“它到底發生在哪è£ã€‚如果你幸é‹çš„話,IAOQ
+會指å‘清除Qä½çš„指令,如果你ä¸å¹¸é‹çš„話,它會指å‘任何地方。通常Qä½çš„å•é¡Œæœƒ
+表ç¾çˆ²ç„¡æ³•è§£é‡‹çš„系統掛起或物ç†å…§å­˜è¶Šç•Œã€‚
+
diff --git a/Documentation/translations/zh_TW/arch/parisc/index.rst b/Documentation/translations/zh_TW/arch/parisc/index.rst
new file mode 100644
index 000000000000..35941bf68c88
--- /dev/null
+++ b/Documentation/translations/zh_TW/arch/parisc/index.rst
@@ -0,0 +1,32 @@
+.. SPDX-License-Identifier: GPL-2.0
+.. include:: ../../disclaimer-zh_TW.rst
+
+:Original: Documentation/arch/parisc/index.rst
+
+:翻譯:
+
+ å¸å»¶é¨° Yanteng Si <siyanteng@loongson.cn>
+
+.. _tw_parisc_index:
+
+====================
+PA-RISC體系架構
+====================
+
+.. toctree::
+ :maxdepth: 2
+
+ debugging
+ registers
+
+Todolist:
+
+ features
+
+.. only:: subproject and html
+
+ Indices
+ =======
+
+ * :ref:`genindex`
+
diff --git a/Documentation/translations/zh_TW/arch/parisc/registers.rst b/Documentation/translations/zh_TW/arch/parisc/registers.rst
new file mode 100644
index 000000000000..695acb21134a
--- /dev/null
+++ b/Documentation/translations/zh_TW/arch/parisc/registers.rst
@@ -0,0 +1,157 @@
+.. include:: ../../disclaimer-zh_TW.rst
+
+:Original: Documentation/arch/parisc/registers.rst
+
+:翻譯:
+
+ å¸å»¶é¨° Yanteng Si <siyanteng@loongson.cn>
+
+.. _tw_parisc_registers:
+
+=========================
+Linux/PA-RISC的寄存器用法
+=========================
+
+[ 用星號表示目å‰å°šæœªå¯¦ç¾çš„計劃用途。 ]
+
+ABI約定的通用寄存器
+===================
+
+控制寄存器
+----------
+
+============================ =================================
+CR 0 (æ¢å¾©è¨ˆæ•¸å™¨) 用於ptrace
+CR 1-CR 7(無定義) 未使用
+CR 8 (Protection ID) æ¯é€²ç¨‹å€¼*
+CR 9, 12, 13 (PIDS) 未使用
+CR10 (CCR) FPU延é²ä¿å­˜*
+CR11 按照ABIçš„è¦å®šï¼ˆSAR)
+CR14 (中斷å‘é‡) åˆå§‹åŒ–爲 fault_vector
+CR15 (EIEM) 所有ä½åˆå§‹åŒ–爲1*
+CR16 (間隔計時器) 讀å–週期數/寫入開始時間間隔計時器
+CR17-CR22 中斷åƒæ•¸
+CR19 中斷指令寄存器
+CR20 中斷空間寄存器
+CR21 中斷å移é‡å¯„存器
+CR22 中斷 PSW
+CR23 (EIRR) 讀å–未決中斷/寫入清除ä½
+CR24 (TR 0) 內核空間é ç›®éŒ„指é‡
+CR25 (TR 1) 用戶空間é ç›®éŒ„指é‡
+CR26 (TR 2) ä¸ä½¿ç”¨
+CR27 (TR 3) 線程æ述符指é‡
+CR28 (TR 4) ä¸ä½¿ç”¨
+CR29 (TR 5) ä¸ä½¿ç”¨
+CR30 (TR 6) ç•¶å‰ / 0
+CR31 (TR 7) 臨時寄存器,在ä¸åŒåœ°æ–¹ä½¿ç”¨
+============================ =================================
+
+空間寄存器(內核模å¼ï¼‰
+----------------------
+
+======== ==============================
+SR0 臨時空間寄存器
+SR4-SR7 設置爲0
+SR1 臨時空間寄存器
+SR2 內核ä¸æ‡‰è©²ç ´å£žå®ƒ
+SR3 用於用戶空間訪å•ï¼ˆç•¶å‰é€²ç¨‹ï¼‰
+======== ==============================
+
+空間寄存器(用戶模å¼ï¼‰
+----------------------
+
+======== ============================
+SR0 臨時空間寄存器
+SR1 臨時空間寄存器
+SR2 ä¿å­˜Linux gateway page的空間
+SR3 在內核中ä¿å­˜ç”¨æˆ¶åœ°å€ç©ºé–“的值
+SR4-SR7 定義了用戶/內核的短地å€ç©ºé–“
+======== ============================
+
+
+處ç†å™¨ç‹€æ…‹å­—
+------------
+
+====================== ================================================
+W (64ä½åœ°å€ï¼‰ 0
+E (å°å°¾ç«¯ï¼‰ 0
+S (安全間隔計時器) 0
+T (產生分支陷阱) 0
+H (高特權級陷阱) 0
+L (低特權級陷阱) 0
+N (撤銷下一æ¢æŒ‡ä»¤ï¼‰ 被C代碼使用
+X (數據存儲中斷ç¦ç”¨ï¼‰ 0
+B (產生分支) 被C代碼使用
+C (代碼地å€è½‰è­¯ï¼‰ 1, 在執行實模å¼ä»£ç¢¼æ™‚爲0
+V (除法步長校正) 被C代碼使用
+M (HPMC 掩碼) 0, 在執行HPMCæ“作*時爲1
+C/B (進/借 ä½ï¼‰ 被C代碼使用
+O (有åºå¼•ç”¨ï¼‰ 1*
+F (性能監視器) 0
+R (回收計數器陷阱) 0
+Q (收集中斷狀態) 1 (在rfi之å‰çš„代碼中爲0)
+P (ä¿è­·æ¨™è­˜ç¬¦ï¼‰ 1*
+D (數據地å€è½‰è­¯ï¼‰ 1, 在執行實模å¼ä»£ç¢¼æ™‚爲0
+I (外部中斷掩碼) ç”±cli()/sti()å®ä½¿ç”¨ã€‚
+====================== ================================================
+
+“隱形â€å¯„存器(影å­å¯„存器)
+---------------------------
+
+============= ===================
+PSW W 默èªå€¼ 0
+PSW E 默èªå€¼ 0
+å½±å­å¯„存器 被中斷處ç†ä»£ç¢¼ä½¿ç”¨
+TOCå•“ç”¨ä½ 1
+============= ===================
+
+----------------------------------------------------------
+
+PA-RISC架構定義了7個寄存器作爲“影å­å¯„存器â€ã€‚這些寄存器在
+RETURN FROM INTERRUPTION AND RESTORE指令中使用,通éŽæ¶ˆ
+除中斷處ç†ç¨‹åºä¸­å°ä¸€èˆ¬å¯„存器(GR)的ä¿å­˜å’Œæ¢å¾©çš„需è¦ä¾†æ¸›
+少狀態ä¿å­˜å’Œæ¢å¾©æ™‚間。影å­å¯„存器是GRs 1, 8, 9, 16, 17,
+24和25。
+
+-------------------------------------------------------------------------
+
+寄存器使用說明,最åˆç”±John Marvinæ供,並由Randolph Chungæ供一些補充說明。
+
+å°æ–¼é€šç”¨å¯„存器:
+
+r1,r2,r19-r26,r28,r29 & r31å¯ä»¥åœ¨ä¸ä¿å­˜å®ƒå€‘的情æ³ä¸‹è¢«ä½¿ç”¨ã€‚當然,如果你
+關心它們,在調用å¦ä¸€å€‹ç¨‹åºä¹‹å‰ï¼Œä½ ä¹Ÿéœ€è¦ä¿å­˜å®ƒå€‘。上é¢çš„一些寄存器確實
+有特殊的å«ç¾©ï¼Œä½ æ‡‰è©²æ³¨æ„一下:
+
+ r1:
+ addil指令是硬性è¦å®šå°‡å…¶çµæžœæ”¾åœ¨r1中,所以如果你使用這æ¢æŒ‡ä»¤è¦
+ 注æ„這點。
+
+ r2:
+ 這就是返回指é‡ã€‚一般來說,你ä¸æƒ³ä½¿ç”¨å®ƒï¼Œå› çˆ²ä½ éœ€è¦é€™å€‹æŒ‡é‡ä¾†è¿”
+ 回給你的調用者。然而,它與這組寄存器組åˆåœ¨ä¸€èµ·ï¼Œå› çˆ²èª¿ç”¨è€…ä¸èƒ½
+ ä¾è³´ä½ è¿”回時的值是相åŒçš„,也就是說,你å¯ä»¥å°‡r2複製到å¦ä¸€å€‹å¯„å­˜
+ 器,並在作廢r2後通éŽè©²å¯„存器返回,這應該ä¸æœƒçµ¦èª¿ç”¨ç¨‹åºå¸¶ä¾†å•é¡Œã€‚
+
+ r19-r22:
+ 這些通常被èªçˆ²æ˜¯è‡¨æ™‚寄存器。
+ 請注æ„,在64ä½ä¸­å®ƒå€‘是arg7-arg4。
+
+ r23-r26:
+ 這些是arg3-arg0,也就是說,如果你ä¸å†é—œå¿ƒå‚³å…¥çš„值,你å¯ä»¥ä½¿ç”¨
+ 它們。
+
+ r28,r29:
+ 這倆是ret0和ret1。它們是你傳入返回值的地方。r28是主返回值。當返回
+ å°çµæ§‹é«”時,r29也å¯ä»¥ç”¨ä¾†å°‡æ•¸æ“šå‚³å›žçµ¦èª¿ç”¨ç¨‹åºã€‚
+
+ r30:
+ 棧指é‡
+
+ r31:
+ ble指令將返回指é‡æ”¾åœ¨é€™è£ã€‚
+
+
+ r3-r18,r27,r30需è¦è¢«ä¿å­˜å’Œæ¢å¾©ã€‚r3-r18åªæ˜¯ä¸€èˆ¬ç”¨é€”的寄存器。
+ r27是數據指é‡ï¼Œç”¨ä¾†ä½¿å°å…¨å±€è®Šé‡çš„引用更容易。r30是棧指é‡ã€‚
+
diff --git a/Documentation/translations/zh_TW/cpu-freq/core.rst b/Documentation/translations/zh_TW/cpu-freq/core.rst
index f1951e1b23bb..4f98d1e9f34b 100644
--- a/Documentation/translations/zh_TW/cpu-freq/core.rst
+++ b/Documentation/translations/zh_TW/cpu-freq/core.rst
@@ -1,13 +1,15 @@
.. SPDX-License-Identifier: GPL-2.0
-
.. include:: ../disclaimer-zh_TW.rst
-:Original: :doc:`../../../cpu-freq/core`
-:Translator: Yanteng Si <siyanteng@loongson.cn>
- Hu Haowen <src.res.211@gmail.com>
+:Original: Documentation/cpu-freq/core.rst
+
+:翻譯:
+
+ å¸å»¶é¨° Yanteng Si <siyanteng@loongson.cn>
-.. _tw_core.rst:
+:æ ¡è­¯:
+ å”è—舟 Tang Yizhou <tangyeechou@gmail.com>
====================================
CPUFreq核心和CPUFreq通知器的通用說明
@@ -29,10 +31,10 @@ CPUFreq核心和CPUFreq通知器的通用說明
======================
cpufreq核心代碼ä½æ–¼drivers/cpufreq/cpufreq.c中。這些cpufreq代碼爲CPUFreq架構的驅
-動程åºï¼ˆé‚£äº›æ“作硬體切æ›é »çŽ‡çš„ä»£ç¢¼ï¼‰ä»¥åŠ "通知器 "æ供了一個標準化的接å£ã€‚
-這些是設備驅動程åºæˆ–需è¦äº†è§£ç­–略變化的其它內核部分(如 ACPI 熱é‡ç®¡ç†ï¼‰æˆ–所有頻率更改(除
-計時代碼外),甚至需è¦å¼·åˆ¶ç¢ºå®šé€Ÿåº¦é™åˆ¶çš„通知器(如 ARM 架構上的 LCD 驅動程åºï¼‰ã€‚
-此外, 內核 "常數" loops_per_jiffy會根據頻率變化而更新。
+動程åºï¼ˆé‚£äº›åŸ·è¡Œç¡¬ä»¶é »çŽ‡åˆ‡æ›çš„ä»£ç¢¼ï¼‰ä»¥åŠ "通知器" æ供了一個標準化的接å£ã€‚
+包括設備驅動程åºï¼›éœ€è¦äº†è§£ç­–略變化(如 ACPI 熱é‡ç®¡ç†ï¼‰ï¼Œæˆ–所有頻率變化(如計時代碼),
+甚至需è¦å¼·åˆ¶é™åˆ¶çˆ²æŒ‡å®šé »çŽ‡ï¼ˆå¦‚ ARM 架構上的 LCD 驅動程åºï¼‰çš„其它內核組件。
+此外,內核 "常數" loops_per_jiffy 會根據頻率變化而更新。
cpufreq策略的引用計數由 cpufreq_cpu_get å’Œ cpufreq_cpu_put 來完æˆï¼Œä»¥ç¢ºä¿ cpufreq é©…
動程åºè¢«æ­£ç¢ºåœ°è¨»å†Šåˆ°æ ¸å¿ƒä¸­ï¼Œä¸¦ä¸”驅動程åºåœ¨ cpufreq_put_cpu 被調用之å‰ä¸æœƒè¢«å¸è¼‰ã€‚這也ä¿è­‰
@@ -41,10 +43,10 @@ cpufreq策略的引用計數由 cpufreq_cpu_get å’Œ cpufreq_cpu_put 來完æˆï¼Œ
2. CPUFreq 通知器
====================
-CPUFreq通知器符åˆæ¨™æº–的內核通知器接å£ã€‚
+CPUFreq通知器éµå¾ªæ¨™æº–的內核通知器接å£ã€‚
關於通知器的細節請åƒé–± linux/include/linux/notifier.h。
-這裡有兩個ä¸åŒçš„CPUfreq通知器 - 策略通知器和轉æ›é€šçŸ¥å™¨ã€‚
+這è£æœ‰å…©å€‹ä¸åŒçš„CPUfreq通知器 - 策略通知器和轉æ›é€šçŸ¥å™¨ã€‚
2.1 CPUFreq策略通知器
@@ -62,27 +64,27 @@ CPUFreq通知器符åˆæ¨™æº–的內核通知器接å£ã€‚
2.2 CPUFreq轉æ›é€šçŸ¥å™¨
--------------------------------
-當CPUfreq驅動切æ›CPU核心頻率時,策略中的æ¯å€‹åœ¨ç·šCPU都會收到兩次通知,這些變化沒有任何外部干
+當CPUfreq驅動切æ›CPU核心頻率時,策略中的æ¯å€‹åœ¨ç·šCPU都會收到兩次通知,這些變化沒有任何外部幹
é ã€‚
第二個åƒæ•¸æŒ‡å®šéšŽæ®µ - CPUFREQ_PRECHANGE or CPUFREQ_POSTCHANGE.
第三個åƒæ•¸æ˜¯ä¸€å€‹åŒ…å«å¦‚下值的çµæ§‹é«”cpufreq_freqs:
-===== ====================
-cpu å—影響cpu的編號
+====== ===============================
+policy 指å‘struct cpufreq_policy的指é‡
old 舊頻率
new 新頻率
flags cpufreq驅動的標誌
-===== ====================
+====== ===============================
3. å«æœ‰Operating Performance Point (OPP)çš„CPUFreq表的生æˆ
==================================================================
關於OPP的細節請åƒé–± Documentation/power/opp.rst
dev_pm_opp_init_cpufreq_table -
- 這個功能æ供了一個隨時å¯ç”¨çš„轉æ›ç¨‹åºï¼Œç”¨ä¾†å°‡OPP層關於å¯ç”¨é »çŽ‡çš„內部信æ¯ç¿»è­¯æˆä¸€ç¨®å®¹æ˜“æ供給
- cpufreqçš„æ ¼å¼ã€‚
+ 這個函數æ供了一個隨時å¯ç”¨çš„轉æ›ä¾‹ç¨‹ï¼Œç”¨ä¾†å°‡OPP層關於å¯ç”¨é »çŽ‡çš„內部信æ¯ç¿»è­¯æˆä¸€ç¨®
+ cpufreq易於處ç†çš„æ ¼å¼ã€‚
.. Warning::
@@ -101,7 +103,7 @@ dev_pm_opp_init_cpufreq_table -
.. note::
- 該函數åªæœ‰åœ¨CONFIG_PM_OPP之外還啓用了CONFIG_CPU_FREQ時æ‰å¯ç”¨ã€‚
+ 該函數åªæœ‰åœ¨CONFIG_PM_OPP之外還啓用了CONFIG_CPU_FREQ時纔å¯ç”¨ã€‚
dev_pm_opp_free_cpufreq_table
釋放dev_pm_opp_init_cpufreq_table分é…的表。
diff --git a/Documentation/translations/zh_TW/cpu-freq/cpu-drivers.rst b/Documentation/translations/zh_TW/cpu-freq/cpu-drivers.rst
index 671b1bf0e2c5..add3de2d4523 100644
--- a/Documentation/translations/zh_TW/cpu-freq/cpu-drivers.rst
+++ b/Documentation/translations/zh_TW/cpu-freq/cpu-drivers.rst
@@ -2,12 +2,15 @@
.. include:: ../disclaimer-zh_TW.rst
-:Original: :doc:`../../../cpu-freq/cpu-drivers`
-:Translator: Yanteng Si <siyanteng@loongson.cn>
- Hu Haowen <src.res.211@gmail.com>
+:Original: Documentation/cpu-freq/cpu-drivers.rst
-.. _tw_cpu-drivers.rst:
+:翻譯:
+ å¸å»¶é¨° Yanteng Si <siyanteng@loongson.cn>
+
+:æ ¡è­¯:
+
+ å”è—舟 Tang Yizhou <tangyeechou@gmail.com>
=======================================
如何實ç¾ä¸€å€‹æ–°çš„CPUFreq處ç†å™¨é©…動程åºï¼Ÿ
@@ -37,15 +40,15 @@
1. 怎麼åšï¼Ÿ
===========
-如此,你剛剛得到了一個全新的CPU/晶片組åŠå…¶æ•¸æ“šæ‰‹å†Šï¼Œä¸¦å¸Œæœ›çˆ²é€™å€‹CPU/晶片組添加cpufreq
-支æŒï¼Ÿå¾ˆå¥½ï¼Œé€™è£¡æœ‰ä¸€äº›è‡³é—œé‡è¦çš„æ示:
+如果,你剛剛得到了一個全新的CPU/芯片組åŠå…¶æ•¸æ“šæ‰‹å†Šï¼Œä¸¦å¸Œæœ›çˆ²é€™å€‹CPU/芯片組添加cpufreq
+支æŒï¼Ÿå¾ˆå¥½ï¼Œé€™è£æœ‰ä¸€äº›è‡³é—œé‡è¦çš„æ示:
1.1 åˆå§‹åŒ–
----------
-首先,在__initcall_level_7 (module_init())或更é å¾Œçš„函數中檢查這個內核是å¦
-é‹è¡Œåœ¨æ­£ç¢ºçš„CPU和正確的晶片組上。如果是,則使用cpufreq_register_driver()å‘
+首先,在 __initcall level 7 (module_init())或更é å¾Œçš„函數中檢查這個內核是å¦
+é‹è¡Œåœ¨æ­£ç¢ºçš„CPU和正確的芯片組上。如果是,則使用cpufreq_register_driver()å‘
CPUfreq核心層註冊一個cpufreq_driverçµæ§‹é«”。
çµæ§‹é«”cpufreq_driver應該包å«ä»€éº¼æˆå“¡?
@@ -59,11 +62,11 @@ CPUfreq核心層註冊一個cpufreq_driverçµæ§‹é«”。
.setpolicy 或 .fast_switch 或 .target 或 .target_index - 差異見
下文。
-並且å¯é¸æ“‡
+其它å¯é¸æˆå“¡
- .flags - cpufreq核的æ示。
+ .flags - 給cpufreq核心的æ示。
- .driver_data - cpufreq驅動程åºçš„特定數據。
+ .driver_data - cpufreq驅動程åºçš„特有數據。
.get_intermediate å’Œ target_intermediate - 用於在改變CPU頻率時切æ›åˆ°ç©©å®š
的頻率。
@@ -72,18 +75,18 @@ CPUfreq核心層註冊一個cpufreq_driverçµæ§‹é«”。
.bios_limit - 返回HW/BIOSå°CPU的最大頻率é™åˆ¶å€¼ã€‚
- .exit - 一個指å‘per-policy清ç†å‡½æ•¸çš„指é‡ï¼Œè©²å‡½æ•¸åœ¨cpu熱æ’æ‹”éŽç¨‹çš„CPU_POST_DEAD
+ .exit - 一個指å‘per-policy清ç†å‡½æ•¸çš„指é‡ï¼Œè©²å‡½æ•¸åœ¨CPU熱æ’æ‹”éŽç¨‹çš„CPU_POST_DEAD
階段被調用。
.suspend - 一個指å‘per-policyæš«åœå‡½æ•¸çš„指é‡ï¼Œè©²å‡½æ•¸åœ¨é—œä¸­æ–·ä¸”在該策略的調節器åœæ­¢
後被調用。
- .resume - 一個指å‘per-policyæ¢å¾©å‡½æ•¸çš„指é‡ï¼Œè©²å‡½æ•¸åœ¨é—œä¸­æ–·ä¸”在調節器å†ä¸€æ¬¡é–‹å§‹å‰è¢«
+ .resume - 一個指å‘per-policyæ¢å¾©å‡½æ•¸çš„指é‡ï¼Œè©²å‡½æ•¸åœ¨é—œä¸­æ–·ä¸”在調節器å†ä¸€æ¬¡å•“å‹•å‰è¢«
調用。
.ready - 一個指å‘per-policy準備函數的指é‡ï¼Œè©²å‡½æ•¸åœ¨ç­–略完全åˆå§‹åŒ–之後被調用。
- .attr - 一個指å‘NULLçµå°¾çš„"struct freq_attr"列表的指é‡ï¼Œè©²å‡½æ•¸å…許導出值到
+ .attr - 一個指å‘NULLçµå°¾çš„"struct freq_attr"列表的指é‡ï¼Œè©²åˆ—表å…許導出值到
sysfs。
.boost_enabled - 如果設置,則啓用æå‡(boost)頻率。
@@ -94,95 +97,93 @@ CPUfreq核心層註冊一個cpufreq_driverçµæ§‹é«”。
1.2 Per-CPU åˆå§‹åŒ–
------------------
-æ¯ç•¶ä¸€å€‹æ–°çš„CPU被註冊到設備模型中,或者在cpufreq驅動註冊自己之後,如果此CPUçš„cpufreqç­–
-ç•¥ä¸å­˜åœ¨ï¼Œå‰‡æœƒèª¿ç”¨per-policyçš„åˆå§‹åŒ–函數cpufreq_driver.init。請注æ„,.init()å’Œ.exit()程åº
-åªå°ç­–略調用一次,而ä¸æ˜¯å°ç­–略管ç†çš„æ¯å€‹CPU調用一次。它需è¦ä¸€å€‹ ``struct cpufreq_policy
+æ¯ç•¶ä¸€å€‹æ–°çš„CPU被註冊到設備模型中,或者當cpufreq驅動註冊自身之後,如果此CPUçš„cpufreqç­–
+ç•¥ä¸å­˜åœ¨ï¼Œå‰‡æœƒèª¿ç”¨per-policyçš„åˆå§‹åŒ–函數cpufreq_driver.init。請注æ„,.init()å’Œ.exit()例程
+åªçˆ²æŸå€‹ç­–略調用一次,而ä¸æ˜¯å°è©²ç­–略管ç†çš„æ¯å€‹CPU調用一次。它需è¦ä¸€å€‹ ``struct cpufreq_policy
*policy`` 作爲åƒæ•¸ã€‚ç¾åœ¨è©²æ€Žéº¼åšå‘¢ï¼Ÿ
如果有必è¦ï¼Œè«‹åœ¨ä½ çš„CPU上激活CPUfreq功能支æŒã€‚
-然後,驅動程åºå¿…須填寫以下數值:
+然後,驅動程åºå¿…須填寫以下值:
+-----------------------------------+--------------------------------------+
-|policy->cpuinfo.min_freq 和 | |
-|policy->cpuinfo.max_freq | 該CPU支æŒçš„最低和最高頻率(kHz) |
-| | |
-| | |
+|policy->cpuinfo.min_freqå’Œ | 該CPU支æŒçš„最低和最高頻率(kHz) |
+|policy->cpuinfo.max_freq | |
+| | |
+-----------------------------------+--------------------------------------+
-|policy->cpuinfo.transition_latency | |
-| | CPU在兩個頻率之間切æ›æ‰€éœ€çš„時間,以 |
-| | ç´ç§’爲單ä½ï¼ˆå¦‚é©ç”¨ï¼Œå¦å‰‡æŒ‡å®š |
-| | CPUFREQ_ETERNAL) |
+|policy->cpuinfo.transition_latency | CPU在兩個頻率之間切æ›æ‰€éœ€çš„時間,以 |
+| | ç´ç§’爲單ä½ï¼ˆå¦‚ä¸é©ç”¨ï¼Œè¨­å®šçˆ² |
+| | CPUFREQ_ETERNAL) |
+| | |
+-----------------------------------+--------------------------------------+
-|policy->cur | 該CPU當å‰çš„工作頻率(如é©ç”¨) |
-| | |
+|policy->cur | 該CPU當å‰çš„工作頻率(如é©ç”¨) |
+| | |
+-----------------------------------+--------------------------------------+
-|policy->min, | |
-|policy->max, | |
-|policy->policy and, if necessary, | |
-|policy->governor | 必須包å«è©²cpuçš„ 「默èªç­–ç•¥ã€ã€‚ç¨å¾Œ |
-| | 會用這些值調用 |
-| | cpufreq_driver.verify and either |
-| | cpufreq_driver.setpolicy or |
-| | cpufreq_driver.target/target_index |
-| | |
+|policy->min, | 必須包å«è©²CPUçš„"默èªç­–ç•¥"。ç¨å¾Œ |
+|policy->max, | 會用這些值調用 |
+|policy->policy and, if necessary, | cpufreq_driver.verify和下é¢å‡½æ•¸ |
+|policy->governor | 之一:cpufreq_driver.setpolicy或 |
+| | cpufreq_driver.target/target_index |
+| | |
+-----------------------------------+--------------------------------------+
-|policy->cpus | 用與這個CPU一起åšDVFSçš„(在線+離線) |
-| | CPU(å³èˆ‡å®ƒå…±äº«æ™‚é˜/電壓軌)的掩碼更新 |
-| | 這個 |
-| | |
+|policy->cpus | 該policy通éŽDVFS框架影響的全部CPU |
+| | (å³èˆ‡æœ¬CPU共享"時é˜/電壓"å°)æ§‹æˆ |
+| | 掩碼(åŒæ™‚包å«åœ¨ç·šå’Œé›¢ç·šCPU),用掩碼 |
+| | 更新本字段 |
+| | |
+-----------------------------------+--------------------------------------+
-å°æ–¼è¨­ç½®å…¶ä¸­çš„一些值(cpuinfo.min[max]_freq, policy->min[max]),頻率表助手å¯èƒ½æœƒæœ‰å¹«
+å°æ–¼è¨­ç½®å…¶ä¸­çš„一些值(cpuinfo.min[max]_freq, policy->min[max]),頻率表輔助函數å¯èƒ½æœƒæœ‰å¹«
助。關於它們的更多信æ¯ï¼Œè«‹åƒè¦‹ç¬¬2節。
1.3 é©—è­‰
--------
-當用戶決定設置一個新的策略(ç”± 「policy,governor,min,max組æˆã€)時,必須å°é€™å€‹ç­–略進行驗證,
+當用戶決定設置一個新的策略(ç”±"policy,governor,min,max組æˆ")時,必須å°é€™å€‹ç­–略進行驗證,
以便糾正ä¸å…¼å®¹çš„值。爲了驗證這些值,cpufreq_verify_within_limits(``struct cpufreq_policy
*policy``, ``unsigned int min_freq``, ``unsigned int max_freq``)函數å¯èƒ½æœƒæœ‰å¹«åŠ©ã€‚
-關於頻率表助手的詳細內容請åƒè¦‹ç¬¬2節。
+關於頻率表輔助函數的詳細內容請åƒè¦‹ç¬¬2節。
您需è¦ç¢ºä¿è‡³å°‘有一個有效頻率(或工作範åœï¼‰åœ¨ policy->min å’Œ policy->max 範åœå…§ã€‚如果有必
-è¦ï¼Œå…ˆå¢žåŠ policy->max,åªæœ‰åœ¨æ²’有辦法的情æ³ä¸‹ï¼Œæ‰æ¸›å°‘policy->min。
+è¦ï¼Œå…ˆå¢žå¤§policy->max,åªæœ‰åœ¨æ²’有解決方案的情æ³ä¸‹ï¼Œæ‰æ¸›å°policy->min。
1.4 target 或 target_index 或 setpolicy 或 fast_switch?
-------------------------------------------------------
-大多數cpufreq驅動甚至大多數cpu頻率å‡é™ç®—法åªå…許將CPU頻率設置爲é å®šç¾©çš„固定值。å°æ–¼é€™äº›ï¼Œä½ 
+大多數cpufreq驅動甚至大多數CPU頻率å‡é™ç®—法åªå…許將CPU頻率設置爲é å®šç¾©çš„固定值。å°æ–¼é€™äº›ï¼Œä½ 
å¯ä»¥ä½¿ç”¨->target(),->target_index()或->fast_switch()回調。
-有些cpufreq功能的處ç†å™¨å¯ä»¥è‡ªå·±åœ¨æŸäº›é™åˆ¶ä¹‹é–“切æ›é »çŽ‡ã€‚這些應使用->setpolicy()回調。
+有些具有硬件調頻能力的處ç†å™¨å¯ä»¥è‡ªè¡Œä¾æ“šæŸäº›é™åˆ¶ä¾†åˆ‡æ›CPU頻率。它們應使用->setpolicy()回調。
1.5. target/target_index
------------------------
-target_index調用有兩個åƒæ•¸ï¼š``struct cpufreq_policy * policy``å’Œ``unsigned int``
-索引(於列出的頻率表)。
+target_index調用有兩個åƒæ•¸ï¼š ``struct cpufreq_policy * policy`` å’Œ ``unsigned int``
+索引(用於索引頻率表項)。
-當調用這裡時,CPUfreq驅動必須設置新的頻率。實際頻率必須由freq_table[index].frequency決定。
+當調用這è£æ™‚,CPUfreq驅動必須設置新的頻率。實際頻率必須由freq_table[index].frequency決定。
-它應該總是在錯誤的情æ³ä¸‹æ¢å¾©åˆ°ä¹‹å‰çš„頻率(å³policy->restore_freq),å³ä½¿æˆ‘們之å‰åˆ‡æ›åˆ°ä¸­é–“頻率。
+在發生錯誤的情æ³ä¸‹ç¸½æ˜¯æ‡‰è©²æ¢å¾©åˆ°ä¹‹å‰çš„頻率(å³policy->restore_freq),å³ä½¿æˆ‘們已經切æ›åˆ°äº†
+中間頻率。
已棄用
----------
-目標調用有三個åƒæ•¸ã€‚``struct cpufreq_policy * policy``, unsigned int target_frequency,
+target調用有三個åƒæ•¸ã€‚``struct cpufreq_policy * policy``, unsigned int target_frequency,
unsigned int relation.
-CPUfreq驅動在調用這裡時必須設置新的頻率。實際的頻率必須使用以下è¦å‰‡ä¾†ç¢ºå®šã€‚
+CPUfreq驅動在調用這è£æ™‚必須設置新的頻率。實際的頻率必須使用以下è¦å‰‡ä¾†ç¢ºå®šã€‚
-- 緊跟 "目標頻率"。
+- 儘é‡è²¼è¿‘"目標頻率"。
- policy->min <= new_freq <= policy->max (這必須是有效的!!!)
- 如果 relation==CPUFREQ_REL_L,嘗試é¸æ“‡ä¸€å€‹é«˜æ–¼æˆ–等於 target_freq çš„ new_freq。("L代表
最低,但ä¸èƒ½ä½Žæ–¼")
- 如果 relation==CPUFREQ_REL_H,嘗試é¸æ“‡ä¸€å€‹ä½Žæ–¼æˆ–等於 target_freq çš„ new_freq。("H代表
最高,但ä¸èƒ½é«˜æ–¼")
-這裡,頻率表助手å¯èƒ½æœƒå¹«åŠ©ä½ --詳見第2節。
+這è£ï¼Œé »çŽ‡è¡¨è¼”助函數å¯èƒ½æœƒå¹«åŠ©ä½  -- 詳見第2節。
1.6. fast_switch
----------------
@@ -196,51 +197,52 @@ CPUfreq驅動在調用這裡時必須設置新的頻率。實際的頻率必須ä
1.7 setpolicy
-------------
-setpolicy調用åªéœ€è¦ä¸€å€‹``struct cpufreq_policy * policy``作爲åƒæ•¸ã€‚需è¦å°‡è™•ç†å™¨å…§æˆ–晶片組內動態頻
+setpolicy調用åªéœ€è¦ä¸€å€‹ ``struct cpufreq_policy * policy`` 作爲åƒæ•¸ã€‚需è¦å°‡è™•ç†å™¨å…§æˆ–芯片組內動態頻
率切æ›çš„下é™è¨­ç½®çˆ²policy->min,上é™è¨­ç½®çˆ²policy->max,如果支æŒçš„話,當policy->policy爲
-CPUFREQ_POLICY_PERFORMANCE時é¸æ“‡é¢å‘性能的設置,當CPUFREQ_POLICY_POWERSAVE時é¸æ“‡é¢å‘çœé›»çš„設置。
+CPUFREQ_POLICY_PERFORMANCE時é¸æ“‡é¢å‘性能的設置,爲CPUFREQ_POLICY_POWERSAVE時é¸æ“‡é¢å‘çœé›»çš„設置。
也å¯ä»¥æŸ¥çœ‹drivers/cpufreq/longrun.c中的åƒè€ƒå¯¦ç¾ã€‚
1.8 get_intermediate 和 target_intermediate
--------------------------------------------
-僅é©ç”¨æ–¼ target_index() å’Œ CPUFREQ_ASYNC_NOTIFICATION 未設置的驅動。
+僅é©ç”¨æ–¼æœªè¨­ç½® target_index() å’Œ CPUFREQ_ASYNC_NOTIFICATION 的驅動。
-get_intermediate應該返回一個平å°æƒ³è¦åˆ‡æ›åˆ°çš„穩定的中間頻率,target_intermediate()應該將CPU設置爲
-該頻率,然後å†è·³è½‰åˆ°'index'å°æ‡‰çš„頻率。核心會負責發é€é€šçŸ¥ï¼Œé©…å‹•ä¸å¿…在target_intermediate()或
-target_index()中處ç†ã€‚
+get_intermediate應該返回一個平臺想è¦åˆ‡æ›åˆ°çš„穩定的中間頻率,target_intermediate()應該將CPU設置爲
+該頻率,然後å†è·³è½‰åˆ°'index'å°æ‡‰çš„頻率。cpufreq核心會負責發é€é€šçŸ¥ï¼Œé©…å‹•ä¸å¿…在
+target_intermediate()或target_index()中處ç†å®ƒå€‘。
-在驅動程åºä¸æƒ³å› çˆ²æŸå€‹ç›®æ¨™é »çŽ‡åˆ‡æ›åˆ°ä¸­é–“頻率的情æ³ä¸‹ï¼Œå®ƒå€‘å¯ä»¥å¾žget_intermediate()中返回'0'。在這種情æ³
-下,核心將直接調用->target_index()。
+在驅動程åºä¸æƒ³çˆ²æŸå€‹ç›®æ¨™é »çŽ‡åˆ‡æ›åˆ°ä¸­é–“頻率的情æ³ä¸‹ï¼Œå®ƒå€‘å¯ä»¥è®“get_intermediate()返回'0'。
+在這種情æ³ä¸‹ï¼Œcpufreq核心將直接調用->target_index()。
-注æ„:->target_index()應該在失敗的情æ³ä¸‹æ¢å¾©åˆ°policy->restore_freq,因爲core會爲此發é€é€šçŸ¥ã€‚
+注æ„:->target_index()應該在發生失敗的情æ³ä¸‹å°‡é »çŽ‡æ¢å¾©åˆ°policy->restore_freq,
+因爲cpufreq核心會爲此發é€é€šçŸ¥ã€‚
-2. 頻率表助手
-=============
+2. 頻率表輔助函數
+=================
-由於大多數cpufreq處ç†å™¨åªå…許被設置爲幾個特定的頻率,因此,一個帶有一些函數的 「頻率表ã€å¯èƒ½æœƒè¼”助處ç†å™¨é©…å‹•
-程åºçš„一些工作。這樣的 "頻率表" 由一個cpufreq_frequency_tableæ¢ç›®æ§‹æˆçš„數組組æˆï¼Œ"driver_data" 中包
-å«äº†é©…動程åºçš„具體數值,"frequency" 中包å«äº†ç›¸æ‡‰çš„頻率,並設置了標誌。在表的最後,需è¦æ·»åŠ ä¸€å€‹
-cpufreq_frequency_tableæ¢ç›®ï¼Œé »çŽ‡è¨­ç½®çˆ²CPUFREQ_TABLE_END。而如果想跳éŽè¡¨ä¸­çš„一個æ¢ç›®ï¼Œå‰‡å°‡é »çŽ‡è¨­ç½®çˆ²
-CPUFREQ_ENTRY_INVALID。這些æ¢ç›®ä¸éœ€è¦æŒ‰ç…§ä»»ä½•ç‰¹å®šçš„é †åºæŽ’åºï¼Œä½†å¦‚果它們是cpufreq 核心會å°å®ƒå€‘進行快速的DVFS,
+由於大多數支æŒcpufreq的處ç†å™¨åªå…許被設置爲幾個特定的頻率,因此,"頻率表"和一些相關函數å¯èƒ½æœƒè¼”助處ç†å™¨é©…å‹•
+程åºçš„一些工作。這樣的"頻率表"是一個由struct cpufreq_frequency_tableçš„æ¢ç›®æ§‹æˆçš„數組,"driver_data"æˆå“¡åŒ…
+å«é©…動程åºçš„專用值,"frequency"æˆå“¡åŒ…å«äº†ç›¸æ‡‰çš„頻率,此外還有標誌æˆå“¡ã€‚在表的最後,需è¦æ·»åŠ ä¸€å€‹
+cpufreq_frequency_tableæ¢ç›®ï¼Œé »çŽ‡è¨­ç½®çˆ²CPUFREQ_TABLE_END。如果想跳éŽè¡¨ä¸­çš„一個æ¢ç›®ï¼Œå‰‡å°‡é »çŽ‡è¨­ç½®çˆ²
+CPUFREQ_ENTRY_INVALID。這些æ¢ç›®ä¸éœ€è¦æŒ‰ç…§ä»»ä½•ç‰¹å®šçš„é †åºæŽ’åºï¼Œå¦‚果排åºäº†ï¼Œcpufreq核心執行DVFS會更快一點,
因爲æœç´¢æœ€ä½³åŒ¹é…會更快。
-如果策略在其policy->freq_table欄ä½ä¸­åŒ…å«ä¸€å€‹æœ‰æ•ˆçš„指é‡ï¼Œcpufreq表就會被核心自動驗證。
+如果在policy->freq_table字段中包å«ä¸€å€‹æœ‰æ•ˆçš„頻率表指é‡ï¼Œé »çŽ‡è¡¨å°±æœƒè¢«cpufreq核心自動驗證。
cpufreq_frequency_table_verify()ä¿è­‰è‡³å°‘有一個有效的頻率在policy->minå’Œpolicy->max範åœå…§ï¼Œä¸¦ä¸”所有其他
-標準都被滿足。這å°->verify調用很有幫助。
+準則都被滿足。這å°->verify調用很有幫助。
-cpufreq_frequency_table_target()是å°æ‡‰æ–¼->target階段的頻率表助手。åªè¦æŠŠæ•¸å€¼å‚³éžçµ¦é€™å€‹å‡½æ•¸ï¼Œé€™å€‹å‡½æ•¸å°±æœƒè¿”
+cpufreq_frequency_table_target()是å°æ‡‰æ–¼->target階段的頻率表輔助函數。åªè¦æŠŠå€¼å‚³éžçµ¦é€™å€‹å‡½æ•¸ï¼Œé€™å€‹å‡½æ•¸å°±æœƒè¿”
回包å«CPUè¦è¨­ç½®çš„頻率的頻率表æ¢ç›®ã€‚
-以下å®å¯ä»¥ä½œçˆ²cpufreq_frequency_table的疊代器。
+以下å®å¯ä»¥ä½œçˆ²cpufreq_frequency_table的迭代器。
cpufreq_for_each_entry(pos, table) - é歷頻率表的所有æ¢ç›®ã€‚
cpufreq_for_each_valid_entry(pos, table) - 該函數é歷所有æ¢ç›®ï¼Œä¸åŒ…括CPUFREQ_ENTRY_INVALID頻率。
-使用åƒæ•¸ "pos"-一個``cpufreq_frequency_table * `` 作爲循環變é‡ï¼Œä½¿ç”¨åƒæ•¸ "table"-作爲你想疊代
-的``cpufreq_frequency_table * `` 。
+使用åƒæ•¸"pos" -- 一個 ``cpufreq_frequency_table *`` 作爲循環指é‡ï¼Œä½¿ç”¨åƒæ•¸"table" -- 作爲你想迭代
+的 ``cpufreq_frequency_table *`` 。
例如::
@@ -251,6 +253,6 @@ cpufreq_for_each_valid_entry(pos, table) - 該函數é歷所有æ¢ç›®ï¼Œä¸åŒ…æ
pos->frequency = ...
}
-如果你需è¦åœ¨driver_freq_table中處ç†posçš„ä½ç½®ï¼Œä¸è¦æ¸›åŽ»æŒ‡é‡ï¼Œå› çˆ²å®ƒçš„代價相當高。相å,使用å®
+如果你需è¦åœ¨driver_freq_table中處ç†posçš„ä½ç½®ï¼Œä¸è¦åšæŒ‡é‡æ¸›æ³•ï¼Œå› çˆ²å®ƒçš„代價相當高。作爲替代,使用å®
cpufreq_for_each_entry_idx() 和 cpufreq_for_each_valid_entry_idx() 。
diff --git a/Documentation/translations/zh_TW/cpu-freq/cpufreq-stats.rst b/Documentation/translations/zh_TW/cpu-freq/cpufreq-stats.rst
index 49088becd5fa..01ec8c837fe9 100644
--- a/Documentation/translations/zh_TW/cpu-freq/cpufreq-stats.rst
+++ b/Documentation/translations/zh_TW/cpu-freq/cpufreq-stats.rst
@@ -2,18 +2,21 @@
.. include:: ../disclaimer-zh_TW.rst
-:Original: :doc:`../../../cpu-freq/cpufreq-stats`
-:Translator: Yanteng Si <siyanteng@loongson.cn>
- Hu Haowen <src.res.211@gmail.com>
+:Original: Documentation/cpu-freq/cpufreq-stats.rst
-.. _tw_cpufreq-stats.rst:
+:翻譯:
+ å¸å»¶é¨° Yanteng Si <siyanteng@loongson.cn>
+
+:æ ¡è­¯:
+
+ å”è—舟 Tang Yizhou <tangyeechou@gmail.com>
==========================================
sysfs CPUFreq Stats的一般說明
==========================================
-用戶信æ¯
+爲使用者準備的信æ¯
作者: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
@@ -28,17 +31,16 @@ sysfs CPUFreq Stats的一般說明
1. 簡介
===============
-cpufreq-stats是一個爲æ¯å€‹CPUæä¾›CPU頻率統計的驅動。
-這些統計數據在/sysfs中以一堆åªè®€æŽ¥å£çš„å½¢å¼æ供。這個接å£ï¼ˆåœ¨é…置好後)將出ç¾åœ¨
-/sysfs(<sysfs root>/devices/system/cpu/cpuX/cpufreq/stats/)中cpufreq下的一個單
-ç¨çš„目錄中,æ供給æ¯å€‹CPU。
-å„種統計數據將在此目錄下形æˆåªè®€æ–‡ä»¶ã€‚
+cpufreq-stats是一種爲æ¯å€‹CPUæä¾›CPU頻率統計的驅動。
+這些統計數據以/sysfs中一系列åªè®€æŽ¥å£çš„å½¢å¼å‘ˆç¾ã€‚cpufreq-stats接å£ï¼ˆè‹¥å·²é…置)將爲æ¯å€‹CPU生æˆ
+/sysfs(<sysfs root>/devices/system/cpu/cpuX/cpufreq/stats/)中cpufreq目錄下的stats目錄。
+å„項統計數據將在stats目錄下形æˆå°æ‡‰çš„åªè®€æ–‡ä»¶ã€‚
-此驅動是ç¨ç«‹æ–¼ä»»ä½•å¯èƒ½é‹è¡Œåœ¨ä½ æ‰€ç”¨CPU上的特定cpufreq_driver而設計的。因此,它將與所有
-cpufreq_driver一起工作。
+此驅動是以ç¨ç«‹æ–¼ä»»ä½•å¯èƒ½é‹è¡Œåœ¨ä½ æ‰€ç”¨CPU上的特定cpufreq_driverçš„æ–¹å¼è¨­è¨ˆçš„。因此,它將能和任何
+cpufreq_driverå”åŒå·¥ä½œã€‚
-2. æ供的統計數據(舉例說明)
+2. å·²æ供的統計數據(有例å­)
=====================================
cpufreq statsæ供了以下統計數據(在下é¢è©³ç´°è§£é‡‹ï¼‰ã€‚
@@ -47,8 +49,8 @@ cpufreq statsæ供了以下統計數據(在下é¢è©³ç´°è§£é‡‹ï¼‰ã€‚
- total_trans
- trans_table
-所有的統計數據將從統計驅動被載入的時間(或統計被é‡ç½®çš„時間)開始,到æŸä¸€çµ±è¨ˆæ•¸æ“šè¢«è®€å–的時間爲止。
-顯然,統計驅動ä¸æœƒæœ‰ä»»ä½•é—œæ–¼çµ±è¨ˆé©…動載入之å‰çš„頻率轉æ›ä¿¡æ¯ã€‚
+所有統計數據來自以下時間範åœï¼šå¾žçµ±è¨ˆé©…動被加載的時間(或統計數據被é‡ç½®çš„時間)開始,到æŸä¸€çµ±è¨ˆæ•¸æ“šè¢«è®€å–的時間爲止。
+顯然,統計驅動ä¸æœƒä¿å­˜å®ƒè¢«åŠ è¼‰ä¹‹å‰çš„任何頻率轉æ›ä¿¡æ¯ã€‚
::
@@ -63,14 +65,14 @@ cpufreq statsæ供了以下統計數據(在下é¢è©³ç´°è§£é‡‹ï¼‰ã€‚
- **reset**
-åªå¯«å±¬æ€§ï¼Œå¯ç”¨æ–¼é‡ç½®çµ±è¨ˆè¨ˆæ•¸å™¨ã€‚這å°æ–¼è©•ä¼°ä¸åŒèª¿ç¯€å™¨ä¸‹çš„系統行爲éžå¸¸æœ‰ç”¨ï¼Œä¸”無需é‡å•“。
+åªå¯«å±¬æ€§ï¼Œå¯ç”¨æ–¼é‡ç½®çµ±è¨ˆè¨ˆæ•¸å™¨ã€‚這å°æ–¼è©•ä¼°ä¸åŒèª¿ç¯€å™¨çš„系統行爲éžå¸¸æœ‰ç”¨ï¼Œä¸”無需é‡å•“。
- **time_in_state**
-此項給出了這個CPU所支æŒçš„æ¯å€‹é »çŽ‡æ‰€èŠ±è²»çš„時間。cat輸出的æ¯ä¸€è¡Œéƒ½æœƒæœ‰"<frequency>
-<time>"å°ï¼Œè¡¨ç¤ºé€™å€‹CPU在<frequency>上花費了<time>個usertimeå–®ä½çš„時間。這裡的
-usertimeå–®ä½æ˜¯10mS(類似於/proc中輸出的其他時間)。
+此文件給出了在本CPU支æŒçš„æ¯å€‹é »çŽ‡ä¸Šåˆ†åˆ¥èŠ±è²»çš„時間。cat輸出的æ¯ä¸€è¡Œéƒ½æ˜¯ä¸€å€‹"<frequency>
+<time>"å°ï¼Œè¡¨ç¤ºé€™å€‹CPU在<frequency>上花費了<time>個usertimeå–®ä½çš„時間。輸出的æ¯ä¸€è¡Œå°æ‡‰
+一個CPU支æŒçš„頻率。這è£usertimeå–®ä½æ˜¯10mS(類似於/proc導出的其它時間)。
::
@@ -84,7 +86,7 @@ usertimeå–®ä½æ˜¯10mS(類似於/proc中輸出的其他時間)。
- **total_trans**
-給出了這個CPU上頻率轉æ›çš„總次數。cat的輸出將有一個單一的計數,這就是頻率轉æ›çš„總數。
+此文件給出了這個CPU頻率轉æ›çš„總次數。cat的輸出是一個計數值,它就是頻率轉æ›çš„總次數。
::
@@ -93,10 +95,10 @@ usertimeå–®ä½æ˜¯10mS(類似於/proc中輸出的其他時間)。
- **trans_table**
-這將æ供所有CPU頻率轉æ›çš„細粒度信æ¯ã€‚這裡的cat輸出是一個二維矩陣,其中一個æ¢ç›®<i, j>(第
+本文件æ供所有CPU頻率轉æ›çš„細粒度信æ¯ã€‚這è£çš„cat輸出是一個二維矩陣,其中一個æ¢ç›®<i, j>(第
i行,第j列)代表從Freq_i到Freq_j的轉æ›æ¬¡æ•¸ã€‚Freq_i行和Freq_j列éµå¾ªé©…動最åˆæ供給cpufreq
-核的頻率表的排åºé †åºï¼Œå› æ­¤å¯ä»¥æŽ’åºï¼ˆå‡åºæˆ–é™åºï¼‰æˆ–ä¸æŽ’åºã€‚ 這裡的輸出也包å«äº†æ¯è¡Œæ¯åˆ—的實際
-頻率值,以便更好地閱讀。
+核心的頻率表的排列順åºï¼Œå› æ­¤å¯ä»¥å·²æŽ’åºï¼ˆå‡åºæˆ–é™åºï¼‰æˆ–未排åºã€‚這è£çš„輸出也包å«äº†å¯¦éš›
+頻率值,分別按行和按列顯示,以便更好地閱讀。
如果轉æ›è¡¨å¤§æ–¼PAGE_SIZE,讀å–時將返回一個-EFBIG錯誤。
@@ -114,7 +116,7 @@ i行,第j列)代表從Freq_i到Freq_j的轉æ›æ¬¡æ•¸ã€‚Freq_i行和Freq_j列
3. é…ç½®cpufreq-stats
============================
-è¦åœ¨ä½ çš„內核中é…ç½®cpufreq-stats::
+按以下方å¼åœ¨ä½ çš„內核中é…ç½®cpufreq-stats::
Config Main Menu
Power management options (ACPI, APM) --->
@@ -123,7 +125,7 @@ i行,第j列)代表從Freq_i到Freq_j的轉æ›æ¬¡æ•¸ã€‚Freq_i行和Freq_j列
[*] CPU frequency translation statistics
-"CPU Frequency scaling" (CONFIG_CPU_FREQ) 應該被啓用以é…ç½®cpufreq-stats。
+"CPU Frequency scaling" (CONFIG_CPU_FREQ) 應該被啓用,以支æŒé…ç½®cpufreq-stats。
"CPU frequency translation statistics" (CONFIG_CPU_FREQ_STAT)æ供了包括
time_in_stateã€total_transå’Œtrans_table的統計數據。
diff --git a/Documentation/translations/zh_TW/cpu-freq/index.rst b/Documentation/translations/zh_TW/cpu-freq/index.rst
index c6cf825b57a5..a9df16870b21 100644
--- a/Documentation/translations/zh_TW/cpu-freq/index.rst
+++ b/Documentation/translations/zh_TW/cpu-freq/index.rst
@@ -2,12 +2,13 @@
.. include:: ../disclaimer-zh_TW.rst
-:Original: :doc:`../../../cpu-freq/index`
-:Translator: Yanteng Si <siyanteng@loongson.cn>
- Hu Haowen <src.res.211@gmail.com>
+:Original: Documentation/cpu-freq/index.rst
-.. _tw_index.rst:
+:翻譯:
+
+ å¸å»¶é¨° Yanteng Si <siyanteng@loongson.cn>
+.. _tw_index.rst:
=======================================================
Linux CPUFreq - Linux(TM)內核中的CPU頻率和電壓å‡é™ä»£ç¢¼
@@ -28,10 +29,10 @@ Author: Dominik Brodowski <linux@brodo.de>
郵件列表
------------
-這裡有一個 CPU 頻率變化的 CVS æ交和通用列表,您å¯ä»¥åœ¨é€™è£¡å ±å‘Šbugã€å•é¡Œæˆ–æ交補ä¸ã€‚è¦ç™¼
+這è£æœ‰ä¸€å€‹ CPU 頻率變化的 CVS æ交和通用列表,您å¯ä»¥åœ¨é€™è£å ±å‘Šbugã€å•é¡Œæˆ–æ交補ä¸ã€‚è¦ç™¼
布消æ¯ï¼Œè«‹ç™¼é€é›»å­éƒµä»¶åˆ° linux-pm@vger.kernel.org。
-連çµ
+éˆæŽ¥
-----
FTP檔案:
* ftp://ftp.linux.org.uk/pub/linux/cpufreq/
diff --git a/Documentation/translations/zh_TW/dev-tools/gcov.rst b/Documentation/translations/zh_TW/dev-tools/gcov.rst
new file mode 100644
index 000000000000..ce1c9a97de16
--- /dev/null
+++ b/Documentation/translations/zh_TW/dev-tools/gcov.rst
@@ -0,0 +1,265 @@
+.. include:: ../disclaimer-zh_TW.rst
+
+:Original: Documentation/dev-tools/gcov.rst
+:Translator: 趙è»å¥Ž Bernard Zhao <bernard@vivo.com>
+
+在Linux內核è£ä½¿ç”¨gcovåšä»£ç¢¼è¦†è“‹çŽ‡æª¢æŸ¥
+=====================================
+
+gcov分æžæ ¸å¿ƒæ”¯æŒåœ¨Linux內核中啓用GCC的覆蓋率測試工具 gcov_ ,Linux內核
+é‹è¡Œæ™‚的代碼覆蓋率數據會以gcov兼容的格å¼å°Žå‡ºåˆ°â€œgcovâ€debugfs目錄中,å¯
+以通éŽgcovçš„ ``-o`` é¸é …(如下示例)ç²å¾—指定文件的代碼é‹è¡Œè¦†è“‹çŽ‡çµ±è¨ˆæ•¸æ“š
+(需è¦è·³è½‰åˆ°å…§æ ¸ç·¨è­¯è·¯å¾‘下並且è¦æœ‰root權é™ï¼‰::
+
+ # cd /tmp/linux-out
+ # gcov -o /sys/kernel/debug/gcov/tmp/linux-out/kernel spinlock.c
+
+這將在當å‰ç›®éŒ„中創建帶有執行計數註釋的æºä»£ç¢¼æ–‡ä»¶ã€‚
+在ç²å¾—這些統計文件後,å¯ä»¥ä½¿ç”¨åœ–形化的gcovå‰ç«¯å·¥å…·ï¼ˆæ¯”如 lcov_ ),來實ç¾
+自動化處ç†Linux內核的覆蓋率é‹è¡Œæ•¸æ“šï¼ŒåŒæ™‚生æˆæ˜“於閱讀的HTMLæ ¼å¼æ–‡ä»¶ã€‚
+
+å¯èƒ½çš„用途:
+
+* 調試(用來判斷æ¯ä¸€è¡Œçš„代碼是å¦å·²ç¶“é‹è¡ŒéŽï¼‰
+* 測試改進(如何修改測試代碼,儘å¯èƒ½åœ°è¦†è“‹åˆ°æ²’有é‹è¡ŒéŽçš„代碼)
+* 內核最å°åŒ–é…置(å°æ–¼æŸä¸€å€‹é¸é …é…置,如果關è¯çš„代碼從來沒有é‹è¡ŒéŽï¼Œ
+ 是å¦é‚„需è¦é€™å€‹é…置)
+
+.. _gcov: https://gcc.gnu.org/onlinedocs/gcc/Gcov.html
+.. _lcov: http://ltp.sourceforge.net/coverage/lcov.php
+
+
+準備
+----
+
+內核打開如下é…ç½®::
+
+ CONFIG_DEBUG_FS=y
+ CONFIG_GCOV_KERNEL=y
+
+ç²å–整個內核的覆蓋率數據,還需è¦æ‰“é–‹::
+
+ CONFIG_GCOV_PROFILE_ALL=y
+
+需è¦æ³¨æ„的是,整個內核開啓覆蓋率統計會造æˆå…§æ ¸é¡åƒæ–‡ä»¶å°ºå¯¸çš„增大,
+åŒæ™‚內核é‹è¡Œä¹Ÿæœƒè®Šæ…¢ä¸€äº›ã€‚
+å¦å¤–,並ä¸æ˜¯æ‰€æœ‰çš„架構都支æŒæ•´å€‹å…§æ ¸é–‹å•“覆蓋率統計。
+
+代碼é‹è¡Œè¦†è“‹çŽ‡æ•¸æ“šåªåœ¨debugfs掛載完æˆå¾Œçº”å¯ä»¥è¨ªå•::
+
+ mount -t debugfs none /sys/kernel/debug
+
+
+定製化
+------
+
+如果è¦å–®ç¨é‡å°æŸä¸€å€‹è·¯å¾‘或者文件進行代碼覆蓋率統計,å¯ä»¥åœ¨å…§æ ¸ç›¸æ‡‰è·¯
+徑的Makefile中增加如下的é…ç½®:
+
+- å–®ç¨çµ±è¨ˆå–®å€‹æ–‡ä»¶ï¼ˆä¾‹å¦‚main.o)::
+
+ GCOV_PROFILE_main.o := y
+
+- å–®ç¨çµ±è¨ˆæŸä¸€å€‹è·¯å¾‘::
+
+ GCOV_PROFILE := y
+
+如果è¦åœ¨æ•´å€‹å…§æ ¸çš„覆蓋率統計(開啓CONFIG_GCOV_PROFILE_ALL)中單ç¨æŽ’除
+æŸä¸€å€‹æ–‡ä»¶æˆ–者路徑,å¯ä»¥ä½¿ç”¨å¦‚下的方法::
+
+ GCOV_PROFILE_main.o := n
+
+和::
+
+ GCOV_PROFILE := n
+
+此機制僅支æŒéˆæŽ¥åˆ°å…§æ ¸é¡åƒæˆ–編譯爲內核模塊的文件。
+
+
+相關文件
+--------
+
+gcov功能需è¦åœ¨debugfs中創建如下文件:
+
+``/sys/kernel/debug/gcov``
+ gcov相關功能的根路徑
+
+``/sys/kernel/debug/gcov/reset``
+ 全局復ä½æ–‡ä»¶:å‘該文件寫入數據後會將所有的gcov統計數據清0
+
+``/sys/kernel/debug/gcov/path/to/compile/dir/file.gcda``
+ gcov工具å¯ä»¥è­˜åˆ¥çš„覆蓋率統計數據文件,å‘該文件寫入數據後
+ 會將本文件的gcov統計數據清0
+
+``/sys/kernel/debug/gcov/path/to/compile/dir/file.gcno``
+ gcov工具需è¦çš„軟連接文件(指å‘編譯時生æˆçš„ä¿¡æ¯çµ±è¨ˆæ–‡ä»¶ï¼‰ï¼Œé€™å€‹æ–‡ä»¶æ˜¯
+ 在gcc編譯時如果é…置了é¸é … ``-ftest-coverage`` 時生æˆçš„。
+
+
+é‡å°æ¨¡å¡Šçš„統計
+--------------
+
+內核中的模塊會動態的加載和å¸è¼‰ï¼Œæ¨¡å¡Šå¸è¼‰æ™‚å°æ‡‰çš„數據會被清除掉。
+gcovæ供了一種機制,通éŽä¿ç•™ç›¸é—œæ•¸æ“šçš„副本來收集這部分å¸è¼‰æ¨¡å¡Šçš„覆蓋率數據。
+模塊å¸è¼‰å¾Œé€™äº›å‚™ä»½æ•¸æ“šåœ¨debugfs中會繼續存在。
+一旦這個模塊é‡æ–°åŠ è¼‰ï¼Œæ¨¡å¡Šé—œè¯çš„é‹è¡Œçµ±è¨ˆæœƒè¢«åˆå§‹åŒ–æˆdebugfs中備份的數據。
+
+å¯ä»¥é€šéŽå°å…§æ ¸åƒæ•¸gcov_persist的修改來åœç”¨gcovå°æ¨¡å¡Šçš„備份機制::
+
+ gcov_persist = 0
+
+在é‹è¡Œæ™‚,用戶還å¯ä»¥é€šéŽå¯«å…¥æ¨¡å¡Šçš„數據文件或者寫入gcov復ä½æ–‡ä»¶ä¾†ä¸Ÿæ£„å·²å¸
+載模塊的數據。
+
+
+編譯機和測試機分離
+------------------
+
+gcov的內核分æžæ’æ¨æ”¯æŒå…§æ ¸çš„編譯和é‹è¡Œæ˜¯åœ¨åŒä¸€è‡ºæ©Ÿå™¨ä¸Šï¼Œä¹Ÿå¯ä»¥ç·¨è­¯å’Œé‹
+行是在ä¸åŒçš„機器上。
+如果內核編譯和é‹è¡Œæ˜¯ä¸åŒçš„機器,那麼需è¦é¡å¤–的準備工作,這å–決於gcov工具
+是在哪è£ä½¿ç”¨çš„:
+
+.. _gcov-test_zh:
+
+a) è‹¥gcové‹è¡Œåœ¨æ¸¬è©¦æ©Ÿä¸Š
+
+ 測試機上é¢gcov工具的版本必須è¦è·Ÿå…§æ ¸ç·¨è­¯æ©Ÿå™¨ä½¿ç”¨çš„gcc版本相兼容,
+ åŒæ™‚下é¢çš„文件è¦å¾žç·¨è­¯æ©Ÿæ‹·è²åˆ°æ¸¬è©¦æ©Ÿä¸Š:
+
+ 從æºä»£ç¢¼ä¸­:
+ - 所有的C文件和頭文件
+
+ 從編譯目錄中:
+ - 所有的C文件和頭文件
+ - 所有的.gcda文件和.gcno文件
+ - 所有目錄的éˆæŽ¥
+
+ 特別需è¦æ³¨æ„,測試機器上é¢çš„目錄çµæ§‹è·Ÿç·¨è­¯æ©Ÿå™¨ä¸Šé¢çš„目錄機構必須
+ 完全一致。
+ 如果文件是軟éˆæŽ¥ï¼Œéœ€è¦æ›¿æ›æˆçœŸæ­£çš„目錄文件(這是由make的當å‰å·¥ä½œ
+ 目錄變é‡CURDIR引起的)。
+
+.. _gcov-build_zh:
+
+b) è‹¥gcové‹è¡Œåœ¨ç·¨è­¯æ©Ÿä¸Š
+
+ 測試用例é‹è¡ŒçµæŸå¾Œï¼Œå¦‚下的文件需è¦å¾žæ¸¬è©¦æ©Ÿä¸­æ‹·è²åˆ°ç·¨è­¯æ©Ÿä¸Š:
+
+ 從sysfs中的gcov目錄中:
+ - 所有的.gcda文件
+ - 所有的.gcno文件軟éˆæŽ¥
+
+ 這些文件å¯ä»¥æ‹·è²åˆ°ç·¨è­¯æ©Ÿçš„ä»»æ„目錄下,gcov使用-oé¸é …指定拷è²çš„
+ 目錄。
+
+ 比如一個是示例的目錄çµæ§‹å¦‚下::
+
+ /tmp/linux: 內核æºç¢¼ç›®éŒ„
+ /tmp/out: 內核編譯文件路徑(make O=指定)
+ /tmp/coverage: 從測試機器上é¢æ‹·è²çš„數據文件路徑
+
+ [user@build] cd /tmp/out
+ [user@build] gcov -o /tmp/coverage/tmp/out/init main.c
+
+
+關於編譯器的注æ„事項
+--------------------
+
+GCCå’ŒLLVM gcov工具ä¸ä¸€å®šå…¼å®¹ã€‚
+如果編譯器是GCC,使用 gcov_ 來處ç†.gcnoå’Œ.gcda文件,如果是Clang編譯器,
+則使用 llvm-cov_ 。
+
+.. _gcov: https://gcc.gnu.org/onlinedocs/gcc/Gcov.html
+.. _llvm-cov: https://llvm.org/docs/CommandGuide/llvm-cov.html
+
+GCCå’ŒClang gcov之間的版本差異由Kconfig處ç†çš„。
+kconfig會根據編譯工具éˆçš„檢查自動é¸æ“‡åˆé©çš„gcovæ ¼å¼ã€‚
+
+å•é¡Œå®šä½
+--------
+
+å¯èƒ½å‡ºç¾çš„å•é¡Œ1
+ 編譯到éˆæŽ¥éšŽæ®µå ±éŒ¯çµ‚æ­¢
+
+å•é¡ŒåŽŸå› 
+ 分æžæ¨™èªŒæŒ‡å®šåœ¨äº†æºæ–‡ä»¶ä½†æ˜¯æ²’有éˆæŽ¥åˆ°ä¸»å…§æ ¸ï¼Œæˆ–者客製化了éˆæŽ¥ç¨‹åº
+
+解決方法
+ 通éŽåœ¨ç›¸æ‡‰çš„Makefile中使用 ``GCOV_PROFILE := n``
+ 或者 ``GCOV_PROFILE_basename.o := n`` 來將éˆæŽ¥å ±éŒ¯çš„文件排除掉
+
+å¯èƒ½å‡ºç¾çš„å•é¡Œ2
+ 從sysfs複製的文件顯示爲空或ä¸å®Œæ•´
+
+å•é¡ŒåŽŸå› 
+ 由於seq_file的工作方å¼ï¼ŒæŸäº›å·¥å…·ï¼ˆä¾‹å¦‚cp或tar)å¯èƒ½ç„¡æ³•æ­£ç¢ºåœ°å¾ž
+ sysfs複製文件。
+
+解決方法
+ 使用 ``cat`` è®€å– ``.gcda`` 文件,使用 ``cp -d`` 複製éˆæŽ¥ï¼Œæˆ–者使用附錄B
+ 中所示的機制。
+
+
+附錄A:collect_on_build.sh
+--------------------------
+
+用於在編譯機上收集覆蓋率元文件的示例腳本
+(見 :ref:`編譯機和測試機分離 a. <gcov-test_zh>` )
+
+.. code-block:: sh
+
+ #!/bin/bash
+
+ KSRC=$1
+ KOBJ=$2
+ DEST=$3
+
+ if [ -z "$KSRC" ] || [ -z "$KOBJ" ] || [ -z "$DEST" ]; then
+ echo "Usage: $0 <ksrc directory> <kobj directory> <output.tar.gz>" >&2
+ exit 1
+ fi
+
+ KSRC=$(cd $KSRC; printf "all:\n\t@echo \${CURDIR}\n" | make -f -)
+ KOBJ=$(cd $KOBJ; printf "all:\n\t@echo \${CURDIR}\n" | make -f -)
+
+ find $KSRC $KOBJ \( -name '*.gcno' -o -name '*.[ch]' -o -type l \) -a \
+ -perm /u+r,g+r | tar cfz $DEST -P -T -
+
+ if [ $? -eq 0 ] ; then
+ echo "$DEST successfully created, copy to test system and unpack with:"
+ echo " tar xfz $DEST -P"
+ else
+ echo "Could not create file $DEST"
+ fi
+
+
+附錄B:collect_on_test.sh
+-------------------------
+
+用於在測試機上收集覆蓋率數據文件的示例腳本
+(見 :ref:`編譯機和測試機分離 b. <gcov-build_zh>` )
+
+.. code-block:: sh
+
+ #!/bin/bash -e
+
+ DEST=$1
+ GCDA=/sys/kernel/debug/gcov
+
+ if [ -z "$DEST" ] ; then
+ echo "Usage: $0 <output.tar.gz>" >&2
+ exit 1
+ fi
+
+ TEMPDIR=$(mktemp -d)
+ echo Collecting data..
+ find $GCDA -type d -exec mkdir -p $TEMPDIR/\{\} \;
+ find $GCDA -name '*.gcda' -exec sh -c 'cat < $0 > '$TEMPDIR'/$0' {} \;
+ find $GCDA -name '*.gcno' -exec sh -c 'cp -d $0 '$TEMPDIR'/$0' {} \;
+ tar czf $DEST -C $TEMPDIR sys
+ rm -rf $TEMPDIR
+
+ echo "$DEST successfully created, copy to build system and unpack with:"
+ echo " tar xfz $DEST"
+
diff --git a/Documentation/translations/zh_TW/dev-tools/gdb-kernel-debugging.rst b/Documentation/translations/zh_TW/dev-tools/gdb-kernel-debugging.rst
new file mode 100644
index 000000000000..c881e8872b19
--- /dev/null
+++ b/Documentation/translations/zh_TW/dev-tools/gdb-kernel-debugging.rst
@@ -0,0 +1,168 @@
+.. highlight:: none
+
+.. include:: ../disclaimer-zh_TW.rst
+
+:Original: Documentation/dev-tools/gdb-kernel-debugging.rst
+:Translator: 高超 gao chao <gaochao49@huawei.com>
+
+通éŽgdb調試內核和模塊
+=====================
+
+Kgdb內核調試器ã€QEMU等虛擬機管ç†ç¨‹åºæˆ–基於JTAG的硬件接å£ï¼Œæ”¯æŒåœ¨é‹è¡Œæ™‚使用gdb
+調試Linux內核åŠå…¶æ¨¡å¡Šã€‚Gdbæ供了一個強大的python腳本接å£ï¼Œå…§æ ¸ä¹Ÿæ供了一套
+輔助腳本以簡化典型的內核調試步驟。本文檔爲如何啓用和使用這些腳本æ供了一個簡è¦çš„教程。
+此教程基於QEMU/KVM虛擬機,但文中示例也é©ç”¨æ–¼å…¶ä»–gdb stub。
+
+
+環境é…ç½®è¦æ±‚
+------------
+
+- gdb 7.2+ (推薦版本: 7.4+) 且開啓pythonæ”¯æŒ (通常發行版上都已支æŒ)
+
+設置
+----
+
+- 創建一個QEMU/KVMçš„linux虛擬機(詳情請åƒè€ƒ www.linux-kvm.org å’Œ www.qemu.org )。
+ å°æ–¼äº¤å‰é–‹ç™¼ï¼Œhttps://landley.net/aboriginal/bin æ供了一些é¡åƒå’Œå·¥å…·éˆï¼Œ
+ å¯ä»¥å¹«åŠ©æ­å»ºäº¤å‰é–‹ç™¼ç’°å¢ƒã€‚
+
+- 編譯內核時開啓CONFIG_GDB_SCRIPTS,關閉CONFIG_DEBUG_INFO_REDUCED。
+ 如果架構支æŒCONFIG_FRAME_POINTER,請ä¿æŒé–‹å•“。
+
+- 在guest環境上安è£è©²å…§æ ¸ã€‚如有必è¦ï¼Œé€šéŽåœ¨å…§æ ¸command line中添加“nokaslrâ€ä¾†é—œé–‰KASLR。
+ 此外,QEMUå…許通éŽ-kernelã€-appendã€-initrd這些命令行é¸é …直接啓動內核。
+ 但這通常僅在ä¸ä¾è³´å…§æ ¸æ¨¡å¡Šæ™‚纔有效。有關此模å¼çš„更多詳細信æ¯ï¼Œè«‹åƒé–±QEMU文檔。
+ 在這種情æ³ä¸‹ï¼Œå¦‚果架構支æŒKASLR,應該在ç¦ç”¨CONFIG_RANDOMIZE_BASE的情æ³ä¸‹æ§‹å»ºå…§æ ¸ã€‚
+
+- 啓用QEMU/KVMçš„gdb stub,å¯ä»¥é€šéŽå¦‚下方å¼å¯¦ç¾
+
+ - 在VM啓動時,通éŽåœ¨QEMU命令行中添加“-sâ€åƒæ•¸
+
+ 或
+
+ - 在é‹è¡Œæ™‚通éŽå¾žQEMU監視控制檯發é€â€œgdbserverâ€
+
+- 切æ›åˆ°/path/to/linux-build(內核æºç¢¼ç·¨è­¯)目錄
+
+- 啓動gdb:gdb vmlinux
+
+ 注æ„:æŸäº›ç™¼è¡Œç‰ˆå¯èƒ½æœƒå°‡gdb腳本的自動加載é™åˆ¶åœ¨å·²çŸ¥çš„安全目錄中。
+ 如果gdb報告拒絕加載vmlinux-gdb.py(相關命令找ä¸åˆ°ï¼‰ï¼Œè«‹å°‡::
+
+ add-auto-load-safe-path /path/to/linux-build
+
+ 添加到~/.gdbinit。更多詳細信æ¯ï¼Œè«‹åƒé–±gdb幫助信æ¯ã€‚
+
+- 連接到已啓動的guest環境::
+
+ (gdb) target remote :1234
+
+
+使用Linuxæ供的gdb腳本的示例
+----------------------------
+
+- 加載模塊(以åŠä¸»å…§æ ¸ï¼‰ç¬¦è™Ÿ::
+
+ (gdb) lx-symbols
+ loading vmlinux
+ scanning for modules in /home/user/linux/build
+ loading @0xffffffffa0020000: /home/user/linux/build/net/netfilter/xt_tcpudp.ko
+ loading @0xffffffffa0016000: /home/user/linux/build/net/netfilter/xt_pkttype.ko
+ loading @0xffffffffa0002000: /home/user/linux/build/net/netfilter/xt_limit.ko
+ loading @0xffffffffa00ca000: /home/user/linux/build/net/packet/af_packet.ko
+ loading @0xffffffffa003c000: /home/user/linux/build/fs/fuse/fuse.ko
+ ...
+ loading @0xffffffffa0000000: /home/user/linux/build/drivers/ata/ata_generic.ko
+
+- å°ä¸€äº›å°šæœªåŠ è¼‰çš„模塊中的函數函數設置斷點,例如::
+
+ (gdb) b btrfs_init_sysfs
+ Function "btrfs_init_sysfs" not defined.
+ Make breakpoint pending on future shared library load? (y or [n]) y
+ Breakpoint 1 (btrfs_init_sysfs) pending.
+
+- 繼續執行::
+
+ (gdb) c
+
+- 加載模塊並且能觀察到正在加載的符號以åŠæ–·é»žå‘½ä¸­::
+
+ loading @0xffffffffa0034000: /home/user/linux/build/lib/libcrc32c.ko
+ loading @0xffffffffa0050000: /home/user/linux/build/lib/lzo/lzo_compress.ko
+ loading @0xffffffffa006e000: /home/user/linux/build/lib/zlib_deflate/zlib_deflate.ko
+ loading @0xffffffffa01b1000: /home/user/linux/build/fs/btrfs/btrfs.ko
+
+ Breakpoint 1, btrfs_init_sysfs () at /home/user/linux/fs/btrfs/sysfs.c:36
+ 36 btrfs_kset = kset_create_and_add("btrfs", NULL, fs_kobj);
+
+- 查看內核的日誌緩è¡å€::
+
+ (gdb) lx-dmesg
+ [ 0.000000] Initializing cgroup subsys cpuset
+ [ 0.000000] Initializing cgroup subsys cpu
+ [ 0.000000] Linux version 3.8.0-rc4-dbg+ (...
+ [ 0.000000] Command line: root=/dev/sda2 resume=/dev/sda1 vga=0x314
+ [ 0.000000] e820: BIOS-provided physical RAM map:
+ [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
+ [ 0.000000] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
+ ....
+
+- 查看當å‰task structçµæ§‹é«”的字段(僅x86å’Œarm64支æŒï¼‰::
+
+ (gdb) p $lx_current().pid
+ $1 = 4998
+ (gdb) p $lx_current().comm
+ $2 = "modprobe\000\000\000\000\000\000\000"
+
+- å°ç•¶å‰æˆ–指定的CPU使用per-cpu函數::
+
+ (gdb) p $lx_per_cpu("runqueues").nr_running
+ $3 = 1
+ (gdb) p $lx_per_cpu("runqueues", 2).nr_running
+ $4 = 0
+
+- 使用container_of查看更多hrtimersä¿¡æ¯::
+
+ (gdb) set $next = $lx_per_cpu("hrtimer_bases").clock_base[0].active.next
+ (gdb) p *$container_of($next, "struct hrtimer", "node")
+ $5 = {
+ node = {
+ node = {
+ __rb_parent_color = 18446612133355256072,
+ rb_right = 0x0 <irq_stack_union>,
+ rb_left = 0x0 <irq_stack_union>
+ },
+ expires = {
+ tv64 = 1835268000000
+ }
+ },
+ _softexpires = {
+ tv64 = 1835268000000
+ },
+ function = 0xffffffff81078232 <tick_sched_timer>,
+ base = 0xffff88003fd0d6f0,
+ state = 1,
+ start_pid = 0,
+ start_site = 0xffffffff81055c1f <hrtimer_start_range_ns+20>,
+ start_comm = "swapper/2\000\000\000\000\000\000"
+ }
+
+
+命令和輔助調試功能列表
+----------------------
+
+命令和輔助調試功能å¯èƒ½æœƒéš¨ç€æ™‚間的推移而改進,此文顯示的是åˆå§‹ç‰ˆæœ¬çš„部分示例::
+
+ (gdb) apropos lx
+ function lx_current -- Return current task
+ function lx_module -- Find module by name and return the module variable
+ function lx_per_cpu -- Return per-cpu variable
+ function lx_task_by_pid -- Find Linux task by PID and return the task_struct variable
+ function lx_thread_info -- Calculate Linux thread_info from task variable
+ lx-dmesg -- Print Linux kernel log buffer
+ lx-lsmod -- List currently loaded modules
+ lx-symbols -- (Re-)load symbols of Linux kernel and currently loaded modules
+
+å¯ä»¥é€šéŽâ€œhelp <command-name>â€æˆ–“help function <function-name>â€å‘½ä»¤
+ç²å–指定命令或指定調試功能的更多詳細信æ¯ã€‚
+
diff --git a/Documentation/translations/zh_TW/dev-tools/index.rst b/Documentation/translations/zh_TW/dev-tools/index.rst
new file mode 100644
index 000000000000..0d38e5f80e54
--- /dev/null
+++ b/Documentation/translations/zh_TW/dev-tools/index.rst
@@ -0,0 +1,43 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+.. include:: ../disclaimer-zh_TW.rst
+
+:Original: Documentation/dev-tools/index.rst
+:Translator: 趙è»å¥Ž Bernard Zhao <bernard@vivo.com>
+
+============
+內核開發工具
+============
+
+本文檔是有關內核開發工具文檔的åˆé›†ã€‚
+ç›®å‰é€™äº›æ–‡æª”已經整ç†åœ¨ä¸€èµ·ï¼Œä¸éœ€è¦å†èŠ±è²»é¡å¤–的精力。
+歡迎任何補ä¸ã€‚
+
+有關測試專用工具的簡è¦æ¦‚述,åƒè¦‹
+Documentation/translations/zh_TW/dev-tools/testing-overview.rst
+
+.. class:: toc-title
+
+ 目錄
+
+.. toctree::
+ :maxdepth: 2
+
+ testing-overview
+ sparse
+ gcov
+ kasan
+ gdb-kernel-debugging
+
+Todolist:
+
+ - coccinelle
+ - kcov
+ - ubsan
+ - kmemleak
+ - kcsan
+ - kfence
+ - kgdb
+ - kselftest
+ - kunit/index
+
diff --git a/Documentation/translations/zh_TW/dev-tools/kasan.rst b/Documentation/translations/zh_TW/dev-tools/kasan.rst
new file mode 100644
index 000000000000..979eb84bc58f
--- /dev/null
+++ b/Documentation/translations/zh_TW/dev-tools/kasan.rst
@@ -0,0 +1,463 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+.. include:: ../disclaimer-zh_TW.rst
+
+:Original: Documentation/dev-tools/kasan.rst
+:Translator: è¬å®¶å…µ Wan Jiabing <wanjiabing@vivo.com>
+
+內核地å€æ¶ˆæ¯’劑(KASAN)
+=====================
+
+概述
+----
+
+Kernel Address SANitizer(KASAN)是一種動態內存安全錯誤檢測工具,主è¦åŠŸèƒ½æ˜¯
+檢查內存越界訪å•å’Œä½¿ç”¨å·²é‡‹æ”¾å…§å­˜çš„å•é¡Œã€‚
+
+KASAN有三種模å¼:
+
+1. 通用KASAN
+2. 基於軟件標籤的KASAN
+3. 基於硬件標籤的KASAN
+
+用CONFIG_KASAN_GENERIC啓用的通用KASAN,是用於調試的模å¼ï¼Œé¡žä¼¼æ–¼ç”¨æˆ¶ç©º
+é–“çš„ASan。這種模å¼åœ¨è¨±å¤šCPU架構上都被支æŒï¼Œä½†å®ƒæœ‰æ˜Žé¡¯çš„性能和內存開銷。
+
+基於軟件標籤的KASAN或SW_TAGS KASAN,通éŽCONFIG_KASAN_SW_TAGS啓用,
+å¯ä»¥ç”¨æ–¼èª¿è©¦å’Œè‡ªæˆ‘測試,類似於用戶空間HWASan。這種模å¼åªæ”¯æŒarm64,但其
+é©åº¦çš„內存開銷å…許在內存å—é™çš„設備上用真實的工作負載進行測試。
+
+基於硬件標籤的KASAN或HW_TAGS KASAN,用CONFIG_KASAN_HW_TAGS啓用,被
+用作ç¾å ´å…§å­˜éŒ¯èª¤æª¢æ¸¬å™¨æˆ–作爲安全緩解的模å¼ã€‚這種模å¼åªåœ¨æ”¯æŒMTE(內存標籤
+擴展)的arm64 CPU上工作,但它的內存和性能開銷很低,因此å¯ä»¥åœ¨ç”Ÿç”¢ä¸­ä½¿ç”¨ã€‚
+
+關於æ¯ç¨®KASAN模å¼çš„內存和性能影響的細節,請åƒè¦‹ç›¸æ‡‰çš„Kconfigé¸é …çš„æ述。
+
+通用模å¼å’ŒåŸºæ–¼è»Ÿä»¶æ¨™ç±¤çš„模å¼é€šå¸¸è¢«ç¨±çˆ²è»Ÿä»¶æ¨¡å¼ã€‚基於軟件標籤的模å¼å’ŒåŸºæ–¼
+硬件標籤的模å¼è¢«ç¨±çˆ²åŸºæ–¼æ¨™ç±¤çš„模å¼ã€‚
+
+支æŒ
+----
+
+體系架構
+~~~~~~~~
+
+在x86_64ã€armã€arm64ã€powerpcã€riscvã€s390ã€xtensaå’Œloongarch上支æŒé€šç”¨KASAN,
+而基於標籤的KASAN模å¼åªåœ¨arm64上支æŒã€‚
+
+編譯器
+~~~~~~
+
+軟件KASAN模å¼ä½¿ç”¨ç·¨è­¯æ™‚工具在æ¯å€‹å…§å­˜è¨ªå•ä¹‹å‰æ’入有效性檢查,因此需è¦ä¸€å€‹
+æ供支æŒçš„編譯器版本。基於硬件標籤的模å¼ä¾é ç¡¬ä»¶ä¾†åŸ·è¡Œé€™äº›æª¢æŸ¥ï¼Œä½†ä»ç„¶éœ€è¦
+一個支æŒå…§å­˜æ¨™ç±¤æŒ‡ä»¤çš„編譯器版本。
+
+通用KASAN需è¦GCC 8.3.0版本或更高版本,或者內核支æŒçš„任何Clang版本。
+
+基於軟件標籤的KASAN需è¦GCC 11+或者內核支æŒçš„任何Clang版本。
+
+基於硬件標籤的KASAN需è¦GCC 10+或Clang 12+。
+
+內存類型
+~~~~~~~~
+
+通用KASAN支æŒåœ¨æ‰€æœ‰çš„slabã€page_allocã€vmapã€vmallocã€å †æ£§å’Œå…¨å±€å…§å­˜
+中查找錯誤。
+
+基於軟件標籤的KASAN支æŒslabã€page_allocã€vmalloc和堆棧內存。
+
+基於硬件標籤的KASAN支æŒslabã€page_allocå’Œä¸å¯åŸ·è¡Œçš„vmalloc內存。
+
+å°æ–¼slab,兩種軟件KASAN模å¼éƒ½æ”¯æŒSLUBå’ŒSLAB分é…器,而基於硬件標籤的
+KASANåªæ”¯æŒSLUB。
+
+用法
+----
+
+è¦å•“用KASAN,請使用以下命令é…置內核::
+
+ CONFIG_KASAN=y
+
+åŒæ™‚在 ``CONFIG_KASAN_GENERIC`` (啓用通用KASAN模å¼), ``CONFIG_KASAN_SW_TAGS``
+(啓用基於硬件標籤的KASAN模å¼),和 ``CONFIG_KASAN_HW_TAGS`` (啓用基於硬件標籤
+çš„KASAN模å¼)之間進行é¸æ“‡ã€‚
+
+å°æ–¼è»Ÿä»¶æ¨¡å¼ï¼Œé‚„å¯ä»¥åœ¨ ``CONFIG_KASAN_OUTLINE`` å’Œ ``CONFIG_KASAN_INLINE``
+之間進行é¸æ“‡ã€‚outlineå’Œinline是編譯器æ’æ¨é¡žåž‹ã€‚å‰è€…產生較å°çš„二進制文件,
+而後者快2å€ã€‚
+
+è¦å°‡å—影響的slabå°è±¡çš„allocå’Œfree堆棧跟蹤包å«åˆ°å ±å‘Šä¸­ï¼Œè«‹å•“用
+``CONFIG_STACKTRACE`` 。è¦åŒ…括å—影響物ç†é é¢çš„分é…和釋放堆棧跟蹤的話,
+請啓用 ``CONFIG_PAGE_OWNER`` 並使用 ``page_owner=on`` 進行引導。
+
+å•“å‹•åƒæ•¸
+~~~~~~~~
+
+KASANå—到通用 ``panic_on_warn`` 命令行åƒæ•¸çš„影響。當它被啓用時,KASAN
+在打å°å‡ºéŒ¯èª¤å ±å‘Šå¾Œæœƒä½¿å…§æ ¸æ慌。
+
+默èªæƒ…æ³ä¸‹ï¼ŒKASANåªå°ç¬¬ä¸€å€‹ç„¡æ•ˆçš„內存訪å•æ‰“å°éŒ¯èª¤å ±å‘Šã€‚使用
+``kasan_multi_shot``,KASANå°æ¯ä¸€å€‹ç„¡æ•ˆçš„訪å•éƒ½æ‰“å°ä¸€ä»½å ±å‘Šã€‚這會ç¦ç”¨
+了KASAN報告的 ``panic_on_warn``。
+
+å¦å¤–,ç¨ç«‹æ–¼ ``panic_on_warn`` 〠``kasan.fault=`` bootåƒæ•¸å¯ä»¥ç”¨
+來控制æ慌和報告行爲。
+
+- ``kasan.fault=report`` 或 ``=panic`` 控制是å¦åªæ‰“å°KASAN report或
+ åŒæ™‚使內核æ慌(默èªï¼š ``report`` )。å³ä½¿ ``kasan_multi_shot`` 被
+ 啓用,æ慌也會發生。
+
+基於軟件和硬件標籤的KASAN模å¼ï¼ˆè¦‹ä¸‹é¢é—œæ–¼å„種模å¼çš„部分)支æŒæ”¹è®Šå †æ£§è·Ÿ
+蹤收集行爲:
+
+- ``kasan.stacktrace=off`` 或 ``=on`` ç¦ç”¨æˆ–啓用分é…和釋放堆棧痕
+ 跡的收集(默èªï¼š ``on`` )。
+
+- ``kasan.stack_ring_size=<number of entries>`` 指定堆棧環的æ¢
+ 目數(默èªï¼š ``32768`` )。
+
+基於硬件標籤的KASAN模å¼æ˜¯çˆ²äº†åœ¨ç”Ÿç”¢ä¸­ä½œçˆ²ä¸€ç¨®å®‰å…¨ç·©è§£æŽªæ–½ä½¿ç”¨ã€‚因此,它
+支æŒé¡å¤–çš„å•“å‹•åƒæ•¸ï¼Œå…許完全ç¦ç”¨KASAN或控制其功能。
+
+- ``kasan=off`` 或 ``=on`` 控制KASAN是å¦è¢«å•“用(默èªï¼š ``on`` )。
+
+- ``kasan.mode=sync``, ``=async`` or ``=asymm`` 控制KASAN是å¦
+ 被é…置爲åŒæ­¥ã€ç•°æ­¥æˆ–éžå°ç¨±çš„執行模å¼ï¼ˆé»˜èªï¼š ``åŒæ­¥`` )。
+ åŒæ­¥æ¨¡å¼ï¼šç•¶æ¨™ç±¤æª¢æŸ¥ç•°å¸¸ç™¼ç”Ÿæ™‚,會立å³æª¢æ¸¬åˆ°ä¸è‰¯è¨ªå•ã€‚
+ 異步模å¼ï¼šä¸è‰¯è¨ªå•çš„檢測是延é²çš„。當標籤檢查異常發生時,信æ¯è¢«å­˜å„²åœ¨ç¡¬
+ 件中(å°æ–¼arm64來說是在TFSR_EL1寄存器中)。內核週期性地檢查硬件,並\
+ 且åªåœ¨é€™äº›æª¢æŸ¥ä¸­å ±å‘Šæ¨™ç±¤ç•°å¸¸ã€‚
+ éžå°ç¨±æ¨¡å¼ï¼šè®€å–時åŒæ­¥æª¢æ¸¬ä¸è‰¯è¨ªå•ï¼Œå¯«å…¥æ™‚異步檢測。
+
+- ``kasan.vmalloc=off`` or ``=on`` ç¦ç”¨æˆ–啓用vmalloc分é…的標記(默èªï¼š ``on`` )。
+
+錯誤報告
+~~~~~~~~
+
+典型的KASAN報告如下所示::
+
+ ==================================================================
+ BUG: KASAN: slab-out-of-bounds in kmalloc_oob_right+0xa8/0xbc [test_kasan]
+ Write of size 1 at addr ffff8801f44ec37b by task insmod/2760
+
+ CPU: 1 PID: 2760 Comm: insmod Not tainted 4.19.0-rc3+ #698
+ Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-1 04/01/2014
+ Call Trace:
+ dump_stack+0x94/0xd8
+ print_address_description+0x73/0x280
+ kasan_report+0x144/0x187
+ __asan_report_store1_noabort+0x17/0x20
+ kmalloc_oob_right+0xa8/0xbc [test_kasan]
+ kmalloc_tests_init+0x16/0x700 [test_kasan]
+ do_one_initcall+0xa5/0x3ae
+ do_init_module+0x1b6/0x547
+ load_module+0x75df/0x8070
+ __do_sys_init_module+0x1c6/0x200
+ __x64_sys_init_module+0x6e/0xb0
+ do_syscall_64+0x9f/0x2c0
+ entry_SYSCALL_64_after_hwframe+0x44/0xa9
+ RIP: 0033:0x7f96443109da
+ RSP: 002b:00007ffcf0b51b08 EFLAGS: 00000202 ORIG_RAX: 00000000000000af
+ RAX: ffffffffffffffda RBX: 000055dc3ee521a0 RCX: 00007f96443109da
+ RDX: 00007f96445cff88 RSI: 0000000000057a50 RDI: 00007f9644992000
+ RBP: 000055dc3ee510b0 R08: 0000000000000003 R09: 0000000000000000
+ R10: 00007f964430cd0a R11: 0000000000000202 R12: 00007f96445cff88
+ R13: 000055dc3ee51090 R14: 0000000000000000 R15: 0000000000000000
+
+ Allocated by task 2760:
+ save_stack+0x43/0xd0
+ kasan_kmalloc+0xa7/0xd0
+ kmem_cache_alloc_trace+0xe1/0x1b0
+ kmalloc_oob_right+0x56/0xbc [test_kasan]
+ kmalloc_tests_init+0x16/0x700 [test_kasan]
+ do_one_initcall+0xa5/0x3ae
+ do_init_module+0x1b6/0x547
+ load_module+0x75df/0x8070
+ __do_sys_init_module+0x1c6/0x200
+ __x64_sys_init_module+0x6e/0xb0
+ do_syscall_64+0x9f/0x2c0
+ entry_SYSCALL_64_after_hwframe+0x44/0xa9
+
+ Freed by task 815:
+ save_stack+0x43/0xd0
+ __kasan_slab_free+0x135/0x190
+ kasan_slab_free+0xe/0x10
+ kfree+0x93/0x1a0
+ umh_complete+0x6a/0xa0
+ call_usermodehelper_exec_async+0x4c3/0x640
+ ret_from_fork+0x35/0x40
+
+ The buggy address belongs to the object at ffff8801f44ec300
+ which belongs to the cache kmalloc-128 of size 128
+ The buggy address is located 123 bytes inside of
+ 128-byte region [ffff8801f44ec300, ffff8801f44ec380)
+ The buggy address belongs to the page:
+ page:ffffea0007d13b00 count:1 mapcount:0 mapping:ffff8801f7001640 index:0x0
+ flags: 0x200000000000100(slab)
+ raw: 0200000000000100 ffffea0007d11dc0 0000001a0000001a ffff8801f7001640
+ raw: 0000000000000000 0000000080150015 00000001ffffffff 0000000000000000
+ page dumped because: kasan: bad access detected
+
+ Memory state around the buggy address:
+ ffff8801f44ec200: fc fc fc fc fc fc fc fc fb fb fb fb fb fb fb fb
+ ffff8801f44ec280: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
+ >ffff8801f44ec300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03
+ ^
+ ffff8801f44ec380: fc fc fc fc fc fc fc fc fb fb fb fb fb fb fb fb
+ ffff8801f44ec400: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
+ ==================================================================
+
+報告標題總çµäº†ç™¼ç”Ÿçš„錯誤類型以åŠå°Žè‡´è©²éŒ¯èª¤çš„訪å•é¡žåž‹ã€‚緊隨其後的是錯誤訪å•çš„
+堆棧跟蹤ã€æ‰€è¨ªå•å…§å­˜åˆ†é…ä½ç½®çš„堆棧跟蹤(å°æ–¼è¨ªå•äº†slabå°è±¡çš„情æ³ï¼‰ä»¥åŠå°è±¡
+被釋放的ä½ç½®çš„堆棧跟蹤(å°æ–¼è¨ªå•å·²é‡‹æ”¾å…§å­˜çš„å•é¡Œå ±å‘Šï¼‰ã€‚接下來是å°è¨ªå•çš„
+slabå°è±¡çš„æ述以åŠé—œæ–¼è¨ªå•çš„內存é çš„ä¿¡æ¯ã€‚
+
+最後,報告展示了訪å•åœ°å€å‘¨åœçš„內存狀態。在內部,KASANå–®ç¨è·Ÿè¹¤æ¯å€‹å…§å­˜é¡†ç²’çš„
+內存狀態,根據KASAN模å¼åˆ†çˆ²8或16個å°é½Šå­—節。報告的內存狀態部分中的æ¯å€‹æ•¸å­—
+都顯示了åœç¹žè¨ªå•åœ°å€çš„其中一個內存顆粒的狀態。
+
+å°æ–¼é€šç”¨KASAN,æ¯å€‹å…§å­˜é¡†ç²’的大å°çˆ²8個字節。æ¯å€‹é¡†ç²’的狀態被編碼在一個影å­å­—節
+中。這8個字節å¯ä»¥æ˜¯å¯è¨ªå•çš„,部分訪å•çš„,已釋放的或æˆçˆ²Redzone的一部分。KASAN
+å°æ¯å€‹å½±å­å­—節使用以下編碼:00表示å°æ‡‰å…§å­˜å€åŸŸçš„所有8個字節都å¯ä»¥è¨ªå•ï¼›æ•¸å­—N
+(1 <= N <= 7)表示å‰N個字節å¯è¨ªå•ï¼Œå…¶ä»–(8 - N)個字節ä¸å¯è¨ªå•ï¼›ä»»ä½•è² å€¼éƒ½è¡¨ç¤º
+無法訪å•æ•´å€‹8字節。KASAN使用ä¸åŒçš„負值來å€åˆ†ä¸åŒé¡žåž‹çš„ä¸å¯è¨ªå•å…§å­˜ï¼Œå¦‚redzones
+或已釋放的內存(åƒè¦‹ mm/kasan/kasan.h)。
+
+在上é¢çš„報告中,箭頭指å‘å½±å­å­—節 ``03`` ,表示訪å•çš„地å€æ˜¯éƒ¨åˆ†å¯è¨ªå•çš„。
+
+å°æ–¼åŸºæ–¼æ¨™ç±¤çš„KASAN模å¼ï¼Œå ±å‘Šæœ€å¾Œçš„部分顯示了訪å•åœ°å€å‘¨åœçš„內存標籤
+(åƒè€ƒ `實施細則`_ 章節)。
+
+請注æ„,KASAN錯誤標題(如 ``slab-out-of-bounds`` 或 ``use-after-free`` )
+是儘é‡æŽ¥è¿‘çš„:KASAN根據其æ“有的有é™ä¿¡æ¯æ‰“å°å‡ºæœ€å¯èƒ½çš„錯誤類型。錯誤的實際類型
+å¯èƒ½æœƒæœ‰æ‰€ä¸åŒã€‚
+
+通用KASAN還報告兩個輔助調用堆棧跟蹤。這些堆棧跟蹤指å‘代碼中與å°è±¡äº¤äº’但ä¸ç›´æŽ¥
+出ç¾åœ¨éŒ¯èª¤è¨ªå•å †æ£§è·Ÿè¹¤ä¸­çš„ä½ç½®ã€‚ç›®å‰ï¼Œé€™åŒ…括 call_rcu() 和排隊的工作隊列。
+
+實施細則
+--------
+
+通用KASAN
+~~~~~~~~~
+
+軟件KASAN模å¼ä½¿ç”¨å½±å­å…§å­˜ä¾†è¨˜éŒ„æ¯å€‹å…§å­˜å­—節是å¦å¯ä»¥å®‰å…¨è¨ªå•ï¼Œä¸¦ä½¿ç”¨ç·¨è­¯æ™‚工具
+在æ¯æ¬¡å…§å­˜è¨ªå•ä¹‹å‰æ’入影å­å…§å­˜æª¢æŸ¥ã€‚
+
+通用KASANå°‡1/8的內核內存專用於其影å­å…§å­˜ï¼ˆ16TB以覆蓋x86_64上的128TB),並使用
+具有比例和å移é‡çš„直接映射將內存地å€è½‰æ›çˆ²å…¶ç›¸æ‡‰çš„å½±å­åœ°å€ã€‚
+
+這是將地å€è½‰æ›çˆ²å…¶ç›¸æ‡‰å½±å­åœ°å€çš„函數::
+
+ static inline void *kasan_mem_to_shadow(const void *addr)
+ {
+ return (void *)((unsigned long)addr >> KASAN_SHADOW_SCALE_SHIFT)
+ + KASAN_SHADOW_OFFSET;
+ }
+
+åœ¨é€™è£ ``KASAN_SHADOW_SCALE_SHIFT = 3`` 。
+
+編譯時工具用於æ’入內存訪å•æª¢æŸ¥ã€‚編譯器在æ¯æ¬¡è¨ªå•å¤§å°çˆ²1ã€2ã€4ã€8或16的內存之å‰
+æ’入函數調用( ``__asan_load*(addr)`` , ``__asan_store*(addr)``)。這些函數通éŽ
+檢查相應的影å­å…§å­˜ä¾†æª¢æŸ¥å…§å­˜è¨ªå•æ˜¯å¦æœ‰æ•ˆã€‚
+
+使用inlineæ’æ¨ï¼Œç·¨è­¯å™¨ä¸é€²è¡Œå‡½æ•¸èª¿ç”¨ï¼Œè€Œæ˜¯ç›´æŽ¥æ’入代碼來檢查影å­å…§å­˜ã€‚æ­¤é¸é …
+顯著地增大了內核體ç©ï¼Œä½†èˆ‡outlineæ’æ¨å…§æ ¸ç›¸æ¯”,它æ供了x1.1-x2的性能æå‡ã€‚
+
+通用KASAN是唯一一種通éŽéš”離延é²é‡æ–°ä½¿ç”¨å·²é‡‹æ”¾å°è±¡çš„模å¼
+(åƒè¦‹ mm/kasan/quarantine.c 以瞭解實ç¾ï¼‰ã€‚
+
+基於軟件標籤的KASAN模å¼
+~~~~~~~~~~~~~~~~~~~~~~~
+
+基於軟件標籤的KASAN使用軟件內存標籤方法來檢查訪å•æœ‰æ•ˆæ€§ã€‚ç›®å‰åƒ…é‡å°arm64架構實ç¾ã€‚
+
+基於軟件標籤的KASAN使用arm64 CPU的頂部字節忽略(TBI)特性在內核指é‡çš„頂部字節中
+存儲一個指é‡æ¨™ç±¤ã€‚它使用影å­å…§å­˜ä¾†å­˜å„²èˆ‡æ¯å€‹16字節內存單元相關的內存標籤(因此,
+它將內核內存的1/16專用於影å­å…§å­˜)。
+
+在æ¯æ¬¡å…§å­˜åˆ†é…時,基於軟件標籤的KASAN都會生æˆä¸€å€‹éš¨æ©Ÿæ¨™ç±¤ï¼Œç”¨é€™å€‹æ¨™ç±¤æ¨™è¨˜åˆ†é…
+的內存,並將相åŒçš„標籤嵌入到返回的指é‡ä¸­ã€‚
+
+基於軟件標籤的KASAN使用編譯時工具在æ¯æ¬¡å…§å­˜è¨ªå•ä¹‹å‰æ’入檢查。這些檢查確ä¿æ­£åœ¨
+訪å•çš„內存的標籤等於用於訪å•è©²å…§å­˜çš„指é‡çš„標籤。如果標籤ä¸åŒ¹é…,基於軟件標籤
+çš„KASAN會打å°éŒ¯èª¤å ±å‘Šã€‚
+
+基於軟件標籤的KASAN也有兩種æ’æ¨æ¨¡å¼ï¼ˆoutline,發出回調來檢查內存訪å•ï¼›inline,
+執行內è¯çš„å½±å­å…§å­˜æª¢æŸ¥ï¼‰ã€‚使用outlineæ’æ¨æ¨¡å¼ï¼Œæœƒå¾žåŸ·è¡Œè¨ªå•æª¢æŸ¥çš„函數打å°éŒ¯èª¤
+報告。使用inlineæ’æ¨ï¼Œç·¨è­¯å™¨æœƒç™¼å‡º ``brk`` 指令,並使用專用的 ``brk`` 處ç†ç¨‹åº
+來打å°éŒ¯èª¤å ±å‘Šã€‚
+
+基於軟件標籤的KASAN使用0xFF作爲匹é…所有指é‡æ¨™ç±¤ï¼ˆä¸æª¢æŸ¥é€šéŽå¸¶æœ‰0xFF指é‡æ¨™ç±¤
+的指é‡é€²è¡Œçš„訪å•ï¼‰ã€‚值0xFE當å‰ä¿ç•™ç”¨æ–¼æ¨™è¨˜å·²é‡‹æ”¾çš„內存å€åŸŸã€‚
+
+
+基於硬件標籤的KASAN模å¼
+~~~~~~~~~~~~~~~~~~~~~~~
+
+基於硬件標籤的KASAN在概念上類似於軟件模å¼ï¼Œä½†å®ƒæ˜¯ä½¿ç”¨ç¡¬ä»¶å…§å­˜æ¨™ç±¤ä½œçˆ²æ”¯æŒè€Œ
+ä¸æ˜¯ç·¨è­¯å™¨æ’æ¨å’Œå½±å­å…§å­˜ã€‚
+
+基於硬件標籤的KASANç›®å‰åƒ…é‡å°arm64架構實ç¾ï¼Œä¸¦ä¸”基於ARMv8.5指令集架構中引入
+的arm64內存標記擴展(MTE)和最高字節忽略(TBI)。
+
+特殊的arm64指令用於爲æ¯æ¬¡å…§å­˜åˆ†é…指定內存標籤。相åŒçš„標籤被指定給指å‘這些分é…
+的指é‡ã€‚在æ¯æ¬¡å…§å­˜è¨ªå•æ™‚,硬件確ä¿æ­£åœ¨è¨ªå•çš„內存的標籤等於用於訪å•è©²å…§å­˜çš„指é‡
+的標籤。如果標籤ä¸åŒ¹é…,則會生æˆæ•…障並打å°å ±å‘Šã€‚
+
+基於硬件標籤的KASAN使用0xFF作爲匹é…所有指é‡æ¨™ç±¤ï¼ˆä¸æª¢æŸ¥é€šéŽå¸¶æœ‰0xFF指é‡æ¨™ç±¤çš„
+指é‡é€²è¡Œçš„訪å•ï¼‰ã€‚值0xFE當å‰ä¿ç•™ç”¨æ–¼æ¨™è¨˜å·²é‡‹æ”¾çš„內存å€åŸŸã€‚
+
+如果硬件ä¸æ”¯æŒMTE(ARMv8.5之å‰ï¼‰ï¼Œå‰‡ä¸æœƒå•“用基於硬件標籤的KASAN。在這種情æ³ä¸‹ï¼Œ
+所有KASAN引導åƒæ•¸éƒ½å°‡è¢«å¿½ç•¥ã€‚
+
+請注æ„,啓用CONFIG_KASAN_HW_TAGS始終會導致啓用內核中的TBI。å³ä½¿æ供了
+``kasan.mode=off`` 或硬件ä¸æ”¯æŒMTE(但支æŒTBI)。
+
+基於硬件標籤的KASANåªå ±å‘Šç¬¬ä¸€å€‹ç™¼ç¾çš„錯誤。之後,MTE標籤檢查將被ç¦ç”¨ã€‚
+
+å½±å­å…§å­˜
+--------
+
+本節的內容åªé©ç”¨æ–¼è»Ÿä»¶KASAN模å¼ã€‚
+
+內核將內存映射到地å€ç©ºé–“的幾個ä¸åŒéƒ¨åˆ†ã€‚內核虛擬地å€çš„範åœå¾ˆå¤§ï¼šæ²’有足夠的真實
+內存來支æŒå…§æ ¸å¯ä»¥è¨ªå•çš„æ¯å€‹åœ°å€çš„真實影å­å€åŸŸã€‚因此,KASANåªçˆ²åœ°å€ç©ºé–“çš„æŸäº›
+部分映射真實的影å­ã€‚
+
+默èªè¡Œçˆ²
+~~~~~~~~
+
+默èªæƒ…æ³ä¸‹ï¼Œé«”ç³»çµæ§‹åƒ…將實際內存映射到用於線性映射的陰影å€åŸŸï¼ˆä»¥åŠå¯èƒ½çš„其他
+å°å€åŸŸï¼‰ã€‚å°æ–¼æ‰€æœ‰å…¶ä»–å€åŸŸ —— 例如vmallocå’Œvmemmap空間 —— 一個åªè®€é é¢è¢«æ˜ å°„
+到陰影å€åŸŸä¸Šã€‚這個åªè®€çš„å½±å­é é¢è²æ˜Žæ‰€æœ‰å…§å­˜è¨ªå•éƒ½æ˜¯å…許的。
+
+這給模塊帶來了一個å•é¡Œï¼šå®ƒå€‘ä¸å­˜åœ¨æ–¼ç·šæ€§æ˜ å°„中,而是存在於專用的模塊空間中。
+通éŽé€£æŽ¥æ¨¡å¡Šåˆ†é…器,KASAN臨時映射真實的影å­å…§å­˜ä»¥è¦†è“‹å®ƒå€‘。例如,這å…許檢測
+å°æ¨¡å¡Šå…¨å±€è®Šé‡çš„無效訪å•ã€‚
+
+這也造æˆäº†èˆ‡ ``VMAP_STACK`` çš„ä¸å…¼å®¹ï¼šå¦‚果堆棧ä½æ–¼vmalloc空間中,它將被分é…
+åªè®€é é¢çš„å½±å­å…§å­˜ï¼Œä¸¦ä¸”內核在嘗試爲堆棧變é‡è¨­ç½®å½±å­æ•¸æ“šæ™‚會出錯。
+
+CONFIG_KASAN_VMALLOC
+~~~~~~~~~~~~~~~~~~~~
+
+使用 ``CONFIG_KASAN_VMALLOC`` ,KASANå¯ä»¥ä»¥æ›´å¤§çš„內存使用爲代價覆蓋vmalloc
+空間。目å‰ï¼Œé€™åœ¨arm64ã€x86ã€riscvã€s390å’Œpowerpc上å—支æŒã€‚
+
+這通éŽé€£æŽ¥åˆ°vmallocå’Œvmap並動態分é…真實的影å­å…§å­˜ä¾†æ”¯æŒæ˜ å°„。
+
+vmalloc空間中的大多數映射都很å°ï¼Œéœ€è¦ä¸åˆ°ä¸€æ•´é çš„陰影空間。因此,爲æ¯å€‹æ˜ å°„
+分é…一個完整的影å­é é¢å°‡æ˜¯ä¸€ç¨®æµªè²»ã€‚此外,爲了確ä¿ä¸åŒçš„映射使用ä¸åŒçš„å½±å­
+é é¢ï¼Œæ˜ å°„必須與 ``KASAN_GRANULE_SIZE * PAGE_SIZE`` å°é½Šã€‚
+
+相å,KASAN跨多個映射共享後備空間。當vmalloc空間中的映射使用影å­å€åŸŸçš„特定
+é é¢æ™‚,它會分é…一個後備é é¢ã€‚æ­¤é é¢ç¨å¾Œå¯ä»¥ç”±å…¶ä»–vmalloc映射共享。
+
+KASAN連接到vmap基礎架構以懶清ç†æœªä½¿ç”¨çš„å½±å­å…§å­˜ã€‚
+
+爲了é¿å…交æ›æ˜ å°„的困難,KASANé æ¸¬è¦†è“‹vmalloc空間的陰影å€åŸŸéƒ¨åˆ†å°‡ä¸æœƒè¢«æ—©æœŸ
+çš„é™°å½±é é¢è¦†è“‹ï¼Œä½†æ˜¯å°‡ä¸æœƒè¢«æ˜ å°„。這將需è¦æ›´æ”¹ç‰¹å®šæ–¼arch的代碼。
+
+這å…許在x86ä¸Šæ”¯æŒ ``VMAP_STACK`` ,並且å¯ä»¥ç°¡åŒ–å°æ²’有固定模塊å€åŸŸçš„架構的支æŒã€‚
+
+å°æ–¼é–‹ç™¼è€…
+----------
+
+忽略訪å•
+~~~~~~~~
+
+軟件KASAN模å¼ä½¿ç”¨ç·¨è­¯å™¨æ’æ¨ä¾†æ’入有效性檢查。此類檢測å¯èƒ½èˆ‡å…§æ ¸çš„æŸäº›éƒ¨åˆ†
+ä¸å…¼å®¹ï¼Œå› æ­¤éœ€è¦ç¦ç”¨ã€‚
+
+內核的其他部分å¯èƒ½æœƒè¨ªå•å·²åˆ†é…å°è±¡çš„元數據。通常,KASAN會檢測並報告此類訪å•ï¼Œ
+但在æŸäº›æƒ…æ³ä¸‹ï¼ˆä¾‹å¦‚,在內存分é…器中),這些訪å•æ˜¯æœ‰æ•ˆçš„。
+
+å°æ–¼è»Ÿä»¶KASAN模å¼ï¼Œè¦ç¦ç”¨ç‰¹å®šæ–‡ä»¶æˆ–目錄的檢測,請將 ``KASAN_SANITIZE`` 添加
+到相應的內核Makefile中:
+
+- å°æ–¼å–®å€‹æ–‡ä»¶(例如,main.o)::
+
+ KASAN_SANITIZE_main.o := n
+
+- å°æ–¼ä¸€å€‹ç›®éŒ„下的所有文件::
+
+ KASAN_SANITIZE := n
+
+å°æ–¼è»Ÿä»¶KASAN模å¼ï¼Œè¦åœ¨æ¯å€‹å‡½æ•¸çš„基礎上ç¦ç”¨æª¢æ¸¬ï¼Œè«‹ä½¿ç”¨KASAN特定的
+``__no_sanitize_address`` 函數屬性或通用的 ``noinstr`` 。
+
+請注æ„,ç¦ç”¨ç·¨è­¯å™¨æ’æ¨ï¼ˆåŸºæ–¼æ¯å€‹æ–‡ä»¶æˆ–æ¯å€‹å‡½æ•¸ï¼‰æœƒä½¿KASAN忽略在軟件KASAN模å¼
+的代碼中直接發生的訪å•ã€‚當訪å•æ˜¯é–“接發生的(通éŽèª¿ç”¨æª¢æ¸¬å‡½æ•¸ï¼‰æˆ–使用沒有編譯器
+æ’æ¨çš„基於硬件標籤的模å¼æ™‚,它沒有幫助。
+
+å°æ–¼è»Ÿä»¶KASAN模å¼ï¼Œè¦åœ¨ç•¶å‰ä»»å‹™çš„一部分內核代碼中ç¦ç”¨KASAN報告,請使用
+``kasan_disable_current()``/``kasan_enable_current()`` 部分註釋這部分代碼。
+這也會ç¦ç”¨é€šéŽå‡½æ•¸èª¿ç”¨ç™¼ç”Ÿçš„間接訪å•çš„報告。
+
+å°æ–¼åŸºæ–¼æ¨™ç±¤çš„KASAN模å¼ï¼Œè¦ç¦ç”¨è¨ªå•æª¢æŸ¥ï¼Œè«‹ä½¿ç”¨ ``kasan_reset_tag()`` 或
+``page_kasan_tag_reset()`` 。請注æ„ï¼Œé€šéŽ ``page_kasan_tag_reset()``
+臨時ç¦ç”¨è¨ªå•æª¢æŸ¥éœ€è¦é€šéŽ ``page_kasan_tag`` / ``page_kasan_tag_set`` ä¿
+存和æ¢å¾©æ¯é KASAN標籤。
+
+測試
+~~~~
+
+有一些KASAN測試å¯ä»¥é©—è­‰KASAN是å¦æ­£å¸¸å·¥ä½œä¸¦å¯ä»¥æª¢æ¸¬æŸäº›é¡žåž‹çš„內存æ壞。
+測試由兩部分組æˆ:
+
+1. 與KUnit測試框架集æˆçš„測試。使用 ``CONFIG_KASAN_KUNIT_TEST`` 啓用。
+這些測試å¯ä»¥é€šéŽå¹¾ç¨®ä¸åŒçš„æ–¹å¼è‡ªå‹•é‹è¡Œå’Œéƒ¨åˆ†é©—證;請åƒé–±ä¸‹é¢çš„說明。
+
+2. 與KUnitä¸å…¼å®¹çš„測試。使用 ``CONFIG_KASAN_MODULE_TEST`` 啓用並且åªèƒ½ä½œçˆ²æ¨¡å¡Š
+é‹è¡Œã€‚這些測試åªèƒ½é€šéŽåŠ è¼‰å…§æ ¸æ¨¡å¡Šä¸¦æª¢æŸ¥å…§æ ¸æ—¥èªŒä»¥ç²å–KASAN報告來手動驗證。
+
+如果檢測到錯誤,æ¯å€‹KUnit兼容的KASAN測試都會打å°å¤šå€‹KASAN報告之一,然後測試打å°
+其編號和狀態。
+
+當測試通éŽ::
+
+ ok 28 - kmalloc_double_kzfree
+
+當由於 ``kmalloc`` 失敗而導致測試失敗時::
+
+ # kmalloc_large_oob_right: ASSERTION FAILED at lib/test_kasan.c:163
+ Expected ptr is not null, but is
+ not ok 4 - kmalloc_large_oob_right
+
+當由於缺少KASAN報告而導致測試失敗時::
+
+ # kmalloc_double_kzfree: EXPECTATION FAILED at lib/test_kasan.c:974
+ KASAN failure expected in "kfree_sensitive(ptr)", but none occurred
+ not ok 44 - kmalloc_double_kzfree
+
+
+最後打å°æ‰€æœ‰KASAN測試的累ç©ç‹€æ…‹ã€‚æˆåŠŸ::
+
+ ok 1 - kasan
+
+或者,如果其中一項測試失敗::
+
+ not ok 1 - kasan
+
+有幾種方法å¯ä»¥é‹è¡Œèˆ‡KUnit兼容的KASAN測試。
+
+1. å¯åŠ è¼‰æ¨¡å¡Š
+
+ 啓用 ``CONFIG_KUNIT`` 後,KASAN-KUnit測試å¯ä»¥æ§‹å»ºçˆ²å¯åŠ è¼‰æ¨¡å¡Šï¼Œä¸¦é€šéŽä½¿ç”¨
+ ``insmod`` 或 ``modprobe`` 加載 ``test_kasan.ko`` 來é‹è¡Œã€‚
+
+2. 內置
+
+ 通éŽå…§ç½® ``CONFIG_KUNIT`` ,也å¯ä»¥å…§ç½®KASAN-KUnit測試。在這種情æ³ä¸‹ï¼Œ
+ 測試將在啓動時作爲後期åˆå§‹åŒ–調用é‹è¡Œã€‚
+
+3. 使用kunit_tool
+
+ 通éŽå…§ç½® ``CONFIG_KUNIT`` å’Œ ``CONFIG_KASAN_KUNIT_TEST`` ,還å¯ä»¥ä½¿ç”¨
+ ``kunit_tool`` 以更易讀的方å¼æŸ¥çœ‹KUnit測試çµæžœã€‚這ä¸æœƒæ‰“å°é€šéŽæ¸¬è©¦
+ çš„KASAN報告。有關 ``kunit_tool`` 更多最新信æ¯ï¼Œè«‹åƒé–±
+ `KUnit文檔 <https://www.kernel.org/doc/html/latest/dev-tools/kunit/index.html>`_ 。
+
+.. _KUnit: https://www.kernel.org/doc/html/latest/dev-tools/kunit/index.html
+
diff --git a/Documentation/translations/zh_TW/sparse.txt b/Documentation/translations/zh_TW/dev-tools/sparse.rst
index 35d3d1d748e6..11d64709d6a4 100644
--- a/Documentation/translations/zh_TW/sparse.txt
+++ b/Documentation/translations/zh_TW/dev-tools/sparse.rst
@@ -27,7 +27,7 @@ Copyright 2006 Bob Copeland <me@bobcopeland.com>
使用 sparse 工具åšé¡žåž‹æª¢æŸ¥
~~~~~~~~~~~~~~~~~~~~~~~~~~
-"__bitwise" 是一種類型屬性,所以你應該這樣使用它:
+"__bitwise" 是一種類型屬性,所以你應該這樣使用它::
typedef int __bitwise pm_request_t;
@@ -47,7 +47,7 @@ Copyright 2006 Bob Copeland <me@bobcopeland.com>
å¦ç™½ä¾†èªªï¼Œä½ ä¸¦ä¸éœ€è¦ä½¿ç”¨æžšèˆ‰é¡žåž‹ã€‚上é¢é‚£äº›å¯¦éš›éƒ½å¯ä»¥æ¿ƒç¸®æˆä¸€å€‹ç‰¹æ®Šçš„"int
__bitwise"類型。
-所以更簡單的辦法åªè¦é€™æ¨£åšï¼š
+所以更簡單的辦法åªè¦é€™æ¨£åš::
typedef int __bitwise pm_request_t;
diff --git a/Documentation/translations/zh_TW/dev-tools/testing-overview.rst b/Documentation/translations/zh_TW/dev-tools/testing-overview.rst
new file mode 100644
index 000000000000..fb3f691f46c3
--- /dev/null
+++ b/Documentation/translations/zh_TW/dev-tools/testing-overview.rst
@@ -0,0 +1,162 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+.. include:: ../disclaimer-zh_TW.rst
+
+:Original: Documentation/dev-tools/testing-overview.rst
+:Translator: 胡皓文 Hu Haowen <src.res.211@gmail.com>
+
+============
+內核測試指å—
+============
+
+有許多ä¸åŒçš„工具å¯ä»¥ç”¨æ–¼æ¸¬è©¦Linux內核,因此瞭解什麼時候使用它們å¯èƒ½
+很困難。本文檔粗略概述了它們之間的å€åˆ¥ï¼Œä¸¦é—¡é‡‹äº†å®ƒå€‘是怎樣糅åˆåœ¨ä¸€èµ·
+的。
+
+編寫和é‹è¡Œæ¸¬è©¦
+==============
+
+大多數內核測試都是用kselftest或KUnit框架之一編寫的。它們都讓é‹è¡Œæ¸¬è©¦
+更加簡化,併爲編寫新測試æ供幫助。
+
+如果你想驗證內核的行爲——尤其是內核的特定部分——那你就è¦ä½¿ç”¨kUnit或
+kselftest。
+
+KUnitå’Œkselftestçš„å€åˆ¥
+----------------------
+
+.. note::
+ 由於本文段中部分術語尚無較好的å°æ‡‰ä¸­æ–‡é‡‹ç¾©ï¼Œå¯èƒ½å°Žè‡´èˆ‡åŽŸæ–‡å«ç¾©
+ 存在些許差異,因此建議讀者çµåˆåŽŸæ–‡
+ (Documentation/dev-tools/testing-overview.rst)輔助閱讀。
+ 如å°éƒ¨åˆ†ç¿»è­¯æœ‰ç•°è­°æˆ–有更好的翻譯æ„見,歡迎è¯ç¹«è­¯è€…進行修訂。
+
+KUnit(Documentation/dev-tools/kunit/index.rst)是用於“白箱â€æ¸¬
+試的一個完整的內核內部系統:因爲測試代碼是內核的一部分,所以它能夠訪
+å•ç”¨æˆ¶ç©ºé–“ä¸èƒ½è¨ªå•åˆ°çš„內部çµæ§‹å’ŒåŠŸèƒ½ã€‚
+
+因此,KUnit測試最好é‡å°å…§æ ¸ä¸­è¼ƒå°çš„ã€è‡ªåŒ…å«çš„部分,以便能夠ç¨ç«‹åœ°æ¸¬
+試。“單元â€æ¸¬è©¦çš„概念亦是如此。
+
+比如,一個KUnit測試å¯èƒ½æ¸¬è©¦ä¸€å€‹å–®ç¨çš„內核功能(甚至通éŽä¸€å€‹å‡½æ•¸æ¸¬è©¦
+一個單一的代碼路徑,例如一個錯誤處ç†æ¡ˆä¾‹ï¼‰ï¼Œè€Œä¸æ˜¯æ•´å€‹åœ°æ¸¬è©¦ä¸€å€‹ç‰¹æ€§ã€‚
+
+這也使得KUnit測試構建和é‹è¡Œéžå¸¸åœ°å¿«ï¼Œå¾žè€Œèƒ½å¤ ä½œçˆ²é–‹ç™¼æµç¨‹çš„一部分被
+é »ç¹åœ°é‹è¡Œã€‚
+
+有關更詳細的介紹,請åƒé–±KUnit測試代碼風格指å—
+Documentation/dev-tools/kunit/style.rst
+
+kselftest(Documentation/dev-tools/kselftest.rst),相å°ä¾†èªªï¼Œå¤§é‡ç”¨
+於用戶空間,並且通常測試用戶空間的腳本或程åºã€‚
+
+這使得編寫複雜的測試,或者需è¦æ“作更多全局系統狀態的測試更加容易(諸
+如生æˆé€²ç¨‹ä¹‹é¡žï¼‰ã€‚然而,從kselftest直接調用內核函數是ä¸è¡Œçš„。這也就
+æ„味ç€åªæœ‰é€šéŽæŸç¨®æ–¹å¼ï¼ˆå¦‚系統調用ã€é©…動設備ã€æ–‡ä»¶ç³»çµ±ç­‰ï¼‰å°Žå‡ºåˆ°äº†ç”¨
+戶空間的內核功能æ‰èƒ½ä½¿ç”¨kselftest來測試。爲此,有些測試包å«äº†ä¸€å€‹ä¼´
+生的內核模塊用於導出更多的信æ¯å’ŒåŠŸèƒ½ã€‚ä¸éŽï¼Œå°æ–¼åŸºæœ¬ä¸Šæˆ–者完全在內核
+中é‹è¡Œçš„測試,KUnitå¯èƒ½æ˜¯æ›´ä½³å·¥å…·ã€‚
+
+kselftest也因此éžå¸¸é©åˆæ–¼å…¨éƒ¨åŠŸèƒ½çš„測試,因爲這些功能會將接å£æš´éœ²åˆ°
+用戶空間,從而能夠被測試,而ä¸æ˜¯å±•ç¾å¯¦ç¾ç´°ç¯€ã€‚“systemâ€æ¸¬è©¦å’Œ
+“end-to-endâ€æ¸¬è©¦äº¦æ˜¯å¦‚此。
+
+比如,一個新的系統調用應該伴隨有新的kselftest測試。
+
+代碼覆蓋率工具
+==============
+
+支æŒå…©ç¨®ä¸åŒä»£ç¢¼ä¹‹é–“的覆蓋率測é‡å·¥å…·ã€‚它們å¯ä»¥ç”¨ä¾†é©—證一項測試執行的
+確切函數或代碼行。這有助於決定內核被測試了多少,或用來查找åˆé©çš„測試
+中沒有覆蓋到的極端情æ³ã€‚
+
+Documentation/translations/zh_CN/dev-tools/gcov.rst 是GCC的覆蓋率測試
+工具,能用於ç²å–內核的全局或æ¯å€‹æ¨¡å¡Šçš„覆蓋率。與KCOVä¸åŒçš„是,這個工具
+ä¸è¨˜éŒ„æ¯å€‹ä»»å‹™çš„覆蓋率。覆蓋率數據å¯ä»¥é€šéŽdebugfs讀å–,並通éŽå¸¸è¦çš„
+gcov工具進行解釋。
+
+Documentation/dev-tools/kcov.rst 是能夠構建在內核之中,用於在æ¯å€‹ä»»å‹™
+的層é¢æ•æ‰è¦†è“‹çŽ‡çš„一個功能。因此,它å°æ–¼æ¨¡ç³Šæ¸¬è©¦å’Œé—œæ–¼ä»£ç¢¼åŸ·è¡ŒæœŸé–“ä¿¡
+æ¯çš„其它情æ³éžå¸¸æœ‰ç”¨ï¼Œæ¯”如在一個單一系統調用è£ä½¿ç”¨å®ƒå°±å¾ˆæœ‰ç”¨ã€‚
+
+動態分æžå·¥å…·
+============
+
+內核也支æŒè¨±å¤šå‹•æ…‹åˆ†æžå·¥å…·ï¼Œç”¨ä»¥æª¢æ¸¬æ­£åœ¨é‹è¡Œçš„內核中出ç¾çš„多種類型的
+å•é¡Œã€‚這些工具通常æ¯å€‹åŽ»å°‹æ‰¾ä¸€é¡žä¸åŒçš„缺陷,比如éžæ³•å…§å­˜è¨ªå•ï¼Œæ•¸æ“šç«¶
+爭等併發å•é¡Œï¼Œæˆ–整型溢出等其他未定義行爲。
+
+如下所示:
+
+* kmemleak檢測å¯èƒ½çš„內存泄æ¼ã€‚åƒé–±
+ Documentation/dev-tools/kmemleak.rst
+* KASAN檢測éžæ³•å…§å­˜è¨ªå•ï¼Œå¦‚數組越界和釋放後é‡ç”¨ï¼ˆUAF)。åƒé–±
+ Documentation/dev-tools/kasan.rst
+* UBSAN檢測C標準中未定義的行爲,如整型溢出。åƒé–±
+ Documentation/dev-tools/ubsan.rst
+* KCSAN檢測數據競爭。åƒé–± Documentation/dev-tools/kcsan.rst
+* KFENCE是一個低開銷的內存å•é¡Œæª¢æ¸¬å™¨ï¼Œæ¯”KASAN更快且能被用於批é‡æ§‹å»ºã€‚
+ åƒé–± Documentation/dev-tools/kfence.rst
+* lockdep是一個鎖定正確性檢測器。åƒé–±
+ Documentation/locking/lockdep-design.rst
+* 除此以外,在內核中還有一些其它的調試工具,大多數能在
+ lib/Kconfig.debug 中找到。
+
+這些工具傾å‘æ–¼å°å…§æ ¸é€²è¡Œæ•´é«”測試,並且ä¸åƒkselftestå’ŒKUnit一樣“傳éžâ€ã€‚
+它們å¯ä»¥é€šéŽåœ¨å•“用這些工具時é‹è¡Œå…§æ ¸æ¸¬è©¦ä»¥èˆ‡kselftest或KUnitçµåˆèµ·ä¾†ï¼š
+之後你就能確ä¿é€™äº›éŒ¯èª¤åœ¨æ¸¬è©¦éŽç¨‹ä¸­éƒ½ä¸æœƒç™¼ç”Ÿäº†ã€‚
+
+一些工具與KUnitå’Œkselftest集æˆï¼Œä¸¦ä¸”在檢測到å•é¡Œæ™‚會自動打斷測試。
+
+éœæ…‹åˆ†æžå·¥å…·
+============
+
+除了測試é‹è¡Œä¸­çš„內核,我們還å¯ä»¥ä½¿ç”¨**éœæ…‹åˆ†æž**工具直接分æžå…§æ ¸çš„æºä»£
+碼(**在編譯時**)。內核中常用的工具å…許人們檢查整個æºä»£ç¢¼æ¨¹æˆ–其中的特
+定文件。它們使得在開發éŽç¨‹ä¸­æ›´å®¹æ˜“發ç¾å’Œä¿®å¾©å•é¡Œã€‚
+
+ Sparseå¯ä»¥é€šéŽåŸ·è¡Œé¡žåž‹æª¢æŸ¥ã€éŽ–檢查ã€å€¼ç¯„åœæª¢æŸ¥ä¾†å¹«åŠ©æ¸¬è©¦å…§æ ¸ï¼Œæ­¤å¤–é‚„
+ å¯ä»¥åœ¨æª¢æŸ¥ä»£ç¢¼æ™‚報告å„種錯誤和警告。關於如何使用它的細節,請åƒé–±
+ Documentation/translations/zh_CN/dev-tools/sparse.rst。
+
+ Smatch擴展了Sparse,並æ供了å°ç·¨ç¨‹é‚輯錯誤的é¡å¤–檢查,如開關語å¥ä¸­
+ 缺少斷點,錯誤檢查中未使用的返回值,忘記在錯誤路徑的返回中設置錯誤代
+ 碼等。Smatch也有é‡å°æ›´åš´é‡å•é¡Œçš„測試,如整數溢出ã€ç©ºæŒ‡é‡è§£é™¤å¼•ç”¨å’Œå…§
+ 存泄æ¼ã€‚見項目é é¢http://smatch.sourceforge.net/。
+
+ Coccinelle是我們å¯ä»¥ä½¿ç”¨çš„å¦ä¸€å€‹éœæ…‹åˆ†æžå™¨ã€‚Coccinelle經常被用來
+ 幫助æºä»£ç¢¼çš„é‡æ§‹å’Œä¸¦è¡Œæ¼”化,但它也å¯ä»¥å¹«åŠ©é¿å…常見代碼模å¼ä¸­å‡ºç¾çš„æŸ
+ 些錯誤。å¯ç”¨çš„測試類型包括API測試ã€å…§æ ¸è¿­ä»£å™¨çš„正確使用測試ã€è‡ªç”±æ“
+ 作的åˆç†æ€§æª¢æŸ¥ã€éŽ–定行爲的分æžï¼Œä»¥åŠå·²çŸ¥çš„有助於ä¿æŒå…§æ ¸ä½¿ç”¨ä¸€è‡´æ€§çš„
+ 進一步測試。詳情請見Documentation/dev-tools/coccinelle.rst。
+
+ ä¸éŽè¦æ³¨æ„的是,éœæ…‹åˆ†æžå·¥å…·å­˜åœ¨**å‡é™½æ€§**çš„å•é¡Œã€‚在試圖修復錯誤和警
+ 告之å‰ï¼Œéœ€è¦ä»”細評估它們。
+
+何時使用Sparse和Smatch
+----------------------
+
+Sparseåšé¡žåž‹æª¢æŸ¥ï¼Œä¾‹å¦‚驗證註釋的變é‡ä¸æœƒå°Žè‡´ç„¡ç¬¦è™Ÿçš„錯誤,檢測
+``__user`` 指é‡ä½¿ç”¨ä¸ç•¶çš„地方,以åŠåˆ†æžç¬¦è™Ÿåˆå§‹åŒ–器的兼容性。
+
+Smatch進行æµç¨‹åˆ†æžï¼Œå¦‚æžœå…許建立函數數據庫,它還會進行跨函數分æžã€‚
+Smatch試圖回答一些å•é¡Œï¼Œæ¯”如這個緩è¡å€æ˜¯åœ¨å“ªè£åˆ†é…的?它有多大?這
+個索引å¯ä»¥ç”±ç”¨æˆ¶æŽ§åˆ¶å—Žï¼Ÿé€™å€‹è®Šé‡æ¯”那個變é‡å¤§å—Žï¼Ÿ
+
+一般來說,在Smatch中寫檢查比在Sparse中寫檢查è¦å®¹æ˜“。儘管如此,
+Sparseå’ŒSmatch的檢查還是有一些é‡ç–Šçš„地方。
+
+Smatchå’ŒCoccinelleçš„å¼·é …
+------------------------
+
+Coccinelleå¯èƒ½æ˜¯æœ€å®¹æ˜“寫檢查的。它在é è™•ç†å™¨ä¹‹å‰å·¥ä½œï¼Œæ‰€ä»¥ç”¨Coccinelle
+檢查å®ä¸­çš„錯誤更容易。Coccinelle還能爲你創建補ä¸ï¼Œé€™æ˜¯å…¶ä»–工具無法åšåˆ°çš„。
+
+例如,用Coccinelleä½ å¯ä»¥å¾ž ``kmalloc_array(x, size, GFP_KERNEL)``
+到 ``kmalloc_array(x, size, GFP_KERNEL)`` 進行大è¦æ¨¡è½‰æ›ï¼Œé€™çœŸçš„很
+有用。如果你åªæ˜¯å‰µå»ºä¸€å€‹Smatch警告,並試圖把轉æ›çš„工作推給維護者,他們會很
+惱ç«ã€‚ä½ å°‡ä¸å¾—ä¸çˆ²æ¯å€‹è­¦å‘Šçˆ­è«–是å¦çœŸçš„å¯ä»¥æº¢å‡ºã€‚
+
+Coccinelleä¸å°è®Šé‡å€¼é€²è¡Œåˆ†æžï¼Œè€Œé€™æ­£æ˜¯Smatch的強項。å¦ä¸€æ–¹é¢ï¼ŒCoccinelle
+å…許你用簡單的方法åšç°¡å–®çš„事情。
+
diff --git a/Documentation/translations/zh_TW/filesystems/debugfs.rst b/Documentation/translations/zh_TW/filesystems/debugfs.rst
index ddf801943c92..78e2e08af95e 100644
--- a/Documentation/translations/zh_TW/filesystems/debugfs.rst
+++ b/Documentation/translations/zh_TW/filesystems/debugfs.rst
@@ -2,7 +2,7 @@
.. include:: ../disclaimer-zh_TW.rst
-:Original: :doc:`../../../filesystems/debugfs`
+:Original: Documentation/filesystems/debugfs.rst
=======
Debugfs
@@ -11,20 +11,19 @@ Debugfs
譯者
::
- ä¸­æ–‡ç‰ˆç¶­è­·è€…ï¼šç¾…æ¥šæˆ Chucheng Luo <luochucheng@vivo.com>
- ä¸­æ–‡ç‰ˆç¿»è­¯è€…ï¼šç¾…æ¥šæˆ Chucheng Luo <luochucheng@vivo.com>
- 中文版校譯者: ç¾…æ¥šæˆ Chucheng Luo <luochucheng@vivo.com>
+ 中文版維護者: ç¾…æ¥šæˆ Chucheng Luo <luochucheng@vivo.com>
+ 中文版翻譯者: ç¾…æ¥šæˆ Chucheng Luo <luochucheng@vivo.com>
+ 中文版校譯者: ç¾…æ¥šæˆ Chucheng Luo <luochucheng@vivo.com>
ç¹é«”中文版校譯者: 胡皓文 Hu Haowen <src.res.211@gmail.com>
版權所有2020 ç¾…æ¥šæˆ <luochucheng@vivo.com>
-版權所有2021 胡皓文 Hu Haowen <src.res.211@gmail.com>
Debugfs是內核開發人員在用戶空間ç²å–ä¿¡æ¯çš„簡單方法。與/procä¸åŒï¼Œprocåªæ供進程
-ä¿¡æ¯ã€‚也ä¸åƒsysfs,具有嚴格的「æ¯å€‹æ–‡ä»¶ä¸€å€‹å€¼ã€Œçš„è¦å‰‡ã€‚debugfs根本沒有è¦å‰‡,開發
-人員å¯ä»¥åœ¨é€™è£¡æ”¾ç½®ä»–們想è¦çš„任何信æ¯ã€‚debugfs文件系統也ä¸èƒ½ç”¨ä½œç©©å®šçš„ABI接å£ã€‚
+ä¿¡æ¯ã€‚也ä¸åƒsysfs,具有嚴格的“æ¯å€‹æ–‡ä»¶ä¸€å€‹å€¼â€œçš„è¦å‰‡ã€‚debugfs根本沒有è¦å‰‡,開發
+人員å¯ä»¥åœ¨é€™è£æ”¾ç½®ä»–們想è¦çš„任何信æ¯ã€‚debugfs文件系統也ä¸èƒ½ç”¨ä½œç©©å®šçš„ABI接å£ã€‚
從ç†è«–上講,debugfs導出文件的時候沒有任何約æŸã€‚但是[1]實際情æ³ä¸¦ä¸ç¸½æ˜¯é‚£éº¼
簡單。å³ä½¿æ˜¯debugfs接å£ï¼Œä¹Ÿæœ€å¥½æ ¹æ“šéœ€è¦é€²è¡Œè¨­è¨ˆ,並儘é‡ä¿æŒæŽ¥å£ä¸è®Šã€‚
@@ -34,8 +33,8 @@ Debugfs通常使用以下命令安è£::
mount -t debugfs none /sys/kernel/debug
(或等效的/etc/fstab行)。
-debugfs根目錄默èªåƒ…å¯ç”±root用戶訪å•ã€‚è¦æ›´æ”¹å°æ–‡ä»¶æ¨¹çš„訪å•ï¼Œè«‹ä½¿ç”¨ã€Œ uidã€ï¼Œã€Œ gidã€
-和「 modeã€æŽ›è¼‰é¸é …。請注æ„,debugfs API僅按照GPLå”議導出到模塊。
+debugfs根目錄默èªåƒ…å¯ç”±root用戶訪å•ã€‚è¦æ›´æ”¹å°æ–‡ä»¶æ¨¹çš„訪å•ï¼Œè«‹ä½¿ç”¨â€œ uidâ€ï¼Œâ€œ gidâ€
+和“ modeâ€æŽ›è¼‰é¸é …。請注æ„,debugfs API僅按照GPLå”議導出到模塊。
使用debugfs的代碼應包å«<linux/debugfs.h>。然後,首先是創建至少一個目錄來ä¿å­˜
一組debugfs文件::
@@ -54,8 +53,8 @@ debugfs根目錄默èªåƒ…å¯ç”±root用戶訪å•ã€‚è¦æ›´æ”¹å°æ–‡ä»¶æ¨¹çš„訪å•
struct dentry *parent, void *data,
const struct file_operations *fops);
-在這裡,name是è¦å‰µå»ºçš„文件的å稱,modeæ述了訪å•æ–‡ä»¶æ‡‰å…·æœ‰çš„權é™ï¼Œparent指å‘
-應該ä¿å­˜æ–‡ä»¶çš„目錄,data將存儲在產生的inodeçµæ§‹é«”çš„i_private欄ä½ä¸­ï¼Œè€Œfops是
+在這è£ï¼Œname是è¦å‰µå»ºçš„文件的å稱,modeæ述了訪å•æ–‡ä»¶æ‡‰å…·æœ‰çš„權é™ï¼Œparent指å‘
+應該ä¿å­˜æ–‡ä»¶çš„目錄,data將存儲在產生的inodeçµæ§‹é«”çš„i_private字段中,而fops是
一組文件æ“作函數,這些函數中實ç¾æ–‡ä»¶æ“作的具體行爲。至少,read()和/或
write()æ“作應æ供;其他å¯ä»¥æ ¹æ“šéœ€è¦åŒ…括在內。åŒæ¨£çš„,返回值將是指å‘創建文件
çš„dentry指é‡ï¼ŒéŒ¯èª¤æ™‚返回ERR_PTR(-ERROR),系統ä¸æ”¯æŒdebugfs時返回值爲ERR_PTR
@@ -81,7 +80,7 @@ file_size是åˆå§‹æ–‡ä»¶å¤§å°ã€‚其他åƒæ•¸è·Ÿå‡½æ•¸debugfs_create_file的相å
struct dentry *parent, u64 *value);
這些文件支æŒè®€å–和寫入給定值。如果æŸå€‹æ–‡ä»¶ä¸æ”¯æŒå¯«å…¥ï¼Œåªéœ€æ ¹æ“šéœ€è¦è¨­ç½®mode
-åƒæ•¸ä½ã€‚這些文件中的值以å進ä½è¡¨ç¤ºï¼›å¦‚果需è¦ä½¿ç”¨å六進ä½ï¼Œå¯ä»¥ä½¿ç”¨ä»¥ä¸‹å‡½æ•¸
+åƒæ•¸ä½ã€‚這些文件中的值以å進制表示;如果需è¦ä½¿ç”¨å六進制,å¯ä»¥ä½¿ç”¨ä»¥ä¸‹å‡½æ•¸
替代::
void debugfs_create_x8(const char *name, umode_t mode,
@@ -93,7 +92,7 @@ file_size是åˆå§‹æ–‡ä»¶å¤§å°ã€‚其他åƒæ•¸è·Ÿå‡½æ•¸debugfs_create_file的相å
void debugfs_create_x64(const char *name, umode_t mode,
struct dentry *parent, u64 *value);
-這些功能åªæœ‰åœ¨é–‹ç™¼äººå“¡çŸ¥é“導出值的大å°çš„時候æ‰æœ‰ç”¨ã€‚æŸäº›æ•¸æ“šé¡žåž‹åœ¨ä¸åŒçš„架構上
+這些功能åªæœ‰åœ¨é–‹ç™¼äººå“¡çŸ¥é“導出值的大å°çš„時候纔有用。æŸäº›æ•¸æ“šé¡žåž‹åœ¨ä¸åŒçš„架構上
有ä¸åŒçš„寬度,這樣會使情æ³è®Šå¾—有些複雜。在這種特殊情æ³ä¸‹å¯ä»¥ä½¿ç”¨ä»¥ä¸‹å‡½æ•¸::
void debugfs_create_size_t(const char *name, umode_t mode,
@@ -101,7 +100,7 @@ file_size是åˆå§‹æ–‡ä»¶å¤§å°ã€‚其他åƒæ•¸è·Ÿå‡½æ•¸debugfs_create_file的相å
ä¸å‡ºæ‰€æ–™ï¼Œæ­¤å‡½æ•¸å°‡å‰µå»ºä¸€å€‹debugfs文件來表示類型爲size_t的變é‡ã€‚
-åŒæ¨£åœ°ï¼Œä¹Ÿæœ‰å°Žå‡ºç„¡ç¬¦è™Ÿé•·æ•´åž‹è®Šé‡çš„函數,分別以å進ä½å’Œå六進ä½è¡¨ç¤ºå¦‚下::
+åŒæ¨£åœ°ï¼Œä¹Ÿæœ‰å°Žå‡ºç„¡ç¬¦è™Ÿé•·æ•´åž‹è®Šé‡çš„函數,分別以å進制和å六進制表示如下::
struct dentry *debugfs_create_ulong(const char *name, umode_t mode,
struct dentry *parent,
@@ -125,7 +124,7 @@ file_size是åˆå§‹æ–‡ä»¶å¤§å°ã€‚其他åƒæ•¸è·Ÿå‡½æ•¸debugfs_create_file的相å
讀å–此文件將ç²å¾—atomic_t值,寫入此文件將設置atomic_t值。
-å¦ä¸€å€‹é¸æ“‡æ˜¯é€šéŽä»¥ä¸‹çµæ§‹é«”和函數導出一個任æ„二進ä½æ•¸æ“šå¡Š::
+å¦ä¸€å€‹é¸æ“‡æ˜¯é€šéŽä»¥ä¸‹çµæ§‹é«”和函數導出一個任æ„二進制數據塊::
struct debugfs_blob_wrapper {
void *data;
@@ -136,10 +135,10 @@ file_size是åˆå§‹æ–‡ä»¶å¤§å°ã€‚其他åƒæ•¸è·Ÿå‡½æ•¸debugfs_create_file的相å
struct dentry *parent,
struct debugfs_blob_wrapper *blob);
-讀å–此文件將返回由指é‡æŒ‡å‘debugfs_blob_wrapperçµæ§‹é«”的數據。一些驅動使用「blobsã€
-作爲一種返回幾行(éœæ…‹ï¼‰æ ¼å¼åŒ–文本的簡單方法。這個函數å¯ç”¨æ–¼å°Žå‡ºäºŒé€²ä½ä¿¡æ¯ï¼Œä½†
+讀å–此文件將返回由指é‡æŒ‡å‘debugfs_blob_wrapperçµæ§‹é«”的數據。一些驅動使用“blobsâ€
+作爲一種返回幾行(éœæ…‹ï¼‰æ ¼å¼åŒ–文本的簡單方法。這個函數å¯ç”¨æ–¼å°Žå‡ºäºŒé€²åˆ¶ä¿¡æ¯ï¼Œä½†
似乎在主線中沒有任何代碼這樣åšã€‚請注æ„,使用debugfs_create_blob()命令創建的
-所有文件是åªè®€çš„。
+所有文件是隻讀的。
如果您è¦è½‰å„²ä¸€å€‹å¯„存器塊(在開發éŽç¨‹ä¸­ç¶“常會這麼åšï¼Œä½†æ˜¯é€™æ¨£çš„調試代碼很少上傳
到主線中。Debugfsæ供兩個函數:一個用於創建僅寄存器文件,å¦ä¸€å€‹æŠŠä¸€å€‹å¯„存器塊
@@ -163,7 +162,7 @@ file_size是åˆå§‹æ–‡ä»¶å¤§å°ã€‚其他åƒæ•¸è·Ÿå‡½æ•¸debugfs_create_file的相å
void debugfs_print_regs32(struct seq_file *s, struct debugfs_reg32 *regs,
int nregs, void __iomem *base, char *prefix);
-「baseã€åƒæ•¸å¯èƒ½çˆ²0,但您å¯èƒ½éœ€è¦ä½¿ç”¨__stringify構建reg32數組,實際上有許多寄存器
+“baseâ€åƒæ•¸å¯èƒ½çˆ²0,但您å¯èƒ½éœ€è¦ä½¿ç”¨__stringify構建reg32數組,實際上有許多寄存器
å稱(å®ï¼‰æ˜¯å¯„存器塊在基å€ä¸Šçš„字節å移é‡ã€‚
如果è¦åœ¨debugfs中轉儲u32數組,å¯ä»¥ä½¿ç”¨ä»¥ä¸‹å‡½æ•¸å‰µå»ºæ–‡ä»¶::
@@ -172,7 +171,7 @@ file_size是åˆå§‹æ–‡ä»¶å¤§å°ã€‚其他åƒæ•¸è·Ÿå‡½æ•¸debugfs_create_file的相å
struct dentry *parent,
u32 *array, u32 elements);
-「arrayã€åƒæ•¸æ供數據,而「elementsã€åƒæ•¸çˆ²æ•¸çµ„中元素的數é‡ã€‚注æ„:數組創建後,數組
+“arrayâ€åƒæ•¸æ供數據,而“elementsâ€åƒæ•¸çˆ²æ•¸çµ„中元素的數é‡ã€‚注æ„:數組創建後,數組
大å°ç„¡æ³•æ›´æ”¹ã€‚
有一個函數來創建與設備相關的seq_file::
@@ -183,8 +182,8 @@ file_size是åˆå§‹æ–‡ä»¶å¤§å°ã€‚其他åƒæ•¸è·Ÿå‡½æ•¸debugfs_create_file的相å
int (*read_fn)(struct seq_file *s,
void *data));
-「devã€åƒæ•¸æ˜¯èˆ‡æ­¤debugfs文件相關的設備,並且「read_fnã€æ˜¯ä¸€å€‹å‡½æ•¸æŒ‡é‡ï¼Œé€™å€‹å‡½æ•¸åœ¨
-列å°seq_file內容的時候被回調。
+“devâ€åƒæ•¸æ˜¯èˆ‡æ­¤debugfs文件相關的設備,並且“read_fnâ€æ˜¯ä¸€å€‹å‡½æ•¸æŒ‡é‡ï¼Œé€™å€‹å‡½æ•¸åœ¨
+打å°seq_file內容的時候被回調。
還有一些其他的é¢å‘目錄的函數::
@@ -199,7 +198,7 @@ file_size是åˆå§‹æ–‡ä»¶å¤§å°ã€‚其他åƒæ•¸è·Ÿå‡½æ•¸debugfs_create_file的相å
調用debugfs_rename()將爲ç¾æœ‰çš„debugfs文件é‡å‘½å,å¯èƒ½åŒæ™‚切æ›ç›®éŒ„。 new_name
函數調用之å‰ä¸èƒ½å­˜åœ¨ï¼›è¿”回值爲old_dentry,其中包å«æ›´æ–°çš„ä¿¡æ¯ã€‚å¯ä»¥ä½¿ç”¨
-debugfs_create_symlink()創建符號連çµã€‚
+debugfs_create_symlink()創建符號éˆæŽ¥ã€‚
所有debugfs用戶必須考慮的一件事是:
@@ -219,6 +218,6 @@ dentry值å¯ä»¥çˆ²NULL或錯誤值,在這種情æ³ä¸‹ï¼Œä¸æœƒæœ‰ä»»ä½•æ–‡ä»¶è
如果將å°æ‡‰é ‚層目錄的dentry傳éžçµ¦ä»¥ä¸Šå‡½æ•¸ï¼Œå‰‡è©²ç›®éŒ„下的整個層次çµæ§‹å°‡æœƒè¢«åˆªé™¤ã€‚
-注釋:
+註釋:
[1] http://lwn.net/Articles/309298/
diff --git a/Documentation/translations/zh_TW/filesystems/index.rst b/Documentation/translations/zh_TW/filesystems/index.rst
index 789e742fa3c5..d7f9d61f654c 100644
--- a/Documentation/translations/zh_TW/filesystems/index.rst
+++ b/Documentation/translations/zh_TW/filesystems/index.rst
@@ -12,7 +12,7 @@
Linux Kernel中的文件系統
========================
-這份正在開發的手冊或許在未來æŸå€‹è¼ç…Œçš„æ—¥å­è£¡ä»¥æ˜“懂的形å¼å°‡Linux虛擬\
+這份正在開發的手冊或許在未來æŸå€‹è¼ç…Œçš„æ—¥å­è£ä»¥æ˜“懂的形å¼å°‡Linux虛擬\
文件系統(VFS)層以åŠåŸºæ–¼å…¶ä¸Šçš„å„種文件系統如何工作呈ç¾çµ¦å¤§å®¶ã€‚當å‰\
å¯ä»¥çœ‹åˆ°ä¸‹é¢çš„內容。
diff --git a/Documentation/translations/zh_TW/filesystems/sysfs.txt b/Documentation/translations/zh_TW/filesystems/sysfs.txt
index a84eba2af9d3..ebe90651fc3b 100644
--- a/Documentation/translations/zh_TW/filesystems/sysfs.txt
+++ b/Documentation/translations/zh_TW/filesystems/sysfs.txt
@@ -61,7 +61,7 @@ Documentation/core-api/kobject.rst 文檔以ç²å¾—更多關於 kobject 接å£çš„
任何 kobject 在系統中註冊,就會有一個目錄在 sysfs 中被創建。這個
目錄是作爲該 kobject 的父å°è±¡æ‰€åœ¨ç›®éŒ„çš„å­ç›®éŒ„創建的,以準確地傳éž
-內核的å°è±¡å±¤æ¬¡åˆ°ç”¨æˆ¶ç©ºé–“。sysfs 中的頂層目錄代表著內核å°è±¡å±¤æ¬¡çš„
+內核的å°è±¡å±¤æ¬¡åˆ°ç”¨æˆ¶ç©ºé–“。sysfs 中的頂層目錄代表ç€å…§æ ¸å°è±¡å±¤æ¬¡çš„
å…±åŒç¥–先;例如:æŸäº›å°è±¡å±¬æ–¼æŸå€‹å­ç³»çµ±ã€‚
Sysfs 在與其目錄關è¯çš„ kernfs_node å°è±¡ä¸­å…§éƒ¨ä¿å­˜ä¸€å€‹æŒ‡å‘實ç¾
@@ -198,7 +198,7 @@ Sysfs 將會爲æ¯æ¬¡è®€å¯«æ“作調用一次這個方法。這使得這些方æ³
ä¸æœƒä¸å¤ªé«˜ã€‚
這使得用戶空間å¯ä»¥å±€éƒ¨åœ°è®€å’Œä»»æ„çš„å‘å‰æœç´¢æ•´å€‹æ–‡ä»¶ã€‚如果用戶空間
- å‘後æœç´¢åˆ°é›¶æˆ–使用『0ã€å移執行一個pread(2)æ“作,show()方法將
+ å‘後æœç´¢åˆ°é›¶æˆ–使用‘0’å移執行一個pread(2)æ“作,show()方法將
å†æ¬¡è¢«èª¿ç”¨ï¼Œä»¥é‡æ–°å¡«å……緩存。
- 在寫方é¢ï¼ˆwrite(2)),sysfs 希望在第一次寫æ“作時得到整個緩è¡å€ã€‚
@@ -253,7 +253,7 @@ static DEVICE_ATTR(name, S_IRUGO, show_name, store_name);
(注æ„:真正的實ç¾ä¸å…許用戶空間設置設備å。)
-頂層目錄布局
+頂層目錄佈局
~~~~~~~~~~~~
sysfs 目錄的安排顯示了內核數據çµæ§‹ä¹‹é–“的關係。
@@ -272,23 +272,23 @@ fs/
devices/ 包å«äº†ä¸€å€‹è¨­å‚™æ¨¹çš„文件系統表示。他直接映射了內部的內核
設備樹,å映了設備的層次çµæ§‹ã€‚
-bus/ 包å«äº†å…§æ ¸ä¸­å„種總線類型的平é¢ç›®éŒ„布局。æ¯å€‹ç¸½ç·šç›®éŒ„包å«å…©å€‹
+bus/ 包å«äº†å…§æ ¸ä¸­å„種總線類型的平é¢ç›®éŒ„佈局。æ¯å€‹ç¸½ç·šç›®éŒ„包å«å…©å€‹
å­ç›®éŒ„:
devices/
drivers/
-devices/ 包å«äº†ç³»çµ±ä¸­å‡ºç¾çš„æ¯å€‹è¨­å‚™çš„符號連çµï¼Œä»–å€‘æŒ‡å‘ root/ 下的
+devices/ 包å«äº†ç³»çµ±ä¸­å‡ºç¾çš„æ¯å€‹è¨­å‚™çš„符號éˆæŽ¥ï¼Œä»–å€‘æŒ‡å‘ root/ 下的
設備目錄。
-drivers/ 包å«äº†æ¯å€‹å·²çˆ²ç‰¹å®šç¸½ç·šä¸Šçš„設備而掛載的驅動程åºçš„目錄(這裡
+drivers/ 包å«äº†æ¯å€‹å·²çˆ²ç‰¹å®šç¸½ç·šä¸Šçš„設備而掛載的驅動程åºçš„目錄(這è£
å‡å®šé©…動沒有跨越多個總線類型)。
fs/ 包å«äº†ä¸€å€‹çˆ²æ–‡ä»¶ç³»çµ±è¨­ç«‹çš„目錄。ç¾åœ¨æ¯å€‹æƒ³è¦å°Žå‡ºå±¬æ€§çš„文件系統必須
在 fs/ 下創建自己的層次çµæ§‹(åƒè¦‹Documentation/filesystems/fuse.rst)。
dev/ 包å«å…©å€‹å­ç›®éŒ„: char/ å’Œ block/。在這兩個å­ç›®éŒ„中,有以
-<major>:<minor> æ ¼å¼å‘½å的符號連çµã€‚這些符號連çµæŒ‡å‘ sysfs 目錄
+<major>:<minor> æ ¼å¼å‘½å的符號éˆæŽ¥ã€‚這些符號éˆæŽ¥æŒ‡å‘ sysfs 目錄
中相應的設備。/sys/dev æ供一個通éŽä¸€å€‹ stat(2) æ“作çµæžœï¼ŒæŸ¥æ‰¾
設備 sysfs 接å£å¿«æ·çš„方法。
diff --git a/Documentation/translations/zh_TW/filesystems/tmpfs.rst b/Documentation/translations/zh_TW/filesystems/tmpfs.rst
index 2c8439b2b77e..aed61cc3064d 100644
--- a/Documentation/translations/zh_TW/filesystems/tmpfs.rst
+++ b/Documentation/translations/zh_TW/filesystems/tmpfs.rst
@@ -4,8 +4,7 @@
:Original: Documentation/filesystems/tmpfs.rst
-Translated by Wang Qing <wangqing@vivo.com>
-and Hu Haowen <src.res.211@gmail.com>
+translated by Wang Qing<wangqing@vivo.com>
=====
Tmpfs
@@ -13,18 +12,18 @@ Tmpfs
Tmpfs是一個將所有文件都ä¿å­˜åœ¨è™›æ“¬å…§å­˜ä¸­çš„文件系統。
-tmpfs中的所有內容都是臨時的,也就是說沒有任何文件會在硬碟上創建。
+tmpfs中的所有內容都是臨時的,也就是說沒有任何文件會在硬盤上創建。
如果å¸è¼‰tmpfs實例,所有ä¿å­˜åœ¨å…¶ä¸­çš„文件都會丟失。
-tmpfs將所有文件ä¿å­˜åœ¨å…§æ ¸ç·©å­˜ä¸­ï¼Œéš¨è‘—文件內容增長或縮å°å¯ä»¥å°‡ä¸éœ€è¦çš„
-é é¢swap出去。它具有最大é™åˆ¶ï¼Œå¯ä»¥é€šéŽã€Œmount -o remount ...ã€èª¿æ•´ã€‚
+tmpfs將所有文件ä¿å­˜åœ¨å…§æ ¸ç·©å­˜ä¸­ï¼Œéš¨ç€æ–‡ä»¶å…§å®¹å¢žé•·æˆ–縮å°å¯ä»¥å°‡ä¸éœ€è¦çš„
+é é¢swap出去。它具有最大é™åˆ¶ï¼Œå¯ä»¥é€šéŽâ€œmount -o remount ...â€èª¿æ•´ã€‚
å’Œramfs(創建tmpfs的模æ¿ï¼‰ç›¸æ¯”,tmpfs包å«äº¤æ›å’Œé™åˆ¶æª¢æŸ¥ã€‚å’Œtmpfs相似的å¦
-一個æ±è¥¿æ˜¯RAMç£ç¢Ÿï¼ˆ/dev/ram*),å¯ä»¥åœ¨ç‰©ç†RAM中模擬固定大å°çš„硬碟,並在
+一個æ±è¥¿æ˜¯RAMç£ç›¤ï¼ˆ/dev/ram*),å¯ä»¥åœ¨ç‰©ç†RAM中模擬固定大å°çš„硬盤,並在
此之上創建一個普通的文件系統。Ramdisks無法swap,因此無法調整它們的大å°ã€‚
由於tmpfs完全ä¿å­˜æ–¼é é¢ç·©å­˜å’Œswap中,因此所有tmpfsé é¢å°‡åœ¨/proc/meminfo
-中顯示爲「Shmemã€ï¼Œè€Œåœ¨free(1)中顯示爲「Sharedã€ã€‚請注æ„,這些計數還包括
+中顯示爲“Shmemâ€ï¼Œè€Œåœ¨free(1)中顯示爲“Sharedâ€ã€‚請注æ„,這些計數還包括
共享內存(shmem,請åƒé–±ipcs(1))。ç²å¾—計數的最å¯é æ–¹æ³•æ˜¯ä½¿ç”¨df(1)å’Œdu(1)。
tmpfs具有以下用途:
@@ -45,7 +44,7 @@ tmpfs具有以下用途:
tmpfsçš„å‰èº«(shm fs)æ‰èƒ½ä½¿ç”¨SYSV共享內存)
3) 很多人(包括我)都覺的在/tmpå’Œ/var/tmp上掛載éžå¸¸æ–¹ä¾¿ï¼Œä¸¦å…·æœ‰è¼ƒå¤§çš„
- swap分å€ã€‚ç›®å‰å¾ªç’°æŽ›è¼‰tmpfså¯ä»¥æ­£å¸¸å·¥ä½œï¼Œæ‰€ä»¥å¤§å¤šæ•¸ç™¼å¸ƒéƒ½æ‡‰ç•¶å¯ä»¥
+ swap分å€ã€‚ç›®å‰å¾ªç’°æŽ›è¼‰tmpfså¯ä»¥æ­£å¸¸å·¥ä½œï¼Œæ‰€ä»¥å¤§å¤šæ•¸ç™¼ä½ˆéƒ½æ‡‰ç•¶å¯ä»¥
使用mkinitrd通éŽ/tmp訪å•/tmp。
4) 也許還有更多我ä¸çŸ¥é“的地方:-)
@@ -58,11 +57,11 @@ size tmpfs實例分é…的字節數é™åˆ¶ã€‚默èªå€¼æ˜¯ä¸swap時物ç†RAM
如果tmpfs實例éŽå¤§ï¼Œæ©Ÿå™¨å°‡æ­»éŽ–,因爲OOM處ç†å°‡ç„¡æ³•é‡‹æ”¾è©²å…§å­˜ã€‚
nr_blocks 與size相åŒï¼Œä½†ä»¥PAGE_SIZE爲單ä½ã€‚
nr_inodes tmpfs實例的最大inode個數。默èªå€¼æ˜¯ç‰©ç†å…§å­˜é æ•¸çš„一åŠï¼Œæˆ–者
- (有高端內存的機器)低端內存RAMçš„é æ•¸ï¼ŒäºŒè€…以較低者為準。
+ (有高端內存的機器)低端內存RAMçš„é æ•¸ï¼ŒäºŒè€…以較低者爲準。
========= ===========================================================
這些åƒæ•¸æŽ¥å—後綴k,m或g表示åƒï¼Œå…†å’Œåƒå…†å­—節,å¯ä»¥åœ¨remount時更改。
-sizeåƒæ•¸ä¹ŸæŽ¥å—後綴%用來é™åˆ¶tmpfs實例å ç”¨ç‰©ç†RAM的百分比:
+sizeåƒæ•¸ä¹ŸæŽ¥å—後綴%用來é™åˆ¶tmpfs實例佔用物ç†RAM的百分比:
未指定size或nr_blocks時,默èªå€¼çˆ²size=50ï¼…
如果nr_blocks=0(或size=0),block個數將ä¸å—é™åˆ¶ï¼›å¦‚æžœnr_inodes=0,
@@ -71,26 +70,26 @@ inode個數將ä¸å—é™åˆ¶ã€‚這樣掛載通常是ä¸æ˜Žæ™ºçš„,因爲它å…許
場景下的訪å•ã€‚
tmpfs具有爲所有文件設置NUMA內存分é…策略掛載é¸é …(如果啓用了CONFIG_NUMA),
-å¯ä»¥é€šéŽã€Œmount -o remount ...ã€èª¿æ•´
+å¯ä»¥é€šéŽâ€œmount -o remount ...â€èª¿æ•´
======================== =========================
mpol=default 採用進程分é…ç­–ç•¥
(è«‹åƒé–± set_mempolicy(2))
mpol=prefer:Node 傾å‘從給定的節點分é…
-mpol=bind:NodeList åªå…許從指定的éŠè¡¨åˆ†é…
+mpol=bind:NodeList åªå…許從指定的éˆè¡¨åˆ†é…
mpol=interleave 傾å‘æ–¼ä¾æ¬¡å¾žæ¯å€‹ç¯€é»žåˆ†é…
mpol=interleave:NodeList ä¾æ¬¡å¾žæ¯å€‹ç¯€é»žåˆ†é…
mpol=local 優先本地節點分é…內存
======================== =========================
-NodeListæ ¼å¼æ˜¯ä»¥é€—號分隔的å進ä½æ•¸å­—表示大å°å’Œç¯„åœï¼Œæœ€å¤§å’Œæœ€å°ç¯„åœæ˜¯ç”¨-
-分隔符的å進ä½æ•¸ä¾†è¡¨ç¤ºã€‚例如,mpol=bind0-3,5,7,9-15
+NodeListæ ¼å¼æ˜¯ä»¥é€—號分隔的å進制數字表示大å°å’Œç¯„åœï¼Œæœ€å¤§å’Œæœ€å°ç¯„åœæ˜¯ç”¨-
+分隔符的å進制數來表示。例如,mpol=bind0-3,5,7,9-15
帶有有效NodeList的內存策略將按指定格å¼ä¿å­˜ï¼Œåœ¨å‰µå»ºæ–‡ä»¶æ™‚使用。當任務在該
文件系統上創建文件時,會使用到掛載時的內存策略NodeListé¸é …,如果設置的話,
由調用任務的cpuset[è«‹åƒè¦‹Documentation/admin-guide/cgroup-v1/cpusets.rst]
以åŠä¸‹é¢åˆ—出的å¯é¸æ¨™èªŒç´„æŸã€‚如果NodeLists爲設置爲空集,則文件的內存策略將
-æ¢å¾©çˆ²ã€Œé»˜èªã€ç­–略。
+æ¢å¾©çˆ²â€œé»˜èªâ€ç­–略。
NUMA內存分é…策略有å¯é¸æ¨™èªŒï¼Œå¯ä»¥ç”¨æ–¼æ¨¡å¼çµåˆã€‚在掛載tmpfs時指定這些å¯é¸
標誌å¯ä»¥åœ¨NodeList之å‰ç”Ÿæ•ˆã€‚
@@ -107,12 +106,12 @@ Documentation/admin-guide/mm/numa_memory_policy.rst列出所有å¯ç”¨çš„內存
請注æ„,如果內核ä¸æ”¯æŒNUMA,那麼使用mpolé¸é …掛載tmpfs將會失敗;nodelist指定ä¸
在線的節點也會失敗。如果您的系統ä¾è³´æ–¼æ­¤ï¼Œä½†å…§æ ¸æœƒé‹è¡Œä¸å¸¶NUMA功能(也許是安全
revocery內核),或者具有較少的節點在線,建議從自動模å¼ä¸­çœç•¥mpolé¸é …掛載é¸é …。
-å¯ä»¥åœ¨ä»¥å¾Œé€šéŽã€Œmount -o remount,mpol=Policy:NodeList MountPointã€æ·»åŠ åˆ°æŽ›è¼‰é»žã€‚
+å¯ä»¥åœ¨ä»¥å¾Œé€šéŽâ€œmount -o remount,mpol=Policy:NodeList MountPointâ€æ·»åŠ åˆ°æŽ›è¼‰é»žã€‚
è¦æŒ‡å®šåˆå§‹æ ¹ç›®éŒ„,å¯ä»¥ä½¿ç”¨å¦‚下掛載é¸é …:
==== ====================
-æ¨¡å¼ æ¬Šé™ç”¨å…«é€²ä½æ•¸å­—表示
+æ¨¡å¼ æ¬Šé™ç”¨å…«é€²åˆ¶æ•¸å­—表示
uid 用戶ID
gid 組ID
==== ====================
@@ -129,7 +128,7 @@ inode32 使用32ä½inode
在32ä½å…§æ ¸ä¸Šï¼Œé»˜èªæ˜¯inode32,掛載時指定inode64會被拒絕。
在64ä½å…§æ ¸ä¸Šï¼Œé»˜èªé…置是CONFIG_TMPFS_INODE64。inode64é¿å…了單個設備上å¯èƒ½æœ‰å¤šå€‹
-具有相åŒinode編號的文件;比如32ä½æ‡‰ç”¨ç¨‹å¼ä½¿ç”¨glibc如果長期訪å•tmpfs,一旦é”到33
+具有相åŒinode編號的文件;比如32ä½æ‡‰ç”¨ç¨‹åºä½¿ç”¨glibc如果長期訪å•tmpfs,一旦é”到33
ä½inode編號,就有EOVERFLOW失敗的å±éšªï¼Œç„¡æ³•æ‰“開大於2GiB的文件,並返回EINVAL。
所以'mount -t tmpfs -o size=10G,nr_inodes=10k,mode=700 tmpfs /mytmpfs'將在
diff --git a/Documentation/translations/zh_TW/filesystems/virtiofs.rst b/Documentation/translations/zh_TW/filesystems/virtiofs.rst
index 086fce5839dd..6150ad964e78 100644
--- a/Documentation/translations/zh_TW/filesystems/virtiofs.rst
+++ b/Documentation/translations/zh_TW/filesystems/virtiofs.rst
@@ -10,7 +10,6 @@
中文版維護者: 王文虎 Wang Wenhu <wenhu.wang@vivo.com>
中文版翻譯者: 王文虎 Wang Wenhu <wenhu.wang@vivo.com>
中文版校譯者: 王文虎 Wang Wenhu <wenhu.wang@vivo.com>
- 中文版校譯者: 王文虎 Wang Wenhu <wenhu.wang@vivo.com>
ç¹é«”中文版校譯者:胡皓文 Hu Haowen <src.res.211@gmail.com>
===========================================
@@ -21,7 +20,7 @@ virtiofs: virtio-fs 主機<->客機共享文件系統
介紹
====
-Linuxçš„virtiofs文件系統實ç¾äº†ä¸€å€‹åŠè™›æ“¬åŒ–VIRTIO類型「virtio-fsã€è¨­å‚™çš„驅動,通éŽè©²\
+Linuxçš„virtiofs文件系統實ç¾äº†ä¸€å€‹åŠè™›æ“¬åŒ–VIRTIO類型“virtio-fsâ€è¨­å‚™çš„驅動,通éŽè©²\
類型設備實ç¾å®¢æ©Ÿ<->主機文件系統共享。它å…許客機掛載一個已經導出到主機的目錄。
客機通常需è¦è¨ªå•ä¸»æ©Ÿæˆ–者é ç¨‹ç³»çµ±ä¸Šçš„文件。使用場景包括:在新客機安è£æ™‚讓文件å°å…¶\
@@ -42,12 +41,12 @@ Linuxçš„virtiofs文件系統實ç¾äº†ä¸€å€‹åŠè™›æ“¬åŒ–VIRTIO類型「virtio-fsã
guest# mount -t virtiofs myfs /mnt
-請查閱 https://virtio-fs.gitlab.io/ 了解é…ç½®QEMUå’Œvirtiofsd守護程åºçš„詳細信æ¯ã€‚
+請查閱 https://virtio-fs.gitlab.io/ 瞭解é…ç½®QEMUå’Œvirtiofsd守護程åºçš„詳細信æ¯ã€‚
內幕
====
由於virtio-fs設備將FUSEå”議用於文件系統請求,因此Linuxçš„virtiofs文件系統與FUSEæ–‡\
-件系統客戶端緊密集æˆåœ¨ä¸€èµ·ã€‚客機充當FUSE客戶端而主機充當FUSE伺æœå™¨ï¼Œå…§æ ¸èˆ‡ç”¨æˆ¶ç©º\
+件系統客戶端緊密集æˆåœ¨ä¸€èµ·ã€‚客機充當FUSE客戶端而主機充當FUSEæœå‹™å™¨ï¼Œå…§æ ¸èˆ‡ç”¨æˆ¶ç©º\
間之間的/dev/fuse接å£ç”±virtio-fs設備接å£ä»£æ›¿ã€‚
FUSE請求被置於虛擬隊列中由主機處ç†ã€‚主機填充緩è¡å€ä¸­çš„響應部分,而客機處ç†è«‹æ±‚的完æˆéƒ¨åˆ†ã€‚
@@ -55,7 +54,7 @@ FUSE請求被置於虛擬隊列中由主機處ç†ã€‚主機填充緩è¡å€ä¸­çš„é
å°‡/dev/fuse映射到虛擬隊列需è¦è§£æ±º/dev/fuse和虛擬隊列之間語義上的差異。æ¯æ¬¡è®€å–\
/dev/fuse設備時,FUSE客戶端都å¯ä»¥é¸æ“‡è¦å‚³è¼¸çš„請求,從而å¯ä»¥ä½¿æŸäº›è«‹æ±‚優先於其他\
請求。虛擬隊列有其隊列語義,無法更改已入隊請求的順åºã€‚在虛擬隊列已滿的情æ³ä¸‹å°¤
-其關éµï¼Œå› çˆ²æ­¤æ™‚ä¸å¯èƒ½åŠ å…¥é«˜å„ªå…ˆç´šçš„請求。爲了解決此差異,virtio-fs設備採用「hiprioã€\
+其關éµï¼Œå› çˆ²æ­¤æ™‚ä¸å¯èƒ½åŠ å…¥é«˜å„ªå…ˆç´šçš„請求。爲了解決此差異,virtio-fs設備採用“hiprioâ€\
(高優先級)虛擬隊列,專門用於有別於普通請求的高優先級請求。
diff --git a/Documentation/translations/zh_TW/index.rst b/Documentation/translations/zh_TW/index.rst
index d1cf0b4d8e46..563ac9bfc66b 100644
--- a/Documentation/translations/zh_TW/index.rst
+++ b/Documentation/translations/zh_TW/index.rst
@@ -55,11 +55,11 @@ TODOList:
:maxdepth: 1
process/license-rules
+ dev-tools/index
TODOList:
* doc-guide/index
-* dev-tools/index
* dev-tools/testing-overview
* kernel-hacking/index
* rust/index
@@ -101,9 +101,10 @@ TODOList:
體系çµæ§‹æ–‡æª”
------------
-TODOList:
+.. toctree::
+ :maxdepth: 1
-* arch/index
+ arch/index
其他文檔
--------
diff --git a/Documentation/translations/zh_TW/process/1.Intro.rst b/Documentation/translations/zh_TW/process/1.Intro.rst
index f236fe95a6c6..6e754ac48964 100644
--- a/Documentation/translations/zh_TW/process/1.Intro.rst
+++ b/Documentation/translations/zh_TW/process/1.Intro.rst
@@ -22,12 +22,12 @@
--------
本節的其餘部分涵蓋了內核開發的éŽç¨‹ï¼Œä»¥åŠé–‹ç™¼äººå“¡åŠå…¶åƒ±ä¸»åœ¨é€™æ–¹é¢å¯èƒ½é‡åˆ°çš„
-å„種å•é¡Œã€‚有很多原因使內核代碼應被åˆä½µåˆ°æ­£å¼çš„(「主線ã€ï¼‰å…§æ ¸ä¸­ï¼ŒåŒ…括å°ç”¨æˆ¶
+å„種å•é¡Œã€‚有很多原因使內核代碼應被åˆä½µåˆ°æ­£å¼çš„(“主線â€ï¼‰å…§æ ¸ä¸­ï¼ŒåŒ…括å°ç”¨æˆ¶
的自動å¯ç”¨æ€§ã€å¤šç¨®å½¢å¼çš„社å€æ”¯æŒä»¥åŠå½±éŸ¿å…§æ ¸é–‹ç™¼æ–¹å‘的能力。æ供給Linux內核
的代碼必須在與GPL兼容的許å¯è­‰ä¸‹å¯ç”¨ã€‚
-:ref:`tw_development_process` 介紹了開發éŽç¨‹ã€å…§æ ¸ç™¼å¸ƒå‘¨æœŸå’Œåˆä½µçª—å£çš„機制。
-涵蓋了補ä¸é–‹ç™¼ã€å¯©æŸ¥å’Œåˆä½µå‘¨æœŸä¸­çš„å„個階段。還有一些關於工具和郵件列表的討論?
+:ref:`tw_development_process` 介紹了開發éŽç¨‹ã€å…§æ ¸ç™¼ä½ˆé€±æœŸå’Œåˆä¸¦çª—å£çš„機制。
+涵蓋了補ä¸é–‹ç™¼ã€å¯©æŸ¥å’Œåˆä¸¦é€±æœŸä¸­çš„å„個階段。還有一些關於工具和郵件列表的討論?
鼓勵希望開始內核開發的開發人員跟蹤並修復缺陷以作爲åˆæ­¥ç·´ç¿’。
@@ -38,39 +38,39 @@
陷阱。也涵蓋了å°è£œä¸çš„一些è¦æ±‚,並且介紹了一些工具,這些工具有助於確ä¿å…§æ ¸
補ä¸æ˜¯æ­£ç¢ºçš„。
-:ref:`tw_development_posting` æ述發布補ä¸ä»¥ä¾›è©•å¯©çš„éŽç¨‹ã€‚爲了讓開發社å€èƒ½
+:ref:`tw_development_posting` æ述發佈補ä¸ä»¥ä¾›è©•å¯©çš„éŽç¨‹ã€‚爲了讓開發社å€èƒ½
èªçœŸå°å¾…,補ä¸å¿…須被正確格å¼åŒ–å’Œæ述,並且必須發é€åˆ°æ­£ç¢ºçš„地方。éµå¾ªæœ¬ç¯€ä¸­çš„
建議有助於確ä¿æ‚¨çš„工作能被較好地接ç´ã€‚
-:ref:`tw_development_followthrough` 介紹了發布補ä¸ä¹‹å¾Œç™¼ç”Ÿçš„事情;工作在這時
+:ref:`tw_development_followthrough` 介紹了發佈補ä¸ä¹‹å¾Œç™¼ç”Ÿçš„事情;工作在這時
é‚„é é æ²’有完æˆã€‚與審閱者一起工作是開發éŽç¨‹ä¸­çš„一個é‡è¦éƒ¨åˆ†ï¼›æœ¬ç¯€æ供了一些
關於如何在這個é‡è¦éšŽæ®µé¿å…å•é¡Œçš„æ示。當補ä¸è¢«åˆä½µåˆ°ä¸»ç·šä¸­æ™‚,開發人員è¦æ³¨æ„
ä¸è¦å‡å®šä»»å‹™å·²ç¶“完æˆã€‚
-:ref:`tw_development_advancedtopics` 介紹了兩個「高級ã€ä¸»é¡Œï¼šä½¿ç”¨Git管ç†è£œä¸
-和查看其他人發布的補ä¸ã€‚
+:ref:`tw_development_advancedtopics` 介紹了兩個“高級â€ä¸»é¡Œï¼šä½¿ç”¨Git管ç†è£œä¸
+和查看其他人發佈的補ä¸ã€‚
:ref:`tw_development_conclusion` 總çµäº†æœ‰é—œå…§æ ¸é–‹ç™¼çš„更多信æ¯ï¼Œé™„帶有相關資æº
-連çµã€‚
+éˆæŽ¥ã€‚
這個文檔是關於什麼的
--------------------
Linux內核有超éŽ800è¬è¡Œä»£ç¢¼ï¼Œæ¯å€‹ç‰ˆæœ¬çš„è²¢ç»è€…超éŽ1000人,是ç¾å­˜æœ€å¤§ã€æœ€æ´»èºçš„
-å…費軟體項目之一。從1991年開始,這個內核已經發展æˆçˆ²ä¸€å€‹æœ€å¥½çš„作業系統組件,
-é‹è¡Œåœ¨è¢–ç數ä½éŸ³æ¨‚播放器ã€æ¡Œä¸Šåž‹é›»è…¦ã€ç¾å­˜æœ€å¤§çš„超級計算機以åŠæ‰€æœ‰é¡žåž‹çš„系統上。
+å…費軟件項目之一。從1991年開始,這個內核已經發展æˆçˆ²ä¸€å€‹æœ€å¥½çš„æ“作系統組件,
+é‹è¡Œåœ¨è¢–ç數字音樂播放器ã€è‡ºå¼é›»è…¦ã€ç¾å­˜æœ€å¤§çš„超級計算機以åŠæ‰€æœ‰é¡žåž‹çš„系統上。
它是一種é©ç”¨æ–¼å¹¾ä¹Žä»»ä½•æƒ…æ³çš„å¥å£¯ã€é«˜æ•ˆå’Œå¯æ“´å±•çš„解決方案。
-隨著Linux的發展,希望åƒèˆ‡å…¶é–‹ç™¼çš„開發人員(和公å¸ï¼‰çš„數é‡ä¹Ÿåœ¨å¢žåŠ ã€‚硬體供應商
+隨ç€Linux的發展,希望åƒèˆ‡å…¶é–‹ç™¼çš„開發人員(和公å¸ï¼‰çš„數é‡ä¹Ÿåœ¨å¢žåŠ ã€‚硬件供應商
希望確ä¿Linux能夠很好地支æŒä»–們的產å“,使這些產å“å°Linux用戶具有å¸å¼•åŠ›ã€‚嵌入
å¼ç³»çµ±ä¾›æ‡‰å•†ä½¿ç”¨Linux作爲集æˆç”¢å“的組件,希望Linux能夠儘å¯èƒ½åœ°å‹ä»»æ‰‹é ­çš„任務。
-分銷商和其他基於Linux的軟體供應商切實關心Linux內核的功能ã€æ€§èƒ½å’Œå¯é æ€§ã€‚最終
+分銷商和其他基於Linux的軟件供應商切實關心Linux內核的功能ã€æ€§èƒ½å’Œå¯é æ€§ã€‚最終
用戶也常常希望修改Linux,使之能更好地滿足他們的需求。
Linux最引人注目的特性之一是這些開發人員å¯ä»¥è¨ªå•å®ƒï¼›ä»»ä½•å…·å‚™å¿…è¦æŠ€èƒ½çš„人都å¯ä»¥
-改進Linux並影響其開發方å‘。專有產å“ä¸èƒ½æ供這種開放性,這是自由軟體的一個特點。
-如果有什麼ä¸åŒçš„話,那就是內核比大多數其他自由軟體項目更開放。一個典型的三個
-月內核開發周期å¯ä»¥æ¶‰åŠ1000多個開發人員,他們爲100多個ä¸åŒçš„å…¬å¸ï¼ˆæˆ–者根本ä¸
+改進Linux並影響其開發方å‘。專有產å“ä¸èƒ½æ供這種開放性,這是自由軟件的一個特點。
+如果有什麼ä¸åŒçš„話,那就是內核比大多數其他自由軟件項目更開放。一個典型的三個
+月內核開發週期å¯ä»¥æ¶‰åŠ1000多個開發人員,他們爲100多個ä¸åŒçš„å…¬å¸ï¼ˆæˆ–者根本ä¸
隸屬公å¸ï¼‰å·¥ä½œã€‚
與內核開發社å€åˆä½œä¸¦ä¸æ˜¯ç‰¹åˆ¥å›°é›£ã€‚但儘管如此,ä»æœ‰è¨±å¤šæ½›åœ¨çš„è²¢ç»è€…在嘗試åš
@@ -79,7 +79,7 @@ Linux最引人注目的特性之一是這些開發人員å¯ä»¥è¨ªå•å®ƒï¼›ä»»ä½•
éŽç¨‹èˆ‡å°ˆæœ‰çš„開發模å¼æœ‰å¾ˆå¤§çš„ä¸åŒä¹Ÿå°±ä¸è¶³çˆ²å¥‡äº†ã€‚
å°æ–¼æ–°é–‹ç™¼äººå“¡ä¾†èªªï¼Œå…§æ ¸çš„開發éŽç¨‹å¯èƒ½æœƒè®“人感到奇怪和æ懼,但這背後有充分的
-ç†ç”±å’Œå …實的經驗。一個ä¸äº†è§£å…§æ ¸ç¤¾å€å·¥ä½œæ–¹å¼çš„開發人員(或者更糟的是,他們
+ç†ç”±å’Œå …實的經驗。一個ä¸çž­è§£å…§æ ¸ç¤¾å€å·¥ä½œæ–¹å¼çš„開發人員(或者更糟的是,他們
試圖拋棄或è¦é¿ä¹‹ï¼‰æœƒå¾—到令人沮喪的體驗。開發社å€åœ¨å¹«åŠ©é‚£äº›è©¦åœ–學習的人的åŒæ™‚,
沒有時間幫助那些ä¸é¡˜æ„傾è½æˆ–ä¸é—œå¿ƒé–‹ç™¼éŽç¨‹çš„人。
@@ -102,20 +102,20 @@ Andrew Morton, Andrew Price, Tsugikazu Shibata 和 Jochen Voß 。
--------------------
有些公å¸å’Œé–‹ç™¼äººå“¡å¶çˆ¾æœƒæƒ³ï¼Œçˆ²ä»€éº¼ä»–們è¦è²»å¿ƒå­¸ç¿’如何與內核社å€åˆä½œï¼Œä¸¦å°‡ä»£ç¢¼
-放入主線內核(「主線ã€æ˜¯ç”±Linus Torvalds維護的內核,Linux發行商將其用作基礎)。
+放入主線內核(“主線â€æ˜¯ç”±Linus Torvalds維護的內核,Linux發行商將其用作基礎)。
在短期內,貢ç»ä»£ç¢¼çœ‹èµ·ä¾†åƒæ˜¯ä¸€ç¨®å¯ä»¥é¿å…的開銷;維護ç¨ç«‹ä»£ç¢¼ä¸¦ç›´æŽ¥æ”¯æŒç”¨æˆ¶
-似乎更容易。事實上,ä¿æŒä»£ç¢¼ç¨ç«‹ï¼ˆã€Œæ¨¹å¤–ã€ï¼‰æ˜¯åœ¨ç¶“濟上是錯誤的。
+似乎更容易。事實上,ä¿æŒä»£ç¢¼ç¨ç«‹ï¼ˆâ€œæ¨¹å¤–â€ï¼‰æ˜¯åœ¨ç¶“濟上是錯誤的。
爲了說明樹外代碼æˆæœ¬ï¼Œä¸‹é¢çµ¦å‡ºå…§æ ¸é–‹ç™¼éŽç¨‹çš„一些相關方é¢ï¼›æœ¬æ–‡ç¨å¾Œå°‡æ›´è©³ç´°åœ°
討論其中的大部分內容。請考慮:
- 所有Linux用戶都å¯ä»¥ä½¿ç”¨åˆä½µåˆ°ä¸»ç·šå…§æ ¸ä¸­çš„代碼。它將自動出ç¾åœ¨æ‰€æœ‰å•“用它的
- 發行版上。無需驅動程åºç£ç¢Ÿã€é¡å¤–下載,也ä¸éœ€è¦çˆ²å¤šå€‹ç™¼è¡Œç‰ˆçš„多個版本æä¾›
+ 發行版上。無需驅動程åºç£ç›¤ã€é¡å¤–下載,也ä¸éœ€è¦çˆ²å¤šå€‹ç™¼è¡Œç‰ˆçš„多個版本æä¾›
支æŒï¼›é€™ä¸€åˆ‡å°‡æ–¹ä¾¿æ‰€æœ‰é–‹ç™¼äººå“¡å’Œç”¨æˆ¶ã€‚併入主線解決了大é‡çš„分發和支æŒå•é¡Œã€‚
- 當內核開發人員努力維護一個穩定的用戶空間接å£æ™‚,內核內部API處於ä¸æ–·è®ŠåŒ–之中。
ä¸ç¶­æŒç©©å®šçš„內部接å£æ˜¯ä¸€å€‹æ…Žé‡çš„設計決策;它å…許在任何時候進行基本的改進,
- 並產出更高質é‡çš„代碼。但該策略導致çµæžœæ˜¯ï¼Œè‹¥è¦ä½¿ç”¨æ–°çš„內核,任何樹外代碼都
+ 併產出更高質é‡çš„代碼。但該策略導致çµæžœæ˜¯ï¼Œè‹¥è¦ä½¿ç”¨æ–°çš„內核,任何樹外代碼都
需è¦æŒçºŒçš„維護。維護樹外代碼會需è¦å¤§é‡çš„工作æ‰èƒ½ä½¿ä»£ç¢¼ä¿æŒæ­£å¸¸é‹è¡Œã€‚
相å,ä½æ–¼ä¸»ç·šä¸­çš„代碼ä¸éœ€è¦é€™æ¨£åšï¼Œå› çˆ²åŸºæœ¬è¦å‰‡è¦æ±‚進行API更改的任何開發
@@ -140,60 +140,60 @@ Andrew Morton, Andrew Price, Tsugikazu Shibata 和 Jochen Voß 。
- 代碼的貢ç»æ˜¯ä½¿æ•´å€‹æµç¨‹å·¥ä½œçš„根本。通éŽè²¢ç»ä»£ç¢¼ï¼Œæ‚¨å¯ä»¥å‘內核添加新功能,並
æ供其他內核開發人員使用的功能和示例。如果您已經爲Linux開發了代碼(或者正在
- 考慮這樣åšï¼‰ï¼Œé‚£éº¼æ‚¨é¡¯ç„¶å°é€™å€‹å¹³å°çš„æŒçºŒæˆåŠŸæ„Ÿèˆˆè¶£ï¼›è²¢ç»ä»£ç¢¼æ˜¯ç¢ºä¿æˆåŠŸçš„
+ 考慮這樣åšï¼‰ï¼Œé‚£éº¼æ‚¨é¡¯ç„¶å°é€™å€‹å¹³è‡ºçš„æŒçºŒæˆåŠŸæ„Ÿèˆˆè¶£ï¼›è²¢ç»ä»£ç¢¼æ˜¯ç¢ºä¿æˆåŠŸçš„
最好方法之一。
-上述所有ç†ç”±éƒ½é©ç”¨æ–¼ä»»ä½•æ¨¹å¤–內核代碼,包括以專有的ã€åƒ…二進ä½å½¢å¼åˆ†ç™¼çš„代碼。
-然而,在考慮任何類型的純二進ä½å…§æ ¸ä»£ç¢¼åˆ†å¸ƒä¹‹å‰ï¼Œé‚„需è¦è€ƒæ…®å…¶ä»–因素。包括:
+上述所有ç†ç”±éƒ½é©ç”¨æ–¼ä»»ä½•æ¨¹å¤–內核代碼,包括以專有的ã€åƒ…二進制形å¼åˆ†ç™¼çš„代碼。
+然而,在考慮任何類型的純二進制內核代碼分佈之å‰ï¼Œé‚„需è¦è€ƒæ…®å…¶ä»–因素。包括:
- åœç¹žå°ˆæœ‰å…§æ ¸æ¨¡å¡Šåˆ†ç™¼çš„法律å•é¡Œå…¶å¯¦è¼ƒçˆ²æ¨¡ç³Šï¼›ç›¸ç•¶å¤šçš„內核版權所有者èªçˆ²ï¼Œ
- 大多數僅二進ä½çš„模塊是內核的派生產å“,因此,它們的分發é•å了GNU通用公共
+ 大多數僅二進制的模塊是內核的派生產å“,因此,它們的分發é•å了GNU通用公共
許å¯è­‰ï¼ˆä¸‹é¢å°‡è©³ç´°ä»‹ç´¹ï¼‰ã€‚本文作者ä¸æ˜¯å¾‹å¸«ï¼Œæœ¬æ–‡æª”中的任何內容都ä¸å¯èƒ½è¢«
- 視爲法律建議。å°é–‰åŽŸå§‹ç¢¼æ¨¡å¡Šçš„真實法律地ä½åªèƒ½ç”±æ³•é™¢æ±ºå®šã€‚但ä¸ç®¡æ€Žæ¨£ï¼Œå›°æ“¾
+ 視爲法律建議。å°é–‰æºä»£ç¢¼æ¨¡å¡Šçš„真實法律地ä½åªèƒ½ç”±æ³•é™¢æ±ºå®šã€‚但ä¸ç®¡æ€Žæ¨£ï¼Œå›°æ“¾
這些模塊的ä¸ç¢ºå®šæ€§ä»ç„¶å­˜åœ¨ã€‚
-- 二進ä½æ¨¡å¡Šå¤§å¤§å¢žåŠ äº†èª¿è©¦å…§æ ¸å•é¡Œçš„難度,以至於大多數內核開發人員甚至都ä¸æœƒ
- 嘗試。因此,åªåˆ†ç™¼äºŒé€²ä½æ¨¡å¡Šå°‡ä½¿æ‚¨çš„用戶更難從社å€ç²å¾—支æŒã€‚
+- 二進制模塊大大增加了調試內核å•é¡Œçš„難度,以至於大多數內核開發人員甚至都ä¸æœƒ
+ 嘗試。因此,åªåˆ†ç™¼äºŒé€²åˆ¶æ¨¡å¡Šå°‡ä½¿æ‚¨çš„用戶更難從社å€ç²å¾—支æŒã€‚
-- å°æ–¼åƒ…二進ä½çš„模塊的發行者來說,支æŒä¹Ÿæ›´åŠ å›°é›£ï¼Œä»–們必須爲他們希望支æŒçš„
+- å°æ–¼åƒ…二進制的模塊的發行者來說,支æŒä¹Ÿæ›´åŠ å›°é›£ï¼Œä»–們必須爲他們希望支æŒçš„
æ¯å€‹ç™¼è¡Œç‰ˆå’Œæ¯å€‹å…§æ ¸ç‰ˆæœ¬æä¾›ä¸åŒç‰ˆæœ¬çš„模塊。爲了æ供較爲全é¢çš„覆蓋範åœï¼Œ
å¯èƒ½éœ€è¦ä¸€å€‹æ¨¡å¡Šçš„å¹¾å個構建,並且æ¯æ¬¡å‡ç´šå…§æ ¸æ™‚,您的用戶都必須單ç¨å‡ç´š
這些模塊。
-- 上é¢æ到的關於代碼評審的所有å•é¡Œéƒ½æ›´åŠ å­˜åœ¨æ–¼å°é–‰åŽŸå§‹ç¢¼ä¸­ã€‚由於該代碼根本
+- 上é¢æ到的關於代碼評審的所有å•é¡Œéƒ½æ›´åŠ å­˜åœ¨æ–¼å°é–‰æºä»£ç¢¼ä¸­ã€‚由於該代碼根本
ä¸å¯å¾—,因此社å€ç„¡æ³•å°å…¶é€²è¡Œå¯©æŸ¥ï¼Œæ¯«ç„¡ç–‘å•ï¼Œå®ƒå°‡å­˜åœ¨åš´é‡å•é¡Œã€‚
尤其是嵌入å¼ç³»çµ±çš„製造商,å¯èƒ½æœƒå‚¾å‘於忽視本節中所說的大部分內容;因爲他們
-相信自己正在商用一種使用å‡çµå…§æ ¸ç‰ˆæœ¬çš„ç¨ç«‹ç”¢å“,在發布後ä¸éœ€è¦å†é€²è¡Œé–‹ç™¼ã€‚
+相信自己正在商用一種使用å‡çµå…§æ ¸ç‰ˆæœ¬çš„ç¨ç«‹ç”¢å“,在發佈後ä¸éœ€è¦å†é€²è¡Œé–‹ç™¼ã€‚
這個論點忽略了廣泛的代碼審查的價值以åŠå…許用戶å‘產å“添加功能的價值。但這些
-產å“的商業壽命有é™ï¼Œä¹‹å¾Œå¿…須發布新版本的產å“。在這一點上,代碼在主線上並得到
-良好維護的供應商將能夠更好地å ä½ï¼Œä»¥ä½¿æ–°ç”¢å“快速上市。
+產å“的商業壽命有é™ï¼Œä¹‹å¾Œå¿…須發佈新版本的產å“。在這一點上,代碼在主線上並得到
+良好維護的供應商將能夠更好地佔ä½ï¼Œä»¥ä½¿æ–°ç”¢å“快速上市。
許å¯
----
代碼是根據一些許å¯è­‰æ供給Linux內核的,但是所有代碼都必須與GNU通用公共許å¯
證(GPLV2)的版本2兼容,該版本是覆蓋整個內核分發的許å¯è­‰ã€‚在實è¸ä¸­ï¼Œé€™æ„味
-著所有代碼貢ç»éƒ½ç”±GPLv2(å¯é¸åœ°ï¼Œèªžè¨€å…許在更高版本的GPL下分發)或3å­å¥BSD
+ç€æ‰€æœ‰ä»£ç¢¼è²¢ç»éƒ½ç”±GPLv2(å¯é¸åœ°ï¼Œèªžè¨€å…許在更高版本的GPL下分發)或3å­å¥BSD
許å¯ï¼ˆNew BSD License,譯者注)覆蓋。任何ä¸åŒ…å«åœ¨å…¼å®¹è¨±å¯è­‰ä¸­çš„è²¢ç»éƒ½ä¸æœƒ
被接å—到內核中。
è²¢ç»çµ¦å…§æ ¸çš„代碼ä¸éœ€è¦ï¼ˆæˆ–請求)版權分é…。åˆä½µåˆ°ä¸»ç·šå…§æ ¸ä¸­çš„所有代碼都ä¿ç•™
其原始所有權;因此,內核ç¾åœ¨æ“有數åƒå€‹æ‰€æœ‰è€…。
-這種所有權çµæ§‹ä¹Ÿæš—示著,任何改變內核許å¯çš„嘗試都註定會失敗。很少有實際情æ³
+這種所有權çµæ§‹ä¹Ÿæš—示ç€ï¼Œä»»ä½•æ”¹è®Šå…§æ ¸è¨±å¯çš„嘗試都註定會失敗。很少有實際情æ³
å¯ä»¥ç²å¾—所有版權所有者的åŒæ„(或者從內核中刪除他們的代碼)。因此,尤其是在
å¯é è¦‹çš„將來,許å¯è­‰ä¸å¤§å¯èƒ½é·ç§»åˆ°GPL的版本3。
-所有貢ç»çµ¦å…§æ ¸çš„代碼都必須是åˆæ³•çš„å…費軟體。因此,ä¸æŽ¥å—匿å(或化å)貢ç»
-者的代碼。所有貢ç»è€…都需è¦åœ¨ä»–們的代碼上「sign off(簽發)ã€ï¼Œè²æ˜Žä»£ç¢¼å¯ä»¥
-在GPL下與內核一起分發。無法æ供未被其所有者許å¯çˆ²å…費軟體的代碼,或å¯èƒ½çˆ²
+所有貢ç»çµ¦å…§æ ¸çš„代碼都必須是åˆæ³•çš„å…費軟件。因此,ä¸æŽ¥å—匿å(或化å)貢ç»
+者的代碼。所有貢ç»è€…都需è¦åœ¨ä»–們的代碼上“sign off(簽發)â€ï¼Œè²æ˜Žä»£ç¢¼å¯ä»¥
+在GPL下與內核一起分發。無法æ供未被其所有者許å¯çˆ²å…費軟件的代碼,或å¯èƒ½çˆ²
內核造æˆç‰ˆæ¬Šç›¸é—œå•é¡Œçš„代碼(例如,由缺ä¹é©ç•¶ä¿è­·çš„åå‘工程工作派生的代碼)
ä¸èƒ½è¢«æŽ¥å—。
有關版權å•é¡Œçš„æå•åœ¨Linux開發郵件列表中很常見。這樣的å•é¡Œé€šå¸¸æœƒå¾—到ä¸å°‘答案,
-但請記ä½ï¼Œå›žç­”這些å•é¡Œçš„人ä¸æ˜¯å¾‹å¸«ï¼Œä¸èƒ½æ供法律諮詢。如果您有關於Linux原始碼
-的法律å•é¡Œï¼Œæ²’有什麼å¯ä»¥ä»£æ›¿è«®è©¢äº†è§£é€™ä¸€é ˜åŸŸçš„律師。ä¾è³´å¾žæŠ€è¡“郵件列表中ç²å¾—
+但請記ä½ï¼Œå›žç­”這些å•é¡Œçš„人ä¸æ˜¯å¾‹å¸«ï¼Œä¸èƒ½æ供法律諮詢。如果您有關於Linuxæºä»£ç¢¼
+的法律å•é¡Œï¼Œæ²’有什麼å¯ä»¥ä»£æ›¿è«®è©¢çž­è§£é€™ä¸€é ˜åŸŸçš„律師。ä¾è³´å¾žæŠ€è¡“郵件列表中ç²å¾—
的答案是一件冒險的事情。
diff --git a/Documentation/translations/zh_TW/process/2.Process.rst b/Documentation/translations/zh_TW/process/2.Process.rst
index 17bb4e07d171..49385d65c216 100644
--- a/Documentation/translations/zh_TW/process/2.Process.rst
+++ b/Documentation/translations/zh_TW/process/2.Process.rst
@@ -26,8 +26,8 @@
總覽
----
-內核開發人員使用一個鬆散的基於時間的發布éŽç¨‹ï¼Œæ¯å…©åˆ°ä¸‰å€‹æœˆç™¼å¸ƒä¸€æ¬¡æ–°çš„主è¦
-內核版本。最近的發布歷å²è¨˜éŒ„如下:
+內核開發人員使用一個鬆散的基於時間的發佈éŽç¨‹ï¼Œæ¯å…©åˆ°ä¸‰å€‹æœˆç™¼ä½ˆä¸€æ¬¡æ–°çš„主è¦
+內核版本。最近的發佈歷å²è¨˜éŒ„如下:
====== =================
5.0 2019年3月3日
@@ -42,33 +42,33 @@
版本包å«å¤§ç´„13000個變更集,變更了幾åè¬è¡Œä»£ç¢¼ã€‚因此,5.x是Linux內核開發的å‰
沿;內核使用滾動開發模型,ä¸æ–·é›†æˆé‡å¤§è®ŠåŒ–。
-å°æ–¼æ¯å€‹ç‰ˆæœ¬çš„補ä¸åˆä½µï¼Œéµå¾ªä¸€å€‹ç›¸å°ç°¡å–®çš„è¦å‰‡ã€‚在æ¯å€‹é–‹ç™¼å‘¨æœŸçš„開頭,「åˆä½µ
-窗å£ã€è¢«æ‰“開。這時,被èªçˆ²è¶³å¤ ç©©å®šï¼ˆä¸¦ä¸”被開發社å€æŽ¥å—)的代碼被åˆä½µåˆ°ä¸»ç·šå…§
-核中。在這段時間內,新開發周期的大部分變更(以åŠæ‰€æœ‰ä¸»è¦è®Šæ›´ï¼‰å°‡ä»¥æŽ¥è¿‘æ¯å¤©
-1000次變更(「補ä¸ã€æˆ–「變更集ã€ï¼‰çš„速度åˆä½µã€‚
+å°æ–¼æ¯å€‹ç‰ˆæœ¬çš„補ä¸åˆä½µï¼Œéµå¾ªä¸€å€‹ç›¸å°ç°¡å–®çš„è¦å‰‡ã€‚在æ¯å€‹é–‹ç™¼é€±æœŸçš„開頭,“åˆä½µ
+窗å£â€è¢«æ‰“開。這時,被èªçˆ²è¶³å¤ ç©©å®šï¼ˆä¸¦ä¸”被開發社å€æŽ¥å—)的代碼被åˆä½µåˆ°ä¸»ç·šå…§
+核中。在這段時間內,新開發週期的大部分變更(以åŠæ‰€æœ‰ä¸»è¦è®Šæ›´ï¼‰å°‡ä»¥æŽ¥è¿‘æ¯å¤©
+1000次變更(“補ä¸â€æˆ–“變更集â€ï¼‰çš„速度åˆä½µã€‚
(順便說一å¥ï¼Œå€¼å¾—注æ„的是,åˆä½µçª—å£æœŸé–“集æˆçš„更改並ä¸æ˜¯æ†‘空產生的;它們是經
æå‰æ”¶é›†ã€æ¸¬è©¦å’Œåˆ†ç´šçš„。ç¨å¾Œå°‡è©³ç´°æ述該éŽç¨‹çš„工作方å¼ã€‚)
-åˆä½µçª—å£æŒçºŒå¤§ç´„兩周。在這段時間çµæŸæ™‚,LinusTorvaldså°‡è²æ˜Žçª—å£å·²é—œé–‰ï¼Œä¸¦
-釋放第一個「rcã€å…§æ ¸ã€‚例如,å°æ–¼ç›®æ¨™çˆ²5.6的內核,在åˆä½µçª—å£çµæŸæ™‚發生的釋放
+åˆä½µçª—å£æŒçºŒå¤§ç´„兩週。在這段時間çµæŸæ™‚,Linus Torvaldså°‡è²æ˜Žçª—å£å·²é—œé–‰ï¼Œä¸¦
+釋放第一個“rcâ€å…§æ ¸ã€‚例如,å°æ–¼ç›®æ¨™çˆ²5.6的內核,在åˆä½µçª—å£çµæŸæ™‚發生的釋放
將被稱爲5.6-rc1。-rc1 版本是一個信號,表示åˆä½µæ–°ç‰¹æ€§çš„時間已經éŽåŽ»ï¼Œç©©å®šä¸‹ä¸€
個內核的時間已經到來。
在接下來的6到10周內,åªæœ‰ä¿®å¾©å•é¡Œçš„補ä¸æ‰æ‡‰è©²æ交給主線。有時會å…許更大的
更改,但這種情æ³å¾ˆå°‘發生;試圖在åˆä½µçª—å£å¤–åˆä½µæ–°åŠŸèƒ½çš„開發人員往往å—ä¸åˆ°
å‹å¥½çš„接待。一般來說,如果您錯éŽäº†çµ¦å®šç‰¹æ€§çš„åˆä½µçª—å£ï¼Œæœ€å¥½çš„åšæ³•æ˜¯ç­‰å¾…下一
-個開發周期。(å¶çˆ¾æœƒå°æœªæ”¯æŒç¡¬é«”的驅動程åºé€²è¡Œä¾‹å¤–;如果它們ä¸æ”¹è®Šå·²æœ‰ä»£ç¢¼ï¼Œ
-則ä¸æœƒå°Žè‡´å›žæ­¸ï¼Œæ‡‰è©²å¯ä»¥éš¨æ™‚被安全地加入)。
+個開發週期。(å¶çˆ¾æœƒå°æœªæ”¯æŒç¡¬ä»¶çš„驅動程åºé€²è¡Œä¾‹å¤–;如果它們ä¸æ”¹è®Šå·²æœ‰ä»£ç¢¼ï¼Œ
+則ä¸æœƒå°Žè‡´è¿´æ­¸ï¼Œæ‡‰è©²å¯ä»¥éš¨æ™‚被安全地加入)。
-隨著修復程åºé€²å…¥ä¸»ç·šï¼Œè£œä¸é€Ÿåº¦å°‡éš¨è‘—時間的推移而變慢。Linus大約æ¯å‘¨ç™¼å¸ƒä¸€æ¬¡
-æ–°çš„-rc內核;在內核被èªçˆ²è¶³å¤ ç©©å®šä¸¦æœ€çµ‚發布å‰ï¼Œä¸€èˆ¬æœƒé”到-rc6到-rc9之間。
+隨ç€ä¿®å¾©ç¨‹åºé€²å…¥ä¸»ç·šï¼Œè£œä¸é€Ÿåº¦å°‡éš¨ç€æ™‚間的推移而變慢。Linus大約æ¯é€±ç™¼ä½ˆä¸€æ¬¡
+æ–°çš„-rc內核;在內核被èªçˆ²è¶³å¤ ç©©å®šä¸¦æœ€çµ‚發佈å‰ï¼Œä¸€èˆ¬æœƒé”到-rc6到-rc9之間。
然後,整個éŽç¨‹åˆé‡æ–°é–‹å§‹äº†ã€‚
-例如,這裡是5.4的開發周期進行情æ³ï¼ˆ2019年):
+例如,這è£æ˜¯5.4的開發週期進行情æ³ï¼ˆ2019年):
============== ==============================
- ä¹æœˆ 15 5.3 穩定版發布
+ ä¹æœˆ 15 5.3 穩定版發佈
ä¹æœˆ 30 5.4-rc1 åˆä½µçª—å£é—œé–‰
å月 6 5.4-rc2
å月 13 5.4-rc3
@@ -77,26 +77,26 @@
å一月 3 5.4-rc6
å一月 10 5.4-rc7
å一月 17 5.4-rc8
- å一月 24 5.4 穩定版發布
+ å一月 24 5.4 穩定版發佈
============== ==============================
-開發人員如何決定何時çµæŸé–‹ç™¼å‘¨æœŸä¸¦å‰µå»ºç©©å®šç‰ˆæœ¬ï¼Ÿæœ€é‡è¦çš„指標是以å‰ç‰ˆæœ¬çš„
-回歸列表。ä¸æ­¡è¿Žå‡ºç¾ä»»ä½•éŒ¯èª¤ï¼Œä½†æ˜¯é‚£äº›ç ´å£žäº†ä»¥å‰èƒ½å·¥ä½œçš„系統的錯誤被èªçˆ²æ˜¯
-特別嚴é‡çš„。因此,導致回歸的補ä¸æ˜¯ä¸å—歡迎的,很å¯èƒ½åœ¨ç©©å®šæœŸå…§åˆªé™¤ã€‚
+開發人員如何決定何時çµæŸé–‹ç™¼é€±æœŸä¸¦å‰µå»ºç©©å®šç‰ˆæœ¬ï¼Ÿæœ€é‡è¦çš„指標是以å‰ç‰ˆæœ¬çš„
+迴歸列表。ä¸æ­¡è¿Žå‡ºç¾ä»»ä½•éŒ¯èª¤ï¼Œä½†æ˜¯é‚£äº›ç ´å£žäº†ä»¥å‰èƒ½å·¥ä½œçš„系統的錯誤被èªçˆ²æ˜¯
+特別嚴é‡çš„。因此,導致迴歸的補ä¸æ˜¯ä¸å—歡迎的,很å¯èƒ½åœ¨ç©©å®šæœŸå…§åˆªé™¤ã€‚
-開發人員的目標是在穩定發布之å‰ä¿®å¾©æ‰€æœ‰å·²çŸ¥çš„回歸。在ç¾å¯¦ä¸–界中,這種完美是
+開發人員的目標是在穩定發佈之å‰ä¿®å¾©æ‰€æœ‰å·²çŸ¥çš„迴歸。在ç¾å¯¦ä¸–界中,這種完美是
很難實ç¾çš„;在這種è¦æ¨¡çš„項目中,變數太多了。需è¦èªªæ˜Žçš„是,延é²æœ€çµ‚版本åªæœƒ
-使å•é¡Œè®Šå¾—更糟;等待下一個åˆä½µçª—å£çš„更改將變多,導致下次出ç¾æ›´å¤šçš„回歸錯誤。
-因此,大多數5.x內核都有一些已知的回歸錯誤,ä¸éŽï¼Œå¸Œæœ›æ²’有一個是嚴é‡çš„。
+使å•é¡Œè®Šå¾—更糟;等待下一個åˆä½µçª—å£çš„更改將變多,導致下次出ç¾æ›´å¤šçš„迴歸錯誤。
+因此,大多數5.x內核都有一些已知的迴歸錯誤,ä¸éŽï¼Œå¸Œæœ›æ²’有一個是嚴é‡çš„。
-一旦一個穩定的版本發布,它的æŒçºŒç¶­è­·å·¥ä½œå°±è¢«ç§»äº¤çµ¦ã€Œç©©å®šåœ˜éšŠã€ï¼Œç›®å‰ç”±
-Greg Kroah-Hartman領導。穩定團隊將使用5.x.y編號方案ä¸å®šæœŸåœ°ç™¼å¸ƒç©©å®šç‰ˆæœ¬çš„
+一旦一個穩定的版本發佈,它的æŒçºŒç¶­è­·å·¥ä½œå°±è¢«ç§»äº¤çµ¦â€œç©©å®šåœ˜éšŠâ€ï¼Œç›®å‰ç”±
+Greg Kroah-Hartman領導。穩定團隊將使用5.x.y編號方案ä¸å®šæœŸåœ°ç™¼ä½ˆç©©å®šç‰ˆæœ¬çš„
更新。è¦åˆå…¥æ›´æ–°ç‰ˆæœ¬ï¼Œè£œä¸å¿…須(1)修復一個é‡è¦çš„缺陷,且(2)已經åˆä½µåˆ°
-下一個開發版本主線中。內核通常會在其åˆå§‹ç‰ˆæœ¬å¾Œçš„一個以上的開發周期內收到
+下一個開發版本主線中。內核通常會在其åˆå§‹ç‰ˆæœ¬å¾Œçš„一個以上的開發週期內收到
穩定版更新。例如,5.2內核的歷å²å¦‚下(2019年):
============== ===============================
- 七月 7 5.2 穩定版發布
+ 七月 7 5.2 穩定版發佈
七月 13 5.2.1
七月 21 5.2.2
七月 26 5.2.3
@@ -108,7 +108,7 @@ Greg Kroah-Hartman領導。穩定團隊將使用5.x.y編號方案ä¸å®šæœŸåœ°ç™¼
5.2.21是5.2版本的最終穩定更新。
-有些內核被指定爲「長期ã€å…§æ ¸ï¼›å®ƒå€‘將得到更長時間的支æŒã€‚在本文中,當å‰çš„長期
+有些內核被指定爲“長期â€å…§æ ¸ï¼›å®ƒå€‘將得到更長時間的支æŒã€‚在本文中,當å‰çš„長期
內核åŠå…¶ç¶­è­·è€…是:
====== ================================ ================
@@ -121,9 +121,9 @@ Greg Kroah-Hartman領導。穩定團隊將使用5.x.y編號方案ä¸å®šæœŸåœ°ç™¼
====== ================================ ================
長期支æŒå…§æ ¸çš„é¸æ“‡ç´”粹是維護人員是å¦æœ‰éœ€æ±‚和時間來維護該版本的å•é¡Œã€‚
-ç›®å‰é‚„沒有爲å³å°‡ç™¼å¸ƒçš„任何特定版本æ供長期支æŒçš„已知計劃。
+ç›®å‰é‚„沒有爲å³å°‡ç™¼ä½ˆçš„任何特定版本æ供長期支æŒçš„已知計劃。
-補ä¸çš„生命周期
+補ä¸çš„生命週期
--------------
補ä¸ä¸æœƒç›´æŽ¥å¾žé–‹ç™¼äººå“¡çš„éµç›¤é€²å…¥ä¸»ç·šå…§æ ¸ã€‚相å,有一個ç¨å¾®è¤‡é›œï¼ˆå¦‚果有些éž
@@ -140,7 +140,7 @@ Greg Kroah-Hartman領導。穩定團隊將使用5.x.y編號方案ä¸å®šæœŸåœ°ç™¼
是在ä¸æ¶‰åŠç¤¾å€çš„情æ³ä¸‹å®Œæˆçš„,但是如果å¯èƒ½çš„話,最好是在公開的情æ³ä¸‹å®Œæˆ
這項工作;這樣å¯ä»¥ç¯€çœå¾ˆå¤šç¨å¾Œå†é‡æ–°è¨­è¨ˆçš„時間。
-- 早期評審。補ä¸è¢«ç™¼å¸ƒåˆ°ç›¸é—œçš„郵件列表中,列表中的開發人員會回復他們å¯èƒ½æœ‰
+- 早期評審。補ä¸è¢«é«®å¸ƒåˆ°ç›¸é—œçš„郵件列表中,列表中的開發人員會回覆他們å¯èƒ½æœ‰
的任何評論。如果一切順利的話,這個éŽç¨‹æ‡‰è©²æœƒç™¼ç¾è£œä¸çš„任何主è¦å•é¡Œã€‚
- 更廣泛的評審。當補ä¸æŽ¥è¿‘準備好ç´å…¥ä¸»ç·šæ™‚,它應該被相關的å­ç³»çµ±ç¶­è­·äººå“¡
@@ -153,48 +153,48 @@ Greg Kroah-Hartman領導。穩定團隊將使用5.x.y編號方案ä¸å®šæœŸåœ°ç™¼
如果您的補ä¸å¾—到了需è¦æ›´æ”¹çš„å饋,那麼您應該進行這些更改,或者解釋爲何
ä¸æ‡‰è©²é€²è¡Œé€™äº›æ›´æ”¹ã€‚如果您的補ä¸æ²’有評審æ„見,也沒有被其相應的å­ç³»çµ±æˆ–
驅動程åºç¶­è­·è€…接å—,那麼您應該堅æŒä¸æ‡ˆåœ°å°‡è£œä¸æ›´æ–°åˆ°ç•¶å‰å…§æ ¸ä½¿å…¶å¯è¢«æ­£å¸¸
- 應用,並ä¸æ–·åœ°ç™¼é€å®ƒä»¥ä¾›å¯©æŸ¥å’Œåˆä½µã€‚
+ 應用,並ä¸æ–·åœ°ç™¼é€å®ƒä»¥ä¾›å¯©æŸ¥å’Œåˆä¸¦ã€‚
- åˆä½µåˆ°ä¸»ç·šã€‚最終,一個æˆåŠŸçš„補ä¸å°‡è¢«åˆä½µåˆ°ç”±LinusTorvalds管ç†çš„主線存儲庫
中。此時å¯èƒ½æœƒå‡ºç¾æ›´å¤šçš„è©•è«–å’Œ/或å•é¡Œï¼›å°é–‹ç™¼äººå“¡ä¾†èªªæ‡‰å°é€™äº›å•é¡Œä¸¦è§£æ±º
出ç¾çš„任何å•é¡Œä»å¾ˆé‡è¦ã€‚
-- 穩定版發布。大é‡ç”¨æˆ¶å¯èƒ½å—此補ä¸å½±éŸ¿ï¼Œå› æ­¤å¯èƒ½å†æ¬¡å‡ºç¾æ–°çš„å•é¡Œã€‚
+- 穩定版發佈。大é‡ç”¨æˆ¶å¯èƒ½å—此補ä¸å½±éŸ¿ï¼Œå› æ­¤å¯èƒ½å†æ¬¡å‡ºç¾æ–°çš„å•é¡Œã€‚
- 長期維護。雖然開發人員在åˆä½µä»£ç¢¼å¾Œå¯èƒ½æœƒå¿˜è¨˜ä»£ç¢¼ï¼Œä½†é€™ç¨®è¡Œçˆ²å¾€å¾€æœƒçµ¦é–‹ç™¼
社å€ç•™ä¸‹ä¸è‰¯å°è±¡ã€‚åˆä½µä»£ç¢¼æ¶ˆé™¤äº†ä¸€äº›ç¶­è­·è² æ“”,因爲其他人將修復由API更改
引起的å•é¡Œã€‚但是,如果代碼è¦é•·æœŸä¿æŒå¯ç”¨ï¼ŒåŽŸå§‹é–‹ç™¼äººå“¡æ‡‰è©²ç¹¼çºŒçˆ²ä»£ç¢¼è² è²¬ã€‚
-內核開發人員(或他們的僱主)犯的最大錯誤之一是試圖將æµç¨‹ç°¡åŒ–爲一個「åˆä½µåˆ°
-主線ã€æ­¥é©Ÿã€‚這種方法總是會讓所有相關人員感到沮喪。
+內核開發人員(或他們的僱主)犯的最大錯誤之一是試圖將æµç¨‹ç°¡åŒ–爲一個“åˆä½µåˆ°
+主線â€æ­¥é©Ÿã€‚這種方法總是會讓所有相關人員感到沮喪。
補ä¸å¦‚何進入內核
----------------
-åªæœ‰ä¸€å€‹äººå¯ä»¥å°‡è£œä¸åˆä½µåˆ°ä¸»ç·šå…§æ ¸å­˜å„²åº«ä¸­ï¼šLinusTorvalds。但是,在進入
+åªæœ‰ä¸€å€‹äººå¯ä»¥å°‡è£œä¸åˆä½µåˆ°ä¸»ç·šå…§æ ¸å­˜å„²åº«ä¸­ï¼šLinus Torvalds。但是,在進入
2.6.38內核的9500多個補ä¸ä¸­ï¼Œåªæœ‰112個(大約1.3%)是由Linus自己直接é¸æ“‡çš„。
內核項目已經發展到一個沒有一個開發人員å¯ä»¥åœ¨æ²’有支æŒçš„情æ³ä¸‹æª¢æŸ¥å’Œé¸æ“‡æ¯å€‹
補ä¸çš„è¦æ¨¡ã€‚內核開發人員處ç†é€™ç¨®å¢žé•·çš„æ–¹å¼æ˜¯ä½¿ç”¨åœç¹žä¿¡ä»»éˆæ§‹å»ºçš„助ç†ç³»çµ±ã€‚
內核代碼庫在é‚輯上被分解爲一組å­ç³»çµ±ï¼šç¶²çµ¡ã€ç‰¹å®šé«”ç³»çµæ§‹æ”¯æŒã€å…§å­˜ç®¡ç†ã€è¦–
頻設備等。大多數å­ç³»çµ±éƒ½æœ‰ä¸€å€‹æŒ‡å®šçš„維護人員,其總體負責該å­ç³»çµ±ä¸­çš„代碼。
-這些å­ç³»çµ±ç¶­è­·è€…(鬆散地)是他們所管ç†çš„內核部分的「守門員ã€ï¼›ä»–們(通常)
+這些å­ç³»çµ±ç¶­è­·è€…(鬆散地)是他們所管ç†çš„內核部分的“守門員â€ï¼›ä»–們(通常)
會接å—一個補ä¸ä»¥åŒ…å«åˆ°ä¸»ç·šå…§æ ¸ä¸­ã€‚
-å­ç³»çµ±ç¶­è­·äººå“¡æ¯å€‹äººéƒ½ç®¡ç†è‘—自己版本的內核原始碼樹,通常(並éžç¸½æ˜¯ï¼‰ä½¿ç”¨Git。
+å­ç³»çµ±ç¶­è­·äººå“¡æ¯å€‹äººéƒ½ç®¡ç†ç€è‡ªå·±ç‰ˆæœ¬çš„內核æºä»£ç¢¼æ¨¹ï¼Œé€šå¸¸ï¼ˆä¸¦éžç¸½æ˜¯ï¼‰ä½¿ç”¨Git。
Git等工具(以åŠQuilt或Mercurial等相關工具)å…許維護人員跟蹤補ä¸åˆ—表,包括作者
ä¿¡æ¯å’Œå…¶ä»–元數據。在任何給定的時間,維護人員都å¯ä»¥ç¢ºå®šä»–或她的存儲庫中的哪
些補ä¸åœ¨ä¸»ç·šä¸­æ‰¾ä¸åˆ°ã€‚
-當åˆä½µçª—å£æ‰“開時,頂級維護人員將è¦æ±‚Linus從存儲庫中「拉出ã€ä»–們爲åˆä½µé¸æ“‡
+當åˆä¸¦çª—å£æ‰“開時,頂級維護人員將è¦æ±‚Linus從存儲庫中“拉出â€ä»–們爲åˆä½µé¸æ“‡
的補ä¸ã€‚如果LinusåŒæ„,補ä¸æµå°‡æµå‘他的存儲庫,æˆçˆ²ä¸»ç·šå…§æ ¸çš„一部分。
Linuså°æ‹‰å–中接收到的特定補ä¸çš„關注程度å„ä¸ç›¸åŒã€‚很明顯,有時他看起來很
-關注。但是一般來說,Linus相信å­ç³»çµ±ç¶­è­·äººå“¡ä¸æœƒå‘上游發é€å£žè£œä¸ã€‚
+關注。但是一般來說,Linus相信å­ç³»çµ±ç¶­è­·äººå“¡ä¸æœƒå‘上éŠç™¼é€å£žè£œä¸ã€‚
-å­ç³»çµ±ç¶­è­·äººå“¡åéŽä¾†ä¹Ÿå¯ä»¥å¾žå…¶ä»–維護人員那裡ç²å–補ä¸ã€‚例如,網絡樹是由首先
+å­ç³»çµ±ç¶­è­·äººå“¡åéŽä¾†ä¹Ÿå¯ä»¥å¾žå…¶ä»–維護人員那è£ç²å–補ä¸ã€‚例如,網絡樹是由首先
在專用於網絡設備驅動程åºã€ç„¡ç·šç¶²çµ¡ç­‰çš„樹中ç©ç´¯çš„補ä¸æ§‹å»ºçš„。此存儲éˆå¯ä»¥
-ä»»æ„長,但很少超éŽå…©å€‹æˆ–三個連çµã€‚由於éˆä¸­çš„æ¯å€‹ç¶­è­·è€…都信任那些管ç†è¼ƒä½Ž
-級別樹的維護者,所以這個éŽç¨‹ç¨±çˆ²ã€Œä¿¡ä»»éˆã€ã€‚
+ä»»æ„長,但很少超éŽå…©å€‹æˆ–三個éˆæŽ¥ã€‚由於éˆä¸­çš„æ¯å€‹ç¶­è­·è€…都信任那些管ç†è¼ƒä½Ž
+級別樹的維護者,所以這個éŽç¨‹ç¨±çˆ²â€œä¿¡ä»»éˆâ€ã€‚
顯然,在這樣的系統中,ç²å–內核補ä¸å–決於找到正確的維護者。直接å‘Linus發é€
補ä¸é€šå¸¸ä¸æ˜¯æ­£ç¢ºçš„方法。
@@ -204,30 +204,30 @@ Next 樹
å­ç³»çµ±æ¨¹éˆå¼•å°Žè£œä¸æµåˆ°å…§æ ¸ï¼Œä½†å®ƒä¹Ÿæ出了一個有趣的å•é¡Œï¼šå¦‚果有人想查看爲
下一個åˆä½µçª—å£æº–備的所有補ä¸æ€Žéº¼è¾¦ï¼Ÿé–‹ç™¼äººå“¡å°‡æ„Ÿèˆˆè¶£çš„是,還有什麼其他的
-更改有待解決,以了解是å¦å­˜åœ¨éœ€è¦æ“”心的è¡çªï¼›ä¾‹å¦‚,更改核心內核函數原型的
+更改有待解決,以瞭解是å¦å­˜åœ¨éœ€è¦æ“”心的è¡çªï¼›ä¾‹å¦‚,更改核心內核函數原型的
修補程åºå°‡èˆ‡ä½¿ç”¨è©²å‡½æ•¸èˆŠå½¢å¼çš„任何其他修補程åºè¡çªã€‚審查人員和測試人員希望
在所有這些變更到é”主線內核之å‰ï¼Œèƒ½å¤ è¨ªå•å®ƒå€‘的集æˆå½¢å¼çš„變更。您å¯ä»¥å¾žæ‰€æœ‰
相關的å­ç³»çµ±æ¨¹ä¸­æå–更改,但這將是一項複雜且容易出錯的工作。
-解決方案以-next樹的形å¼å‡ºç¾ï¼Œåœ¨é€™è£¡å­ç³»çµ±æ¨¹è¢«æ”¶é›†ä»¥ä¾›æ¸¬è©¦å’Œå¯©æŸ¥ã€‚這些樹中
-ç”±Andrew Morton維護的較è€çš„一個,被稱爲「-mmã€ï¼ˆç”¨æ–¼å…§å­˜ç®¡ç†ï¼Œå‰µå»ºæ™‚爲此)。
+解決方案以-next樹的形å¼å‡ºç¾ï¼Œåœ¨é€™è£å­ç³»çµ±æ¨¹è¢«æ”¶é›†ä»¥ä¾›æ¸¬è©¦å’Œå¯©æŸ¥ã€‚這些樹中
+ç”±Andrew Morton維護的較è€çš„一個,被稱爲“-mmâ€ï¼ˆç”¨æ–¼å…§å­˜ç®¡ç†ï¼Œå‰µå»ºæ™‚爲此)。
-mm 樹集æˆäº†ä¸€é•·ä¸²å­ç³»çµ±æ¨¹ä¸­çš„補ä¸ï¼›å®ƒé‚„包å«ä¸€äº›æ—¨åœ¨å¹«åŠ©èª¿è©¦çš„補ä¸ã€‚
除此之外,-mm 還包å«å¤§é‡ç”±Andrew直接é¸æ“‡çš„補ä¸ã€‚這些補ä¸å¯èƒ½å·²ç¶“發布在郵件
列表上,或者它們å¯èƒ½æ‡‰ç”¨æ–¼å…§æ ¸ä¸­æœªæŒ‡å®šå­ç³»çµ±æ¨¹çš„部分。åŒæ™‚,-mm 作爲最後
手段的å­ç³»çµ±æ¨¹ï¼›å¦‚果沒有其他明顯的路徑å¯ä»¥è®“補ä¸é€²å…¥ä¸»ç·šï¼Œé‚£éº¼å®ƒå¾ˆå¯èƒ½æœ€
終é¸æ“‡-mm 樹。累ç©åœ¨-mm 中的å„種補ä¸æœ€çµ‚將被轉發到é©ç•¶çš„å­ç³»çµ±æ¨¹ï¼Œæˆ–者直接
-發é€åˆ°Linus。在典型的開發周期中,大約5-10%的補ä¸é€šéŽ-mm 進入主線。
+發é€åˆ°Linus。在典型的開發週期中,大約5-10%的補ä¸é€šéŽ-mm 進入主線。
-當å‰-mm 補ä¸å¯åœ¨ã€Œmmotmã€ï¼ˆ-mm of the moment)目錄中找到:
+當å‰-mm 補ä¸å¯åœ¨â€œmmotmâ€ï¼ˆ-mm of the moment)目錄中找到:
https://www.ozlabs.org/~akpm/mmotm/
然而,使用MMOTM樹å¯èƒ½æœƒå分令人頭疼;它甚至å¯èƒ½ç„¡æ³•ç·¨è­¯ã€‚
-下一個周期補ä¸åˆä½µçš„主è¦æ¨¹æ˜¯linux-next,由Stephen Rothwell 維護。根據設計
+下一個週期補ä¸åˆä½µçš„主è¦æ¨¹æ˜¯linux-next,由Stephen Rothwell 維護。根據設計
linux-next 是下一個åˆä½µçª—å£é—œé–‰å¾Œä¸»ç·šçš„快照。linux-next樹在Linux-kernel å’Œ
-Linux-next 郵件列表中發布,å¯å¾žä»¥ä¸‹ä½ç½®ä¸‹è¼‰ï¼š
+Linux-next 郵件列表中發佈,å¯å¾žä»¥ä¸‹ä½ç½®ä¸‹è¼‰ï¼š
https://www.kernel.org/pub/linux/kernel/next/
@@ -237,7 +237,7 @@ Linux-next 已經æˆçˆ²å…§æ ¸é–‹ç™¼éŽç¨‹ä¸­ä¸å¯æˆ–缺的一部分;在一個
Staging 樹
----------
-內核原始碼樹包å«drivers/staging/目錄,其中有許多驅動程åºæˆ–文件系統的å­ç›®éŒ„
+內核æºä»£ç¢¼æ¨¹åŒ…å«drivers/staging/目錄,其中有許多驅動程åºæˆ–文件系統的å­ç›®éŒ„
正在被添加到內核樹中。它們在ä»ç„¶éœ€è¦æ›´å¤šçš„修正的時候å¯ä»¥ä¿ç•™åœ¨driver/staging/
目錄中;一旦完æˆï¼Œå°±å¯ä»¥å°‡å®ƒå€‘移到內核中。這是一種跟蹤ä¸ç¬¦åˆLinux內核編碼或
質é‡æ¨™æº–的驅動程åºçš„方法,人們å¯èƒ½å¸Œæœ›ä½¿ç”¨å®ƒå€‘並跟蹤開發。
@@ -251,7 +251,7 @@ Greg Kroah Hartman ç›®å‰è² è²¬ç¶­è­·staging 樹。ä»éœ€è¦ä¿®æ­£çš„驅動程åº
Staging 是一種讓新的驅動程åºé€²å…¥ä¸»ç·šçš„相å°å®¹æ˜“的方法,它們會幸é‹åœ°å¼•èµ·å…¶ä»–
開發人員的注æ„,並迅速改進。然而,進入staging並ä¸æ˜¯æ•…事的çµå°¾ï¼›staging中
沒有看到常è¦é€²å±•çš„代碼最終將被刪除。經銷商也傾å‘於相å°ä¸é¡˜æ„使用stagingé©…å‹•
-程åºã€‚因此,在æˆçˆ²ä¸€å€‹åˆé©çš„主線驅動的路上,staging 僅是一個中轉站。
+程åºã€‚因此,在æˆçˆ²ä¸€å€‹åˆé©çš„主線驅動的路上,staging 僅是一箇中轉站。
工具
----
@@ -260,9 +260,9 @@ Staging 是一種讓新的驅動程åºé€²å…¥ä¸»ç·šçš„相å°å®¹æ˜“的方法,它
能力。如果沒有é©ç•¶å¼·å¤§çš„工具,整個系統將無法在任何地方正常工作。關於如何使用
這些工具的教程é é è¶…出了本文檔的範åœï¼Œä½†é‚„是用一點篇幅介紹一些關éµé»žã€‚
-到目å‰çˆ²æ­¢ï¼Œå…§æ ¸ç¤¾å€ä½¿ç”¨çš„主è¦åŽŸå§‹ç¢¼ç®¡ç†ç³»çµ±æ˜¯git。Git是在自由軟體社å€ä¸­é–‹ç™¼
-的許多分布å¼ç‰ˆæœ¬æŽ§åˆ¶ç³»çµ±ä¹‹ä¸€ã€‚它éžå¸¸é©åˆå…§æ ¸é–‹ç™¼ï¼Œå› çˆ²å®ƒåœ¨è™•ç†å¤§åž‹å­˜å„²åº«å’Œ
-大é‡è£œä¸æ™‚性能éžå¸¸å¥½ã€‚它也以難以學習和使用而著稱,儘管隨著時間的推移它變得
+到目å‰çˆ²æ­¢ï¼Œå…§æ ¸ç¤¾å€ä½¿ç”¨çš„主è¦æºä»£ç¢¼ç®¡ç†ç³»çµ±æ˜¯git。Git是在自由軟件社å€ä¸­é–‹ç™¼
+的許多分佈å¼ç‰ˆæœ¬æŽ§åˆ¶ç³»çµ±ä¹‹ä¸€ã€‚它éžå¸¸é©åˆå…§æ ¸é–‹ç™¼ï¼Œå› çˆ²å®ƒåœ¨è™•ç†å¤§åž‹å­˜å„²åº«å’Œ
+大é‡è£œä¸æ™‚性能éžå¸¸å¥½ã€‚它也以難以學習和使用而著稱,儘管隨ç€æ™‚間的推移它變得
更好了。å°æ–¼å…§æ ¸é–‹ç™¼äººå“¡ä¾†èªªï¼Œå°Gitçš„æŸç¨®ç†Ÿæ‚‰å¹¾ä¹Žæ˜¯ä¸€ç¨®è¦æ±‚ï¼›å³ä½¿ä»–們ä¸å°‡å®ƒ
用於自己的工作,他們也需è¦Git來跟上其他開發人員(以åŠä¸»ç·šï¼‰æ­£åœ¨åšçš„事情。
@@ -270,7 +270,7 @@ Staging 是一種讓新的驅動程åºé€²å…¥ä¸»ç·šçš„相å°å®¹æ˜“的方法,它
https://git-scm.com/
-æ­¤é é¢åŒ…å«äº†æ–‡æª”和教程的連çµã€‚
+æ­¤é é¢åŒ…å«äº†æ–‡æª”和教程的éˆæŽ¥ã€‚
在ä¸ä½¿ç”¨git的內核開發人員中,最æµè¡Œçš„é¸æ“‡å¹¾ä¹Žè‚¯å®šæ˜¯Mercurial:
@@ -282,16 +282,16 @@ Mercurial與Git共享許多特性,但它æ供了一個界é¢ï¼Œè¨±å¤šäººè¦ºå¾
https://savannah.nongnu.org/projects/quilt
-Quilt 是一個補ä¸ç®¡ç†ç³»çµ±ï¼Œè€Œä¸æ˜¯åŽŸå§‹ç¢¼ç®¡ç†ç³»çµ±ã€‚它ä¸æœƒéš¨è‘—時間的推移跟蹤歷å²ï¼›
+Quilt 是一個補ä¸ç®¡ç†ç³»çµ±ï¼Œè€Œä¸æ˜¯æºä»£ç¢¼ç®¡ç†ç³»çµ±ã€‚它ä¸æœƒéš¨ç€æ™‚間的推移跟蹤歷å²ï¼›
相å,它é¢å‘根據ä¸æ–·ç™¼å±•çš„代碼庫跟蹤一組特定的更改。一些主è¦çš„å­ç³»çµ±ç¶­è­·äººå“¡
-使用Quilt來管ç†æ‰“ç®—å‘上游移動的補ä¸ã€‚å°æ–¼æŸäº›æ¨¹çš„管ç†ï¼ˆä¾‹å¦‚-mm),quilt 是
+使用Quilt來管ç†æ‰“ç®—å‘上éŠç§»å‹•çš„補ä¸ã€‚å°æ–¼æŸäº›æ¨¹çš„管ç†ï¼ˆä¾‹å¦‚-mm),quilt 是
最好的工具。
郵件列表
--------
大é‡çš„Linux內核開發工作是通éŽéƒµä»¶åˆ—表完æˆçš„。如果ä¸åŠ å…¥è‡³å°‘一個æŸå€‹åˆ—表,
-就很難æˆçˆ²ç¤¾å€ä¸­çš„一個「全功能ã€æˆå“¡ã€‚但是,Linux郵件列表å°é–‹ç™¼äººå“¡ä¾†èªªä¹Ÿæ˜¯
+就很難æˆçˆ²ç¤¾å€ä¸­çš„一個“全功能â€æˆå“¡ã€‚但是,Linux郵件列表å°é–‹ç™¼äººå“¡ä¾†èªªä¹Ÿæ˜¯
一個潛在的å±éšªï¼Œä»–們å¯èƒ½æœƒè¢«ä¸€å †é›»å­éƒµä»¶æ·¹æ²’ã€é•åLinux列表上使用的約定,
或者兩者兼而有之。
@@ -316,14 +316,14 @@ redhat.com/mailman/listinfo。
- ä¸è¦å›žå¾©æŒ‘事的人。如果有人試圖激起憤怒,請忽略他們。
-- 當回復Linux內核電å­éƒµä»¶ï¼ˆæˆ–其他列表上的電å­éƒµä»¶ï¼‰æ™‚,請爲所有相關人員ä¿ç•™
+- 當回覆Linux內核電å­éƒµä»¶ï¼ˆæˆ–其他列表上的電å­éƒµä»¶ï¼‰æ™‚,請爲所有相關人員ä¿ç•™
Cc: 抄é€é ­ã€‚如果沒有確實的ç†ç”±ï¼ˆå¦‚明確的請求),則ä¸æ‡‰åˆªé™¤æ”¶ä»¶äººã€‚一定è¦
確ä¿ä½ è¦å›žå¾©çš„人在抄é€åˆ—表中。這個慣例也使你ä¸å¿…在回覆郵件時明確è¦æ±‚被抄é€ã€‚
- 在æ出å•é¡Œä¹‹å‰ï¼Œæœç´¢åˆ—表存檔(和整個網絡)。有些開發人員å¯èƒ½æœƒå°é‚£äº›é¡¯ç„¶
沒有完æˆå®¶åº­ä½œæ¥­çš„人感到ä¸è€ç…©ã€‚
-- é¿å…頂部回復(把你的答案放在你è¦å›žå¾©çš„引文上é¢çš„åšæ³•ï¼‰ã€‚這會讓你的回答更難
+- é¿å…頂部回覆(把你的答案放在你è¦å›žå¾©çš„引文上é¢çš„åšæ³•ï¼‰ã€‚這會讓你的回答更難
ç†è§£ï¼Œå°è±¡ä¹Ÿå¾ˆå·®ã€‚
- 在正確的郵件列表發å•ã€‚linux-kernel å¯èƒ½æ˜¯é€šç”¨çš„討論場所,但它ä¸æ˜¯å°‹æ‰¾æ‰€æœ‰
@@ -332,7 +332,7 @@ redhat.com/mailman/listinfo。
最後一點——找到正確的郵件列表——是開發人員常出錯的地方。在linux-kernel上
æ出與網絡相關的å•é¡Œçš„人幾乎肯定會收到一個禮貌的建議,轉到netdev列表上æ出,
因爲這是大多數網絡開發人員經常出ç¾çš„列表。還有其他列表å¯ç”¨æ–¼scsiã€video4linuxã€
-ideã€filesystemç­‰å­ç³»çµ±ã€‚查找郵件列表的最佳ä½ç½®æ˜¯èˆ‡å…§æ ¸åŽŸå§‹ç¢¼ä¸€èµ·æ‰“包的
+ideã€filesystemç­‰å­ç³»çµ±ã€‚查找郵件列表的最佳ä½ç½®æ˜¯èˆ‡å…§æ ¸æºä»£ç¢¼ä¸€èµ·æ‰“包的
MAINTAINERS文件。
開始內核開發
@@ -344,7 +344,7 @@ MAINTAINERS文件。
å…¬å¸é€šå¸¸å¸Œæœ›è˜è«‹çŸ¥å的開發人員來啓動開發團隊。實際上,這是一種有效的技術。
但它也往往是昂貴的,而且å°å¢žåŠ æœ‰ç¶“驗的內核開發人員的數é‡æ²’有多大幫助。考
慮到時間投入,å¯ä»¥è®“內部開發人員加快Linux內核的開發速度。利用這段時間å¯ä»¥
-讓僱主æ“有一批既了解內核åˆäº†è§£å…¬å¸çš„開發人員,還å¯ä»¥å¹«åŠ©åŸ¹è¨“其他人。從中期
+讓僱主æ“有一批既瞭解內核åˆçž­è§£å…¬å¸çš„開發人員,還å¯ä»¥å¹«åŠ©åŸ¹è¨“其他人。從中期
來看,這通常是更有利å¯åœ–的方法。
å¯ä»¥ç†è§£çš„是,單個開發人員往往å°èµ·æ­¥æ„Ÿåˆ°èŒ«ç„¶ã€‚從一個大型項目開始å¯èƒ½æœƒå¾ˆ
@@ -353,17 +353,17 @@ MAINTAINERS文件。
這會分散整個開發社å€çš„注æ„力,因此,它們越來越被人ä¸çœ‹é‡ã€‚希望å‘社å€ä»‹ç´¹
自己的新開發人員將無法通éŽé€™äº›æ–¹å¼ç²å¾—他們期待的å響。
-Andrew Morton 爲有抱負的內核開發人員æ供了如下建議
+Andrew Morton 爲有抱負的內核開發人員æ供瞭如下建議
::
- 所有內核開發者的第一個項目肯定應該是「確ä¿å…§æ ¸åœ¨æ‚¨å¯ä»¥æ“作的所有
- 機器上始終完美é‹è¡Œã€ã€‚通常的方法是和其他人一起解決å•é¡Œï¼ˆé€™å¯èƒ½éœ€
+ 所有內核開發者的第一個項目肯定應該是“確ä¿å…§æ ¸åœ¨æ‚¨å¯ä»¥æ“作的所有
+ 機器上始終完美é‹è¡Œâ€ã€‚通常的方法是和其他人一起解決å•é¡Œï¼ˆé€™å¯èƒ½éœ€
è¦å …æŒï¼ï¼‰ï¼Œä½†å°±æ˜¯å¦‚此——這是內核開發的一部分。
(http://lwn.net/Articles/283982/)
-在沒有明顯å•é¡Œéœ€è¦è§£æ±ºçš„情æ³ä¸‹ï¼Œé€šå¸¸å»ºè­°é–‹ç™¼äººå“¡æŸ¥çœ‹ç•¶å‰çš„回歸和開放缺陷
+在沒有明顯å•é¡Œéœ€è¦è§£æ±ºçš„情æ³ä¸‹ï¼Œé€šå¸¸å»ºè­°é–‹ç™¼äººå“¡æŸ¥çœ‹ç•¶å‰çš„迴歸和開放缺陷
列表。從來都ä¸ç¼ºå°‘需è¦è§£æ±ºçš„å•é¡Œï¼›é€šéŽè§£æ±ºé€™äº›å•é¡Œï¼Œé–‹ç™¼äººå“¡å°‡å¾žè©²éŽç¨‹ç²å¾—
經驗,åŒæ™‚與開發社å€çš„其他æˆå“¡å»ºç«‹ç›¸äº’å°Šé‡ã€‚
diff --git a/Documentation/translations/zh_TW/process/3.Early-stage.rst b/Documentation/translations/zh_TW/process/3.Early-stage.rst
index 636e506fd196..a6959e6350f4 100644
--- a/Documentation/translations/zh_TW/process/3.Early-stage.rst
+++ b/Documentation/translations/zh_TW/process/3.Early-stage.rst
@@ -26,13 +26,13 @@
--------
與任何工程項目一樣,æˆåŠŸçš„內核改善從清晰æè¿°è¦è§£æ±ºçš„å•é¡Œé–‹å§‹ã€‚在æŸäº›æƒ…æ³
-下,這個步驟很容易:例如當æŸå€‹ç‰¹å®šç¡¬é«”需è¦é©…動程åºæ™‚。ä¸éŽï¼Œåœ¨å…¶ä»–情æ³ä¸‹ï¼Œ
+下,這個步驟很容易:例如當æŸå€‹ç‰¹å®šç¡¬ä»¶éœ€è¦é©…動程åºæ™‚。ä¸éŽï¼Œåœ¨å…¶ä»–情æ³ä¸‹ï¼Œ
很容易將實際å•é¡Œèˆ‡å»ºè­°çš„解決方案混在一起,這å¯èƒ½æœƒå°Žè‡´éº»ç…©ã€‚
-舉個例å­ï¼šå¹¾å¹´å‰ï¼ŒLinux音頻的開發人員尋求一種方法來é‹è¡Œæ‡‰ç”¨ç¨‹å¼ï¼Œè€Œä¸æœƒå› 
+舉個例å­ï¼šå¹¾å¹´å‰ï¼ŒLinux音頻的開發人員尋求一種方法來é‹è¡Œæ‡‰ç”¨ç¨‹åºï¼Œè€Œä¸æœƒå› 
系統延é²éŽå¤§è€Œå°Žè‡´é€€å‡ºæˆ–其他å•é¡Œã€‚他們得到的解決方案是一個連接到Linux安全
-模塊(LSM)框架中的內核模塊;這個模塊å¯ä»¥é…置爲å…許特定的應用程å¼è¨ªå•å¯¦æ™‚
-調度程åºã€‚這個模塊被實ç¾ä¸¦ç™¼åˆ°linux-kernel郵件列表,在那裡它立å³é‡åˆ°äº†éº»ç…©ã€‚
+模塊(LSM)框架中的內核模塊;這個模塊å¯ä»¥é…置爲å…許特定的應用程åºè¨ªå•å¯¦æ™‚
+調度程åºã€‚這個模塊被實ç¾ä½µç™¼åˆ°linux-kernel郵件列表,在那è£å®ƒç«‹å³é‡åˆ°äº†éº»ç…©ã€‚
å°æ–¼éŸ³é »é–‹ç™¼äººå“¡ä¾†èªªï¼Œé€™å€‹å®‰å…¨æ¨¡å¡Šè¶³ä»¥è§£æ±ºä»–們當å‰çš„å•é¡Œã€‚但是,å°æ–¼æ›´å»£æ³›çš„
內核社å€ä¾†èªªï¼Œé€™è¢«è¦–爲å°LSM框架的濫用(LSM框架並ä¸æ‰“算授予他們原本ä¸å…·å‚™çš„
@@ -41,15 +41,15 @@
然而,音頻社å€ç„¡æ³•è¶…越他們實施的特定解決方案來看å•é¡Œï¼›ä»–們ä¸é¡˜æ„接å—替代方案。
由此產生的分歧使這些開發人員å°æ•´å€‹å…§æ ¸é–‹ç™¼éŽç¨‹æ„Ÿåˆ°å¤±æœ›ï¼›å…¶ä¸­ä¸€å€‹é–‹ç™¼äººå“¡è¿”回
-到audio列表並發布了以下內容:
+到audio列表併發布了以下內容:
有很多éžå¸¸å¥½çš„Linux內核開發人員,但他們往往會被一羣傲慢的傻瓜所壓倒。
- 試圖å‘這些人傳é”用戶需求是浪費時間。他們太「è°æ˜Žã€äº†ï¼Œæ ¹æœ¬è½ä¸åˆ°å°‘數
+ 試圖å‘這些人傳é”用戶需求是浪費時間。他們太“è°æ˜Žâ€äº†ï¼Œæ ¹æœ¬è½ä¸åˆ°å°‘數
人的話。
(http://lwn.net/Articles/131776/)
-實際情æ³å»æ˜¯ä¸åŒçš„;與特定模塊相比,內核開發人員更關心系統穩定性ã€é•·æœŸç¶­è­·
+實際情æ³å»æ˜¯ä¸åŒçš„;與特定模塊相比,內核開發人員更關心繫統穩定性ã€é•·æœŸç¶­è­·
以åŠæ‰¾åˆ°å•é¡Œçš„正確解決方案。這個故事的寓æ„是把é‡é»žæ”¾åœ¨å•é¡Œä¸Šâ€”—而ä¸æ˜¯å…·é«”çš„
解決方案上——並在開始編寫代碼之å‰èˆ‡é–‹ç™¼ç¤¾å€è¨Žè«–這個å•é¡Œã€‚
@@ -72,7 +72,7 @@
- 很å¯èƒ½å•é¡Œæ˜¯ç”±å…§æ ¸ä»¥æ‚¨ä¸ç†è§£çš„æ–¹å¼è§£æ±ºçš„。Linux內核很大,具有許多ä¸æ˜Žé¡¯
的特性和功能。並ä¸æ˜¯æ‰€æœ‰çš„內核功能都åƒäººå€‘所希望的那樣有文檔記錄,而且很
- 容易éºæ¼ä¸€äº›æ±è¥¿ã€‚æŸä½œè€…發布了一個完整的驅動程åºï¼Œé‡è¤‡äº†ä¸€å€‹å…¶ä¸
+ 容易éºæ¼ä¸€äº›æ±è¥¿ã€‚æŸä½œè€…發佈了一個完整的驅動程åºï¼Œé‡è¤‡äº†ä¸€å€‹å…¶ä¸
知é“çš„ç¾æœ‰é©…動程åºã€‚é‡æ–°ç™¼æ˜Žç¾æœ‰è¼ªå­çš„代碼ä¸åƒ…浪費,而且ä¸æœƒè¢«æŽ¥å—到主線
內核中。
@@ -83,7 +83,7 @@
å¯èƒ½é¡˜æ„幫助創建這個解決方案。
在內核開發社å€çš„多年經驗給了我們一個明確的教訓:閉門設計和開發的內核代碼總是
-有一些å•é¡Œï¼Œé€™äº›å•é¡Œåªæœ‰åœ¨ä»£ç¢¼ç™¼å¸ƒåˆ°ç¤¾å€ä¸­æ™‚æ‰æœƒè¢«ç™¼ç¾ã€‚有時這些å•é¡Œå¾ˆåš´é‡ï¼Œ
+有一些å•é¡Œï¼Œé€™äº›å•é¡Œåªæœ‰åœ¨ä»£ç¢¼ç™¼ä½ˆåˆ°ç¤¾å€ä¸­æ™‚纔會被發ç¾ã€‚有時這些å•é¡Œå¾ˆåš´é‡ï¼Œ
需è¦æ•¸æœˆæˆ–數年的努力æ‰èƒ½ä½¿ä»£ç¢¼é”到內核社å€çš„標準。例如:
- 設計並實ç¾äº†å–®è™•ç†å™¨ç³»çµ±çš„DeviceScape網絡棧。åªæœ‰ä½¿å…¶é©åˆæ–¼å¤šè™•ç†å™¨ç³»çµ±ï¼Œ
@@ -103,16 +103,16 @@
找誰交æµï¼Ÿ
----------
-當開發人員決定公開他們的計劃時,下一個å•é¡Œæ˜¯ï¼šæˆ‘們從哪裡開始?答案是找到正確
+當開發人員決定公開他們的計劃時,下一個å•é¡Œæ˜¯ï¼šæˆ‘們從哪è£é–‹å§‹ï¼Ÿç­”案是找到正確
的郵件列表和正確的維護者。å°æ–¼éƒµä»¶åˆ—表,最好的方法是在維護者(MAINTAINERS)文件
-中查找è¦ç™¼å¸ƒçš„相關ä½ç½®ã€‚如果有一個åˆé©çš„å­ç³»çµ±åˆ—表,那麼其上發布通常比在
-linux-kernel上發布更å¯å–;您更有å¯èƒ½æŽ¥è§¸åˆ°åœ¨ç›¸é—œå­ç³»çµ±ä¸­å…·æœ‰å°ˆæ¥­çŸ¥è­˜çš„開發
+中查找è¦ç™¼ä½ˆçš„相關ä½ç½®ã€‚如果有一個åˆé©çš„å­ç³»çµ±åˆ—表,那麼其上發佈通常比在
+linux-kernel上發佈更å¯å–;您更有å¯èƒ½æŽ¥è§¸åˆ°åœ¨ç›¸é—œå­ç³»çµ±ä¸­å…·æœ‰å°ˆæ¥­çŸ¥è­˜çš„開發
人員,並且環境å¯èƒ½å…·æ”¯æŒæ€§ã€‚
找到維護人員å¯èƒ½æœƒæœ‰é»žå›°é›£ã€‚åŒæ¨£ï¼Œç¶­è­·è€…文件是開始的地方。但是,該文件往往ä¸
-是最新的,並且並éžæ‰€æœ‰å­ç³»çµ±éƒ½åœ¨é‚£è£¡é¡¯ç¤ºã€‚實際上,維護者文件中列出的人員å¯èƒ½
+是最新的,並且並éžæ‰€æœ‰å­ç³»çµ±éƒ½åœ¨é‚£è£é¡¯ç¤ºã€‚實際上,維護者文件中列出的人員å¯èƒ½
ä¸æ˜¯ç•¶å‰å¯¦éš›æ“”任該角色的人員。因此,當å°è¯ç¹«èª°æœ‰ç–‘å•æ™‚,一個有用的技巧是使用
-git(尤其是「git-logã€ï¼‰æŸ¥çœ‹æ„Ÿèˆˆè¶£çš„å­ç³»çµ±ä¸­ç•¶å‰æ´»å‹•çš„用戶。看看誰在寫補ä¸ã€
+git(尤其是“git-logâ€ï¼‰æŸ¥çœ‹æ„Ÿèˆˆè¶£çš„å­ç³»çµ±ä¸­ç•¶å‰æ´»å‹•çš„用戶。看看誰在寫補ä¸ã€
誰會在這些補ä¸ä¸ŠåŠ ä¸ŠSigned-off-by行簽å(如有)。這些人將是幫助新開發項目的
最佳人é¸ã€‚
@@ -123,7 +123,7 @@ git(尤其是「git-logã€ï¼‰æŸ¥çœ‹æ„Ÿèˆˆè¶£çš„å­ç³»çµ±ä¸­ç•¶å‰æ´»å‹•çš„用æ
.../scripts/get_maintainer.pl
-當給定「-fã€é¸é …時,此腳本將返回指定文件或目錄的當å‰ç¶­è­·è€…。如果在命令行上
+當給定“-fâ€é¸é …時,此腳本將返回指定文件或目錄的當å‰ç¶­è­·è€…。如果在命令行上
給出了一個補ä¸ï¼Œå®ƒå°‡åˆ—出å¯èƒ½æŽ¥æ”¶è£œä¸å‰¯æœ¬çš„維護人員。有許多é¸é …å¯ä»¥èª¿ç¯€
get_maintainer.plæœç´¢ç¶­è­·è€…的嚴格程度;請å°å¿ƒä½¿ç”¨æ›´æ¿€é€²çš„é¸é …,因爲最終çµæžœ
å¯èƒ½æœƒåŒ…括å°æ‚¨æ­£åœ¨ä¿®æ”¹çš„代碼沒有真正興趣的開發人員。
@@ -134,17 +134,17 @@ get_maintainer.plæœç´¢ç¶­è­·è€…的嚴格程度;請å°å¿ƒä½¿ç”¨æ›´æ¿€é€²çš„é¸
何時郵寄?
----------
-如果å¯èƒ½çš„話,在早期階段發布你的計劃åªæœƒæ›´æœ‰å¹«åŠ©ã€‚æ述正在解決的å•é¡Œä»¥åŠå·²ç¶“
+如果å¯èƒ½çš„話,在早期階段發佈你的計劃åªæœƒæ›´æœ‰å¹«åŠ©ã€‚æ述正在解決的å•é¡Œä»¥åŠå·²ç¶“
制定的關於如何實施的任何計劃。您å¯ä»¥æ供的任何信æ¯éƒ½å¯ä»¥å¹«åŠ©é–‹ç™¼ç¤¾å€çˆ²é …ç›®
æ供有用的輸入。
在這個階段å¯èƒ½ç™¼ç”Ÿçš„一件令人沮喪的事情ä¸æ˜¯å¾—到åå°æ„見,而是很少或根本沒有
å饋。令人傷心的事實是:(1)內核開發人員往往很忙;(2)ä¸ç¼ºå°‘有å®å‰è¨ˆåŠƒä½†
代碼(甚至代碼設想)很少的人去支æŒä»–們;(3)沒有人有義務審查或評論別人發表
-的想法。除此之外,高層級的設計常常隱è—著一些å•é¡Œï¼Œé€™äº›å•é¡Œåªæœ‰åœ¨æœ‰äººçœŸæ­£å˜—試
-實ç¾é€™äº›è¨­è¨ˆæ™‚æ‰æœƒè¢«ç™¼ç¾ï¼›å› æ­¤ï¼Œå…§æ ¸é–‹ç™¼äººå“¡å¯§é¡˜çœ‹åˆ°ä»£ç¢¼ã€‚
+的想法。除此之外,高層級的設計常常隱è—ç€ä¸€äº›å•é¡Œï¼Œé€™äº›å•é¡Œåªæœ‰åœ¨æœ‰äººçœŸæ­£å˜—試
+實ç¾é€™äº›è¨­è¨ˆæ™‚纔會被發ç¾ï¼›å› æ­¤ï¼Œå…§æ ¸é–‹ç™¼äººå“¡å¯§é¡˜çœ‹åˆ°ä»£ç¢¼ã€‚
-如果發布請求評論(RFC)並沒得到什麼有用的評論,ä¸è¦ä»¥çˆ²é€™æ„味著無人å°æ­¤é …ç›®
+如果發佈請求評論(RFC)並沒得到什麼有用的評論,ä¸è¦ä»¥çˆ²é€™æ„味ç€ç„¡äººå°æ­¤é …ç›®
有興趣,åŒæ™‚你也ä¸èƒ½å‡è¨­ä½ çš„想法沒有å•é¡Œã€‚在這種情æ³ä¸‹ï¼Œæœ€å¥½çš„åšæ³•æ˜¯ç¹¼çºŒé€²
行,把你的進展隨時通知社å€ã€‚
@@ -152,12 +152,12 @@ get_maintainer.plæœç´¢ç¶­è­·è€…的嚴格程度;請å°å¿ƒä½¿ç”¨æ›´æ¿€é€²çš„é¸
-----------------------
如果您的工作是在公å¸ç’°å¢ƒä¸­å®Œæˆçš„,就åƒå¤§å¤šæ•¸Linux內核工作一樣;顯然,在您將
-å…¬å¸çš„計劃或代碼發布到公共郵件列表之å‰ï¼Œå¿…é ˆç²å¾—有é©ç•¶æ¬Šåˆ©ç¶“ç†çš„許å¯ã€‚發布
-ä¸ç¢ºå®šæ˜¯å¦å…¼å®¹GPL的代碼尤其會帶來å•é¡Œï¼›å…¬å¸çš„管ç†å±¤å’Œæ³•å¾‹äººå“¡è¶Šæ—©èƒ½å¤ å°±ç™¼å¸ƒ
+å…¬å¸çš„計劃或代碼發佈到公共郵件列表之å‰ï¼Œå¿…é ˆç²å¾—有é©ç•¶æ¬Šåˆ©ç¶“ç†çš„許å¯ã€‚發佈
+ä¸ç¢ºå®šæ˜¯å¦å…¼å®¹GPL的代碼尤其會帶來å•é¡Œï¼›å…¬å¸çš„管ç†å±¤å’Œæ³•å¾‹äººå“¡è¶Šæ—©èƒ½å¤ å°±ç™¼ä½ˆ
內核開發項目é”æˆä¸€è‡´ï¼Œå°åƒèˆ‡çš„æ¯å€‹äººéƒ½è¶Šå¥½ã€‚
一些讀者å¯èƒ½æœƒèªçˆ²ä»–們的核心工作是爲了支æŒé‚„沒有正å¼æ‰¿èªå­˜åœ¨çš„產å“。將僱主
-的計劃公布在公共郵件列表上å¯èƒ½ä¸æ˜¯ä¸€å€‹å¯è¡Œçš„é¸æ“‡ã€‚在這種情æ³ä¸‹ï¼Œæœ‰å¿…è¦è€ƒæ…®
+的計劃公佈在公共郵件列表上å¯èƒ½ä¸æ˜¯ä¸€å€‹å¯è¡Œçš„é¸æ“‡ã€‚在這種情æ³ä¸‹ï¼Œæœ‰å¿…è¦è€ƒæ…®
ä¿å¯†æ˜¯å¦çœŸçš„是必è¦çš„;通常ä¸éœ€è¦æŠŠé–‹ç™¼è¨ˆåŠƒé—œåœ¨é–€å…§ã€‚
的確,有些情æ³ä¸‹ä¸€å®¶å…¬å¸åœ¨é–‹ç™¼éŽç¨‹çš„早期無法åˆæ³•åœ°æŠ«éœ²å…¶è¨ˆåŠƒã€‚æ“有經驗è±å¯Œ
diff --git a/Documentation/translations/zh_TW/process/4.Coding.rst b/Documentation/translations/zh_TW/process/4.Coding.rst
index adb5339aab6a..7a4e01eabd81 100644
--- a/Documentation/translations/zh_TW/process/4.Coding.rst
+++ b/Documentation/translations/zh_TW/process/4.Coding.rst
@@ -19,7 +19,7 @@
======================
雖然一個堅實的ã€é¢å‘社å€çš„設計éŽç¨‹æœ‰å¾ˆå¤šå€¼å¾—說é“的,但是任何內核開發項目工作
-的證明都å映在代碼中。它是將由其他開發人員檢查併åˆä¸¦ï¼ˆæˆ–ä¸åˆä½µï¼‰åˆ°ä¸»ç·šæ¨¹ä¸­
+的證明都å映在代碼中。它是將由其他開發人員檢查併åˆä¸¦ï¼ˆæˆ–ä¸åˆä¸¦ï¼‰åˆ°ä¸»ç·šæ¨¹ä¸­
的代碼。所以這段代碼的質é‡æ±ºå®šäº†é …目的最終æˆåŠŸã€‚
本節將檢查編碼éŽç¨‹ã€‚我們將從內核開發人員常犯的幾種錯誤開始。然後é‡é»žå°‡è½‰ç§»
@@ -32,7 +32,7 @@
********
內核長期以來都有其標準的代碼風格,如
-:ref:`Documentation/translations/zh_TW/process/coding-style.rst <tw_codingstyle>`
+:ref:`Documentation/translations/zh_CN/process/coding-style.rst <tw_codingstyle>`
中所述。在多數時候,該文檔中æ述的準則至多被èªçˆ²æ˜¯å»ºè­°æ€§çš„。因此,內核中存在
大é‡ä¸ç¬¦åˆä»£ç¢¼é¢¨æ ¼æº–則的代碼。這種代碼的存在會給內核開發人員帶來兩方é¢çš„å±å®³ã€‚
@@ -42,7 +42,7 @@
開發人員能夠快速ç†è§£å…¶ä¸­çš„任何部分。所以å†ä¹Ÿç¶“ä¸èµ·å¥‡æ€ªæ ¼å¼çš„代碼的折騰了。
內核的代碼風格å¶çˆ¾æœƒèˆ‡åƒ±ä¸»çš„強制風格發生è¡çªã€‚在這種情æ³ä¸‹ï¼Œå¿…須在代碼åˆä½µ
-之å‰éµå¾žå…§æ ¸ä»£ç¢¼é¢¨æ ¼ã€‚將代碼放入內核æ„味著以多種方å¼æ”¾æ£„一定程度的控制權——
+之å‰éµå¾žå…§æ ¸ä»£ç¢¼é¢¨æ ¼ã€‚將代碼放入內核æ„味ç€ä»¥å¤šç¨®æ–¹å¼æ”¾æ£„一定程度的控制權——
包括控制代碼樣å¼ã€‚
å¦ä¸€å€‹å±å®³æ˜¯èªçˆ²å·²ç¶“在內核中的代碼迫切需è¦ä¿®å¾©ä»£ç¢¼æ¨£å¼ã€‚開發者å¯èƒ½æœƒé–‹å§‹ç·¨å¯«
@@ -70,21 +70,21 @@
簡單點,先考慮一個調用時始終åªæœ‰ä¸€å€‹åƒæ•¸ä¸”總爲零的函數。我們å¯ä»¥ä¿ç•™é€™å€‹åƒæ•¸ï¼Œ
以在需è¦ä½¿ç”¨å®ƒæ™‚æ供的é¡å¤–éˆæ´»æ€§ã€‚ä¸éŽï¼Œåœ¨é‚£æ™‚實ç¾äº†é€™å€‹é¡å¤–åƒæ•¸çš„代碼很有
å¯èƒ½ä»¥æŸç¨®å¾žæœªè¢«æ³¨æ„到的微妙方å¼è¢«ç ´å£žâ€”—因爲它從未被使用éŽã€‚或者當需è¦é¡å¤–
-çš„éˆæ´»æ€§æ™‚,它並未以符åˆç¨‹å¼è¨­è¨ˆå¸«ç•¶åˆæœŸæœ›çš„æ–¹å¼ä¾†å¯¦ç¾ã€‚內核開發人員通常會æ交
+çš„éˆæ´»æ€§æ™‚,它並未以符åˆç¨‹åºå“¡ç•¶åˆæœŸæœ›çš„æ–¹å¼ä¾†å¯¦ç¾ã€‚內核開發人員通常會æ交
補ä¸ä¾†åˆªé™¤æœªä½¿ç”¨çš„åƒæ•¸ï¼›ä¸€èˆ¬ä¾†èªªï¼Œä¸€é–‹å§‹å°±ä¸æ‡‰è©²æ·»åŠ é€™äº›åƒæ•¸ã€‚
-éš±è—硬體訪å•çš„抽象層——通常爲了å…許大é‡çš„驅動程åºå…¼å®¹å¤šå€‹ä½œæ¥­ç³»çµ±â€”—尤其ä¸å—
+éš±è—硬件訪å•çš„抽象層——通常爲了å…許大é‡çš„驅動程åºå…¼å®¹å¤šå€‹æ“作系統——尤其ä¸å—
歡迎。這樣的層使代碼變得模糊,å¯èƒ½æœƒé€ æˆæ€§èƒ½æ失;它們ä¸å±¬æ–¼Linux內核。
å¦ä¸€æ–¹é¢ï¼Œå¦‚果您發ç¾è‡ªå·±å¾žå¦ä¸€å€‹å…§æ ¸å­ç³»çµ±è¤‡è£½äº†å¤§é‡çš„代碼,那麼是時候
-了解一下:是å¦éœ€è¦å°‡é€™äº›ä»£ç¢¼ä¸­çš„部分æå–到單ç¨çš„庫中,或者在更高的層次上
+瞭解一下:是å¦éœ€è¦å°‡é€™äº›ä»£ç¢¼ä¸­çš„部分æå–到單ç¨çš„庫中,或者在更高的層次上
實ç¾é€™äº›åŠŸèƒ½ã€‚在整個內核中複製相åŒçš„代碼沒有價值。
#ifdef å’Œé è™•ç†
***************
-Cé è™•ç†å™¨ä¼¼ä¹Žçµ¦ä¸€äº›C程å¼è¨­è¨ˆå¸«å¸¶ä¾†äº†å¼·å¤§çš„誘惑,他們èªçˆ²å®ƒæ˜¯ä¸€ç¨®å°‡å¤§é‡éˆæ´»æ€§åŠ å…¥
-原始碼中的方法。但是é è™•ç†å™¨ä¸æ˜¯C,大é‡ä½¿ç”¨å®ƒæœƒå°Žè‡´ä»£ç¢¼å°å…¶ä»–人來說更難閱讀,
+Cé è™•ç†å™¨ä¼¼ä¹Žçµ¦ä¸€äº›C程åºå“¡å¸¶ä¾†äº†å¼·å¤§çš„誘惑,他們èªçˆ²å®ƒæ˜¯ä¸€ç¨®å°‡å¤§é‡éˆæ´»æ€§åŠ å…¥
+æºä»£ç¢¼ä¸­çš„方法。但是é è™•ç†å™¨ä¸æ˜¯C,大é‡ä½¿ç”¨å®ƒæœƒå°Žè‡´ä»£ç¢¼å°å…¶ä»–人來說更難閱讀,
å°ç·¨è­¯å™¨ä¾†èªªæ›´é›£æª¢æŸ¥æ­£ç¢ºæ€§ã€‚使用了大é‡é è™•ç†å™¨å¹¾ä¹Žç¸½æ˜¯ä»£ç¢¼éœ€è¦ä¸€äº›
清ç†å·¥ä½œçš„標誌。
@@ -100,23 +100,23 @@ Cé è™•ç†å™¨å®å­˜åœ¨è¨±å¤šå±éšªæ€§ï¼ŒåŒ…括å¯èƒ½å°å…·æœ‰å‰¯ä½œç”¨ä¸”沒有é
å…§è¯å‡½æ•¸
********
-ä¸éŽï¼Œå…§è¯å‡½æ•¸æœ¬èº«ä¹Ÿå­˜åœ¨é¢¨éšªã€‚程å¼è¨­è¨ˆå¸«å¯ä»¥å‚¾å¿ƒæ–¼é¿å…函數調用和用內è¯å‡½æ•¸å¡«å……æº
+ä¸éŽï¼Œå…§è¯å‡½æ•¸æœ¬èº«ä¹Ÿå­˜åœ¨é¢¨éšªã€‚程åºå“¡å¯ä»¥å‚¾å¿ƒæ–¼é¿å…函數調用和用內è¯å‡½æ•¸å¡«å……æº
文件所固有的效率。然而,這些功能實際上會é™ä½Žæ€§èƒ½ã€‚因爲它們的代碼在æ¯å€‹èª¿ç”¨ç«™
-點都被複製一é,所以最終會增加編譯內核的大å°ã€‚此外,這也å°è™•ç†å™¨çš„內存緩存
+點都被複制一é,所以最終會增加編譯內核的大å°ã€‚此外,這也å°è™•ç†å™¨çš„內存緩存
造æˆå£“力,從而大大é™ä½ŽåŸ·è¡Œé€Ÿåº¦ã€‚通常內è¯å‡½æ•¸æ‡‰è©²éžå¸¸å°ï¼Œè€Œä¸”相å°è¼ƒå°‘。畢竟
函數調用的æˆæœ¬ä¸¦ä¸é«˜ï¼›å¤§é‡å‰µå»ºå…§è¯å‡½æ•¸æ˜¯éŽæ—©å„ªåŒ–的典型例å­ã€‚
-一般來說,內核程å¼è¨­è¨ˆå¸«æœƒè‡ªå†’風險忽略緩存效果。在數據çµæ§‹èª²ç¨‹é–‹é ­ä¸­çš„經典
-時間/空間權衡通常ä¸é©ç”¨æ–¼ç•¶ä»£ç¡¬é«”。空間 *就是* 時間,因爲一個大的程åºæ¯”一個
+一般來說,內核程åºå“¡æœƒè‡ªå†’風險忽略緩存效果。在數據çµæ§‹èª²ç¨‹é–‹é ­ä¸­çš„經典
+時間/空間權衡通常ä¸é©ç”¨æ–¼ç•¶ä»£ç¡¬ä»¶ã€‚空間 *就是* 時間,因爲一個大的程åºæ¯”一個
更緊湊的程åºé‹è¡Œå¾—慢。
較新的編譯器越來越激進地決定一個給定函數是å¦æ‡‰è©²å…§è¯ã€‚因此,隨æ„放置使用
-「inlineã€é—œéµå­—å¯èƒ½ä¸åƒ…僅是éŽåº¦çš„,也å¯èƒ½æ˜¯ç„¡ç”¨çš„。
+“inlineâ€é—œéµå­—å¯èƒ½ä¸åƒ…僅是éŽåº¦çš„,也å¯èƒ½æ˜¯ç„¡ç”¨çš„。
鎖
**
-2006å¹´5月,「deviceescapeã€ç¶²çµ¡å †æ£§åœ¨å‰å‘¼å¾Œæ“下以GPL發布,並被ç´å…¥ä¸»ç·šå…§æ ¸ã€‚
+2006å¹´5月,“deviceescapeâ€ç¶²çµ¡å †æ£§åœ¨å‰å‘¼å¾Œæ“下以GPL發佈,並被ç´å…¥ä¸»ç·šå…§æ ¸ã€‚
這是一個å—歡迎的消æ¯ï¼›Linux中å°ç„¡ç·šç¶²çµ¡çš„支æŒå……å…¶é‡è¢«èªçˆ²æ˜¯ä¸åˆæ ¼çš„,而
Deviceescape堆棧承諾修復這種情æ³ã€‚然而直到2007å¹´6月(2.6.22),這段代碼æ‰çœŸ
正進入主線。發生了什麼?
@@ -125,25 +125,25 @@ Deviceescape堆棧承諾修復這種情æ³ã€‚然而直到2007å¹´6月(2.6.22)
設計。在åˆä½µé€™å€‹ç¶²çµ¡å †æ£§ï¼ˆç¾åœ¨ç¨±çˆ²mac80211)之å‰ï¼Œéœ€è¦å°å…¶é€²è¡Œä¸€å€‹éŽ–方案的
改造。
-曾經,Linux內核代碼å¯ä»¥åœ¨ä¸è€ƒæ…®å¤šè™•ç†å™¨ç³»çµ±æ‰€å¸¶ä¾†çš„並發性å•é¡Œçš„情æ³ä¸‹é€²è¡Œ
+曾經,Linux內核代碼å¯ä»¥åœ¨ä¸è€ƒæ…®å¤šè™•ç†å™¨ç³»çµ±æ‰€å¸¶ä¾†çš„併發性å•é¡Œçš„情æ³ä¸‹é€²è¡Œ
開發。然而ç¾åœ¨ï¼Œé€™å€‹æ–‡æª”就是在雙核筆記本電腦上寫的。å³ä½¿åœ¨å–®è™•ç†å™¨ç³»çµ±ä¸Šï¼Œ
-爲æ高響應能力所åšçš„工作也會æ高內核內的並發性水平。編寫內核代碼而ä¸è€ƒæ…®éŽ–
+爲æ高響應能力所åšçš„工作也會æ高內核內的併發性水平。編寫內核代碼而ä¸è€ƒæ…®éŽ–
çš„æ—¥å­æ—©å·²é åŽ»ã€‚
-å¯ä»¥ç”±å¤šå€‹ç·šç¨‹ä¸¦ç™¼è¨ªå•çš„任何資æºï¼ˆæ•¸æ“šçµæ§‹ã€ç¡¬é«”寄存器等)必須由鎖ä¿è­·ã€‚æ–°
+å¯ä»¥ç”±å¤šå€‹ç·šç¨‹ä½µç™¼è¨ªå•çš„任何資æºï¼ˆæ•¸æ“šçµæ§‹ã€ç¡¬ä»¶å¯„存器等)必須由鎖ä¿è­·ã€‚æ–°
的代碼應該謹記這一è¦æ±‚;事後修改鎖是一項相當困難的任務。內核開發人員應該花
-時間充分了解å¯ç”¨çš„鎖原語,以便爲工作é¸æ“‡æ­£ç¢ºçš„工具。å°ä¸¦ç™¼æ€§ç¼ºä¹é—œæ³¨çš„代碼
+時間充分了解å¯ç”¨çš„鎖原語,以便爲工作é¸æ“‡æ­£ç¢ºçš„工具。å°ä½µç™¼æ€§ç¼ºä¹é—œæ³¨çš„代碼
很難進入主線。
-回歸
+è¿´æ­¸
****
-最後一個值得一æçš„å±éšªæ˜¯å›žæ­¸ï¼šå®ƒå¯èƒ½æœƒå¼•èµ·å°Žè‡´ç¾æœ‰ç”¨æˆ¶çš„æŸäº›æ±è¥¿ä¸­æ–·çš„改變
-(這也å¯èƒ½æœƒå¸¶ä¾†å¾ˆå¤§çš„改進)。這種變化被稱爲「回歸ã€ï¼Œå›žæ­¸å·²ç¶“æˆçˆ²ä¸»ç·šå…§æ ¸
-最ä¸å—æ­¡è¿Žçš„å•é¡Œã€‚除了少數例外情æ³ï¼Œå¦‚果回歸ä¸èƒ½åŠæ™‚修正,會導致回歸的修改
-將被å–消。最好首先é¿å…回歸發生。
+最後一個值得一æçš„å±éšªæ˜¯è¿´æ­¸ï¼šå®ƒå¯èƒ½æœƒå¼•èµ·å°Žè‡´ç¾æœ‰ç”¨æˆ¶çš„æŸäº›æ±è¥¿ä¸­æ–·çš„改變
+(這也å¯èƒ½æœƒå¸¶ä¾†å¾ˆå¤§çš„改進)。這種變化被稱爲“迴歸â€ï¼Œè¿´æ­¸å·²ç¶“æˆçˆ²ä¸»ç·šå…§æ ¸
+最ä¸å—æ­¡è¿Žçš„å•é¡Œã€‚除了少數例外情æ³ï¼Œå¦‚果迴歸ä¸èƒ½åŠæ™‚修正,會導致迴歸的修改
+將被å–消。最好首先é¿å…迴歸發生。
-人們常常爭論,如果回歸帶來的功能é è¶…éŽç”¢ç”Ÿçš„å•é¡Œï¼Œé‚£éº¼å›žæ­¸æ˜¯å¦çˆ²å¯æŽ¥å—的。
+人們常常爭論,如果迴歸帶來的功能é è¶…éŽç”¢ç”Ÿçš„å•é¡Œï¼Œé‚£éº¼è¿´æ­¸æ˜¯å¦çˆ²å¯æŽ¥å—的。
如果它破壞了一個系統å»çˆ²å個系統帶來新的功能,爲何ä¸æ”¹æ”¹æ…‹åº¦å‘¢ï¼Ÿ2007å¹´7月,
Linuså°é€™å€‹å•é¡Œçµ¦å‡ºäº†æœ€ä½³ç­”案:
@@ -154,7 +154,7 @@ Linuså°é€™å€‹å•é¡Œçµ¦å‡ºäº†æœ€ä½³ç­”案:
(http://lwn.net/Articles/243460/)
-特別ä¸å—歡迎的一種回歸類型是用戶空間ABI的任何變化。一旦接å£è¢«å°Žå‡ºåˆ°ç”¨æˆ¶ç©ºé–“,
+特別ä¸å—歡迎的一種迴歸類型是用戶空間ABI的任何變化。一旦接å£è¢«å°Žå‡ºåˆ°ç”¨æˆ¶ç©ºé–“,
就必須無é™æœŸåœ°æ”¯æŒå®ƒã€‚這一事實使得用戶空間接å£çš„創建特別具有挑戰性:因爲它們
ä¸èƒ½ä»¥ä¸å…¼å®¹çš„æ–¹å¼é€²è¡Œæ›´æ”¹ï¼Œæ‰€ä»¥å¿…須一次就å°ã€‚因此,用戶空間接å£ç¸½æ˜¯éœ€è¦å¤§é‡
çš„æ€è€ƒã€æ¸…晰的文檔和廣泛的審查。
@@ -171,19 +171,19 @@ Linuså°é€™å€‹å•é¡Œçµ¦å‡ºäº†æœ€ä½³ç­”案:
第一步是注æ„編譯器產生的警告。當å‰ç‰ˆæœ¬çš„GCCå¯ä»¥æª¢æ¸¬ï¼ˆä¸¦è­¦å‘Šï¼‰å¤§é‡æ½›åœ¨éŒ¯èª¤ã€‚
通常,這些警告都指å‘真正的å•é¡Œã€‚æ交以供審閱的代碼一般ä¸æœƒç”¢ç”Ÿä»»ä½•ç·¨è­¯å™¨è­¦å‘Šã€‚
-在消除警告時,注æ„了解真正的原因,並儘é‡é¿å…僅「修復ã€ä½¿è­¦å‘Šæ¶ˆå¤±è€Œä¸è§£æ±ºå…¶åŽŸå› ã€‚
+在消除警告時,注æ„瞭解真正的原因,並儘é‡é¿å…僅“修復â€ä½¿è­¦å‘Šæ¶ˆå¤±è€Œä¸è§£æ±ºå…¶åŽŸå› ã€‚
-請注æ„,並éžæ‰€æœ‰ç·¨è­¯å™¨è­¦å‘Šéƒ½é»˜èªå•“用。使用「make KCFLAGS=-Wã€æ§‹å»ºå…§æ ¸ä»¥
+請注æ„,並éžæ‰€æœ‰ç·¨è­¯å™¨è­¦å‘Šéƒ½é»˜èªå•“用。使用“make KCFLAGS=-Wâ€æ§‹å»ºå…§æ ¸ä»¥
ç²å¾—完整集åˆã€‚
-內核æ供了幾個é…ç½®é¸é …,å¯ä»¥æ‰“開調試功能;大多數é…ç½®é¸é …ä½æ–¼ã€Œkernel hackingã€
+內核æ供了幾個é…ç½®é¸é …,å¯ä»¥æ‰“開調試功能;大多數é…ç½®é¸é …ä½æ–¼â€œkernel hackingâ€
å­èœå–®ä¸­ã€‚å°æ–¼ä»»ä½•ç”¨æ–¼é–‹ç™¼æˆ–測試目的的內核,都應該啓用其中幾個é¸é …。特別是,
您應該打開:
- FRAME_WARN ç²å–大於給定數é‡çš„堆棧幀的警告。
這些警告生æˆçš„輸出å¯èƒ½æ¯”較冗長,但您ä¸å¿…擔心來自內核其他部分的警告。
- - DEBUG_OBJECTS 將添加代碼以跟蹤內核創建的å„種å°è±¡çš„生命周期,並在出ç¾å•é¡Œ
+ - DEBUG_OBJECTS 將添加代碼以跟蹤內核創建的å„種å°è±¡çš„生命週期,並在出ç¾å•é¡Œ
時發出警告。如果你è¦æ·»åŠ å‰µå»ºï¼ˆå’Œå°Žå‡ºï¼‰é—œæ–¼å…¶è‡ªå·±çš„複雜å°è±¡çš„å­ç³»çµ±ï¼Œè«‹
考慮打開å°è±¡èª¿è©¦åŸºç¤Žçµæ§‹çš„支æŒã€‚
@@ -195,34 +195,34 @@ Linuså°é€™å€‹å•é¡Œçµ¦å‡ºäº†æœ€ä½³ç­”案:
還有很多其他調試é¸é …,其中一些將在下é¢è¨Žè«–。其中一些有顯著的性能影響,ä¸æ‡‰
一直使用。在學習å¯ç”¨é¸é …上花費一些時間,å¯èƒ½æœƒåœ¨çŸ­æœŸå…§å¾—到許多回報。
-其中一個較é‡çš„調試工具是鎖檢查器或「lockdepã€ã€‚該工具將跟蹤系統中æ¯å€‹éŽ–
+其中一個較é‡çš„調試工具是鎖檢查器或“lockdepâ€ã€‚該工具將跟蹤系統中æ¯å€‹éŽ–
(spinlock或mutex)的ç²å–和釋放ã€ç²å–鎖的相å°é †åºã€ç•¶å‰ä¸­æ–·ç’°å¢ƒç­‰ç­‰ã€‚然後,
它å¯ä»¥ç¢ºä¿ç¸½æ˜¯ä»¥ç›¸åŒçš„é †åºç²å–鎖,相åŒçš„中斷å‡è¨­é©ç”¨æ–¼æ‰€æœ‰æƒ…æ³ç­‰ç­‰ã€‚æ›å¥è©±
說,lockdepå¯ä»¥æ‰¾åˆ°è¨±å¤šå°Žè‡´ç³»çµ±æ­»éŽ–的場景。在部署的系統中,這種å•é¡Œå¯èƒ½æœƒ
很痛苦(å°æ–¼é–‹ç™¼äººå“¡å’Œç”¨æˆ¶è€Œè¨€ï¼‰ï¼›LockDepå…許æå‰ä»¥è‡ªå‹•æ–¹å¼ç™¼ç¾å•é¡Œã€‚具有
-任何類型的éžæ™®é€šéŽ–的代碼在æ交åˆä½µå‰æ‡‰åœ¨å•“用lockdep的情æ³ä¸‹é‹è¡Œæ¸¬è©¦ã€‚
+任何類型的éžæ™®é€šéŽ–的代碼在æ交åˆä¸¦å‰æ‡‰åœ¨å•“用lockdep的情æ³ä¸‹é‹è¡Œæ¸¬è©¦ã€‚
-作爲一個勤奮的內核程å¼è¨­è¨ˆå¸«ï¼Œæ¯«ç„¡ç–‘å•ï¼Œæ‚¨å°‡æª¢æŸ¥ä»»ä½•å¯èƒ½å¤±æ•—çš„æ“作(如內存分é…)
+作爲一個勤奮的內核程åºå“¡ï¼Œæ¯«ç„¡ç–‘å•ï¼Œæ‚¨å°‡æª¢æŸ¥ä»»ä½•å¯èƒ½å¤±æ•—çš„æ“作(如內存分é…)
的返回狀態。然而,事實上,最終的故障復ç¾è·¯å¾‘å¯èƒ½å®Œå…¨æ²’有經éŽæ¸¬è©¦ã€‚未測試的
代碼往往會出å•é¡Œï¼›å¦‚果所有這些錯誤處ç†è·¯å¾‘都被執行了幾次,那麼您å¯èƒ½å°ä»£ç¢¼
更有信心。
內核æ供了一個å¯ä»¥åšåˆ°é€™ä¸€é»žçš„錯誤注入框架,特別是在涉åŠå…§å­˜åˆ†é…的情æ³ä¸‹ã€‚
啓用故障注入後,內存分é…çš„å¯é…置失敗的百分比;這些失敗å¯ä»¥é™å®šåœ¨ç‰¹å®šçš„代碼
-範åœå…§ã€‚在啓用了故障注入的情æ³ä¸‹é‹è¡Œï¼Œç¨‹å¼è¨­è¨ˆå¸«å¯ä»¥çœ‹åˆ°ç•¶æƒ…æ³æƒ¡åŒ–時代碼如何響
+範åœå…§ã€‚在啓用了故障注入的情æ³ä¸‹é‹è¡Œï¼Œç¨‹åºå“¡å¯ä»¥çœ‹åˆ°ç•¶æƒ…æ³æƒ¡åŒ–時代碼如何響
應。有關如何使用此工具的詳細信æ¯ï¼Œè«‹åƒé–±
Documentation/fault-injection/fault-injection.rst。
-「sparseã€éœæ…‹åˆ†æžå·¥å…·å¯ä»¥ç™¼ç¾å…¶ä»–類型的錯誤。sparseå¯ä»¥è­¦å‘Šç¨‹å¼è¨­è¨ˆå¸«ç”¨æˆ¶ç©ºé–“
+“sparseâ€éœæ…‹åˆ†æžå·¥å…·å¯ä»¥ç™¼ç¾å…¶ä»–類型的錯誤。sparseå¯ä»¥è­¦å‘Šç¨‹åºå“¡ç”¨æˆ¶ç©ºé–“
和內核空間地å€ä¹‹é–“çš„æ··æ·†ã€å¤§ç«¯åºèˆ‡å°ç«¯åºçš„æ··æ·†ã€åœ¨éœ€è¦ä¸€çµ„ä½æ¨™èªŒçš„地方傳éž
-整數值等等。sparse必須單ç¨å®‰è£(如果您的分發伺æœå™¨æ²’有將其打包,
+整數值等等。sparse必須單ç¨å®‰è£(如果您的分發æœå‹™å™¨æ²’有將其打包,
å¯ä»¥åœ¨ https://sparse.wiki.kernel.org/index.php/Main_page 找到),
-然後å¯ä»¥é€šéŽåœ¨make命令中添加「C=1ã€åœ¨ä»£ç¢¼ä¸Šé‹è¡Œå®ƒã€‚
+然後å¯ä»¥é€šéŽåœ¨make命令中添加“C=1â€åœ¨ä»£ç¢¼ä¸Šé‹è¡Œå®ƒã€‚
-「Coccinelleã€å·¥å…· :ref:`http://coccinelle.lip6.fr/ <devtools_coccinelle>`
-能夠發ç¾å„種潛在的編碼å•é¡Œï¼›å®ƒé‚„å¯ä»¥çˆ²é€™äº›å•é¡Œæ出修複方案。在
-scripts/coccinelle目錄下已經打包了相當多的內核「語義補ä¸ã€ï¼›é‹è¡Œ
-「make coccicheckã€å°‡é‹è¡Œé€™äº›èªžç¾©è£œä¸ä¸¦å ±å‘Šç™¼ç¾çš„任何å•é¡Œã€‚有關詳細信æ¯ï¼Œè«‹åƒé–±
+“Coccinelleâ€å·¥å…· :ref:`http://coccinelle.lip6.fr/ <devtools_coccinelle>`
+能夠發ç¾å„種潛在的編碼å•é¡Œï¼›å®ƒé‚„å¯ä»¥çˆ²é€™äº›å•é¡Œæ出修復方案。在
+scripts/coccinelle目錄下已經打包了相當多的內核“語義補ä¸â€ï¼›é‹è¡Œ
+“make coccicheckâ€å°‡é‹è¡Œé€™äº›èªžç¾©è£œä¸ä¸¦å ±å‘Šç™¼ç¾çš„任何å•é¡Œã€‚有關詳細信æ¯ï¼Œè«‹åƒé–±
:ref:`Documentation/dev-tools/coccinelle.rst <devtools_coccinelle>`
@@ -247,7 +247,7 @@ scripts/coccinelle目錄下已經打包了相當多的內核「語義補ä¸ã€ï¼
任何添加新用戶空間接å£çš„代碼——包括新的sysfs或/proc文件——都應該包å«è©²æŽ¥å£
的文檔,該文檔使用戶空間開發人員能夠知é“他們在使用什麼。請åƒé–±
-Documentation/ABI/README,了解如何此文檔格å¼ä»¥åŠéœ€è¦æ供哪些信æ¯ã€‚
+Documentation/ABI/README,瞭解如何此文檔格å¼ä»¥åŠéœ€è¦æ供哪些信æ¯ã€‚
文檔 :ref:`Documentation/admin-guide/kernel-parameters.rst <kernelparameters>`
æ述了內核的所有引導時間åƒæ•¸ã€‚任何添加新åƒæ•¸çš„補ä¸éƒ½æ‡‰è©²å‘該文檔添加é©ç•¶çš„
@@ -256,27 +256,27 @@ Documentation/ABI/README,了解如何此文檔格å¼ä»¥åŠéœ€è¦æ供哪些ä¿
任何新的é…ç½®é¸é …都必須附有幫助文本,幫助文本需清楚地解釋這些é¸é …以åŠç”¨æˆ¶å¯èƒ½
希望何時使用它們。
-許多å­ç³»çµ±çš„內部APIä¿¡æ¯é€šéŽå°ˆé–€æ ¼å¼åŒ–的注釋進行記錄;這些注釋å¯ä»¥é€šéŽ
-「kernel-docã€è…³æœ¬ä»¥å¤šç¨®æ–¹å¼æå–和格å¼åŒ–。如果您在具有kerneldoc注釋的å­ç³»çµ±ä¸­
+許多å­ç³»çµ±çš„內部APIä¿¡æ¯é€šéŽå°ˆé–€æ ¼å¼åŒ–的註釋進行記錄;這些註釋å¯ä»¥é€šéŽ
+“kernel-docâ€è…³æœ¬ä»¥å¤šç¨®æ–¹å¼æå–和格å¼åŒ–。如果您在具有kerneldoc註釋的å­ç³»çµ±ä¸­
工作,則應該維護它們,並根據需è¦çˆ²å¤–部å¯ç”¨çš„功能添加它們。å³ä½¿åœ¨æ²’有如此記錄
-的領域中,爲將來添加kerneldoc注釋也沒有壞處;實際上,這å°æ–¼å‰›é–‹å§‹é–‹ç™¼å…§æ ¸çš„人
-來說是一個有用的活動。這些注釋的格å¼ä»¥åŠå¦‚何創建kerneldoc模æ¿çš„一些信æ¯å¯ä»¥åœ¨
+的領域中,爲將來添加kerneldoc註釋也沒有壞處;實際上,這å°æ–¼å‰›é–‹å§‹é–‹ç™¼å…§æ ¸çš„人
+來說是一個有用的活動。這些註釋的格å¼ä»¥åŠå¦‚何創建kerneldoc模æ¿çš„一些信æ¯å¯ä»¥åœ¨
:ref:`Documentation/doc-guide/ <doc_guide>` 上找到。
-任何閱讀大é‡ç¾æœ‰å…§æ ¸ä»£ç¢¼çš„人都會注æ„到,注釋的缺失往往是最值得注æ„的。åŒæ™‚,
-å°æ–°ä»£ç¢¼çš„è¦æ±‚比éŽåŽ»æ›´é«˜ï¼›åˆä½µæœªæ³¨é‡‹çš„代碼將更加困難。這就是說,人們並ä¸æœŸæœ›
-詳細注釋的代碼。代碼本身應該是自解釋的,注釋闡釋了更微妙的方é¢ã€‚
+任何閱讀大é‡ç¾æœ‰å…§æ ¸ä»£ç¢¼çš„人都會注æ„到,註釋的缺失往往是最值得注æ„的。åŒæ™‚,
+å°æ–°ä»£ç¢¼çš„è¦æ±‚比éŽåŽ»æ›´é«˜ï¼›åˆä½µæœªè¨»é‡‹çš„代碼將更加困難。這就是說,人們並ä¸æœŸæœ›
+詳細註釋的代碼。代碼本身應該是自解釋的,註釋闡釋了更微妙的方é¢ã€‚
-æŸäº›äº‹æƒ…應該總是被注釋。使用內存å±éšœæ™‚,應附上一行文字,解釋爲什麼需è¦è¨­ç½®å…§å­˜
+æŸäº›äº‹æƒ…應該總是被註釋。使用內存å±éšœæ™‚,應附上一行文字,解釋爲什麼需è¦è¨­ç½®å…§å­˜
å±éšœã€‚數據çµæ§‹çš„鎖è¦å‰‡é€šå¸¸éœ€è¦åœ¨æŸå€‹åœ°æ–¹è§£é‡‹ã€‚一般來說,主è¦æ•¸æ“šçµæ§‹éœ€è¦å…¨é¢
的文檔。應該指出代碼中分立的ä½ä¹‹é–“ä¸æ˜Žé¡¯çš„ä¾è³´æ€§ã€‚任何å¯èƒ½èª˜ä½¿ä»£ç¢¼ç®¡ç†äººé€²è¡Œ
-錯誤的「清ç†ã€çš„事情都需è¦ä¸€å€‹æ³¨é‡‹ä¾†èªªæ˜Žçˆ²ä»€éº¼è¦é€™æ¨£åšã€‚等等。
+錯誤的“清ç†â€çš„事情都需è¦ä¸€å€‹è¨»é‡‹ä¾†èªªæ˜Žçˆ²ä»€éº¼è¦é€™æ¨£åšã€‚等等。
內部API更改
-----------
-內核æ供給用戶空間的二進ä½æŽ¥å£ä¸èƒ½è¢«ç ´å£žï¼Œé™¤éžé€¼ä¸å¾—已。而內核的內部編程接å£
+內核æ供給用戶空間的二進制接å£ä¸èƒ½è¢«ç ´å£žï¼Œé™¤éžé€¼ä¸å¾—已。而內核的內部編程接å£
是高度æµå‹•çš„,當需è¦æ™‚å¯ä»¥æ›´æ”¹ã€‚如果你發ç¾è‡ªå·±ä¸å¾—ä¸è™•ç†ä¸€å€‹å…§æ ¸API,或者僅
僅因爲它ä¸æ»¿è¶³ä½ çš„需求導致無法使用特定的功能,這å¯èƒ½æ˜¯API需è¦æ”¹è®Šçš„一個標誌。
作爲內核開發人員,您有權進行此類更改。
@@ -287,7 +287,7 @@ Documentation/ABI/README,了解如何此文檔格å¼ä»¥åŠéœ€è¦æ供哪些ä¿
å¦ä¸€å€‹è¦é»žæ˜¯ï¼Œæ›´æ”¹å…§éƒ¨API的開發人員通常è¦è² è²¬ä¿®å¾©å…§æ ¸æ¨¹ä¸­è¢«æ›´æ”¹ç ´å£žçš„任何代碼。
å°æ–¼ä¸€å€‹å»£æ³›ä½¿ç”¨çš„函數,這個責任å¯ä»¥å°Žè‡´æˆç™¾ä¸Šåƒçš„變化,其中許多變化å¯èƒ½èˆ‡å…¶ä»–
-開發人員正在åšçš„工作相è¡çªã€‚ä¸ç”¨èªªï¼Œé€™å¯èƒ½æ˜¯ä¸€é …大工程,所以最好確ä¿ç†ç”±æ˜¯
+開發人員正在åšçš„工作相沖çªã€‚ä¸ç”¨èªªï¼Œé€™å¯èƒ½æ˜¯ä¸€é …大工程,所以最好確ä¿ç†ç”±æ˜¯
å¯é çš„。請注æ„,coccinelle工具å¯ä»¥å¹«åŠ©é€²è¡Œå»£æ³›çš„API更改。
在進行ä¸å…¼å®¹çš„API更改時,應儘å¯èƒ½ç¢ºä¿ç·¨è­¯å™¨æ•ç²æœªæ›´æ–°çš„代碼。這將幫助您確ä¿æ‰¾
diff --git a/Documentation/translations/zh_TW/process/5.Posting.rst b/Documentation/translations/zh_TW/process/5.Posting.rst
index 27015622ad63..d398dda427aa 100644
--- a/Documentation/translations/zh_TW/process/5.Posting.rst
+++ b/Documentation/translations/zh_TW/process/5.Posting.rst
@@ -15,27 +15,27 @@
.. _tw_development_posting:
-發布補ä¸
+發佈補ä¸
========
您的工作é²æ—©æœƒæº–備好æ交給社å€é€²è¡Œå¯©æŸ¥ï¼Œä¸¦æœ€çµ‚包å«åˆ°ä¸»ç·šå…§æ ¸ä¸­ã€‚毫ä¸ç¨€å¥‡ï¼Œ
-內核開發社å€å·²ç¶“發展出一套用於發布補ä¸çš„約定和éŽç¨‹ï¼›éµå¾ªé€™äº›ç´„定和éŽç¨‹å°‡ä½¿
+內核開發社å€å·²ç¶“發展出一套用於發佈補ä¸çš„約定和éŽç¨‹ï¼›éµå¾ªé€™äº›ç´„定和éŽç¨‹å°‡ä½¿
åƒèˆ‡å…¶ä¸­çš„æ¯å€‹äººçš„生活更加輕鬆。本文檔試圖æ述這些約定的部分細節;更多信æ¯
也å¯åœ¨ä»¥ä¸‹æ–‡æª”中找到
-:ref:`Documentation/translations/zh_TW/process/submitting-patches.rst <tw_submittingpatches>`
-和 :ref:`Documentation/translations/zh_TW/process/submit-checklist.rst <tw_submitchecklist>`。
+:ref:`Documentation/translations/zh_CN/process/submitting-patches.rst <tw_submittingpatches>`
+和 :ref:`Documentation/translations/zh_CN/process/submit-checklist.rst <tw_submitchecklist>`。
-何時郵寄
+何時寄é€
--------
-在補ä¸å®Œå…¨ã€Œæº–備好ã€ä¹‹å‰ï¼Œé¿å…發布補ä¸æ˜¯ä¸€ç¨®æŒçºŒçš„誘惑。å°æ–¼ç°¡å–®çš„補ä¸ï¼Œé€™
+在補ä¸å®Œå…¨â€œæº–備好â€ä¹‹å‰ï¼Œé¿å…發佈補ä¸æ˜¯ä¸€ç¨®æŒçºŒçš„誘惑。å°æ–¼ç°¡å–®çš„補ä¸ï¼Œé€™
ä¸æ˜¯å•é¡Œã€‚但是如果正在完æˆçš„工作很複雜,那麼在工作完æˆä¹‹å‰å¾žç¤¾å€ç²å¾—å饋就
-å¯ä»¥ç²å¾—很多好處。因此,您應該考慮發布正在進行的工作,甚至維護一個å¯ç”¨çš„Git
+å¯ä»¥ç²å¾—很多好處。因此,您應該考慮發佈正在進行的工作,甚至維護一個å¯ç”¨çš„Git
樹,以便感興趣的開發人員å¯ä»¥éš¨æ™‚趕上您的工作。
-當發布中有尚未準備好被包å«çš„代碼,最好在發布中說明。還應æåŠä»»ä½•æœ‰å¾…完æˆçš„
+當發佈中有尚未準備好被包å«çš„代碼,最好在發佈中說明。還應æåŠä»»ä½•æœ‰å¾…完æˆçš„
主è¦å·¥ä½œå’Œä»»ä½•å·²çŸ¥å•é¡Œã€‚很少有人會願æ„看那些被èªçˆ²æ˜¯åŠç”Ÿä¸ç†Ÿçš„補ä¸ï¼Œä½†æ˜¯
-那些願æ„的人會帶著他們的點å­ä¾†ä¸€èµ·å¹«åŠ©ä½ æŠŠå·¥ä½œæŽ¨å‘正確的方å‘。
+那些願æ„的人會帶ç€ä»–們的點å­ä¾†ä¸€èµ·å¹«åŠ©ä½ æŠŠå·¥ä½œæŽ¨å‘正確的方å‘。
創建補ä¸ä¹‹å‰
------------
@@ -50,20 +50,20 @@
- 您的更改是å¦å…·æœ‰æ€§èƒ½å½±éŸ¿ï¼Ÿå¦‚果是這樣,您應該é‹è¡ŒåŸºæº–測試來顯示您的變更的
影響(或好處);çµæžœçš„摘è¦æ‡‰è©²åŒ…å«åœ¨è£œä¸ä¸­ã€‚
- - 確ä¿æ‚¨æœ‰æ¬Šç™¼å¸ƒä»£ç¢¼ã€‚如果這項工作是爲僱主完æˆçš„,僱主å°é€™é …工作具有所有權,
- 並且必須åŒæ„根據GPLå°å…¶é€²è¡Œç™¼å¸ƒã€‚
+ - 確ä¿æ‚¨æœ‰æ¬Šç™¼ä½ˆä»£ç¢¼ã€‚如果這項工作是爲僱主完æˆçš„,僱主å°é€™é …工作具有所有權,
+ 並且必須åŒæ„根據GPLå°å…¶é€²è¡Œç™¼ä½ˆã€‚
-一般來說,在發布代碼之å‰é€²è¡Œä¸€äº›é¡å¤–çš„æ€è€ƒï¼Œå¹¾ä¹Žç¸½æ˜¯èƒ½åœ¨çŸ­æ™‚間內得到回報。
+一般來說,在發佈代碼之å‰é€²è¡Œä¸€äº›é¡å¤–çš„æ€è€ƒï¼Œå¹¾ä¹Žç¸½æ˜¯èƒ½åœ¨çŸ­æ™‚間內得到回報。
補ä¸æº–å‚™
--------
-準備補ä¸ç™¼å¸ƒçš„工作é‡å¯èƒ½å¾ˆé©šäººï¼Œä½†åœ¨æ­¤å˜—試節çœæ™‚間通常是ä¸æ˜Žæ™ºçš„,å³ä½¿åœ¨çŸ­æœŸ
+準備補ä¸ç™¼ä½ˆçš„工作é‡å¯èƒ½å¾ˆé©šäººï¼Œä½†åœ¨æ­¤å˜—試節çœæ™‚間通常是ä¸æ˜Žæ™ºçš„,å³ä½¿åœ¨çŸ­æœŸ
內亦然。
å¿…é ˆé‡å°å…§æ ¸çš„特定版本準備補ä¸ã€‚一般來說,補ä¸æ‡‰è©²åŸºæ–¼Linusçš„Git樹中的當å‰
-主線。當以主線爲基礎時,請從一個衆所周知的發布點開始——如穩定版本或 -rc
-版本發布點——而ä¸æ˜¯åœ¨ä¸€å€‹ä»»æ„的主線分支點。
+主線。當以主線爲基礎時,請從一個衆所周知的發佈點開始——如穩定版本或 -rc
+版本發佈點——而ä¸æ˜¯åœ¨ä¸€å€‹ä»»æ„的主線分支點。
也å¯èƒ½éœ€è¦é‡å°-mmã€linux-next或å­ç³»çµ±æ¨¹ç”Ÿæˆç‰ˆæœ¬ï¼Œä»¥ä¾¿æ–¼æ›´å»£æ³›çš„測試和審查。
根據補ä¸çš„å€åŸŸä»¥åŠå…¶ä»–地方的情æ³ï¼Œé‡å°å…¶ä»–樹建立的補ä¸å¯èƒ½éœ€è¦å¤§é‡çš„工作來
@@ -73,12 +73,12 @@
分割補ä¸æ˜¯ä¸€é–€è—術;一些開發人員花了很長時間來弄清楚如何按照社å€æœŸæœ›çš„æ–¹å¼ä¾†
分割。ä¸éŽï¼Œé€™äº›ç¶“驗法則也許有幫助:
- - 您發布的補ä¸ç³»åˆ—幾乎肯定ä¸æœƒæ˜¯é–‹ç™¼éŽç¨‹ä¸­ç‰ˆæœ¬æŽ§åˆ¶ç³»çµ±ä¸­çš„一系列更改。相å,
+ - 您發佈的補ä¸ç³»åˆ—幾乎肯定ä¸æœƒæ˜¯é–‹ç™¼éŽç¨‹ä¸­ç‰ˆæœ¬æŽ§åˆ¶ç³»çµ±ä¸­çš„一系列更改。相å,
需è¦å°æ‚¨æ‰€åšæ›´æ”¹çš„最終形å¼åŠ ä»¥è€ƒæ…®ï¼Œç„¶å¾Œä»¥æœ‰æ„義的方å¼é€²è¡Œæ‹†åˆ†ã€‚開發人員å°
離散的ã€è‡ªåŒ…å«çš„更改感興趣,而ä¸æ˜¯æ‚¨å‰µé€ é€™äº›æ›´æ”¹çš„原始路徑。
- - æ¯å€‹é‚輯上ç¨ç«‹çš„變更都應該格å¼åŒ–爲單ç¨çš„補ä¸ã€‚這些更改å¯ä»¥æ˜¯å°çš„(如「å‘
- æ­¤çµæ§‹é«”添加欄ä½ã€ï¼‰æˆ–大的(如添加一個é‡è¦çš„新驅動程åºï¼‰ï¼Œä½†å®ƒå€‘在概念上
+ - æ¯å€‹é‚輯上ç¨ç«‹çš„變更都應該格å¼åŒ–爲單ç¨çš„補ä¸ã€‚這些更改å¯ä»¥æ˜¯å°çš„(如“å‘
+ æ­¤çµæ§‹é«”添加字段â€ï¼‰æˆ–大的(如添加一個é‡è¦çš„新驅動程åºï¼‰ï¼Œä½†å®ƒå€‘在概念上
應該是å°çš„,並且å¯ä»¥åœ¨ä¸€è¡Œå…§ç°¡è¿°ã€‚æ¯å€‹è£œä¸éƒ½æ‡‰è©²åšä¸€å€‹ç‰¹å®šçš„ã€å¯ä»¥å–®ç¨
檢查並驗證它所åšçš„事情的更改。
@@ -88,34 +88,34 @@
- æ¯å€‹è£œä¸éƒ½æ‡‰è©²èƒ½å‰µå»ºä¸€å€‹å¯ä»¥æ­£ç¢ºåœ°æ§‹å»ºå’Œé‹è¡Œçš„內核;如果補ä¸ç³»åˆ—在中間被
斷開,那麼çµæžœä»æ‡‰æ˜¯ä¸€å€‹æ­£å¸¸å·¥ä½œçš„內核。部分應用一系列補ä¸æ˜¯ä½¿ç”¨
- 「git bisctã€å·¥å…·æŸ¥æ‰¾å›žæ­¸çš„一個常見場景;如果çµæžœæ˜¯ä¸€å€‹æ壞的內核,那麼將使
+ “git bisctâ€å·¥å…·æŸ¥æ‰¾å›žæ­¸çš„一個常見場景;如果çµæžœæ˜¯ä¸€å€‹æ壞的內核,那麼將使
那些從事追蹤å•é¡Œçš„高尚工作的開發人員和用戶的生活更加艱難。
- ä¸è¦éŽåˆ†åˆ†å‰²ã€‚一ä½é–‹ç™¼äººå“¡æ›¾ç¶“將一組é‡å°å–®å€‹æ–‡ä»¶çš„編輯分æˆ500個單ç¨çš„補ä¸
- 發布,這並沒有使他æˆçˆ²å…§æ ¸éƒµä»¶åˆ—表中最å—歡迎的人。一個補ä¸å¯ä»¥ç›¸ç•¶å¤§ï¼Œ
+ 發佈,這並沒有使他æˆçˆ²å…§æ ¸éƒµä»¶åˆ—表中最å—歡迎的人。一個補ä¸å¯ä»¥ç›¸ç•¶å¤§ï¼Œ
åªè¦å®ƒä»ç„¶åŒ…å«ä¸€å€‹å–®ä¸€çš„ *é‚輯* 變更。
- 用一系列補ä¸æ·»åŠ ä¸€å€‹å…¨æ–°çš„基礎設施,但是該設施在系列中的最後一個補ä¸å•“用
整個變更之å‰ä¸èƒ½ä½¿ç”¨ï¼Œé€™çœ‹èµ·ä¾†å¾ˆèª˜äººã€‚如果å¯èƒ½çš„話,應該é¿å…這種誘惑;
- 如果這個系列增加了回歸,那麼二分法將指出最後一個補ä¸æ˜¯å°Žè‡´å•é¡Œçš„補ä¸ï¼Œ
+ 如果這個系列增加了迴歸,那麼二分法將指出最後一個補ä¸æ˜¯å°Žè‡´å•é¡Œçš„補ä¸ï¼Œ
å³ä½¿çœŸæ­£çš„bug在其他地方。åªè¦æœ‰å¯èƒ½ï¼Œæ·»åŠ æ–°ä»£ç¢¼çš„補ä¸ç¨‹åºæ‡‰è©²ç«‹å³æ¿€æ´»è©²
代碼。
-創建完美補ä¸ç³»åˆ—的工作å¯èƒ½æ˜¯ä¸€å€‹ä»¤äººæ²®å–ªçš„éŽç¨‹ï¼Œåœ¨å®Œæˆã€ŒçœŸæ­£çš„工作ã€ä¹‹å¾Œéœ€è¦
+創建完美補ä¸ç³»åˆ—的工作å¯èƒ½æ˜¯ä¸€å€‹ä»¤äººæ²®å–ªçš„éŽç¨‹ï¼Œåœ¨å®Œæˆâ€œçœŸæ­£çš„工作â€ä¹‹å¾Œéœ€è¦
花費大é‡çš„時間和æ€è€ƒã€‚但是如果åšå¾—好,花費的時間就是值得的。
補ä¸æ ¼å¼å’Œæ›´æ”¹æ—¥èªŒ
------------------
-所以ç¾åœ¨ä½ æœ‰äº†ä¸€ç³»åˆ—完美的補ä¸å¯ä»¥ç™¼å¸ƒï¼Œä½†æ˜¯é€™é …工作還沒有完æˆã€‚æ¯å€‹è£œä¸éƒ½
+所以ç¾åœ¨ä½ æœ‰äº†ä¸€ç³»åˆ—完美的補ä¸å¯ä»¥ç™¼ä½ˆï¼Œä½†æ˜¯é€™é …工作還沒有完æˆã€‚æ¯å€‹è£œä¸éƒ½
需è¦è¢«æ ¼å¼åŒ–æˆä¸€æ¢æ¶ˆæ¯ï¼Œä»¥å¿«é€Ÿè€Œæ¸…晰地將其目的傳é”到世界其他地方。爲此,
æ¯å€‹è£œä¸å°‡ç”±ä»¥ä¸‹éƒ¨åˆ†çµ„æˆï¼š
- - å¯é¸çš„「Fromã€è¡Œï¼Œè¡¨æ˜Žè£œä¸ä½œè€…。åªæœ‰ç•¶ä½ é€šéŽé›»å­éƒµä»¶ç™¼é€åˆ¥äººçš„補ä¸æ™‚,這一行
- æ‰æ˜¯å¿…須的,但是爲防止疑å•åŠ ä¸Šå®ƒä¹Ÿä¸æœƒæœ‰ä»€éº¼å£žè™•ã€‚
+ - å¯é¸çš„“Fromâ€è¡Œï¼Œè¡¨æ˜Žè£œä¸ä½œè€…。åªæœ‰ç•¶ä½ é€šéŽé›»å­éƒµä»¶ç™¼é€åˆ¥äººçš„補ä¸æ™‚,這一行
+ 纔是必須的,但是爲防止疑å•åŠ ä¸Šå®ƒä¹Ÿä¸æœƒæœ‰ä»€éº¼å£žè™•ã€‚
- 一行æ述,說明補ä¸çš„作用。å°æ–¼åœ¨æ²’有其他上下文的情æ³ä¸‹çœ‹åˆ°è©²æ¶ˆæ¯çš„讀者來說,
- 該消æ¯æ‡‰è¶³ä»¥ç¢ºå®šä¿®è£œç¨‹åºçš„範åœï¼›æ­¤è¡Œå°‡é¡¯ç¤ºåœ¨ã€Œshort form(簡短格å¼ï¼‰ã€è®Šæ›´
+ 該消æ¯æ‡‰è¶³ä»¥ç¢ºå®šä¿®è£œç¨‹åºçš„範åœï¼›æ­¤è¡Œå°‡é¡¯ç¤ºåœ¨â€œshort form(簡短格å¼ï¼‰â€è®Šæ›´
日誌中。此消æ¯é€šå¸¸éœ€è¦å…ˆåŠ ä¸Šå­ç³»çµ±å稱å‰ç¶´ï¼Œç„¶å¾Œæ˜¯è£œä¸çš„目的。例如:
::
@@ -144,17 +144,17 @@
一般來說,你越把自己放在æ¯å€‹é–±è®€ä½ è®Šæ›´æ—¥èªŒçš„人的ä½ç½®ä¸Šï¼Œè®Šæ›´æ—¥èªŒï¼ˆå’Œå…§æ ¸
作爲一個整體)就越好。
-ä¸æ¶ˆèªªï¼Œè®Šæ›´æ—¥èªŒæ˜¯å°‡è®Šæ›´æ交到版本控制系統時使用的文本。接下來將是:
+ä¸éœ€è¦èªªï¼Œè®Šæ›´æ—¥èªŒæ˜¯å°‡è®Šæ›´æ交到版本控制系統時使用的文本。接下來將是:
- - 補ä¸æœ¬èº«ï¼ŒæŽ¡ç”¨çµ±ä¸€çš„(「-uã€ï¼‰è£œä¸æ ¼å¼ã€‚使用「-pã€é¸é …來diff將使函數å與
+ - 補ä¸æœ¬èº«ï¼ŒæŽ¡ç”¨çµ±ä¸€çš„(“-uâ€ï¼‰è£œä¸æ ¼å¼ã€‚使用“-pâ€é¸é …來diff將使函數å與
更改相關è¯ï¼Œå¾žè€Œä½¿çµæžœè£œä¸æ›´å®¹æ˜“被其他人讀å–。
您應該é¿å…在補ä¸ä¸­åŒ…括與更改ä¸ç›¸é—œæ–‡ä»¶ï¼ˆä¾‹å¦‚,構建éŽç¨‹ç”Ÿæˆçš„文件或編輯器
-備份文件)。文檔目錄中的「dontdiffã€æ–‡ä»¶åœ¨é€™æ–¹é¢æœ‰å¹«åŠ©ï¼›ä½¿ç”¨ã€Œ-Xã€é¸é …å°‡
+備份文件)。文檔目錄中的“dontdiffâ€æ–‡ä»¶åœ¨é€™æ–¹é¢æœ‰å¹«åŠ©ï¼›ä½¿ç”¨â€œ-Xâ€é¸é …å°‡
其傳éžçµ¦diff。
上é¢æ到的標籤(tag)用於æè¿°å„種開發人員如何與這個補ä¸çš„開發相關è¯ã€‚
-:ref:`Documentation/translations/zh_TW/process/submitting-patches.rst <tw_submittingpatches>`
+:ref:`Documentation/translations/zh_CN/process/submitting-patches.rst <tw_submittingpatches>`
文檔中å°å®ƒå€‘進行了詳細æ述;下é¢æ˜¯ä¸€å€‹ç°¡çŸ­çš„總çµã€‚æ¯ä¸€è¡Œçš„æ ¼å¼å¦‚下:
::
@@ -165,14 +165,14 @@
- Signed-off-by: 這是一個開發人員的證明,證明他或她有權æ交補ä¸ä»¥åŒ…å«åˆ°å…§æ ¸
中。這表明åŒæ„開發者來æºèªè­‰å”議,其全文見
- :ref:`Documentation/translations/zh_TW/process/submitting-patches.rst <tw_submittingpatches>`
+ :ref:`Documentation/translations/zh_CN/process/submitting-patches.rst <tw_submittingpatches>`
如果沒有åˆé©çš„簽字,則ä¸èƒ½åˆä½µåˆ°ä¸»ç·šä¸­ã€‚
- Co-developed-by: è²æ˜Žè£œä¸æ˜¯ç”±å¤šå€‹é–‹ç™¼äººå“¡å…±åŒå‰µå»ºçš„;當幾個人在一個補ä¸ä¸Š
工作時,它用於給出共åŒä½œè€…(除了 From: 所給出的作者之外)。由於
Co-developed-by: 表示作者身份,所以æ¯å€‹å…±åŒé–‹ç™¼äººï¼Œå¿…須緊跟在相關åˆä½œä½œè€…
的Signed-off-by之後。具體內容和示例見以下文件
- :ref:`Documentation/translations/zh_TW/process/submitting-patches.rst <tw_submittingpatches>`
+ :ref:`Documentation/translations/zh_CN/process/submitting-patches.rst <tw_submittingpatches>`
- Acked-by: 表示å¦ä¸€å€‹é–‹ç™¼äººå“¡ï¼ˆé€šå¸¸æ˜¯ç›¸é—œä»£ç¢¼çš„維護人員)åŒæ„補ä¸é©åˆåŒ…å«
在內核中。
@@ -180,7 +180,7 @@
- Tested-by: è²æ˜ŽæŸäººå·²ç¶“測試了補ä¸ä¸¦ç¢ºèªå®ƒå¯ä»¥å·¥ä½œã€‚
- Reviewed-by: 表示æŸé–‹ç™¼äººå“¡å·²ç¶“審查了補ä¸çš„正確性;有關詳細信æ¯ï¼Œè«‹åƒé–±
- :ref:`Documentation/translations/zh_TW/process/submitting-patches.rst <tw_submittingpatches>`
+ :ref:`Documentation/translations/zh_CN/process/submitting-patches.rst <tw_submittingpatches>`
- Reported-by: 指定報告此補ä¸ä¿®å¾©çš„å•é¡Œçš„用戶;此標記用於表示感è¬ã€‚
@@ -188,16 +188,16 @@
在補ä¸ä¸­æ·»åŠ æ¨™ç±¤æ™‚è¦å°å¿ƒï¼šåªæœ‰Cc:æ‰é©åˆåœ¨æ²’有指定人員明確許å¯çš„情æ³ä¸‹æ·»åŠ ã€‚
-發é€è£œä¸
+寄é€è£œä¸
--------
-在寄出補ä¸ä¹‹å‰ï¼Œæ‚¨é‚„需è¦æ³¨æ„以下幾點:
+在寄é€è£œä¸ä¹‹å‰ï¼Œæ‚¨é‚„需è¦æ³¨æ„以下幾點:
- 您確定您的郵件發é€ç¨‹åºä¸æœƒæ壞補ä¸å—Žï¼Ÿè¢«éƒµä»¶å®¢æˆ¶ç«¯æ›´æ”¹ç©ºç™½æˆ–修飾了行的補ä¸
無法被å¦ä¸€ç«¯æŽ¥å—,並且通常ä¸æœƒé€²è¡Œä»»ä½•è©³ç´°æª¢æŸ¥ã€‚如果有任何疑å•ï¼Œå…ˆæŠŠè£œä¸å¯„
給你自己,讓你自己確定它是完好無æ的。
- :ref:`Documentation/translations/zh_TW/process/email-clients.rst <tw_email_clients>`
+ :ref:`Documentation/translations/zh_CN/process/email-clients.rst <tw_email_clients>`
æ供了一些有用的æ示,å¯ä»¥è®“特定的郵件客戶端正常發é€è£œä¸ã€‚
- 你確定你的補ä¸æ²’有è’å”的錯誤嗎?您應該始終通éŽscripts/checkpatch.pl檢查
@@ -209,12 +209,12 @@
引用補ä¸çš„部分。相å,åªéœ€å°‡è£œä¸ç›´æŽ¥æ”¾åˆ°æ‚¨çš„消æ¯ä¸­ã€‚
寄出補ä¸æ™‚,é‡è¦çš„是將副本發é€çµ¦ä»»ä½•å¯èƒ½æ„Ÿèˆˆè¶£çš„人。與其他一些項目ä¸åŒï¼Œå…§æ ¸
-鼓勵人們甚至錯誤地發é€éŽå¤šçš„副本;ä¸è¦å‡å®šç›¸é—œäººå“¡æœƒçœ‹åˆ°æ‚¨åœ¨éƒµä»¶åˆ—表中的發布。
+鼓勵人們甚至錯誤地發é€éŽå¤šçš„副本;ä¸è¦å‡å®šç›¸é—œäººå“¡æœƒçœ‹åˆ°æ‚¨åœ¨éƒµä»¶åˆ—表中的發佈。
尤其是,副本應發é€è‡³ï¼š
- å—影響å­ç³»çµ±çš„維護人員。如å‰æ‰€è¿°ï¼Œç¶­è­·äººå“¡æ–‡ä»¶æ˜¯æŸ¥æ‰¾é€™äº›äººå“¡çš„首é¸åœ°æ–¹ã€‚
- - 其他在åŒä¸€é ˜åŸŸå·¥ä½œçš„開發人員,尤其是那些ç¾åœ¨å¯èƒ½åœ¨é‚£è£¡å·¥ä½œçš„開發人員。使用
+ - 其他在åŒä¸€é ˜åŸŸå·¥ä½œçš„開發人員,尤其是那些ç¾åœ¨å¯èƒ½åœ¨é‚£è£å·¥ä½œçš„開發人員。使用
git查看還有誰修改了您正在處ç†çš„文件,這很有幫助。
- 如果您å°æŸéŒ¯èª¤å ±å‘Šæˆ–功能請求åšå‡ºéŸ¿æ‡‰ï¼Œä¹Ÿå¯ä»¥æŠ„é€åŽŸå§‹ç™¼é€äººã€‚
@@ -223,7 +223,7 @@
- 如果您正在修復一個缺陷,請考慮該修復是å¦æ‡‰é€²å…¥ä¸‹ä¸€å€‹ç©©å®šæ›´æ–°ã€‚如果是這樣,
補ä¸å‰¯æœ¬ä¹Ÿæ‡‰ç™¼åˆ°stable@vger.kernel.org 。å¦å¤–,在補ä¸æœ¬èº«çš„標籤中添加一個
- 「Cc: stable@vger.kernel.orgã€ï¼›é€™å°‡ä½¿ç©©å®šç‰ˆåœ˜éšŠåœ¨ä¿®å¾©é€²å…¥ä¸»ç·šæ™‚收到通知。
+ “Cc: stable@vger.kernel.orgâ€ï¼›é€™å°‡ä½¿ç©©å®šç‰ˆåœ˜éšŠåœ¨ä¿®å¾©é€²å…¥ä¸»ç·šæ™‚收到通知。
當爲一個補ä¸é¸æ“‡æŽ¥æ”¶è€…時,最好清楚你èªçˆ²èª°æœ€çµ‚會接å—這個補ä¸ä¸¦å°‡å…¶åˆä½µã€‚雖然
å¯ä»¥å°‡è£œä¸ç›´æŽ¥ç™¼çµ¦Linus Torvalds並讓他åˆä½µï¼Œä½†é€šå¸¸æƒ…æ³ä¸‹ä¸æœƒé€™æ¨£åšã€‚Linus很
@@ -236,7 +236,7 @@
[PATCH nn/mm] subsys: one-line description of the patch
-其中「nnã€æ˜¯è£œä¸çš„åºè™Ÿï¼Œã€Œmmã€æ˜¯ç³»åˆ—中補ä¸çš„總數,「subsysã€æ˜¯å—影響å­ç³»çµ±çš„
+其中“nnâ€æ˜¯è£œä¸çš„åºè™Ÿï¼Œâ€œmmâ€æ˜¯ç³»åˆ—中補ä¸çš„總數,“subsysâ€æ˜¯å—影響å­ç³»çµ±çš„
å稱。當然,一個單ç¨çš„補ä¸å¯ä»¥çœç•¥nn/mm。
如果您有一系列é‡è¦çš„補ä¸ï¼Œé‚£éº¼é€šå¸¸ç™¼é€ä¸€å€‹ç°¡ä»‹ä½œçˆ²ç¬¬ã€‡éƒ¨åˆ†ã€‚ä¸éŽï¼Œé€™å€‹ç´„定
diff --git a/Documentation/translations/zh_TW/process/6.Followthrough.rst b/Documentation/translations/zh_TW/process/6.Followthrough.rst
index 5073b6e77c1c..bcc885ae1b8e 100644
--- a/Documentation/translations/zh_TW/process/6.Followthrough.rst
+++ b/Documentation/translations/zh_TW/process/6.Followthrough.rst
@@ -18,13 +18,13 @@
跟進
====
-此時,您已經éµå¾ªäº†åˆ°ç›®å‰çˆ²æ­¢çµ¦å‡ºçš„指導方é‡ï¼Œä¸¦ä¸”,隨著您自己的工程技能的增加,
+此時,您已經éµå¾ªäº†åˆ°ç›®å‰çˆ²æ­¢çµ¦å‡ºçš„指導方é‡ï¼Œä¸¦ä¸”,隨ç€æ‚¨è‡ªå·±çš„工程技能的增加,
已經發布了一系列完美的補ä¸ã€‚å³ä½¿æ˜¯ç¶“é©—è±å¯Œçš„內核開發人員也能犯的最大錯誤之一
-是,èªçˆ²ä»–們的工作ç¾åœ¨å·²ç¶“完æˆäº†ã€‚事實上,發布補ä¸æ„味著進入æµç¨‹çš„下一個階段,
+是,èªçˆ²ä»–們的工作ç¾åœ¨å·²ç¶“完æˆäº†ã€‚事實上,發佈補ä¸æ„味ç€é€²å…¥æµç¨‹çš„下一個階段,
å¯èƒ½é‚„需è¦åšå¾ˆå¤šå·¥ä½œã€‚
-一個補ä¸åœ¨é¦–次發布時就éžå¸¸å‡ºè‰²ã€æ²’有改進的餘地,這是很罕見的。內核開發æµç¨‹å·²
-èªè­˜åˆ°é€™ä¸€äº‹å¯¦ï¼Œå› æ­¤å®ƒéžå¸¸æ³¨é‡å°å·²ç™¼å¸ƒä»£ç¢¼çš„改進。作爲代碼的作者,您應該與
+一個補ä¸åœ¨é¦–次發佈時就éžå¸¸å‡ºè‰²ã€æ²’有改進的餘地,這是很罕見的。內核開發æµç¨‹å·²
+èªè­˜åˆ°é€™ä¸€äº‹å¯¦ï¼Œå› æ­¤å®ƒéžå¸¸æ³¨é‡å°å·²ç™¼ä½ˆä»£ç¢¼çš„改進。作爲代碼的作者,您應該與
內核社å€åˆä½œï¼Œä»¥ç¢ºä¿æ‚¨çš„代碼符åˆå…§æ ¸çš„質é‡æ¨™æº–。如果ä¸åƒèˆ‡é€™å€‹éŽç¨‹ï¼Œå¾ˆå¯èƒ½æœƒ
無法將補ä¸åˆä½µåˆ°ä¸»ç·šä¸­ã€‚
@@ -41,7 +41,7 @@
調整到大é‡çš„é‡å¯«â€”—都來自於å°Linuxçš„ç†è§£ï¼Œå³å¾žç¾åœ¨èµ·å年後,Linuxä»å°‡
在開發中。
- - 代碼審查是一項艱苦的工作,這是一項相å°åƒåŠ›ä¸è¨Žå¥½çš„工作;人們記得誰編寫了
+ - 代碼審查是一項艱苦的工作,這是一項相å°å–«åŠ›ä¸è¨Žå¥½çš„工作;人們記得誰編寫了
內核代碼,但å°æ–¼é‚£äº›å¯©æŸ¥å®ƒçš„人來說,幾乎沒有什麼長久的åè²ã€‚因此,審閱
人員å¯èƒ½æœƒè®Šå¾—æš´èºï¼Œå°¤å…¶æ˜¯ç•¶ä»–們看到åŒæ¨£çš„錯誤被一éåˆä¸€é地犯下時。如果
你得到了一個看起來憤怒ã€ä¾®è¾±æˆ–完全冒犯你的評論,請抑制以åŒæ¨£æ–¹å¼å›žæ‡‰çš„è¡å‹•ã€‚
@@ -54,7 +54,7 @@
所有這些歸根çµåº•å°±æ˜¯ï¼Œç•¶å¯©é–±è€…å‘您發é€è©•è«–時,您需è¦æ³¨æ„他們正在進行的技術
評論。ä¸è¦è®“他們的表é”æ–¹å¼æˆ–你自己的驕傲阻止此事。當你在一個補ä¸ä¸Šå¾—到評論
-時,花點時間去ç†è§£è©•è«–人想說什麼。如果å¯èƒ½çš„話,請修覆審閱者è¦æ±‚您修復的內
+時,花點時間去ç†è§£è©•è«–人想說什麼。如果å¯èƒ½çš„話,請修復審閱者è¦æ±‚您修復的內
容。然後回覆審閱者:è¬è¬ä»–們,並æ述你將如何回答他們的å•é¡Œã€‚
請注æ„,您ä¸å¿…åŒæ„審閱者建議的æ¯å€‹æ›´æ”¹ã€‚如果您èªçˆ²å¯©é–±è€…誤解了您的代碼,請
@@ -65,19 +65,19 @@
是錯誤的,或者你甚至沒有解決正確的å•é¡Œã€‚
Andrew Morton建議,æ¯ä¸€å€‹ä¸æœƒå°Žè‡´ä»£ç¢¼æ›´æ”¹çš„審閱評論都應該產生一個é¡å¤–的代碼
-注釋;這å¯ä»¥å¹«åŠ©æœªä¾†çš„審閱人員é¿å…第一次出ç¾çš„å•é¡Œã€‚
+註釋;這å¯ä»¥å¹«åŠ©æœªä¾†çš„審閱人員é¿å…第一次出ç¾çš„å•é¡Œã€‚
一個致命的錯誤是忽視評論,希望它們會消失。它們ä¸æœƒèµ°çš„。如果您在沒有å°ä¹‹å‰
收到的評論åšå‡ºéŸ¿æ‡‰çš„情æ³ä¸‹é‡æ–°ç™¼å¸ƒä»£ç¢¼ï¼Œé‚£éº¼å¾ˆå¯èƒ½æœƒç™¼ç¾è£œä¸æ¯«ç„¡ç”¨è™•ã€‚
-說到é‡æ–°ç™¼å¸ƒä»£ç¢¼ï¼šè«‹è¨˜ä½ï¼Œå¯©é–±è€…ä¸æœƒè¨˜ä½æ‚¨ä¸Šæ¬¡ç™¼å¸ƒçš„代碼的所有細節。因此,
+說到é‡æ–°ç™¼å¸ƒä»£ç¢¼ï¼šè«‹è¨˜ä½ï¼Œå¯©é–±è€…ä¸æœƒè¨˜ä½æ‚¨ä¸Šæ¬¡ç™¼ä½ˆçš„代碼的所有細節。因此,
æ醒審閱人員以å‰æ出的å•é¡Œä»¥åŠæ‚¨å¦‚何處ç†é€™äº›å•é¡Œç¸½æ˜¯ä¸€å€‹å¥½ä¸»æ„;補ä¸è®Šæ›´
日誌是æ供此類信æ¯çš„好地方。審閱者ä¸å¿…æœç´¢åˆ—表檔案來熟悉上次所說的內容;
如果您幫助他們直接開始,當他們é‡æ–°æŸ¥çœ‹æ‚¨çš„代碼時,心情會更好。
-如果你已經試著åšæ­£ç¢ºçš„事情,但事情ä»ç„¶æ²’有進展呢?大多數技術上的分歧都å¯ä»¥
+如果你已經試ç€åšæ­£ç¢ºçš„事情,但事情ä»ç„¶æ²’有進展呢?大多數技術上的分歧都å¯ä»¥
通éŽè¨Žè«–來解決,但有時人們ä»éœ€è¦åšå‡ºæ±ºå®šã€‚如果你真的èªçˆ²é€™å€‹æ±ºå®šå°ä½ ä¸åˆ©ï¼Œ
-ä½ å¯ä»¥è©¦è‘—å‘有更高權力的人上訴。å°æ–¼æœ¬æ–‡ï¼Œæ›´é«˜æ¬ŠåŠ›çš„人是 Andrew Morton 。
+ä½ å¯ä»¥è©¦ç€å‘有更高權力的人上訴。å°æ–¼æœ¬æ–‡ï¼Œæ›´é«˜æ¬ŠåŠ›çš„人是 Andrew Morton 。
Andrew 在內核開發社å€ä¸­éžå¸¸å—尊敬;他經常爲似乎被絕望阻塞的事情清障。儘管
如此,ä¸æ‡‰è¼•æ˜“就直接找 Andrew ,也ä¸æ‡‰åœ¨æ‰€æœ‰å…¶ä»–替代方案都被嘗試之å‰æ‰¾ä»–。
當然,記ä½ï¼Œä»–也å¯èƒ½ä¸åŒæ„ä½ çš„æ„見。
@@ -95,7 +95,7 @@ Andrew 在內核開發社å€ä¸­éžå¸¸å—尊敬;他經常爲似乎被絕望阻å
包å«åœ¨å­ç³»çµ±æ¨¹ä¸­å¯ä»¥æ高補ä¸çš„å¯è¦‹æ€§ã€‚ç¾åœ¨ï¼Œä½¿ç”¨è©²æ¨¹çš„其他開發人員將默èªç²
得補ä¸ã€‚å­ç³»çµ±æ¨¹é€šå¸¸ä¹Ÿçˆ²Linuxæ供支æŒï¼Œä½¿å…¶å…§å®¹å°æ•´å€‹é–‹ç™¼ç¤¾å€å¯è¦‹ã€‚在這一點
-上,您很å¯èƒ½æœƒå¾žä¸€çµ„新的審閱者那裡得到更多的評論;這些評論需è¦åƒä¸Šä¸€è¼ªé‚£æ¨£
+上,您很å¯èƒ½æœƒå¾žä¸€çµ„新的審閱者那è£å¾—到更多的評論;這些評論需è¦åƒä¸Šä¸€è¼ªé‚£æ¨£
得到回應。
在這時也會發生點什麼,這å–決於你的補ä¸çš„性質,是å¦èˆ‡å…¶ä»–人正在åšçš„工作發生
@@ -114,23 +114,23 @@ Andrew 在內核開發社å€ä¸­éžå¸¸å—尊敬;他經常爲似乎被絕望阻å
這種誘惑,您ä»ç„¶éœ€è¦å°æœ‰å•é¡Œæˆ–建議的開發人員作出響應。
ä¸éŽï¼Œæ›´é‡è¦çš„是:將代碼包å«åœ¨ä¸»ç·šä¸­æœƒå°‡ä»£ç¢¼äº¤çµ¦æ›´å¤šçš„一些測試人員。å³ä½¿æ‚¨
-爲尚未å¯ç”¨çš„硬體æ供了驅動程åºï¼Œæ‚¨ä¹Ÿæœƒé©šè¨æ–¼æœ‰å¤šå°‘人會將您的代碼構建到內核
+爲尚未å¯ç”¨çš„硬件æ供了驅動程åºï¼Œæ‚¨ä¹Ÿæœƒé©šè¨æ–¼æœ‰å¤šå°‘人會將您的代碼構建到內核
中。當然,如果有測試人員,也å¯èƒ½æœƒæœ‰éŒ¯èª¤å ±å‘Šã€‚
-最糟糕的錯誤報告是回歸。如果你的補ä¸å°Žè‡´å›žæ­¸ï¼Œä½ æœƒç™¼ç¾å¤šåˆ°è®“ä½ ä¸èˆ’æœçš„眼ç›ç›¯
-著你;回歸需è¦å„˜å¿«ä¿®å¾©ã€‚如果您ä¸é¡˜æ„或無法修復回歸(其他人都ä¸æœƒçˆ²æ‚¨ä¿®å¾©ï¼‰ï¼Œ
+最糟糕的錯誤報告是迴歸。如果你的補ä¸å°Žè‡´è¿´æ­¸ï¼Œä½ æœƒç™¼ç¾å¤šåˆ°è®“ä½ ä¸èˆ’æœçš„眼ç›ç›¯
+ç€ä½ ï¼›è¿´æ­¸éœ€è¦å„˜å¿«ä¿®å¾©ã€‚如果您ä¸é¡˜æ„或無法修復迴歸(其他人都ä¸æœƒçˆ²æ‚¨ä¿®å¾©ï¼‰ï¼Œ
那麼在穩定期內,您的補ä¸å¹¾ä¹Žè‚¯å®šæœƒè¢«ç§»é™¤ã€‚除了å¦å®šæ‚¨çˆ²ä½¿è£œä¸é€²å…¥ä¸»ç·šæ‰€åšçš„
-所有工作之外,如果由於未能修復回歸而å–消補ä¸ï¼Œå¾ˆå¯èƒ½æœƒä½¿å°‡ä¾†çš„工作更難被åˆä½µã€‚
+所有工作之外,如果由於未能修復迴歸而å–消補ä¸ï¼Œå¾ˆå¯èƒ½æœƒä½¿å°‡ä¾†çš„工作更難被åˆä½µã€‚
-在處ç†å®Œä»»ä½•å›žæ­¸ä¹‹å¾Œï¼Œå¯èƒ½é‚„有其他普通缺陷需è¦è™•ç†ã€‚穩定期是修復這些錯誤並
-確ä¿ä»£ç¢¼åœ¨ä¸»ç·šå…§æ ¸ç‰ˆæœ¬ä¸­çš„首次發布儘å¯èƒ½å¯é çš„最好機會。所以,請回應錯誤
+在處ç†å®Œä»»ä½•è¿´æ­¸ä¹‹å¾Œï¼Œå¯èƒ½é‚„有其他普通缺陷需è¦è™•ç†ã€‚穩定期是修復這些錯誤並
+確ä¿ä»£ç¢¼åœ¨ä¸»ç·šå…§æ ¸ç‰ˆæœ¬ä¸­çš„首次發佈儘å¯èƒ½å¯é çš„最好機會。所以,請回應錯誤
報告,並儘å¯èƒ½è§£æ±ºå•é¡Œã€‚這就是穩定期的目的;一旦解決了舊補ä¸çš„任何å•é¡Œï¼Œå°±
å¯ä»¥é–‹å§‹ç›¡æƒ…創建新補ä¸ã€‚
別忘了,還有其他節點也å¯èƒ½æœƒå‰µå»ºç¼ºé™·å ±å‘Šï¼šä¸‹ä¸€å€‹ä¸»ç·šç©©å®šç‰ˆæœ¬ï¼Œç•¶è‘—å的發行
商é¸æ“‡åŒ…å«æ‚¨è£œä¸çš„內核版本時等等。繼續響應這些報告是您工作的基本素養。但是
如果這ä¸èƒ½æ供足夠的動機,那麼也需è¦è€ƒæ…®ï¼šé–‹ç™¼ç¤¾å€æœƒè¨˜ä½é‚£äº›åœ¨åˆä½µå¾Œå°ä»£ç¢¼
-失去興趣的開發人員。下一次你發布補ä¸æ™‚,他們會以你以後ä¸æœƒæŒçºŒç¶­è­·å®ƒçˆ²å‰æ
+失去興趣的開發人員。下一次你發佈補ä¸æ™‚,他們會以你以後ä¸æœƒæŒçºŒç¶­è­·å®ƒçˆ²å‰æ
來評估它。
其他å¯èƒ½ç™¼ç”Ÿçš„事情
@@ -141,15 +141,15 @@ Andrew 在內核開發社å€ä¸­éžå¸¸å—尊敬;他經常爲似乎被絕望阻å
維護人員(確ä¿åŒ…å«ä¸€å€‹æ­£ç¢ºçš„From:行,這樣屬性是正確的,並添加一個您自己的
signoff ),或者回復一個 Acked-by: 讓原始發é€è€…å‘上發é€å®ƒã€‚
-如果您ä¸åŒæ„補ä¸ï¼Œè«‹ç¦®è²Œåœ°å›žå¾©ï¼Œè§£é‡‹åŽŸå› ã€‚如果å¯èƒ½çš„話,告訴作者需è¦åšå“ªäº›
-更改æ‰èƒ½è®“您接å—補ä¸ã€‚åˆä½µä»£ç¢¼çš„編寫者和維護者所åå°çš„補ä¸çš„確存在著一定的
+如果您ä¸åŒæ„補ä¸ï¼Œè«‹ç¦®è²Œåœ°å›žè¦†ï¼Œè§£é‡‹åŽŸå› ã€‚如果å¯èƒ½çš„話,告訴作者需è¦åšå“ªäº›
+更改æ‰èƒ½è®“您接å—補ä¸ã€‚åˆä½µä»£ç¢¼çš„編寫者和維護者所åå°çš„補ä¸çš„確存在ç€ä¸€å®šçš„
阻力,但僅此而已。如果你被èªçˆ²ä¸å¿…è¦çš„阻礙了好的工作,那麼這些補ä¸æœ€çµ‚會
繞éŽä½ ä¸¦é€²å…¥ä¸»ç·šã€‚在Linux內核中,沒有人å°ä»»ä½•ä»£ç¢¼æ“有絕å°çš„å¦æ±ºæ¬Šã€‚å¯èƒ½é™¤
了Linus。
-在éžå¸¸ç½•è¦‹çš„情æ³ä¸‹ï¼Œæ‚¨å¯èƒ½æœƒçœ‹åˆ°å®Œå…¨ä¸åŒçš„æ±è¥¿ï¼šå¦ä¸€å€‹é–‹ç™¼äººå“¡ç™¼å¸ƒäº†é‡å°æ‚¨
-çš„å•é¡Œçš„ä¸åŒè§£æ±ºæ–¹æ¡ˆã€‚在這時,兩個補ä¸ä¹‹ä¸€å¯èƒ½ä¸æœƒè¢«åˆä½µï¼Œã€Œæˆ‘的補ä¸é¦–å…ˆ
-發布ã€ä¸è¢«èªçˆ²æ˜¯ä¸€å€‹ä»¤äººä¿¡æœçš„技術論據。如果有別人的補ä¸å–代了你的補ä¸è€Œé€²
+在éžå¸¸ç½•è¦‹çš„情æ³ä¸‹ï¼Œæ‚¨å¯èƒ½æœƒçœ‹åˆ°å®Œå…¨ä¸åŒçš„æ±è¥¿ï¼šå¦ä¸€å€‹é–‹ç™¼äººå“¡ç™¼ä½ˆäº†é‡å°æ‚¨
+çš„å•é¡Œçš„ä¸åŒè§£æ±ºæ–¹æ¡ˆã€‚在這時,兩個補ä¸ä¹‹ä¸€å¯èƒ½ä¸æœƒè¢«åˆä½µï¼Œâ€œæˆ‘的補ä¸é¦–å…ˆ
+發佈â€ä¸è¢«èªçˆ²æ˜¯ä¸€å€‹ä»¤äººä¿¡æœçš„技術論據。如果有別人的補ä¸å–代了你的補ä¸è€Œé€²
入了主線,那麼åªæœ‰ä¸€ç¨®æ–¹æ³•å¯ä»¥å›žæ‡‰ä½ ï¼šå¾ˆé«˜èˆˆä½ çš„å•é¡Œè§£æ±ºäº†ï¼Œè«‹ç¹¼çºŒå·¥ä½œå§ã€‚
以這種方å¼æŠŠæŸäººçš„工作推到一邊å¯èƒ½å°Žè‡´å‚·å¿ƒå’Œæ°£é¤’,但是社å€æœƒè¨˜ä½ä½ çš„å應,
å³ä½¿å¾ˆä¹…以後他們已經忘記了誰的補ä¸çœŸæ­£è¢«åˆä½µã€‚
diff --git a/Documentation/translations/zh_TW/process/7.AdvancedTopics.rst b/Documentation/translations/zh_TW/process/7.AdvancedTopics.rst
index 2cbd16bfed29..db74d8ca3f3b 100644
--- a/Documentation/translations/zh_TW/process/7.AdvancedTopics.rst
+++ b/Documentation/translations/zh_TW/process/7.AdvancedTopics.rst
@@ -24,14 +24,14 @@
使用Git管ç†è£œä¸
---------------
-內核使用分布å¼ç‰ˆæœ¬æŽ§åˆ¶å§‹æ–¼2002å¹´åˆï¼Œç•¶æ™‚Linus首次開始使用專有的Bitkeeper應用
-程åºã€‚雖然BitKeeper存在爭議,但它所體ç¾çš„軟體版本管ç†æ–¹æ³•å»è‚¯å®šä¸æ˜¯ã€‚分布å¼
+內核使用分佈å¼ç‰ˆæœ¬æŽ§åˆ¶å§‹æ–¼2002å¹´åˆï¼Œç•¶æ™‚Linus首次開始使用專有的Bitkeeper應用
+程åºã€‚雖然BitKeeper存在爭議,但它所體ç¾çš„軟件版本管ç†æ–¹æ³•å»è‚¯å®šä¸æ˜¯ã€‚分佈å¼
版本控制å¯ä»¥ç«‹å³åŠ é€Ÿå…§æ ¸é–‹ç™¼é …目。ç¾åœ¨æœ‰å¥½å¹¾ç¨®å…費的BitKeeper替代å“。
但無論好壞,內核項目都已經é¸æ“‡äº†Git作爲其工具。
-使用Git管ç†è£œä¸å¯ä»¥ä½¿é–‹ç™¼äººå“¡çš„生活更加輕鬆,尤其是隨著補ä¸æ•¸é‡çš„增長。Git也
+使用Git管ç†è£œä¸å¯ä»¥ä½¿é–‹ç™¼äººå“¡çš„生活更加輕鬆,尤其是隨ç€è£œä¸æ•¸é‡çš„增長。Git也
有其粗糙的邊角和一定的å±éšªæ€§ï¼Œå®ƒæ˜¯ä¸€å€‹å¹´è¼•å’Œå¼·å¤§çš„工具,ä»ç„¶åœ¨å…¶é–‹ç™¼äººå“¡å®Œå–„
-中。本文檔ä¸æœƒè©¦åœ–教會讀者如何使用git;這會是個巨長的文檔。相å,這裡的é‡é»ž
+中。本文檔ä¸æœƒè©¦åœ–教會讀者如何使用git;這會是個巨長的文檔。相å,這è£çš„é‡é»ž
將是Git如何特別é©åˆå…§æ ¸é–‹ç™¼éŽç¨‹ã€‚想è¦åŠ å¿«ç”¨Git速度的開發人員å¯ä»¥åœ¨ä»¥ä¸‹ç¶²ç«™ä¸Š
找到更多信æ¯ï¼š
@@ -42,22 +42,22 @@
åŒæ™‚網上也能找到å„種å„樣的教程。
在嘗試使用它生æˆè£œä¸ä¾›ä»–人使用之å‰ï¼Œç¬¬ä¸€è¦å‹™æ˜¯é–±è®€ä¸Šè¿°ç¶²é ï¼Œå°Git的工作方å¼
-有一個紮實的了解。使用Git的開發人員應能進行拉å–主線存儲庫的副本,查詢修訂
-æ­·å²ï¼Œæ交å°æ¨¹çš„更改,使用分支等æ“作。了解Git用於é‡å¯«æ­·å²çš„工具(如rebase)
-也很有用。Git有自己的術語和概念;Git的新用戶應該了解引用ã€é ç¨‹åˆ†æ”¯ã€ç´¢å¼•ã€
-快進åˆä½µã€æŽ¨æ‹‰ã€æ¸¸é›¢é ­ç­‰ã€‚一開始å¯èƒ½æœ‰é»žåš‡äººï¼Œä½†é€™äº›æ¦‚念ä¸é›£é€šéŽä¸€é»žå­¸ç¿’來
+有一個紮實的瞭解。使用Git的開發人員應能進行拉å–主線存儲庫的副本,查詢修訂
+æ­·å²ï¼Œæ交å°æ¨¹çš„更改,使用分支等æ“作。瞭解Git用於é‡å¯«æ­·å²çš„工具(如rebase)
+也很有用。Git有自己的術語和概念;Git的新用戶應該瞭解引用ã€é ç¨‹åˆ†æ”¯ã€ç´¢å¼•ã€
+快進åˆä½µã€æŽ¨æ‹‰ã€éŠé›¢é ­ç­‰ã€‚一開始å¯èƒ½æœ‰é»žåš‡äººï¼Œä½†é€™äº›æ¦‚念ä¸é›£é€šéŽä¸€é»žå­¸ç¿’來
ç†è§£ã€‚
使用git生æˆé€šéŽé›»å­éƒµä»¶æ交的補ä¸æ˜¯æ高速度的一個很好的練習。
-當您準備好開始建立Git樹供其他人查看時,無疑需è¦ä¸€å€‹å¯ä»¥å¾žä¸­æ‹‰å–的伺æœå™¨ã€‚
-如果您有一個å¯ä»¥è¨ªå•ç¶²éš›ç¶²è·¯çš„系統,那麼使用git-daemon設置這樣的伺æœå™¨ç›¸å°
+當您準備好開始建立Git樹供其他人查看時,無疑需è¦ä¸€å€‹å¯ä»¥å¾žä¸­æ‹‰å–çš„æœå‹™å™¨ã€‚
+如果您有一個å¯ä»¥è¨ªå•å› ç‰¹ç¶²çš„系統,那麼使用git-daemon設置這樣的æœå‹™å™¨ç›¸å°
簡單。åŒæ™‚,å…費的公共託管網站(例如github)也開始出ç¾åœ¨ç¶²çµ¡ä¸Šã€‚æˆç†Ÿçš„開發
人員å¯ä»¥åœ¨kernel.org上ç²å¾—一個帳戶,但這些帳戶並ä¸å®¹æ˜“得到;更多有關信æ¯ï¼Œ
è«‹åƒé–± https://kernel.org/faq/ 。
-正常的Git工作æµç¨‹æ¶‰åŠåˆ°è¨±å¤šåˆ†æ”¯çš„使用。æ¯ä¸€æ¢é–‹ç™¼ç·šéƒ½å¯ä»¥åˆ†çˆ²å–®ç¨çš„「主題
-分支ã€ï¼Œä¸¦ç¨ç«‹ç¶­è­·ã€‚Git的分支很容易使用,沒有ç†ç”±ä¸ä½¿ç”¨å®ƒå€‘。而且,在任何
+正常的Git工作æµç¨‹æ¶‰åŠåˆ°è¨±å¤šåˆ†æ”¯çš„使用。æ¯ä¸€æ¢é–‹ç™¼ç·šéƒ½å¯ä»¥åˆ†çˆ²å–®ç¨çš„“主題
+分支â€ï¼Œä¸¦ç¨ç«‹ç¶­è­·ã€‚Git的分支很容易使用,沒有ç†ç”±ä¸ä½¿ç”¨å®ƒå€‘。而且,在任何
情æ³ä¸‹ï¼Œæ‚¨éƒ½ä¸æ‡‰è©²åœ¨ä»»ä½•æ‚¨æ‰“算讓其他人從中拉å–的分支中進行開發。應該å°å¿ƒåœ°
創建公開å¯ç”¨çš„分支;當開發分支處於完整狀態並已準備好時(而ä¸æ˜¯ä¹‹å‰ï¼‰æ‰åˆä½µ
開發分支的補ä¸ã€‚
@@ -72,10 +72,10 @@ Gitæ供了一些強大的工具,å¯ä»¥è®“您é‡å¯«é–‹ç™¼æ­·å²ã€‚一個ä¸æ–
簡單癡迷。é‡å¯«æ­·å²å°‡é‡å¯«è©²æ­·å²ä¸­åŒ…å«çš„更改,將經éŽæ¸¬è©¦ï¼ˆå¸Œæœ›å¦‚此)的內核樹
變爲未經測試的內核樹。除此之外,如果開發人員沒有共享項目歷å²ï¼Œä»–們就無法
輕鬆地å”作;如果您é‡å¯«äº†å…¶ä»–開發人員拉入他們存儲庫的歷å²ï¼Œæ‚¨å°‡ä½¿é€™äº›é–‹ç™¼
-人員的生活更加困難。因此,這裡有一個簡單的經驗法則:被導出到其他地方的歷å²
+人員的生活更加困難。因此,這è£æœ‰ä¸€å€‹ç°¡å–®çš„經驗法則:被導出到其他地方的歷å²
在此後通常被èªçˆ²æ˜¯ä¸å¯è®Šçš„。
-因此,一旦將一組更改推é€åˆ°å…¬é–‹å¯ç”¨çš„伺æœå™¨ä¸Šï¼Œå°±ä¸æ‡‰è©²é‡å¯«é€™äº›æ›´æ”¹ã€‚如果您
+因此,一旦將一組更改推é€åˆ°å…¬é–‹å¯ç”¨çš„æœå‹™å™¨ä¸Šï¼Œå°±ä¸æ‡‰è©²é‡å¯«é€™äº›æ›´æ”¹ã€‚如果您
嘗試強制進行無法快進åˆä½µçš„更改(å³ä¸å…±äº«åŒä¸€æ­·å²è¨˜éŒ„的更改),Git將嘗試強制
執行此è¦å‰‡ã€‚這å¯èƒ½è¦†è“‹æª¢æŸ¥ï¼Œæœ‰æ™‚甚至需è¦é‡å¯«å°Žå‡ºçš„樹。在樹之間移動變更集以
é¿å…linux-next中的è¡çªå°±æ˜¯ä¸€å€‹ä¾‹å­ã€‚但這種行爲應該是罕見的。這就是爲什麼
@@ -86,9 +86,9 @@ Gitæ供了一些強大的工具,å¯ä»¥è®“您é‡å¯«é–‹ç™¼æ­·å²ã€‚一個ä¸æ–
å°æ–¼ä¸€å€‹ç§æœ‰çš„分支,rebasing å¯èƒ½æ˜¯ä¸€å€‹å¾ˆå®¹æ˜“跟上å¦ä¸€æ£µæ¨¹çš„方法,但是一旦
一棵樹被導出到外界,rebasingå°±ä¸å¯å–了。一旦發生這種情æ³ï¼Œå°±å¿…須進行完全
åˆä½µï¼ˆmerge)。åˆä½µæœ‰æ™‚是很有æ„義的,但是éŽæ–¼é »ç¹çš„åˆä½µæœƒä¸å¿…è¦åœ°æ“¾äº‚æ­·å²ã€‚
-在這種情æ³ä¸‹å»ºè­°çš„åšæ³•æ˜¯ä¸è¦é »ç¹åˆä½µï¼Œé€šå¸¸åªåœ¨ç‰¹å®šçš„發布點(如主線-rc發布)
+在這種情æ³ä¸‹å»ºè­°çš„åšæ³•æ˜¯ä¸è¦é »ç¹åˆä½µï¼Œé€šå¸¸åªåœ¨ç‰¹å®šçš„發佈點(如主線-rc發佈)
åˆä½µã€‚如果您å°ç‰¹å®šçš„更改感到緊張,則å¯ä»¥å§‹çµ‚在ç§æœ‰åˆ†æ”¯ä¸­åŸ·è¡Œæ¸¬è©¦åˆä½µã€‚在
-這種情æ³ä¸‹ï¼Œgit「rerereã€å·¥å…·å¾ˆæœ‰ç”¨ï¼›å®ƒèƒ½è¨˜ä½åˆä½µè¡çªæ˜¯å¦‚何解決的,這樣您
+這種情æ³ä¸‹ï¼Œgit“rerereâ€å·¥å…·å¾ˆæœ‰ç”¨ï¼›å®ƒèƒ½è¨˜ä½åˆä½µè¡çªæ˜¯å¦‚何解決的,這樣您
å°±ä¸å¿…é‡è¤‡ç›¸åŒçš„工作。
關於Git這樣的工具的一個最大的å覆抱怨是:補ä¸å¾žä¸€å€‹å­˜å„²åº«åˆ°å¦ä¸€å€‹å­˜å„²åº«çš„
@@ -98,36 +98,36 @@ Gitæ供了一些強大的工具,å¯ä»¥è®“您é‡å¯«é–‹ç™¼æ­·å²ã€‚一個ä¸æ–
::
- ä½ å¯ä»¥çµ¦æˆ‘發補ä¸ï¼Œä½†ç•¶æˆ‘從你那裡拉å–一個Git補ä¸æ™‚,我需è¦çŸ¥é“你清楚
+ ä½ å¯ä»¥çµ¦æˆ‘發補ä¸ï¼Œä½†ç•¶æˆ‘從你那è£æ‹‰å–一個Git補ä¸æ™‚,我需è¦çŸ¥é“你清楚
自己在åšä»€éº¼ï¼Œæˆ‘需è¦èƒ½å¤ ç›¸ä¿¡äº‹æƒ…而 *無需* 手動檢查æ¯å€‹å–®ç¨çš„更改。
(http://lwn.net/Articles/224135/)。
-爲了é¿å…這種情æ³ï¼Œè«‹ç¢ºä¿çµ¦å®šåˆ†æ”¯ä¸­çš„所有補ä¸éƒ½èˆ‡ç›¸é—œä¸»é¡Œç·Šå¯†ç›¸é—œï¼›ã€Œé©…動程åº
-修復ã€åˆ†æ”¯ä¸æ‡‰æ›´æ”¹æ ¸å¿ƒå…§å­˜ç®¡ç†ä»£ç¢¼ã€‚而且,最é‡è¦çš„是,ä¸è¦ä½¿ç”¨Git樹來繞éŽ
-審查éŽç¨‹ã€‚ä¸æ™‚的將樹的摘è¦ç™¼å¸ƒåˆ°ç›¸é—œçš„列表中,在åˆé©æ™‚候請求linux-next中
+爲了é¿å…這種情æ³ï¼Œè«‹ç¢ºä¿çµ¦å®šåˆ†æ”¯ä¸­çš„所有補ä¸éƒ½èˆ‡ç›¸é—œä¸»é¡Œç·Šå¯†ç›¸é—œï¼›â€œé©…動程åº
+修復â€åˆ†æ”¯ä¸æ‡‰æ›´æ”¹æ ¸å¿ƒå…§å­˜ç®¡ç†ä»£ç¢¼ã€‚而且,最é‡è¦çš„是,ä¸è¦ä½¿ç”¨Git樹來繞éŽ
+審查éŽç¨‹ã€‚ä¸æ™‚的將樹的摘è¦ç™¼ä½ˆåˆ°ç›¸é—œçš„列表中,在åˆé©æ™‚候請求linux-next中
包å«è©²æ¨¹ã€‚
如果其他人開始發é€è£œä¸ä»¥åŒ…å«åˆ°æ‚¨çš„樹中,ä¸è¦å¿˜è¨˜å¯©é–±å®ƒå€‘。還è¦ç¢ºä¿æ‚¨ç¶­è­·æ­£ç¢º
-的作者信æ¯ï¼› git 「amã€å·¥å…·åœ¨é€™æ–¹é¢åšå¾—最好,但是如果補ä¸é€šéŽç¬¬ä¸‰æ–¹è½‰ç™¼çµ¦æ‚¨ï¼Œ
-您å¯èƒ½éœ€è¦åœ¨è£œä¸ä¸­æ·»åŠ ã€ŒFrom:ã€è¡Œã€‚
+的作者信æ¯ï¼› git “amâ€å·¥å…·åœ¨é€™æ–¹é¢åšå¾—最好,但是如果補ä¸é€šéŽç¬¬ä¸‰æ–¹è½‰ç™¼çµ¦æ‚¨ï¼Œ
+您å¯èƒ½éœ€è¦åœ¨è£œä¸ä¸­æ·»åŠ â€œFrom:â€è¡Œã€‚
請求拉å–時,請務必æ供所有相關信æ¯ï¼šæ¨¹çš„ä½ç½®ã€è¦æ‹‰å–的分支以åŠæ‹‰å–將導致的
æ›´æ”¹ã€‚åœ¨é€™æ–¹é¢ git request-pull 命令éžå¸¸æœ‰ç”¨ï¼›å®ƒå°‡æŒ‰ç…§å…¶ä»–開發人員所期望的
-æ ¼å¼åŒ–請求,並檢查以確ä¿æ‚¨å·²è¨˜å¾—將這些更改推é€åˆ°å…¬å…±ä¼ºæœå™¨ã€‚
+æ ¼å¼åŒ–請求,並檢查以確ä¿æ‚¨å·²è¨˜å¾—將這些更改推é€åˆ°å…¬å…±æœå‹™å™¨ã€‚
審閱補ä¸
--------
-一些讀者顯然會åå°å°‡æœ¬ç¯€èˆ‡ã€Œé«˜ç´šä¸»é¡Œã€æ”¾åœ¨ä¸€èµ·ï¼Œå› çˆ²å³ä½¿æ˜¯å‰›é–‹å§‹çš„內核開發人員
-也應該審閱補ä¸ã€‚當然,沒有比查看其他人發布的代碼更好的方法來學習如何在內核環境
+一些讀者顯然會åå°å°‡æœ¬ç¯€èˆ‡â€œé«˜ç´šä¸»é¡Œâ€æ”¾åœ¨ä¸€èµ·ï¼Œå› çˆ²å³ä½¿æ˜¯å‰›é–‹å§‹çš„內核開發人員
+也應該審閱補ä¸ã€‚當然,沒有比查看其他人發佈的代碼更好的方法來學習如何在內核環境
中編程了。此外,審閱者永é ä¾›ä¸æ‡‰æ±‚;通éŽå¯©é–±ä»£ç¢¼ï¼Œæ‚¨å¯ä»¥å°æ•´å€‹æµç¨‹åšå‡ºé‡å¤§è²¢ç»ã€‚
審查代碼å¯èƒ½æ˜¯ä¸€å‰¯ä»¤äººç”Ÿç•çš„圖景,特別是å°ä¸€å€‹æ–°çš„內核開發人員來說,他們
-å¯èƒ½æœƒå°å…¬é–‹è©¢å•ä»£ç¢¼æ„Ÿåˆ°ç·Šå¼µï¼Œè€Œé€™äº›ä»£ç¢¼æ˜¯ç”±é‚£äº›æœ‰æ›´å¤šç¶“驗的人發布的。ä¸éŽï¼Œ
+å¯èƒ½æœƒå°å…¬é–‹è©¢å•ä»£ç¢¼æ„Ÿåˆ°ç·Šå¼µï¼Œè€Œé€™äº›ä»£ç¢¼æ˜¯ç”±é‚£äº›æœ‰æ›´å¤šç¶“驗的人發佈的。ä¸éŽï¼Œ
å³ä½¿æ˜¯æœ€æœ‰ç¶“驗的開發人員編寫的代碼也å¯ä»¥å¾—到改進。也許å°ï¼ˆæ‰€æœ‰ï¼‰å¯©é–±è€…最好
-的建議是:把審閱評論當æˆå•é¡Œè€Œä¸æ˜¯æ‰¹è©•ã€‚è©¢å•ã€Œåœ¨é€™æ¢è·¯å¾‘中如何釋放鎖?ã€
-總是比說「這裡的鎖是錯誤的ã€æ›´å¥½ã€‚
+的建議是:把審閱評論當æˆå•é¡Œè€Œä¸æ˜¯æ‰¹è©•ã€‚è©¢å•â€œåœ¨é€™æ¢è·¯å¾‘中如何釋放鎖?â€
+總是比說“這è£çš„鎖是錯誤的â€æ›´å¥½ã€‚
ä¸åŒçš„開發人員將從ä¸åŒçš„角度審查代碼。部分人會主è¦é—œæ³¨ä»£ç¢¼é¢¨æ ¼ä»¥åŠä»£ç¢¼è¡Œæ˜¯
å¦æœ‰å°¾éš¨ç©ºæ ¼ã€‚其他人會主è¦é—œæ³¨è£œä¸ä½œçˆ²ä¸€å€‹æ•´é«”實ç¾çš„變更是å¦å°å…§æ ¸æœ‰å¥½è™•ã€‚
diff --git a/Documentation/translations/zh_TW/process/8.Conclusion.rst b/Documentation/translations/zh_TW/process/8.Conclusion.rst
index 1207991d1570..a0c00741f912 100644
--- a/Documentation/translations/zh_TW/process/8.Conclusion.rst
+++ b/Documentation/translations/zh_TW/process/8.Conclusion.rst
@@ -17,13 +17,13 @@
更多信æ¯
========
-關於Linux內核開發和相關主題的信æ¯ä¾†æºå¾ˆå¤šã€‚首先是在內核原始碼分發中找到的
+關於Linux內核開發和相關主題的信æ¯ä¾†æºå¾ˆå¤šã€‚首先是在內核æºä»£ç¢¼åˆ†ç™¼ä¸­æ‰¾åˆ°çš„
文檔目錄。頂級
-:ref:`Documentation/translations/zh_TW/process/howto.rst <tw_process_howto>`
+:ref:`Documentation/translations/zh_CN/process/howto.rst <tw_process_howto>`
文件是一個é‡è¦çš„起點;
-:ref:`Documentation/translations/zh_TW/process/submitting-patches.rst <tw_submittingpatches>`
+:ref:`Documentation/translations/zh_CN/process/submitting-patches.rst <tw_submittingpatches>`
也是所有內核開發人員都應該閱讀的內容。許多內部內核API都是使用kerneldoc機制
-記錄的;「make htmldocsã€æˆ–「make pdfdocsã€å¯ç”¨æ–¼ä»¥HTML或PDFæ ¼å¼ç”Ÿæˆé€™äº›æ–‡æª”
+記錄的;“make htmldocsâ€æˆ–“make pdfdocsâ€å¯ç”¨æ–¼ä»¥HTML或PDFæ ¼å¼ç”Ÿæˆé€™äº›æ–‡æª”
(儘管æŸäº›ç™¼è¡Œç‰ˆæ供的tex版本會é‡åˆ°å…§éƒ¨é™åˆ¶ï¼Œç„¡æ³•æ­£ç¢ºè™•ç†æ–‡æª”)。
ä¸åŒçš„網站在å„個細節層次上討論內核開發。本文作者想謙虛地建議用 https://lwn.net/
@@ -35,7 +35,7 @@
https://kernelnewbies.org/
-當然,也ä¸æ‡‰è©²å¿˜è¨˜ https://kernel.org/ ,這是內核發布信æ¯çš„最終ä½ç½®ã€‚
+當然,也ä¸æ‡‰è©²å¿˜è¨˜ https://kernel.org/ ,這是內核發佈信æ¯çš„最終ä½ç½®ã€‚
關於內核開發有很多書:
@@ -47,7 +47,7 @@
《深入ç†è§£Linux內核》(Daniel Bovetå’ŒMarco Cesati)
然而,所有這些書都有一個共åŒçš„缺點:它們上架時就往往有些éŽæ™‚,而且已經上架
-一段時間了。ä¸éŽï¼Œåœ¨é‚£è£¡é‚„是å¯ä»¥æ‰¾åˆ°ç›¸ç•¶å¤šçš„好信æ¯ã€‚
+一段時間了。ä¸éŽï¼Œåœ¨é‚£è£é‚„是å¯ä»¥æ‰¾åˆ°ç›¸ç•¶å¤šçš„好信æ¯ã€‚
有關git的文檔,請訪å•ï¼š
@@ -61,7 +61,7 @@
ç¥è³€æ‰€æœ‰é€šéŽé€™ç¯‡å†—長的文檔的人。希望它能夠幫助您ç†è§£Linux內核是如何開發的,
以åŠæ‚¨å¦‚何åƒèˆ‡é€™å€‹éŽç¨‹ã€‚
-最後,é‡è¦çš„是åƒèˆ‡ã€‚任何開æºè»Ÿé«”項目都ä¸æœƒè¶…éŽå…¶è²¢ç»è€…投入其中的總和。Linux
+最後,é‡è¦çš„是åƒèˆ‡ã€‚任何開æºè»Ÿä»¶é …目都ä¸æœƒè¶…éŽå…¶è²¢ç»è€…投入其中的總和。Linux
內核的發展速度和以å‰ä¸€æ¨£å¿«ï¼Œå› çˆ²å®ƒå¾—到了大é‡é–‹ç™¼äººå“¡çš„幫助,他們都在努力使它
變得更好。內核是一個最æˆåŠŸçš„例å­ï¼Œèªªæ˜Žäº†ç•¶æˆåƒä¸Šè¬çš„人爲了一個共åŒçš„目標一起
工作時,å¯ä»¥åšå‡ºä»€éº¼ã€‚
diff --git a/Documentation/translations/zh_TW/process/code-of-conduct-interpretation.rst b/Documentation/translations/zh_TW/process/code-of-conduct-interpretation.rst
index 920bb0f36974..48df918000e9 100644
--- a/Documentation/translations/zh_TW/process/code-of-conduct-interpretation.rst
+++ b/Documentation/translations/zh_TW/process/code-of-conduct-interpretation.rst
@@ -8,34 +8,34 @@
.. _tw_code_of_conduct_interpretation:
-Linux內核貢ç»è€…契約行為準則解釋
+Linux內核貢ç»è€…契約行爲準則解釋
===============================
:ref:`tw_code_of_conduct` 準則是一個通用文檔,旨在爲幾乎所有開æºç¤¾å€æ供一套è¦å‰‡ã€‚
æ¯å€‹é–‹æºç¤¾å€éƒ½æ˜¯ç¨ä¸€ç„¡äºŒçš„,Linux內核也ä¸ä¾‹å¤–。因此,本文æ述了Linux內核社å€ä¸­
-如何解釋它。我們也ä¸å¸Œæœ›é€™ç¨®è§£é‡‹éš¨è‘—時間的推移是éœæ…‹çš„,並將根據需è¦é€²è¡Œèª¿æ•´ã€‚
+如何解釋它。我們也ä¸å¸Œæœ›é€™ç¨®è§£é‡‹éš¨ç€æ™‚間的推移是éœæ…‹çš„,並將根據需è¦é€²è¡Œèª¿æ•´ã€‚
-與開發軟體的「傳統ã€æ–¹æ³•ç›¸æ¯”,Linux內核開發工作是一個éžå¸¸å€‹äººåŒ–çš„éŽç¨‹ã€‚ä½ çš„è²¢ç»
+與開發軟件的“傳統â€æ–¹æ³•ç›¸æ¯”,Linux內核開發工作是一個éžå¸¸å€‹äººåŒ–çš„éŽç¨‹ã€‚ä½ çš„è²¢ç»
和背後的想法將被仔細審查,往往導致批判和批評。審查將幾乎總是需è¦æ”¹é€²ï¼Œææ–™æ‰
能包括在內核中。è¦çŸ¥é“這是因爲所有相關人員都希望看到Linuxæ•´é«”æˆåŠŸçš„最佳解決方
-案。這個開發éŽç¨‹å·²ç¶“被證明å¯ä»¥å‰µå»ºæœ‰å²ä»¥ä¾†æœ€å¥å£¯çš„作業系統內核,我們ä¸æƒ³åšä»»ä½•
+案。這個開發éŽç¨‹å·²ç¶“被證明å¯ä»¥å‰µå»ºæœ‰å²ä»¥ä¾†æœ€å¥å£¯çš„æ“作系統內核,我們ä¸æƒ³åšä»»ä½•
事情來導致æ交質é‡å’Œæœ€çµ‚çµæžœçš„下é™ã€‚
維護者
------
-行為準則多次使用「維護者ã€ä¸€è©žã€‚在內核社å€ä¸­ï¼Œã€Œç¶­è­·è€…ã€æ˜¯è² è²¬å­ç³»çµ±ã€é©…動程åºæˆ–
-文件的任何人,並在內核原始碼樹的維護者文件中列出。
+行爲準則多次使用“維護者â€ä¸€è©žã€‚在內核社å€ä¸­ï¼Œâ€œç¶­è­·è€…â€æ˜¯è² è²¬å­ç³»çµ±ã€é©…動程åºæˆ–
+文件的任何人,並在內核æºä»£ç¢¼æ¨¹çš„維護者文件中列出。
責任
----
-《行為準則》æ到了維護人員的權利和責任,這需è¦é€²ä¸€æ­¥æ¾„清。
+《行爲準則》æ到了維護人員的權利和責任,這需è¦é€²ä¸€æ­¥æ¾„清。
首先,最é‡è¦çš„是,有一個åˆç†çš„期望是由維護人員通éŽå¯¦ä¾‹ä¾†é ˜å°Žã€‚
也就是說,我們的社å€æ˜¯å»£é—Šçš„,å°ç¶­è­·è€…沒有新的è¦æ±‚,他們單方é¢è™•ç†å…¶ä»–人在
-他們活èºçš„社å€çš„行爲。這一責任由我們所有人承擔,最終《行為準則》記錄了最終的
+他們活èºçš„社å€çš„行爲。這一責任由我們所有人承擔,最終《行爲準則》記錄了最終的
上訴路徑,以防有關行爲å•é¡Œçš„å•é¡Œæ‡¸è€Œæœªæ±ºã€‚
維護人員應該願æ„在出ç¾å•é¡Œæ™‚æ供幫助,並在需è¦æ™‚與社å€ä¸­çš„其他人åˆä½œã€‚如果您
@@ -43,10 +43,10 @@ Linux內核貢ç»è€…契約行為準則解釋
除éžæ‚¨é¡˜æ„,å¦å‰‡ä¸æœƒå°‡å…¶è¦–爲é•è¦å ±å‘Šã€‚如果您ä¸ç¢ºå®šæ˜¯å¦è©²è¯ç¹«TAB 或任何其他維
護人員,請è¯ç¹«æˆ‘們的è¡çªèª¿è§£äºº Mishi Choudhary <mishi@linux.com>。
-最後,「善待å°æ–¹ã€æ‰æ˜¯æ¯å€‹äººçš„最終目標。我們知é“æ¯å€‹äººéƒ½æ˜¯äººï¼Œæœ‰æ™‚我們都會失敗,
-但我們所有人的首è¦ç›®æ¨™æ‡‰è©²æ˜¯åŠªåŠ›å‹å¥½åœ°è§£æ±ºå•é¡Œã€‚執行行為準則將是最後的é¸æ“‡ã€‚
+最後,“善待å°æ–¹â€çº”是æ¯å€‹äººçš„最終目標。我們知é“æ¯å€‹äººéƒ½æ˜¯äººï¼Œæœ‰æ™‚我們都會失敗,
+但我們所有人的首è¦ç›®æ¨™æ‡‰è©²æ˜¯åŠªåŠ›å‹å¥½åœ°è§£æ±ºå•é¡Œã€‚執行行爲準則將是最後的é¸æ“‡ã€‚
-我們的目標是創建一個強大的ã€æŠ€è¡“先進的作業系統,以åŠæ‰€æ¶‰åŠçš„技術複雜性,這自
+我們的目標是創建一個強大的ã€æŠ€è¡“先進的æ“作系統,以åŠæ‰€æ¶‰åŠçš„技術複雜性,這自
然需è¦å°ˆæ¥­çŸ¥è­˜å’Œæ±ºç­–。
所需的專業知識因貢ç»é ˜åŸŸè€Œç•°ã€‚它主è¦ç”±ä¸Šä¸‹æ–‡å’ŒæŠ€è¡“複雜性決定,其次由貢ç»è€…å’Œ
@@ -55,58 +55,58 @@ Linux內核貢ç»è€…契約行為準則解釋
專家的期望和決策都è¦ç¶“éŽè¨Žè«–,但在最後,爲了å–得進展,必須能夠åšå‡ºæ±ºç­–。這一
特權掌æ¡åœ¨ç¶­è­·äººå“¡å’Œé …目領導的手中,é è¨ˆå°‡å–„æ„使用。
-因此,設定專業知識期望ã€ä½œå‡ºæ±ºå®šå’Œæ‹’絕ä¸é©ç•¶çš„è²¢ç»ä¸è¢«è¦–爲é•å行為準則。
+因此,設定專業知識期望ã€ä½œå‡ºæ±ºå®šå’Œæ‹’絕ä¸é©ç•¶çš„è²¢ç»ä¸è¢«è¦–爲é•å行爲準則。
雖然維護人員一般都歡迎新來者,但他們幫助(新)貢ç»è€…å…‹æœéšœç¤™çš„能力有é™ï¼Œå› æ­¤
-他們必須確定優先事項。這也ä¸æ‡‰è¢«è¦–爲é•å了行為準則。內核社å€æ„識到這一點,並
+他們必須確定優先事項。這也ä¸æ‡‰è¢«è¦–爲é•å了行爲準則。內核社å€æ„識到這一點,並
以å„種形å¼æ供入門級節目,如 kernelnewbies.org 。
範åœ
----
-Linux內核社å€ä¸»è¦åœ¨ä¸€çµ„公共電å­éƒµä»¶åˆ—表上進行交互,這些列表分布在由多個ä¸åŒ
-å…¬å¸æˆ–個人控制的多個ä¸åŒä¼ºæœå™¨ä¸Šã€‚所有這些列表都在內核原始碼樹中的
+Linux內核社å€ä¸»è¦åœ¨ä¸€çµ„公共電å­éƒµä»¶åˆ—表上進行交互,這些列表分佈在由多個ä¸åŒ
+å…¬å¸æˆ–個人控制的多個ä¸åŒæœå‹™å™¨ä¸Šã€‚所有這些列表都在內核æºä»£ç¢¼æ¨¹ä¸­çš„
MAINTAINERS 文件中定義。發é€åˆ°é€™äº›éƒµä»¶åˆ—表的任何電å­éƒµä»¶éƒ½è¢«è¦–爲包å«åœ¨è¡Œçˆ²
準則中。
使用 kernel.org bugzilla和其他å­ç³»çµ±bugzilla 或bug跟蹤工具的開發人員應該éµå¾ª
-行為準則的指導原則。Linux內核社å€æ²’有「官方ã€é …目電å­éƒµä»¶åœ°å€æˆ–「官方ã€ç¤¾äº¤åª’é«”
-地å€ã€‚使用kernel.orgé›»å­éƒµä»¶å¸³æˆ¶åŸ·è¡Œçš„任何活動必須éµå¾ªçˆ²kernel.org發布的行爲
+行爲準則的指導原則。Linux內核社å€æ²’有“官方â€é …目電å­éƒµä»¶åœ°å€æˆ–“官方â€ç¤¾äº¤åª’é«”
+地å€ã€‚使用kernel.orgé›»å­éƒµä»¶å¸³æˆ¶åŸ·è¡Œçš„任何活動必須éµå¾ªçˆ²kernel.org發佈的行爲
準則,就åƒä»»ä½•ä½¿ç”¨å…¬å¸é›»å­éƒµä»¶å¸³æˆ¶çš„個人必須éµå¾ªè©²å…¬å¸çš„特定è¦å‰‡ä¸€æ¨£ã€‚
-行為準則並ä¸ç¦æ­¢åœ¨éƒµä»¶åˆ—表消æ¯ã€å…§æ ¸æ›´æ”¹æ—¥èªŒæ¶ˆæ¯æˆ–代碼注釋中繼續包å«å稱ã€
+行爲準則並ä¸ç¦æ­¢åœ¨éƒµä»¶åˆ—表消æ¯ã€å…§æ ¸æ›´æ”¹æ—¥èªŒæ¶ˆæ¯æˆ–代碼註釋中繼續包å«å稱ã€
é›»å­éƒµä»¶åœ°å€å’Œç›¸é—œæ³¨é‡‹ã€‚
-其他論壇中的互動包括在é©ç”¨æ–¼ä¸Šè¿°è«–壇的任何è¦å‰‡ä¸­ï¼Œé€šå¸¸ä¸åŒ…括在行為準則中。
+其他論壇中的互動包括在é©ç”¨æ–¼ä¸Šè¿°è«–壇的任何è¦å‰‡ä¸­ï¼Œé€šå¸¸ä¸åŒ…括在行爲準則中。
除了在極端情æ³ä¸‹å¯è€ƒæ…®çš„例外情æ³ã€‚
-æ交給內核的貢ç»æ‡‰è©²ä½¿ç”¨é©ç•¶çš„語言。在行為準則之å‰å·²ç¶“存在的內容ç¾åœ¨ä¸æœƒè¢«
+æ交給內核的貢ç»æ‡‰è©²ä½¿ç”¨é©ç•¶çš„語言。在行爲準則之å‰å·²ç¶“存在的內容ç¾åœ¨ä¸æœƒè¢«
視爲é•å。然而,ä¸é©ç•¶çš„語言å¯ä»¥è¢«è¦–爲一個bug;如果任何相關方æ交補ä¸ï¼Œ
這樣的bug將被更快地修復。當å‰å±¬æ–¼ç”¨æˆ¶/內核API的一部分的表é”å¼ï¼Œæˆ–者å映已
-發布標準或è¦ç¯„中使用的術語的表é”å¼ï¼Œä¸è¢«è¦–爲bug。
+發佈標準或è¦ç¯„中使用的術語的表é”å¼ï¼Œä¸è¢«è¦–爲bug。
執行
----
-行為準則中列出的地å€å±¬æ–¼è¡Œç‚ºæº–則委員會。https://kernel.org/code-of-conduct.html
+行爲準則中列出的地å€å±¬æ–¼è¡Œçˆ²æº–則委員會。https://kernel.org/code-of-conduct.html
列出了在任何給定時間接收這些電å­éƒµä»¶çš„確切æˆå“¡ã€‚æˆå“¡ä¸èƒ½è¨ªå•åœ¨åŠ å…¥å§”員會之å‰
或離開委員會之後所åšçš„報告。
-最åˆçš„行為準則委員會由TAB的志願者以åŠä½œçˆ²ä¸­ç«‹ç¬¬ä¸‰æ–¹çš„專業調解人組æˆã€‚委員會
+最åˆçš„行爲準則委員會由TAB的志願者以åŠä½œçˆ²ä¸­ç«‹ç¬¬ä¸‰æ–¹çš„專業調解人組æˆã€‚委員會
的首è¦ä»»å‹™æ˜¯å»ºç«‹æ–‡ä»¶åŒ–çš„æµç¨‹ï¼Œä¸¦å°‡å…¶å…¬é–‹ã€‚
如果報告人ä¸å¸Œæœ›å°‡æ•´å€‹å§”員會ç´å…¥æŠ•è¨´æˆ–關切,å¯ç›´æŽ¥è¯ç¹«å§”員會的任何æˆå“¡ï¼ŒåŒ…括
調解人。
-行為準則委員會根據æµç¨‹å¯©æŸ¥æ¡ˆä¾‹ï¼ˆè¦‹ä¸Šæ–‡ï¼‰ï¼Œä¸¦æ ¹æ“šéœ€è¦å’Œé©ç•¶èˆ‡TABå”商,例如請求
+行爲準則委員會根據æµç¨‹å¯©æŸ¥æ¡ˆä¾‹ï¼ˆè¦‹ä¸Šæ–‡ï¼‰ï¼Œä¸¦æ ¹æ“šéœ€è¦å’Œé©ç•¶èˆ‡TABå”商,例如請求
和接收有關內核社å€çš„ä¿¡æ¯ã€‚
委員會åšå‡ºçš„任何決定都將æ交到表中,以便在必è¦æ™‚與相關維護人員一起執行。行爲
準則委員會的決定å¯ä»¥é€šéŽä¸‰åˆ†ä¹‹äºŒçš„投票推翻。
-æ¯å­£åº¦ï¼Œè¡Œç‚ºæº–則委員會和標籤將æ供一份報告,概述行為準則委員會收到的匿å報告
+æ¯å­£åº¦ï¼Œè¡Œçˆ²æº–則委員會和標籤將æ供一份報告,概述行爲準則委員會收到的匿å報告
åŠå…¶ç‹€æ…‹ï¼Œä»¥åŠä»»ä½•å¦æ±ºæ±ºå®šçš„細節,包括完整和å¯è­˜åˆ¥çš„投票細節。
-我們希望在啓動期之後爲行為準則委員會人員é…備建立一個ä¸åŒçš„æµç¨‹ã€‚發生此情æ³æ™‚,
+我們希望在啓動期之後爲行爲準則委員會人員é…備建立一個ä¸åŒçš„æµç¨‹ã€‚發生此情æ³æ™‚,
將使用該信æ¯æ›´æ–°æ­¤æ–‡æª”。
diff --git a/Documentation/translations/zh_TW/process/code-of-conduct.rst b/Documentation/translations/zh_TW/process/code-of-conduct.rst
index e3087112f0bc..a7a31de03526 100644
--- a/Documentation/translations/zh_TW/process/code-of-conduct.rst
+++ b/Documentation/translations/zh_TW/process/code-of-conduct.rst
@@ -8,7 +8,7 @@
.. _tw_code_of_conduct:
-è²¢ç»è€…契約行為準則
+è²¢ç»è€…契約行爲準則
++++++++++++++++++
我們的誓言
@@ -35,7 +35,7 @@
* 使用性æ„味的語言或æ„象以åŠä¸å—歡迎的性注æ„或者更éŽåˆ†çš„行爲
* 煽動ã€ä¾®è¾±/貶æ評論以åŠå€‹äººæˆ–政治攻擊
* 公開或ç§ä¸‹é¨·æ“¾
-* 未經明確許å¯ï¼Œç™¼å¸ƒä»–人的ç§äººä¿¡æ¯ï¼Œå¦‚物ç†æˆ–é›»å­åœ°å€ã€‚
+* 未經明確許å¯ï¼Œç™¼ä½ˆä»–人的ç§äººä¿¡æ¯ï¼Œå¦‚物ç†æˆ–é›»å­åœ°å€ã€‚
* 在專業場åˆè¢«åˆç†èªçˆ²ä¸é©ç•¶çš„其他行爲
我們的責任
@@ -44,29 +44,29 @@
維護人員負責澄清å¯æŽ¥å—行爲的標準,並應é‡å°ä»»ä½•ä¸å¯æŽ¥å—行爲採å–é©ç•¶å’Œå…¬å¹³çš„
糾正措施。
-維護人員有權和責任刪除ã€ç·¨è¼¯æˆ–拒絕與本行為準則ä¸ä¸€è‡´çš„è©•è«–ã€æ‰¿è«¾ã€ä»£ç¢¼ã€
+維護人員有權和責任刪除ã€ç·¨è¼¯æˆ–拒絕與本行爲準則ä¸ä¸€è‡´çš„è©•è«–ã€æ‰¿è«¾ã€ä»£ç¢¼ã€
wiki編輯ã€å•é¡Œå’Œå…¶ä»–è²¢ç»ï¼Œæˆ–暫時或永久ç¦æ­¢ä»»ä½•è²¢ç»è€…從事他們èªçˆ²ä¸é©ç•¶ã€
å¨è„…ã€å†’犯或有害的其他行爲。
範åœ
====
-當個人代表項目或其社å€æ™‚,本行為準則既é©ç”¨æ–¼é …目空間,也é©ç”¨æ–¼å…¬å…±ç©ºé–“。
+當個人代表項目或其社å€æ™‚,本行爲準則既é©ç”¨æ–¼é …目空間,也é©ç”¨æ–¼å…¬å…±ç©ºé–“。
代表一個項目或社å€çš„例å­åŒ…括使用一個正å¼çš„項目電å­éƒµä»¶åœ°å€ï¼Œé€šéŽä¸€å€‹æ­£å¼
-的社交媒體帳戶發布,或者在在線或離線事件中擔任指定的代表。項目維護人員å¯ä»¥
+的社交媒體帳戶發佈,或者在在線或離線事件中擔任指定的代表。項目維護人員å¯ä»¥
進一步定義和澄清項目的表示。
執行
====
-如有濫用ã€é¨·æ“¾æˆ–其他ä¸å¯æŽ¥å—的行爲,å¯è¯ç¹«è¡Œç‚ºæº–則委員會<conduct@kernel.org>。
-所有投訴都將接å—審查和調查,並將得到必è¦å’Œé©ç•¶çš„答覆。行為準則委員會有義務
-å°äº‹ä»¶å ±å‘Šäººä¿å¯†ã€‚具體執行政策的進一步細節å¯å–®ç¨å…¬å¸ƒã€‚
+如有濫用ã€é¨·æ“¾æˆ–其他ä¸å¯æŽ¥å—的行爲,å¯è¯ç¹«è¡Œçˆ²æº–則委員會<conduct@kernel.org>。
+所有投訴都將接å—審查和調查,並將得到必è¦å’Œé©ç•¶çš„答覆。行爲準則委員會有義務
+å°äº‹ä»¶å ±å‘Šäººä¿å¯†ã€‚具體執行政策的進一步細節å¯å–®ç¨å…¬ä½ˆã€‚
歸屬
====
-本行為準則改編自《貢ç»è€…契約》,版本1.4,å¯å¾ž
+本行爲準則改編自《貢ç»è€…契約》,版本1.4,å¯å¾ž
https://www.contributor-covenant.org/version/1/4/code-of-conduct.html ç²å–。
解釋
diff --git a/Documentation/translations/zh_TW/process/coding-style.rst b/Documentation/translations/zh_TW/process/coding-style.rst
index 83862e4d3b64..5749363de421 100644
--- a/Documentation/translations/zh_TW/process/coding-style.rst
+++ b/Documentation/translations/zh_TW/process/coding-style.rst
@@ -2,42 +2,44 @@
.. include:: ../disclaimer-zh_TW.rst
-:Original: :ref:`Documentation/process/coding-style.rst <codingstyle>`
+:Original: Documentation/process/coding-style.rst
.. _tw_codingstyle:
-譯者::
+:譯者:
+ - 張樂 Zhang Le <r0bertz@gentoo.org>
+ - Andy Deng <theandy.deng@gmail.com>
+ - å³æƒ³æˆ <bobwxc@email.cn>
- 中文版維護者: 張樂 Zhang Le <r0bertz@gentoo.org>
- 中文版翻譯者: 張樂 Zhang Le <r0bertz@gentoo.org>
- 中文版校譯者: çŽ‹è° Wang Cong <xiyou.wangcong@gmail.com>
- wheelz <kernel.zeng@gmail.com>
- ç®¡æ—­æ± Xudong Guan <xudong.guan@gmail.com>
- Li Zefan <lizf@cn.fujitsu.com>
- Wang Chen <wangchen@cn.fujitsu.com>
- Hu Haowen <src.res.211@gmail.com>
+:æ ¡è­¯:
+ - çŽ‹è° Wang Cong <xiyou.wangcong@gmail.com>
+ - wheelz <kernel.zeng@gmail.com>
+ - ç®¡æ—­æ± Xudong Guan <xudong.guan@gmail.com>
+ - Li Zefan <lizf@cn.fujitsu.com>
+ - Wang Chen <wangchen@cn.fujitsu.com>
+ - Hu Haowen <src.res.211@gmail.com>
Linux 內核代碼風格
-=========================
+==================
這是一個簡短的文檔,æ述了 linux 內核的首é¸ä»£ç¢¼é¢¨æ ¼ã€‚代碼風格是因人而異的,
而且我ä¸é¡˜æ„把自己的觀點強加給任何人,但這就åƒæˆ‘去åšä»»ä½•äº‹æƒ…都必須éµå¾ªçš„原則
-那樣,我也希望在絕大多數事上ä¿æŒé€™ç¨®çš„態度。請 (在寫代碼時) 至少考慮一下這裡
+那樣,我也希望在絕大多數事上ä¿æŒé€™ç¨®çš„態度。請 (在寫代碼時) 至少考慮一下這è£
的代碼風格。
-首先,我建議你列å°ä¸€ä»½ GNU 代碼è¦ç¯„,然後ä¸è¦è®€ã€‚燒了它,這是一個具有é‡å¤§è±¡å¾µ
+首先,我建議你打å°ä¸€ä»½ GNU 代碼è¦ç¯„,然後ä¸è¦è®€ã€‚燒了它,這是一個具有é‡å¤§è±¡å¾µ
性æ„義的動作。
ä¸ç®¡æ€Žæ¨£ï¼Œç¾åœ¨æˆ‘們開始:
1) 縮進
---------------
+-------
-制表符是 8 個字符,所以縮進也是 8 個字符。有些異端é‹å‹•è©¦åœ–將縮進變爲 4 (甚至
+製表符是 8 個字符,所以縮進也是 8 個字符。有些異端é‹å‹•è©¦åœ–將縮進變爲 4 (甚至
2ï¼) 字符深,這幾乎相當於嘗試將圓周率的值定義爲 3。
-ç†ç”±ï¼šç¸®é€²çš„全部æ„義就在於清楚的定義一個控制塊起止於何處。尤其是當你盯著你的
+ç†ç”±ï¼šç¸®é€²çš„全部æ„義就在於清楚的定義一個控制塊起止於何處。尤其是當你盯ç€ä½ çš„
å±å¹•é€£çºŒçœ‹äº† 20 å°æ™‚之後,你將會發ç¾å¤§ä¸€é»žçš„縮進會使你更容易分辨縮進。
ç¾åœ¨ï¼Œæœ‰äº›äººæœƒæŠ±æ€¨ 8 個字符的縮進會使代碼å‘å³é‚Šç§»å‹•çš„太é ï¼Œåœ¨ 80 個字符的終端
@@ -69,39 +71,60 @@ Linux 內核代碼風格
break;
}
-ä¸è¦æŠŠå¤šå€‹èªžå¥æ”¾åœ¨ä¸€è¡Œé‡Œï¼Œé™¤éžä½ æœ‰ä»€éº¼æ±è¥¿è¦éš±è—:
+ä¸è¦æŠŠå¤šå€‹èªžå¥æ”¾åœ¨ä¸€è¡Œè£ï¼Œé™¤éžä½ æœ‰ä»€éº¼æ±è¥¿è¦éš±è—:
.. code-block:: c
if (condition) do_this;
do_something_everytime;
-也ä¸è¦åœ¨ä¸€è¡Œé‡Œæ”¾å¤šå€‹è³¦å€¼èªžå¥ã€‚內核代碼風格超級簡單。就是é¿å…å¯èƒ½å°Žè‡´åˆ¥äººèª¤è®€
+ä¸è¦ä½¿ç”¨é€—號來é¿å…使用大括號:
+
+.. code-block:: c
+
+ if (condition)
+ do_this(), do_that();
+
+使用大括號包裹多語å¥ï¼š
+
+.. code-block:: c
+
+ if (condition) {
+ do_this();
+ do_that();
+ }
+
+也ä¸è¦åœ¨ä¸€è¡Œè£æ”¾å¤šå€‹è³¦å€¼èªžå¥ã€‚內核代碼風格超級簡單。就是é¿å…å¯èƒ½å°Žè‡´åˆ¥äººèª¤è®€
的表é”å¼ã€‚
-除了注釋ã€æ–‡æª”å’Œ Kconfig 之外,ä¸è¦ä½¿ç”¨ç©ºæ ¼ä¾†ç¸®é€²ï¼Œå‰é¢çš„例å­æ˜¯ä¾‹å¤–,是有æ„爲
+除了註釋ã€æ–‡æª”å’Œ Kconfig 之外,ä¸è¦ä½¿ç”¨ç©ºæ ¼ä¾†ç¸®é€²ï¼Œå‰é¢çš„例å­æ˜¯ä¾‹å¤–,是有æ„爲
之。
é¸ç”¨ä¸€å€‹å¥½çš„編輯器,ä¸è¦åœ¨è¡Œå°¾ç•™ç©ºæ ¼ã€‚
2) 把長的行和字符串打散
-------------------------------
+-----------------------
代碼風格的æ„義就在於使用平常使用的工具來維æŒä»£ç¢¼çš„å¯è®€æ€§å’Œå¯ç¶­è­·æ€§ã€‚
æ¯ä¸€è¡Œçš„長度的é™åˆ¶æ˜¯ 80 列,我們強烈建議您éµå®ˆé€™å€‹æ…£ä¾‹ã€‚
é•·æ–¼ 80 列的語å¥è¦æ‰“æ•£æˆæœ‰æ„義的片段。除éžè¶…éŽ 80 列能顯著增加å¯è®€æ€§ï¼Œä¸¦ä¸”ä¸
-會隱è—ä¿¡æ¯ã€‚å­ç‰‡æ®µè¦æ˜Žé¡¯çŸ­æ–¼æ¯ç‰‡æ®µï¼Œä¸¦æ˜Žé¡¯é å³ã€‚這åŒæ¨£é©ç”¨æ–¼æœ‰è‘—很長åƒæ•¸åˆ—表
-的函數頭。然而,絕å°ä¸è¦æ‰“æ•£å°ç”¨æˆ¶å¯è¦‹çš„字符串,例如 printk ä¿¡æ¯ï¼Œå› çˆ²é€™æ¨£å°±
+會隱è—ä¿¡æ¯ã€‚
+
+å­ç‰‡æ®µè¦æ˜Žé¡¯çŸ­æ–¼æ¯ç‰‡æ®µï¼Œä¸¦æ˜Žé¡¯é å³ã€‚一種éžå¸¸å¸¸ç”¨çš„樣å¼æ˜¯å°‡å­é«”與函數左括號å°é½Šã€‚
+
+這åŒæ¨£é©ç”¨æ–¼æœ‰ç€å¾ˆé•·åƒæ•¸åˆ—表的函數頭。
+
+然而,絕å°ä¸è¦æ‰“æ•£å°ç”¨æˆ¶å¯è¦‹çš„字符串,例如 printk ä¿¡æ¯ï¼Œå› çˆ²é€™æ¨£å°±
很難å°å®ƒå€‘ grep。
3) 大括號和空格的放置
-------------------------------
+---------------------
-C 語言風格中å¦å¤–一個常見å•é¡Œæ˜¯å¤§æ‹¬è™Ÿçš„放置。和縮進大å°ä¸åŒï¼Œé¸æ“‡æˆ–棄用æŸç§æ”¾
+C 語言風格中å¦å¤–一個常見å•é¡Œæ˜¯å¤§æ‹¬è™Ÿçš„放置。和縮進大å°ä¸åŒï¼Œé¸æ“‡æˆ–棄用æŸç¨®æ”¾
置策略並沒有多少技術上的原因,ä¸éŽé¦–é¸çš„æ–¹å¼ï¼Œå°±åƒ Kernighan å’Œ Ritchie 展示
給我們的,是把起始大括號放在行尾,而把çµæŸå¤§æ‹¬è™Ÿæ”¾åœ¨è¡Œé¦–,所以:
@@ -135,12 +158,12 @@ C 語言風格中å¦å¤–一個常見å•é¡Œæ˜¯å¤§æ‹¬è™Ÿçš„放置。和縮進大å°
body of function
}
-全世界的異端å¯èƒ½æœƒæŠ±æ€¨é€™å€‹ä¸ä¸€è‡´æ€§æ˜¯... 呃... ä¸ä¸€è‡´çš„,ä¸éŽæ‰€æœ‰æ€ç¶­å¥å…¨çš„人
+全世界的異端å¯èƒ½æœƒæŠ±æ€¨é€™å€‹ä¸ä¸€è‡´æ€§æ˜¯â€¦â€¦å‘ƒâ€¦â€¦ä¸ä¸€è‡´ï¼Œä¸éŽæ‰€æœ‰æ€ç¶­å¥å…¨çš„人
éƒ½çŸ¥é“ (a) K&R 是 **正確的** 並且 (b) K&R 是正確的。此外,ä¸ç®¡æ€Žæ¨£å‡½æ•¸éƒ½æ˜¯ç‰¹
殊的 (C 函數是ä¸èƒ½åµŒå¥—çš„)。
-注æ„çµæŸå¤§æ‹¬è™Ÿç¨è‡ªå æ“šä¸€è¡Œï¼Œé™¤éžå®ƒå¾Œé¢è·Ÿè‘—åŒä¸€å€‹èªžå¥çš„剩餘部分,也就是 do 語
-å¥ä¸­çš„ "while" 或者 if 語å¥ä¸­çš„ "else",åƒé€™æ¨£ï¼š
+注æ„çµæŸå¤§æ‹¬è™Ÿç¨è‡ªä½”據一行,除éžå®ƒå¾Œé¢è·Ÿç€åŒä¸€å€‹èªžå¥çš„剩餘部分,也就是 do 語
+å¥ä¸­çš„ ``while`` 或者 if 語å¥ä¸­çš„ ``else`` ,åƒé€™æ¨£ï¼š
.. code-block:: c
@@ -164,7 +187,7 @@ C 語言風格中å¦å¤–一個常見å•é¡Œæ˜¯å¤§æ‹¬è™Ÿçš„放置。和縮進大å°
也請注æ„這種大括號的放置方å¼ä¹Ÿèƒ½ä½¿ç©º (或者差ä¸å¤šç©ºçš„) 行的數é‡æœ€å°åŒ–,åŒæ™‚ä¸
失å¯è®€æ€§ã€‚因此,由於你的å±å¹•ä¸Šçš„新行是ä¸å¯å†ç”Ÿè³‡æº (想想 25 行的終端å±å¹•),你
-將會有更多的空行來放置注釋。
+將會有更多的空行來放置註釋。
當åªæœ‰ä¸€å€‹å–®ç¨çš„語å¥çš„時候,ä¸ç”¨åŠ ä¸å¿…è¦çš„大括號。
@@ -194,12 +217,12 @@ C 語言風格中å¦å¤–一個常見å•é¡Œæ˜¯å¤§æ‹¬è™Ÿçš„放置。和縮進大å°
}
3.1) 空格
-********************
+*********
Linux å…§æ ¸çš„ç©ºæ ¼ä½¿ç”¨æ–¹å¼ (主è¦) å–決於它是用於函數還是關éµå­—。(大多數) é—œéµå­—
後è¦åŠ ä¸€å€‹ç©ºæ ¼ã€‚值得注æ„的例外是 sizeof, typeof, alignof å’Œ __attribute__,這
-些關éµå­—æŸäº›ç¨‹åº¦ä¸Šçœ‹èµ·ä¾†æ›´åƒå‡½æ•¸ (它們在 Linux 里也常常伴隨å°æ‹¬è™Ÿè€Œä½¿ç”¨ï¼Œå„˜ç®¡
-在 C 里這樣的å°æ‹¬è™Ÿä¸æ˜¯å¿…éœ€çš„ï¼Œå°±åƒ ``struct fileinfo info;`` è²æ˜ŽéŽå¾Œçš„
+些關éµå­—æŸäº›ç¨‹åº¦ä¸Šçœ‹èµ·ä¾†æ›´åƒå‡½æ•¸ (它們在 Linux è£ä¹Ÿå¸¸å¸¸ä¼´éš¨å°æ‹¬è™Ÿè€Œä½¿ç”¨ï¼Œå„˜ç®¡
+在 C è£é€™æ¨£çš„å°æ‹¬è™Ÿä¸æ˜¯å¿…éœ€çš„ï¼Œå°±åƒ ``struct fileinfo info;`` è²æ˜ŽéŽå¾Œçš„
``sizeof info``)。
所以在這些關éµå­—之後放一個空格::
@@ -213,7 +236,7 @@ Linux å…§æ ¸çš„ç©ºæ ¼ä½¿ç”¨æ–¹å¼ (主è¦) å–決於它是用於函數還是關é
s = sizeof(struct file);
-ä¸è¦åœ¨å°æ‹¬è™Ÿé‡Œçš„表é”å¼å…©å´åŠ ç©ºæ ¼ã€‚這是一個 **å例** :
+ä¸è¦åœ¨å°æ‹¬è™Ÿè£çš„表é”å¼å…©å´åŠ ç©ºæ ¼ã€‚這是一個 **å例** :
.. code-block:: c
@@ -257,10 +280,10 @@ Linux å…§æ ¸çš„ç©ºæ ¼ä½¿ç”¨æ–¹å¼ (主è¦) å–決於它是用於函數還是關é
4) 命å
-------------------------------
+-------
-C 是一個簡樸的語言,你的命å也應該這樣。和 Modula-2 å’Œ Pascal 程å¼è¨­è¨ˆå¸«ä¸åŒï¼Œ
-C 程å¼è¨­è¨ˆå¸«ä¸ä½¿ç”¨é¡žä¼¼ ThisVariableIsATemporaryCounter 這樣è¯éº—çš„å字。C 程å¼è¨­è¨ˆå¸«æœƒ
+C 是一個簡樸的語言,你的命å也應該這樣。和 Modula-2 å’Œ Pascal 程åºå“¡ä¸åŒï¼Œ
+C 程åºå“¡ä¸ä½¿ç”¨é¡žä¼¼ ThisVariableIsATemporaryCounter 這樣è¯éº—çš„å字。C 程åºå“¡æœƒ
稱那個變é‡çˆ² ``tmp`` ,這樣寫起來會更容易,而且至少ä¸æœƒä»¤å…¶é›£æ–¼ç†è§£ã€‚
ä¸éŽï¼Œé›–然混用大å°å¯«çš„å字是ä¸æ倡使用的,但是全局變é‡é‚„是需è¦ä¸€å€‹å…·æ述性的
@@ -271,23 +294,42 @@ C 程å¼è¨­è¨ˆå¸«ä¸ä½¿ç”¨é¡žä¼¼ ThisVariableIsATemporaryCounter 這樣è¯éº—çš„
``count_active_users()`` 或者類似的å字,你ä¸æ‡‰è©²å«å®ƒ ``cntuser()`` 。
在函數å中包å«å‡½æ•¸é¡žåž‹ (所謂的匈牙利命å法) 是腦å­å‡ºäº†å•é¡Œâ€”—編譯器知é“那些類
-型而且能夠檢查那些類型,這樣åšåªèƒ½æŠŠç¨‹å¼è¨­è¨ˆå¸«å¼„糊塗了。難怪微軟總是製造出有å•é¡Œ
-的程åºã€‚
+型而且能夠檢查那些類型,這樣åšåªèƒ½æŠŠç¨‹åºå“¡å¼„糊塗了。
本地變é‡å應該簡短,而且能夠表é”相關的å«ç¾©ã€‚如果你有一些隨機的整數型的循環計
數器,它應該被稱爲 ``i`` 。å«å®ƒ ``loop_counter`` 並無益處,如果它沒有被誤解的
å¯èƒ½çš„話。類似的, ``tmp`` å¯ä»¥ç”¨ä¾†ç¨±å‘¼ä»»æ„類型的臨時變é‡ã€‚
如果你怕混淆了你的本地變é‡å,你就é‡åˆ°å¦ä¸€å€‹å•é¡Œäº†ï¼Œå«åšå‡½æ•¸å¢žé•·è·çˆ¾è’™å¤±è¡¡ç¶œ
-åˆç—‡ã€‚請看第六章 (函數)。
+åˆå¾µã€‚請看第六章 (函數)。
+å°æ–¼ç¬¦è™Ÿå稱和文檔,é¿å…引入新的“master/slaveâ€ï¼ˆæˆ–ç¨ç«‹æ–¼â€œmasterâ€çš„“slaveâ€ï¼‰
+和“blacklist/whitelistâ€ã€‚
+
+“master/slaveâ€æŽ¨è–¦æ›¿æ›çˆ²ï¼š
+ '{primary,main} / {secondary,replica,subordinate}'
+ '{initiator,requester} / {target,responder}'
+ '{controller,host} / {device,worker,proxy}'
+ 'leader/follower'
+ 'director/performer'
+
+“blacklist/whitelistâ€æŽ¨è–¦æ›¿æ›çˆ²ï¼š
+ 'denylist/allowlist'
+ 'blocklist/passlist'
+
+引入新用法的例外情æ³æ˜¯ï¼šç¶­è­·ç”¨æˆ¶ç©ºé–“ABI/API,或更新ç¾æœ‰ï¼ˆæˆªè‡³2020年)硬件或
+å”è­°è¦ç¯„的代碼時è¦æ±‚這些術語。å°æ–¼æ–°è¦ç¯„,儘å¯èƒ½å°‡è¡“語的è¦ç¯„用法轉æ›çˆ²å…§æ ¸
+編碼標準。
+
+.. warning::
+ 以上主從ã€é»‘白åå–®è¦å‰‡ä¸é©ç”¨æ–¼ä¸­æ–‡æ–‡æª”,請勿更改中文術語ï¼
5) Typedef
------------
+----------
ä¸è¦ä½¿ç”¨é¡žä¼¼ ``vps_t`` 之類的æ±è¥¿ã€‚
-å°çµæ§‹é«”和指é‡ä½¿ç”¨ typedef 是一個 **錯誤** 。當你在代碼里看到:
+å°çµæ§‹é«”和指é‡ä½¿ç”¨ typedef 是一個 **錯誤** 。當你在代碼è£çœ‹åˆ°ï¼š
.. code-block:: c
@@ -312,13 +354,13 @@ C 程å¼è¨­è¨ˆå¸«ä¸ä½¿ç”¨é¡žä¼¼ ThisVariableIsATemporaryCounter 這樣è¯éº—çš„
.. note::
- ä¸é€æ˜Žæ€§å’Œ "訪å•å‡½æ•¸" 本身是ä¸å¥½çš„。我們使用 pte_t 等類型的原因在於真
+ ä¸é€æ˜Žæ€§å’Œâ€œè¨ªå•å‡½æ•¸â€æœ¬èº«æ˜¯ä¸å¥½çš„。我們使用 pte_t 等類型的原因在於真
的是完全沒有任何共用的å¯è¨ªå•ä¿¡æ¯ã€‚
(b) 清楚的整數類型,如此,這層抽象就å¯ä»¥ **幫助** 消除到底是 ``int`` 還是
``long`` 的混淆。
- u8/u16/u32 是完全沒有å•é¡Œçš„ typedef,ä¸éŽå®ƒå€‘更符åˆé¡žåˆ¥ (d) 而ä¸æ˜¯é€™è£¡ã€‚
+ u8/u16/u32 是完全沒有å•é¡Œçš„ typedef,ä¸éŽå®ƒå€‘更符åˆé¡žåˆ¥ (d) 而ä¸æ˜¯é€™è£ã€‚
.. note::
@@ -345,30 +387,30 @@ C 程å¼è¨­è¨ˆå¸«ä¸ä½¿ç”¨é¡žä¼¼ ThisVariableIsATemporaryCounter 這樣è¯éº—çš„
(e) å¯ä»¥åœ¨ç”¨æˆ¶ç©ºé–“安全使用的類型。
- 在æŸäº›ç”¨æˆ¶ç©ºé–“å¯è¦‹çš„çµæ§‹é«”裡,我們ä¸èƒ½è¦æ±‚ C99 類型而且ä¸èƒ½ç”¨ä¸Šé¢æ到的
+ 在æŸäº›ç”¨æˆ¶ç©ºé–“å¯è¦‹çš„çµæ§‹é«”è£ï¼Œæˆ‘們ä¸èƒ½è¦æ±‚ C99 類型而且ä¸èƒ½ç”¨ä¸Šé¢æ到的
``u32`` 類型。因此,我們在與用戶空間共享的所有çµæ§‹é«”中使用 __u32 和類似
的類型。
å¯èƒ½é‚„有其他的情æ³ï¼Œä¸éŽåŸºæœ¬çš„è¦å‰‡æ˜¯ **æ°¸é ä¸è¦** 使用 typedef,除éžä½ å¯ä»¥æ˜Ž
確的應用上述æŸå€‹è¦å‰‡ä¸­çš„一個。
-總的來說,如果一個指é‡æˆ–者一個çµæ§‹é«”裡的元素å¯ä»¥åˆç†çš„被直接訪å•åˆ°ï¼Œé‚£éº¼å®ƒå€‘
+總的來說,如果一個指é‡æˆ–者一個çµæ§‹é«”è£çš„元素å¯ä»¥åˆç†çš„被直接訪å•åˆ°ï¼Œé‚£éº¼å®ƒå€‘
å°±ä¸æ‡‰è©²æ˜¯ä¸€å€‹ typedef。
6) 函數
-------------------------------
+-------
函數應該簡短而漂亮,並且åªå®Œæˆä¸€ä»¶äº‹æƒ…。函數應該å¯ä»¥ä¸€å±æˆ–者兩å±é¡¯ç¤ºå®Œ (我們
éƒ½çŸ¥é“ ISO/ANSI å±å¹•å¤§å°æ˜¯ 80x24),åªåšä¸€ä»¶äº‹æƒ…,而且把它åšå¥½ã€‚
一個函數的最大長度是和該函數的複雜度和縮進級數æˆå比的。所以,如果你有一個ç†
論上很簡單的åªæœ‰ä¸€å€‹å¾ˆé•· (但是簡單) çš„ case 語å¥çš„函數,而且你需è¦åœ¨æ¯å€‹ case
-里åšå¾ˆå¤šå¾ˆå°çš„事情,這樣的函數儘管很長,但也是å¯ä»¥çš„。
+è£åšå¾ˆå¤šå¾ˆå°çš„事情,這樣的函數儘管很長,但也是å¯ä»¥çš„。
ä¸éŽï¼Œå¦‚果你有一個複雜的函數,而且你懷疑一個天分ä¸æ˜¯å¾ˆé«˜çš„高中一年級學生å¯èƒ½
甚至æžä¸æ¸…楚這個函數的目的,你應該嚴格éµå®ˆå‰é¢æ到的長度é™åˆ¶ã€‚使用輔助函數,
-並爲之å–個具æ述性的åå­— (如果你覺得它們的性能很é‡è¦çš„話,å¯ä»¥è®“編譯器內è¯å®ƒ
+併爲之å–個具æ述性的åå­— (如果你覺得它們的性能很é‡è¦çš„話,å¯ä»¥è®“編譯器內è¯å®ƒ
們,這樣的效果往往會比你寫一個複雜函數的效果è¦å¥½ã€‚)
函數的å¦å¤–一個衡é‡æ¨™æº–是本地變é‡çš„數é‡ã€‚此數é‡ä¸æ‡‰è¶…éŽ 5ï¼10 個,å¦å‰‡ä½ çš„函數
@@ -376,7 +418,7 @@ C 程å¼è¨­è¨ˆå¸«ä¸ä½¿ç”¨é¡žä¼¼ ThisVariableIsATemporaryCounter 這樣è¯éº—çš„
çš„åŒæ™‚跟蹤 7 個ä¸åŒçš„事物,如果å†å¢žå¤šçš„話,就會糊塗了。å³ä¾¿ä½ è°ç©ŽéŽäººï¼Œä½ ä¹Ÿå¯
能會記ä¸æ¸…ä½  2 個星期å‰åšéŽçš„事情。
-在æºæ–‡ä»¶é‡Œï¼Œä½¿ç”¨ç©ºè¡Œéš”é–‹ä¸åŒçš„函數。如果該函數需è¦è¢«å°Žå‡ºï¼Œå®ƒçš„ **EXPORT** å®
+在æºæ–‡ä»¶è£ï¼Œä½¿ç”¨ç©ºè¡Œéš”é–‹ä¸åŒçš„函數。如果該函數需è¦è¢«å°Žå‡ºï¼Œå®ƒçš„ **EXPORT** å®
應該緊貼在它的çµæŸå¤§æ‹¬è™Ÿä¹‹ä¸‹ã€‚比如:
.. code-block:: c
@@ -387,12 +429,46 @@ C 程å¼è¨­è¨ˆå¸«ä¸ä½¿ç”¨é¡žä¼¼ ThisVariableIsATemporaryCounter 這樣è¯éº—çš„
}
EXPORT_SYMBOL(system_is_up);
-在函數原型中,包å«å‡½æ•¸å和它們的數據類型。雖然 C 語言裡沒有這樣的è¦æ±‚,在
-Linux 里這是æ倡的åšæ³•ï¼Œå› çˆ²é€™æ¨£å¯ä»¥å¾ˆç°¡å–®çš„給讀者æ供更多的有價值的信æ¯ã€‚
+6.1) 函數原型
+*************
+
+在函數原型中包å«åƒæ•¸å和它們的數據類型。雖然 C 語言è£æ²’有這樣的è¦æ±‚,但在
+Linux è£é€™æ˜¯æ倡的åšæ³•ï¼Œå› çˆ²é€™æ¨£å¯ä»¥å¾ˆç°¡å–®çš„給讀者æ供更多的有價值的信æ¯ã€‚
+ä¸è¦åœ¨å‡½æ•¸è²æ˜Žè£ä½¿ç”¨ ``extern`` é—œéµå­—,因爲這會導致代碼行變長,並且ä¸æ˜¯åš´æ ¼
+必需的。
+
+寫函數原型時,請ä¿æŒ `元素順åºè¦å‰‡ <https://lore.kernel.org/mm-commits/CAHk-=wiOCLRny5aifWNhr621kYrJwhfURsa0vFPeUEm8mF0ufg@mail.gmail.com/>`_ 。
+例如下列函數è²æ˜Ž::
+
+ __init void * __must_check action(enum magic value, size_t size, u8 count,
+ char *fmt, ...) __printf(4, 5) __malloc;
+
+推薦的函數原型元素順åºæ˜¯ï¼š
+
+- 儲存類型(下方的 ``static __always_inline`` ï¼Œæ³¨æ„ ``__always_inline``
+ æŠ€è¡“ä¸Šä¾†è¬›æ˜¯å€‹å±¬æ€§ä½†è¢«ç•¶åš ``inline`` )
+- 儲存類型屬性(上方的 ``__init`` ——å³ç¯€è²æ˜Žï¼Œä½†ä¹Ÿåƒ ``__cold`` )
+- 返回類型(上方的 ``void *`` )
+- 返回類型屬性(上方的 ``__must_check`` )
+- 函數å(上方的 ``action`` )
+- 函數åƒæ•¸ï¼ˆä¸Šæ–¹çš„ ``(enum magic value, size_t size, u8 count, char *fmt, ...)`` ,
+ 注æ„必須寫上åƒæ•¸å)
+- 函數åƒæ•¸å±¬æ€§ï¼ˆä¸Šæ–¹çš„ ``__printf(4, 5)`` )
+- 函數行爲屬性(上方的 ``__malloc`` )
+
+請注æ„,å°æ–¼å‡½æ•¸ **定義** (å³å¯¦éš›å‡½æ•¸é«”),編譯器ä¸å…許在函數åƒæ•¸ä¹‹å¾Œæ·»åŠ å‡½
+數åƒæ•¸å±¬æ€§ã€‚在這種情æ³ä¸‹ï¼Œå®ƒå€‘應該跟隨存儲類型屬性(例如,與上é¢çš„ **è²æ˜Ž**
+示例相比,請注æ„下é¢çš„ ``__printf(4, 5)`` çš„ä½ç½®ç™¼ç”Ÿäº†è®ŠåŒ–)::
+
+ static __always_inline __init __printf(4, 5) void * __must_check action(enum magic value,
+ size_t size, u8 count, char *fmt, ...) __malloc
+ {
+ ...
+ }
7) 集中的函數退出途徑
-------------------------------
+---------------------
雖然被æŸäº›äººè²ç¨±å·²ç¶“éŽæ™‚,但是 goto 語å¥çš„等價物還是經常被編譯器所使用,具體
å½¢å¼æ˜¯ç„¡æ¢ä»¶è·³è½‰æŒ‡ä»¤ã€‚
@@ -436,7 +512,7 @@ Linux 里這是æ倡的åšæ³•ï¼Œå› çˆ²é€™æ¨£å¯ä»¥å¾ˆç°¡å–®çš„給讀者æä¾›æ›
return result;
}
-一個需è¦æ³¨æ„的常見錯誤是 ``一個 err 錯誤`` ,就åƒé€™æ¨£ï¼š
+一個需è¦æ³¨æ„的常見錯誤是 ``å–® err 錯誤`` ,就åƒé€™æ¨£ï¼š
.. code-block:: c
@@ -459,22 +535,22 @@ Linux 里這是æ倡的åšæ³•ï¼Œå› çˆ²é€™æ¨£å¯ä»¥å¾ˆç°¡å–®çš„給讀者æä¾›æ›
ç†æƒ³æƒ…æ³ä¸‹ï¼Œä½ æ‡‰è©²æ¨¡æ“¬éŒ¯èª¤ä¾†æ¸¬è©¦æ‰€æœ‰é€€å‡ºè·¯å¾‘。
-8) 注釋
-------------------------------
+8) 註釋
+-------
-注釋是好的,ä¸éŽæœ‰éŽåº¦æ³¨é‡‹çš„å±éšªã€‚æ°¸é ä¸è¦åœ¨æ³¨é‡‹é‡Œè§£é‡‹ä½ çš„代碼是如何é‹ä½œçš„:
+註釋是好的,ä¸éŽæœ‰éŽåº¦è¨»é‡‹çš„å±éšªã€‚æ°¸é ä¸è¦åœ¨è¨»é‡‹è£è§£é‡‹ä½ çš„代碼是如何é‹ä½œçš„:
更好的åšæ³•æ˜¯è®“別人一看你的代碼就å¯ä»¥æ˜Žç™½ï¼Œè§£é‡‹å¯«çš„很差的代碼是浪費時間。
-一般的,你想è¦ä½ çš„注釋告訴別人你的代碼åšäº†ä»€éº¼ï¼Œè€Œä¸æ˜¯æ€Žéº¼åšçš„。也請你ä¸è¦æŠŠ
-注釋放在一個函數體內部:如果函數複雜到你需è¦ç¨ç«‹çš„注釋其中的一部分,你很å¯èƒ½
+一般來說你用註釋告訴別人你的代碼åšäº†ä»€éº¼ï¼Œè€Œä¸æ˜¯æ€Žéº¼åšçš„。也請你ä¸è¦æŠŠ
+註釋放在一個函數體內部:如果函數複雜到你需è¦ç¨ç«‹çš„註釋其中的一部分,你很å¯èƒ½
需è¦å›žåˆ°ç¬¬å…­ç« çœ‹ä¸€çœ‹ã€‚ä½ å¯ä»¥åšä¸€äº›å°æ³¨é‡‹ä¾†è¨»æ˜Žæˆ–警告æŸäº›å¾ˆè°æ˜Ž (或者槽糕) çš„
-åšæ³•ï¼Œä½†ä¸è¦åŠ å¤ªå¤šã€‚你應該åšçš„,是把注釋放在函數的頭部,告訴人們它åšäº†ä»€éº¼ï¼Œ
+åšæ³•ï¼Œä½†ä¸è¦åŠ å¤ªå¤šã€‚你應該åšçš„,是把註釋放在函數的頭部,告訴人們它åšäº†ä»€éº¼ï¼Œ
也å¯ä»¥åŠ ä¸Šå®ƒåšé€™äº›äº‹æƒ…的原因。
-當注釋內核 API 函數時,請使用 kernel-doc æ ¼å¼ã€‚請看
-Documentation/doc-guide/ å’Œ scripts/kernel-doc 以ç²å¾—詳細信æ¯ã€‚
+當註釋內核 API 函數時,請使用 kernel-doc æ ¼å¼ã€‚詳見
+Documentation/translations/zh_CN/doc-guide/index.rst 和 scripts/kernel-doc 。
-é•· (多行) 注釋的首é¸é¢¨æ ¼æ˜¯ï¼š
+é•· (多行) 註釋的首é¸é¢¨æ ¼æ˜¯ï¼š
.. code-block:: c
@@ -487,7 +563,7 @@ Documentation/doc-guide/ å’Œ scripts/kernel-doc 以ç²å¾—詳細信æ¯ã€‚
* with beginning and ending almost-blank lines.
*/
-å°æ–¼åœ¨ net/ å’Œ drivers/net/ 的文件,首é¸çš„é•· (多行) 注釋風格有些ä¸åŒã€‚
+å°æ–¼åœ¨ net/ å’Œ drivers/net/ 的文件,首é¸çš„é•· (多行) 註釋風格有些ä¸åŒã€‚
.. code-block:: c
@@ -498,23 +574,24 @@ Documentation/doc-guide/ å’Œ scripts/kernel-doc 以ç²å¾—詳細信æ¯ã€‚
* but there is no initial almost-blank line.
*/
-注釋數據也是很é‡è¦çš„,ä¸ç®¡æ˜¯åŸºæœ¬é¡žåž‹é‚„是è¡ç”Ÿé¡žåž‹ã€‚爲了方便實ç¾é€™ä¸€é»žï¼Œæ¯ä¸€è¡Œ
+註釋數據也是很é‡è¦çš„,ä¸ç®¡æ˜¯åŸºæœ¬é¡žåž‹é‚„是è¡ç”Ÿé¡žåž‹ã€‚爲了方便實ç¾é€™ä¸€é»žï¼Œæ¯ä¸€è¡Œ
應åªè²æ˜Žä¸€å€‹æ•¸æ“š (ä¸è¦ä½¿ç”¨é€—號來一次è²æ˜Žå¤šå€‹æ•¸æ“š)。這樣你就有空間來爲æ¯å€‹æ•¸æ“š
寫一段å°æ³¨é‡‹ä¾†è§£é‡‹å®ƒå€‘的用途了。
9) 你已經把事情弄糟了
-------------------------------
+---------------------
-這沒什麼,我們都是這樣。å¯èƒ½ä½ çš„使用了很長時間 Unix 的朋å‹å·²ç¶“告訴你
-``GNU emacs`` 能自動幫你格å¼åŒ– C 原始碼,而且你也注æ„到了,確實是這樣,ä¸éŽå®ƒ
+這沒什麼,我們都是這樣。å¯èƒ½ä½ é•·æœŸä½¿ç”¨ Unix 的朋å‹å·²ç¶“告訴你
+``GNU emacs`` 能自動幫你格å¼åŒ– C æºä»£ç¢¼ï¼Œè€Œä¸”你也注æ„到了,確實是這樣,ä¸éŽå®ƒ
所使用的默èªå€¼å’Œæˆ‘們想è¦çš„ç›¸åŽ»ç”šé  (實際上,甚至比隨機打的還è¦å·®â€”—無數個猴å­
-在 GNU emacs 里打字永é ä¸æœƒå‰µé€ å‡ºä¸€å€‹å¥½ç¨‹åº) (譯註:Infinite Monkey Theorem)
+在 GNU emacs è£æ‰“å­—æ°¸é ä¸æœƒå‰µé€ å‡ºä¸€å€‹å¥½ç¨‹åº)
+*(譯註:Infinite Monkey Theorem)*
所以你è¦éº¼æ”¾æ£„ GNU emacs,è¦éº¼æ”¹è®Šå®ƒè®“它使用更åˆç†çš„設定。è¦æŽ¡ç”¨å¾Œä¸€å€‹æ–¹æ¡ˆï¼Œ
-ä½ å¯ä»¥æŠŠä¸‹é¢é€™æ®µç²˜è²¼åˆ°ä½ çš„ .emacs 文件里。
+ä½ å¯ä»¥æŠŠä¸‹é¢é€™æ®µç²˜è²¼åˆ°ä½ çš„ .emacs 文件è£ã€‚
-.. code-block:: none
+.. code-block:: elisp
(defun c-lineup-arglist-tabs-only (ignored)
"Line up argument lists by tabs, not spaces"
@@ -533,7 +610,7 @@ Documentation/doc-guide/ å’Œ scripts/kernel-doc 以ç²å¾—詳細信æ¯ã€‚
(c-offsets-alist . (
(arglist-close . c-lineup-arglist-tabs-only)
(arglist-cont-nonempty .
- (c-lineup-gcc-asm-reg c-lineup-arglist-tabs-only))
+ (c-lineup-gcc-asm-reg c-lineup-arglist-tabs-only))
(arglist-intro . +)
(brace-list-intro . +)
(c . c-lineup-C-comments)
@@ -565,24 +642,29 @@ Documentation/doc-guide/ å’Œ scripts/kernel-doc 以ç²å¾—詳細信æ¯ã€‚
這會讓 emacs 在 ``~/src/linux-trees`` 下的 C æºæ–‡ä»¶ç²å¾—更好的內核代碼風格。
-ä¸éŽå°±ç®—你嘗試讓 emacs 正確的格å¼åŒ–代碼失敗了,也並ä¸æ„味著你失去了一切:還å¯
+ä¸éŽå°±ç®—你嘗試讓 emacs 正確的格å¼åŒ–代碼失敗了,也並ä¸æ„味ç€ä½ å¤±åŽ»äº†ä¸€åˆ‡ï¼šé‚„å¯
以用 ``indent`` 。
ä¸éŽï¼ŒGNU indent 也有和 GNU emacs 一樣有å•é¡Œçš„設定,所以你需è¦çµ¦å®ƒä¸€äº›å‘½ä»¤é¸
項。ä¸éŽï¼Œé€™é‚„ä¸ç®—太糟糕,因爲就算是 GNU indent 的作者也èªåŒ K&R 的權å¨æ€§
(GNU 的人並ä¸æ˜¯å£žäººï¼Œä»–們åªæ˜¯åœ¨é€™å€‹å•é¡Œä¸Šè¢«åš´é‡çš„誤導了),所以你åªè¦çµ¦ indent
指定é¸é … ``-kr -i8`` (代表 ``K&R,8 字符縮進``),或使用 ``scripts/Lindent``
-這樣就å¯ä»¥ä»¥æœ€æ™‚髦的方å¼ç¸®é€²åŽŸå§‹ç¢¼ã€‚
+這樣就å¯ä»¥ä»¥æœ€æ™‚髦的方å¼ç¸®é€²æºä»£ç¢¼ã€‚
-``indent`` 有很多é¸é …,特別是é‡æ–°æ ¼å¼åŒ–注釋的時候,你å¯èƒ½éœ€è¦çœ‹ä¸€ä¸‹å®ƒçš„手冊。
+``indent`` 有很多é¸é …,特別是é‡æ–°æ ¼å¼åŒ–註釋的時候,你å¯èƒ½éœ€è¦çœ‹ä¸€ä¸‹å®ƒçš„手冊。
ä¸éŽè¨˜ä½ï¼š ``indent`` ä¸èƒ½ä¿®æ­£å£žçš„編程習慣。
+請注æ„,您還å¯ä»¥ä½¿ç”¨ ``clang-format`` 工具幫助您處ç†é€™äº›è¦å‰‡ï¼Œå¿«é€Ÿè‡ªå‹•é‡æ–°æ ¼
+å¼åŒ–部分代碼,並審閱整個文件以發ç¾ä»£ç¢¼é¢¨æ ¼éŒ¯èª¤ã€æ‰“字錯誤和å¯èƒ½çš„改進。它還å¯
+ä»¥æ–¹ä¾¿åœ°æŽ’åº ``#include`` ,å°é½Šè®Šé‡/å®ï¼Œé‡æŽ’文本和其他類似任務。
+詳見 Documentation/process/clang-format.rst 。
+
10) Kconfig é…置文件
-------------------------------
+--------------------
-å°æ–¼é布æºç¢¼æ¨¹çš„所有 Kconfig* é…置文件來說,它們縮進方å¼æœ‰æ‰€ä¸åŒã€‚緊挨著
-``config`` 定義的行,用一個制表符縮進,然而 help ä¿¡æ¯çš„縮進則é¡å¤–增加 2 個空
+å°æ–¼é佈æºç¢¼æ¨¹çš„所有 Kconfig* é…置文件來說,它們縮進方å¼æœ‰æ‰€ä¸åŒã€‚緊挨ç€
+``config`` 定義的行,用一個製表符縮進,然而 help ä¿¡æ¯çš„縮進則é¡å¤–增加 2 個空
格。舉個例å­::
config AUDIT
@@ -594,7 +676,7 @@ Documentation/doc-guide/ å’Œ scripts/kernel-doc 以ç²å¾—詳細信æ¯ã€‚
logging of avc messages output). Does not do system-call
auditing without CONFIG_AUDITSYSCALL.
-而那些å±éšªçš„功能 (比如æŸäº›æ–‡ä»¶ç³»çµ±çš„寫支æŒ) 應該在它們的æ示字符串里顯著的è²
+而那些å±éšªçš„功能 (比如æŸäº›æ–‡ä»¶ç³»çµ±çš„寫支æŒ) 應該在它們的æ示字符串è£é¡¯è‘—çš„è²
明這一點::
config ADFS_FS_RW
@@ -602,17 +684,17 @@ Documentation/doc-guide/ å’Œ scripts/kernel-doc 以ç²å¾—詳細信æ¯ã€‚
depends on ADFS_FS
...
-è¦æŸ¥çœ‹é…置文件的完整文檔,請看 Documentation/kbuild/kconfig-language.rst。
+è¦æŸ¥çœ‹é…置文件的完整文檔,請看 Documentation/kbuild/kconfig-language.rst 。
11) 數據çµæ§‹
-------------------------------
+------------
-如果一個數據çµæ§‹ï¼Œåœ¨å‰µå»ºå’ŒéŠ·æ¯€å®ƒçš„單線執行環境之外å¯è¦‹ï¼Œé‚£éº¼å®ƒå¿…é ˆè¦æœ‰ä¸€å€‹å¼•
-用計數器。內核里沒有垃圾收集 (並且內核之外的垃圾收集慢且效率低下),這æ„味著你
+如果一個數據çµæ§‹ï¼Œåœ¨å‰µå»ºå’ŒéŠ·ç‡¬å®ƒçš„單線執行環境之外å¯è¦‹ï¼Œé‚£éº¼å®ƒå¿…é ˆè¦æœ‰ä¸€å€‹å¼•
+用計數器。內核è£æ²’有垃圾收集 (並且內核之外的垃圾收集慢且效率低下),這æ„味ç€ä½ 
絕å°éœ€è¦è¨˜éŒ„ä½ å°é€™ç¨®æ•¸æ“šçµæ§‹çš„使用情æ³ã€‚
-引用計數æ„味著你能夠é¿å…上鎖,並且å…許多個用戶並行訪å•é€™å€‹æ•¸æ“šçµæ§‹â€”—而ä¸éœ€è¦
+引用計數æ„味ç€ä½ èƒ½å¤ é¿å…上鎖,並且å…許多個用戶並行訪å•é€™å€‹æ•¸æ“šçµæ§‹â€”—而ä¸éœ€è¦
擔心這個數據çµæ§‹åƒ…僅因爲暫時ä¸è¢«ä½¿ç”¨å°±æ¶ˆå¤±äº†ï¼Œé‚£äº›ç”¨æˆ¶å¯èƒ½ä¸éŽæ˜¯æ²‰ç¡äº†ä¸€é™£æˆ–
者åšäº†ä¸€äº›å…¶ä»–事情而已。
@@ -626,13 +708,13 @@ Documentation/doc-guide/ å’Œ scripts/kernel-doc 以ç²å¾—詳細信æ¯ã€‚
mm_count),和文件系統 (``struct super_block``: s_count 和 s_active) 中找到。
記ä½ï¼šå¦‚æžœå¦ä¸€å€‹åŸ·è¡Œç·šç´¢å¯ä»¥æ‰¾åˆ°ä½ çš„數據çµæ§‹ï¼Œä½†é€™å€‹æ•¸æ“šçµæ§‹æ²’有引用計數器,
-這裡幾乎肯定是一個 bug。
+這è£å¹¾ä¹Žè‚¯å®šæ˜¯ä¸€å€‹ bug。
12) å®ï¼Œæžšèˆ‰å’ŒRTL
-------------------------------
+-----------------
-用於定義常é‡çš„å®çš„åå­—åŠæžšèˆ‰é‡Œçš„標籤需è¦å¤§å¯«ã€‚
+用於定義常é‡çš„å®çš„åå­—åŠæžšèˆ‰è£çš„標籤需è¦å¤§å¯«ã€‚
.. code-block:: c
@@ -642,9 +724,9 @@ mm_count),和文件系統 (``struct super_block``: s_count å’Œ s_active) 中æ‰
å®çš„å字請用大寫字æ¯ï¼Œä¸éŽå½¢å¦‚函數的å®çš„åå­—å¯ä»¥ç”¨å°å¯«å­—æ¯ã€‚
-一般的,如果能寫æˆå…§è¯å‡½æ•¸å°±ä¸è¦å¯«æˆåƒå‡½æ•¸çš„å®ã€‚
+通常如果能寫æˆå…§è¯å‡½æ•¸å°±ä¸è¦å¯«æˆåƒå‡½æ•¸çš„å®ã€‚
-å«æœ‰å¤šå€‹èªžå¥çš„å®æ‡‰è©²è¢«åŒ…å«åœ¨ä¸€å€‹ do-while 代碼塊里:
+å«æœ‰å¤šå€‹èªžå¥çš„å®æ‡‰è©²è¢«åŒ…å«åœ¨ä¸€å€‹ do-while 代碼塊è£ï¼š
.. code-block:: c
@@ -667,7 +749,7 @@ mm_count),和文件系統 (``struct super_block``: s_count å’Œ s_active) 中æ‰
} while (0)
**éžå¸¸** ä¸å¥½ã€‚它看起來åƒä¸€å€‹å‡½æ•¸ï¼Œä¸éŽå»èƒ½å°Žè‡´ ``調用`` 它的函數退出;ä¸è¦æ‰“
-亂讀者大腦里的語法分æžå™¨ã€‚
+亂讀者大腦è£çš„語法分æžå™¨ã€‚
2) ä¾è³´æ–¼ä¸€å€‹å›ºå®šå字的本地變é‡çš„å®ï¼š
@@ -689,7 +771,7 @@ mm_count),和文件系統 (``struct super_block``: s_count å’Œ s_active) 中æ‰
#define CONSTANT 0x4000
#define CONSTEXP (CONSTANT | 3)
-5) 在å®é‡Œå®šç¾©é¡žä¼¼å‡½æ•¸çš„本地變é‡æ™‚命åè¡çªï¼š
+5) 在å®è£å®šç¾©é¡žä¼¼å‡½æ•¸çš„本地變é‡æ™‚命åè¡çªï¼š
.. code-block:: c
@@ -700,45 +782,46 @@ mm_count),和文件系統 (``struct super_block``: s_count å’Œ s_active) 中æ‰
(ret); \
})
-ret 是本地變é‡çš„通用åå­— - __foo_ret æ›´ä¸å®¹æ˜“與一個已存在的變é‡è¡çªã€‚
+ret 是本地變é‡çš„通用å字—— __foo_ret æ›´ä¸å®¹æ˜“與一個已存在的變é‡è¡çªã€‚
-cpp 手冊å°å®çš„講解很詳細。gcc internals 手冊也詳細講解了 RTL,內核里的彙編語
+cpp 手冊å°å®çš„講解很詳細。gcc internals 手冊也詳細講解了 RTL,內核è£çš„彙編語
言經常用到它。
-13) 列å°å…§æ ¸æ¶ˆæ¯
-------------------------------
+13) 打å°å…§æ ¸æ¶ˆæ¯
+----------------
-內核開發者應該是å—éŽè‰¯å¥½æ•™è‚²çš„。請一定注æ„內核信æ¯çš„拼寫,以給人以好的å°è±¡ã€‚
+內核開發者應該看起來有文化。請一定注æ„內核信æ¯çš„拼寫,以給人良好的å°è±¡ã€‚
ä¸è¦ç”¨ä¸è¦ç¯„的單詞比如 ``dont``,而è¦ç”¨ ``do not`` 或者 ``don't`` 。ä¿è­‰é€™äº›ä¿¡
-æ¯ç°¡å–®æ˜Žäº†,無歧義。
+æ¯ç°¡å–®æ˜Žçž­ã€ç„¡æ­§ç¾©ã€‚
內核信æ¯ä¸å¿…以英文å¥è™ŸçµæŸã€‚
-在å°æ‹¬è™Ÿé‡Œåˆ—å°æ•¸å­— (%d) 沒有任何價值,應該é¿å…這樣åšã€‚
+在å°æ‹¬è™Ÿè£æ‰“å°æ•¸å­— (%d) 沒有任何價值,應該é¿å…這樣åšã€‚
-<linux/device.h> 里有一些驅動模型診斷å®ï¼Œä½ æ‡‰è©²ä½¿ç”¨å®ƒå€‘,以確ä¿ä¿¡æ¯å°æ‡‰æ–¼æ­£ç¢º
+<linux/device.h> è£æœ‰ä¸€äº›é©…動模型診斷å®ï¼Œä½ æ‡‰è©²ä½¿ç”¨å®ƒå€‘,以確ä¿ä¿¡æ¯å°æ‡‰æ–¼æ­£ç¢º
的設備和驅動,並且被標記了正確的消æ¯ç´šåˆ¥ã€‚這些å®æœ‰ï¼šdev_err(), dev_warn(),
dev_info() 等等。å°æ–¼é‚£äº›ä¸å’ŒæŸå€‹ç‰¹å®šè¨­å‚™ç›¸é—œé€£çš„ä¿¡æ¯ï¼Œ<linux/printk.h> 定義
了 pr_notice(), pr_info(), pr_warn(), pr_err() 和其他。
寫出好的調試信æ¯å¯ä»¥æ˜¯ä¸€å€‹å¾ˆå¤§çš„挑戰;一旦你寫出後,這些信æ¯åœ¨é ç¨‹é™¤éŒ¯æ™‚能æ
-供極大的幫助。然而列å°èª¿è©¦ä¿¡æ¯çš„處ç†æ–¹å¼åŒåˆ—å°éžèª¿è©¦ä¿¡æ¯ä¸åŒã€‚其他 pr_XXX()
-函數能無æ¢ä»¶åœ°åˆ—å°ï¼Œpr_debug() å»ä¸ï¼›é»˜èªæƒ…æ³ä¸‹å®ƒä¸æœƒè¢«ç·¨è­¯ï¼Œé™¤éžå®šç¾©äº† DEBUG
+供極大的幫助。然而打å°èª¿è©¦ä¿¡æ¯çš„處ç†æ–¹å¼åŒæ‰“å°éžèª¿è©¦ä¿¡æ¯ä¸åŒã€‚其他 pr_XXX()
+函數能無æ¢ä»¶åœ°æ‰“å°ï¼Œpr_debug() å»ä¸ï¼›é»˜èªæƒ…æ³ä¸‹å®ƒä¸æœƒè¢«ç·¨è­¯ï¼Œé™¤éžå®šç¾©äº† DEBUG
或設定了 CONFIG_DYNAMIC_DEBUG。實際這åŒæ¨£æ˜¯çˆ²äº† dev_dbg(),一個相關約定是在一
個已經開啓了 DEBUG 時,使用 VERBOSE_DEBUG 來添加 dev_vdbg()。
-許多å­ç³»çµ±æ“有 Kconfig 調試é¸é …來開啓 -DDEBUG 在å°æ‡‰çš„ Makefile 裡é¢ï¼›åœ¨å…¶ä»–
-情æ³ä¸‹ï¼Œç‰¹æ®Šæ–‡ä»¶ä½¿ç”¨ #define DEBUG。當一æ¢èª¿è©¦ä¿¡æ¯éœ€è¦è¢«ç„¡æ¢ä»¶åˆ—å°æ™‚,例如,
+許多å­ç³»çµ±æ“有 Kconfig 調試é¸é …來開啓å°æ‡‰ Makefile è£é¢çš„ -DDEBUG;在其他
+情æ³ä¸‹ï¼Œç‰¹æ®Šæ–‡ä»¶ä½¿ç”¨ #define DEBUG。當一æ¢èª¿è©¦ä¿¡æ¯éœ€è¦è¢«ç„¡æ¢ä»¶æ‰“å°æ™‚,例如,
如果已經包å«ä¸€å€‹èª¿è©¦ç›¸é—œçš„ #ifdef æ¢ä»¶ï¼Œprintk(KERN_DEBUG ...) å°±å¯è¢«ä½¿ç”¨ã€‚
14) 分é…內存
-------------------------------
+------------
內核æ供了下é¢çš„一般用途的內存分é…函數:
kmalloc(), kzalloc(), kmalloc_array(), kcalloc(), vmalloc() 和 vzalloc()。
-è«‹åƒè€ƒ API 文檔以ç²å–有關它們的詳細信æ¯ã€‚
+è«‹åƒè€ƒ API 文檔以ç²å–有關它們的詳細信æ¯ï¼š
+Documentation/translations/zh_CN/core-api/memory-allocation.rst 。
傳éžçµæ§‹é«”大å°çš„首é¸å½¢å¼æ˜¯é€™æ¨£çš„:
@@ -765,17 +848,19 @@ kmalloc(), kzalloc(), kmalloc_array(), kcalloc(), vmalloc() 和 vzalloc()。
p = kcalloc(n, sizeof(...), ...);
-兩種形å¼æª¢æŸ¥åˆ†é…å¤§å° n * sizeof(...) 的溢出,如果溢出返回 NULL。
+兩種形å¼éƒ½æœƒæª¢æŸ¥åˆ†é… n * sizeof(...) 大å°æ™‚內存的溢出,如果溢出返回 NULL。
+在沒有 __GFP_NOWARN 的情æ³ä¸‹ä½¿ç”¨æ™‚,這些通用分é…函數都會在失敗時發起堆棧轉儲,
+因此當返回NULL時,沒有必è¦ç™¼å‡ºé¡å¤–的失敗消æ¯ã€‚
15) å…§è¯å¼Šç—…
-------------------------------
+------------
有一個常見的誤解是 ``å…§è¯`` 是 gcc æ供的å¯ä»¥è®“代碼é‹è¡Œæ›´å¿«çš„一個é¸é …。雖然使
用內è¯å‡½æ•¸æœ‰æ™‚候是æ°ç•¶çš„ (比如作爲一種替代å®çš„æ–¹å¼ï¼Œè«‹çœ‹ç¬¬å二章),ä¸éŽå¾ˆå¤šæƒ…
æ³ä¸‹ä¸æ˜¯é€™æ¨£ã€‚inline çš„éŽåº¦ä½¿ç”¨æœƒä½¿å…§æ ¸è®Šå¤§ï¼Œå¾žè€Œä½¿æ•´å€‹ç³»çµ±é‹è¡Œé€Ÿåº¦è®Šæ…¢ã€‚
-因爲體ç©å¤§å…§æ ¸æœƒå ç”¨æ›´å¤šçš„指令高速緩存,而且會導致 pagecache çš„å¯ç”¨å…§å­˜æ¸›å°‘。
-想åƒä¸€ä¸‹ï¼Œä¸€æ¬¡ pagecache 未命中就會導致一次ç£ç¢Ÿå°‹å€ï¼Œå°‡è€—時 5 毫秒。5 毫秒的
+因爲體ç©å¤§å…§æ ¸æœƒä½”用更多的指令高速緩存,而且會導致 pagecache çš„å¯ç”¨å…§å­˜æ¸›å°‘。
+想象一下,一次 pagecache 未命中就會導致一次ç£ç›¤å°‹å€ï¼Œå°‡è€—時 5 毫秒。5 毫秒的
時間內 CPU 能執行很多很多指令。
一個基本的原則是如果一個函數有 3 行以上,就ä¸è¦æŠŠå®ƒè®Šæˆå…§è¯å‡½æ•¸ã€‚這個原則的一
@@ -790,7 +875,7 @@ inline gcc 也å¯ä»¥è‡ªå‹•ä½¿å…¶å…§è¯ã€‚而且其他用戶å¯èƒ½æœƒè¦æ±‚移除
16) 函數返回值åŠå‘½å
-------------------------------
+--------------------
函數å¯ä»¥è¿”回多種ä¸åŒé¡žåž‹çš„值,最常見的一種是表明函數執行æˆåŠŸæˆ–者失敗的值。這樣
的一個值å¯ä»¥è¡¨ç¤ºçˆ²ä¸€å€‹éŒ¯èª¤ä»£ç¢¼æ•´æ•¸ (-Exxxï¼å¤±æ•—,0ï¼æˆåŠŸ) 或者一個 ``æˆåŠŸ``
@@ -801,7 +886,7 @@ inline gcc 也å¯ä»¥è‡ªå‹•ä½¿å…¶å…§è¯ã€‚而且其他用戶å¯èƒ½æœƒè¦æ±‚移除
產生這種 bug,請éµå¾ªä¸‹é¢çš„慣例::
如果函數的å字是一個動作或者強制性的命令,那麼這個函數應該返回錯誤代
- 碼整數。如果是一個判斷,那麼函數應該返回一個 "æˆåŠŸ" 布爾值。
+ 碼整數。如果是一個判斷,那麼函數應該返回一個“æˆåŠŸâ€å¸ƒçˆ¾å€¼ã€‚
比如, ``add work`` 是一個命令,所以 add_work() 在æˆåŠŸæ™‚返回 0,在失敗時返回
-EBUSY。類似的,因爲 ``PCI device present`` 是一個判斷,所以 pci_dev_present()
@@ -810,13 +895,35 @@ inline gcc 也å¯ä»¥è‡ªå‹•ä½¿å…¶å…§è¯ã€‚而且其他用戶å¯èƒ½æœƒè¦æ±‚移除
所有 EXPORTed 函數都必須éµå®ˆé€™å€‹æ…£ä¾‹ï¼Œæ‰€æœ‰çš„公共函數也都應該如此。ç§æœ‰
(static) 函數ä¸éœ€è¦å¦‚此,但是我們也推薦這樣åšã€‚
-返回值是實際計算çµæžœè€Œä¸æ˜¯è¨ˆç®—是å¦æˆåŠŸçš„標誌的函數ä¸å—此慣例的é™åˆ¶ã€‚一般的,
+返回值是實際計算çµæžœè€Œä¸æ˜¯è¨ˆç®—是å¦æˆåŠŸçš„標誌的函數ä¸å—此慣例的é™åˆ¶ã€‚通常
他們通éŽè¿”回一些正常值範åœä¹‹å¤–çš„çµæžœä¾†è¡¨ç¤ºå‡ºéŒ¯ã€‚典型的例å­æ˜¯è¿”回指é‡çš„函數,
他們使用 NULL 或者 ERR_PTR 機制來報告錯誤。
+17) 使用布爾類型
+----------------
+
+Linux內核布爾(bool)類型是C99 _Bool類型的別å。布爾值åªèƒ½çˆ²0或1,而å°å¸ƒçˆ¾çš„
+éš±å¼æˆ–顯å¼è½‰æ›å°‡è‡ªå‹•å°‡å€¼è½‰æ›çˆ²true或false。在使用布爾類型時 **ä¸éœ€è¦** 構造,
+它會消除一類錯誤。
+
+使用布爾值時,應使用trueå’Œfalse定義,而ä¸æ˜¯1å’Œ0。
-17) ä¸è¦é‡æ–°ç™¼æ˜Žå…§æ ¸å®
-------------------------------
+布爾函數返回類型和堆棧變é‡ç¸½æ˜¯å¯ä»¥åœ¨é©ç•¶çš„時候使用。鼓勵使用布爾來æ高å¯è®€æ€§ï¼Œ
+並且布爾值在存儲時通常比“intâ€æ›´å¥½ã€‚
+
+如果緩存行佈局或值的大å°å¾ˆé‡è¦ï¼Œè«‹ä¸è¦ä½¿ç”¨å¸ƒçˆ¾ï¼Œå› çˆ²å…¶å¤§å°å’Œå°é½Šæ–¹å¼æ ¹æ“šç·¨è­¯
+的體系çµæ§‹è€Œä¸åŒã€‚é‡å°å°é½Šå’Œå¤§å°é€²è¡Œå„ªåŒ–çš„çµæ§‹é«”ä¸æ‡‰ä½¿ç”¨å¸ƒçˆ¾ã€‚
+
+如果一個çµæ§‹é«”有多個true/false值,請考慮將它們åˆä½µçˆ²å…·æœ‰1比特æˆå“¡çš„ä½åŸŸï¼Œæˆ–使
+用é©ç•¶çš„固定寬度類型,如u8。
+
+類似地,å°æ–¼å‡½æ•¸åƒæ•¸ï¼Œå¤šå€‹true/false值å¯ä»¥åˆä½µçˆ²å–®å€‹æŒ‰ä½çš„“標誌â€åƒæ•¸ï¼Œå¦‚果調
+用點具有裸true/false常é‡ï¼Œâ€œæ¨™èªŒâ€åƒæ•¸é€šå¸¸æ˜¯æ›´å…·å¯è®€æ€§çš„替代方法。
+
+總之,在çµæ§‹é«”å’Œåƒæ•¸ä¸­æœ‰é™åœ°ä½¿ç”¨å¸ƒçˆ¾å¯ä»¥æ高å¯è®€æ€§ã€‚
+
+18) ä¸è¦é‡æ–°ç™¼æ˜Žå…§æ ¸å®
+----------------------
頭文件 include/linux/kernel.h 包å«äº†ä¸€äº›å®ï¼Œä½ æ‡‰è©²ä½¿ç”¨å®ƒå€‘,而ä¸è¦è‡ªå·±å¯«ä¸€äº›
它們的變種。比如,如果你需è¦è¨ˆç®—一個數組的長度,使用這個å®
@@ -832,15 +939,15 @@ inline gcc 也å¯ä»¥è‡ªå‹•ä½¿å…¶å…§è¯ã€‚而且其他用戶å¯èƒ½æœƒè¦æ±‚移除
#define sizeof_field(t, f) (sizeof(((t*)0)->f))
還有å¯ä»¥åšåš´æ ¼çš„類型檢查的 min() å’Œ max() å®ï¼Œå¦‚果你需è¦å¯ä»¥ä½¿ç”¨å®ƒå€‘。你å¯ä»¥
-自己看看那個頭文件里還定義了什麼你å¯ä»¥æ‹¿ä¾†ç”¨çš„æ±è¥¿ï¼Œå¦‚果有定義的話,你就ä¸æ‡‰
-在你的代碼里自己é‡æ–°å®šç¾©ã€‚
+自己看看那個頭文件è£é‚„定義了什麼你å¯ä»¥æ‹¿ä¾†ç”¨çš„æ±è¥¿ï¼Œå¦‚果有定義的話,你就ä¸æ‡‰
+在你的代碼è£è‡ªå·±é‡æ–°å®šç¾©ã€‚
-18) 編輯器模å¼è¡Œå’Œå…¶ä»–需è¦ç¾…嗦的事情
---------------------------------------------------
+19) 編輯器模å¼è¡Œå’Œå…¶ä»–需è¦ç¾…嗦的事情
+------------------------------------
-有一些編輯器å¯ä»¥è§£é‡‹åµŒå…¥åœ¨æºæ–‡ä»¶é‡Œçš„由一些特殊標記標明的é…置信æ¯ã€‚比如,emacs
-能夠解釋被標記æˆé€™æ¨£çš„行:
+有一些編輯器å¯ä»¥è§£é‡‹åµŒå…¥åœ¨æºæ–‡ä»¶è£çš„由一些特殊標記標明的é…置信æ¯ã€‚比如,emacs
+能夠解æžè¢«æ¨™è¨˜æˆé€™æ¨£çš„行:
.. code-block:: c
@@ -856,23 +963,23 @@ inline gcc 也å¯ä»¥è‡ªå‹•ä½¿å…¶å…§è¯ã€‚而且其他用戶å¯èƒ½æœƒè¦æ±‚移除
End:
*/
-Vim 能夠解釋這樣的標記:
+Vim 能夠解æžé€™æ¨£çš„標記:
.. code-block:: c
/* vim:set sw=8 noet */
-ä¸è¦åœ¨åŽŸå§‹ç¢¼ä¸­åŒ…å«ä»»ä½•é€™æ¨£çš„內容。æ¯å€‹äººéƒ½æœ‰ä»–自己的編輯器é…置,你的æºæ–‡ä»¶ä¸
+ä¸è¦åœ¨æºä»£ç¢¼ä¸­åŒ…å«ä»»ä½•é€™æ¨£çš„內容。æ¯å€‹äººéƒ½æœ‰ä»–自己的編輯器é…置,你的æºæ–‡ä»¶ä¸
應該覆蓋別人的é…置。這包括有關縮進和模å¼é…置的標記。人們å¯ä»¥ä½¿ç”¨ä»–們自己定製
的模å¼ï¼Œæˆ–者使用其他å¯ä»¥ç”¢ç”Ÿæ­£ç¢ºçš„縮進的巧妙方法。
-19) å…§è¯å½™ç·¨
-------------------------------
+20) å…§è¯å½™ç·¨
+------------
-在特定架構的代碼中,你å¯èƒ½éœ€è¦å…§è¯å½™ç·¨èˆ‡ CPU 和平å°ç›¸é—œåŠŸèƒ½é€£æŽ¥ã€‚需è¦é€™éº¼åšæ™‚
+在特定架構的代碼中,你å¯èƒ½éœ€è¦å…§è¯å½™ç·¨èˆ‡ CPU 和平臺相關功能連接。需è¦é€™éº¼åšæ™‚
å°±ä¸è¦çŒ¶è±«ã€‚然而,當 C å¯ä»¥å®Œæˆå·¥ä½œæ™‚,ä¸è¦å¹³ç™½ç„¡æ•…地使用內è¯å½™ç·¨ã€‚在å¯èƒ½çš„情
-æ³ä¸‹ï¼Œä½ å¯ä»¥ä¸¦ä¸”應該用 C 和硬體æºé€šã€‚
+æ³ä¸‹ï¼Œä½ å¯ä»¥ä¸¦ä¸”應該用 C 和硬件æºé€šã€‚
請考慮去寫æ†ç¶é€šç”¨ä½å…ƒ (wrap common bits) çš„å…§è¯å½™ç·¨çš„簡單輔助函數,別去é‡è¤‡
地寫下åªæœ‰ç´°å¾®å·®ç•°å…§è¯å½™ç·¨ã€‚記ä½å…§è¯å½™ç·¨å¯ä»¥ä½¿ç”¨ C åƒæ•¸ã€‚
@@ -883,9 +990,9 @@ Vim 能夠解釋這樣的標記:
ä½ å¯èƒ½éœ€è¦æŠŠå½™ç·¨èªžå¥æ¨™è¨˜çˆ² volatile,用來阻止 GCC 在沒發ç¾ä»»ä½•å‰¯ä½œç”¨å¾Œå°±æŠŠå®ƒ
移除了。你ä¸å¿…總是這樣åšï¼Œå„˜ç®¡ï¼Œé€™ä¸å¿…è¦çš„舉動會é™åˆ¶å„ªåŒ–。
-在寫一個包å«å¤šæ¢æŒ‡ä»¤çš„單個內è¯å½™ç·¨èªžå¥æ™‚,把æ¯æ¢æŒ‡ä»¤ç”¨å¼•è™Ÿåˆ†å‰²è€Œä¸”å„å ä¸€è¡Œï¼Œ
-除了最後一æ¢æŒ‡ä»¤å¤–,在æ¯å€‹æŒ‡ä»¤çµå°¾åŠ ä¸Š \n\t,讓彙編輸出時å¯ä»¥æ­£ç¢ºåœ°ç¸®é€²ä¸‹ä¸€æ¢
-指令:
+在寫一個包å«å¤šæ¢æŒ‡ä»¤çš„單個內è¯å½™ç·¨èªžå¥æ™‚,把æ¯æ¢æŒ‡ä»¤ç”¨å¼•è™Ÿåˆ†å‰²è€Œä¸”å„佔一行,
+除了最後一æ¢æŒ‡ä»¤å¤–,在æ¯å€‹æŒ‡ä»¤çµå°¾åŠ ä¸Š ``\n\t`` ,讓彙編輸出時å¯ä»¥æ­£ç¢ºåœ°ç¸®é€²
+下一æ¢æŒ‡ä»¤ï¼š
.. code-block:: c
@@ -894,10 +1001,10 @@ Vim 能夠解釋這樣的標記:
: /* outputs */ : /* inputs */ : /* clobbers */);
-20) æ¢ä»¶ç·¨è­¯
-------------------------------
+21) æ¢ä»¶ç·¨è­¯
+------------
-åªè¦å¯èƒ½ï¼Œå°±ä¸è¦åœ¨ .c 文件裡é¢ä½¿ç”¨é è™•ç†æ¢ä»¶ (#if, #ifdef);這樣åšè®“代碼更難
+åªè¦å¯èƒ½ï¼Œå°±ä¸è¦åœ¨ .c 文件è£é¢ä½¿ç”¨é è™•ç†æ¢ä»¶ (#if, #ifdef);這樣åšæœƒè®“代碼更難
閱讀並且更難去跟蹤é‚輯。替代方案是,在頭文件中用é è™•ç†æ¢ä»¶æ供給那些 .c 文件
使用,å†çµ¦ #else æä¾›ä¸€å€‹ç©ºæ¨ (no-op stub) 版本,然後在 .c 文件內無æ¢ä»¶åœ°èª¿ç”¨
那些 (定義在頭文件內的) 函數。這樣åšï¼Œç·¨è­¯å™¨æœƒé¿å…爲æ¨å‡½æ•¸ (stub) 的調用生æˆ
@@ -908,8 +1015,8 @@ Vim 能夠解釋這樣的標記:
æ¢ä»¶åˆ°é€™å€‹è¼”助函數內。
如果你有一個在特定é…置中,å¯èƒ½è®Šæˆæœªä½¿ç”¨çš„函數或變é‡ï¼Œç·¨è­¯å™¨æœƒè­¦å‘Šå®ƒå®šç¾©äº†ä½†
-未使用,把它標記爲 __maybe_unused 而ä¸æ˜¯å°‡å®ƒåŒ…å«åœ¨ä¸€å€‹é è™•ç†æ¢ä»¶ä¸­ã€‚(然而,如
-果一個函數或變é‡ç¸½æ˜¯æœªä½¿ç”¨ï¼Œå°±ç›´æŽ¥åˆªé™¤å®ƒã€‚)
+未使用,請把它標記爲 __maybe_unused 而ä¸æ˜¯å°‡å®ƒåŒ…å«åœ¨ä¸€å€‹é è™•ç†æ¢ä»¶ä¸­ã€‚(然而,
+如果一個函數或變é‡ç¸½æ˜¯æœªä½¿ç”¨ï¼Œå°±ç›´æŽ¥åˆªé™¤å®ƒã€‚)
在代碼中,儘å¯èƒ½åœ°ä½¿ç”¨ IS_ENABLED å®ä¾†è½‰åŒ–æŸå€‹ Kconfig 標記爲 C 的布爾
表é”å¼ï¼Œä¸¦åœ¨ä¸€èˆ¬çš„ C æ¢ä»¶ä¸­ä½¿ç”¨å®ƒï¼š
@@ -926,7 +1033,7 @@ Vim 能夠解釋這樣的標記:
ä¸å­˜åœ¨æ™‚,你還是必須去用 #ifdef。
在任何有æ„義的 #if 或 #ifdef 塊的末尾 (超éŽå¹¾è¡Œçš„),在 #endif åŒä¸€è¡Œçš„後é¢å¯«ä¸‹
-註解,注釋這個æ¢ä»¶è¡¨é”å¼ã€‚例如:
+註解,註釋這個æ¢ä»¶è¡¨é”å¼ã€‚例如:
.. code-block:: c
@@ -935,24 +1042,46 @@ Vim 能夠解釋這樣的標記:
#endif /* CONFIG_SOMETHING */
-附錄 I) åƒè€ƒ
--------------------
+附錄 I) åƒè€ƒè³‡æ–™
+----------------
-The C Programming Language, 第二版
+The C Programming Language, 2nd Edition
作者:Brian W. Kernighan 和 Denni M. Ritchie.
Prentice Hall, Inc., 1988.
-ISBN 0-13-110362-8 (軟皮), 0-13-110370-9 (硬皮).
+ISBN 0-13-110362-8 (å¹³è£), 0-13-110370-9 (ç²¾è£).
+
+.. note::
+
+ 《C程åºè¨­è¨ˆèªžè¨€ï¼ˆç¬¬2版)》
+ 作者:[美] Brian W. Kernighan / [美] Dennis M. Ritchie
+ 譯者:å¾å¯¶æ–‡ / æŽå¿— / 尤晉元(審校)
+ 出版社:機械工業出版社,2019
+ ISBN:9787111617945
The Practice of Programming
作者:Brian W. Kernighan 和 Rob Pike.
Addison-Wesley, Inc., 1999.
ISBN 0-201-61586-X.
+.. note::
+
+ 《程åºè¨­è¨ˆå¯¦è¸ã€‹
+ 作者:[美] Brian W. Kernighan / [美] Rob Pike
+ 出版社:機械工業出版社,2005
+ ISBN:9787111091578
+
+ 《程åºè¨­è¨ˆå¯¦è¸ã€‹
+ 作者:[美] Brian W. Kernighan / Rob Pike
+ 譯者:裘宗燕
+ 出版社:機械工業出版社,2000
+ ISBN:9787111075738
+
GNU 手冊 - éµå¾ª K&R 標準和此文本 - cpp, gcc, gcc internals and indent,
都å¯ä»¥å¾ž https://www.gnu.org/manual/ 找到
WG14 是 C 語言的國際標準化工作組,URL: http://www.open-std.org/JTC1/SC22/WG14/
-Kernel process/coding-style.rst,作者 greg@kroah.com 發表於 OLS 2002:
+內核文檔 Documentation/process/coding-style.rst,
+作者 greg@kroah.com 發表於 OLS 2002:
http://www.kroah.com/linux/talks/ols_2002_kernel_codingstyle_talk/html/
diff --git a/Documentation/translations/zh_TW/process/development-process.rst b/Documentation/translations/zh_TW/process/development-process.rst
index f4cf5c2bbc82..7d803d3db89e 100644
--- a/Documentation/translations/zh_TW/process/development-process.rst
+++ b/Documentation/translations/zh_TW/process/development-process.rst
@@ -26,5 +26,5 @@
7.AdvancedTopics
8.Conclusion
-本文檔的目的是幫助開發人員(åŠå…¶ç¶“ç†ï¼‰ä»¥æœ€å°çš„挫折感與開發社å€åˆä½œã€‚它試圖記錄這個社å€å¦‚何以一種ä¸ç†Ÿæ‚‰Linux內核開發(或者實際上是自由軟體開發)的人å¯ä»¥è¨ªå•çš„æ–¹å¼å·¥ä½œã€‚雖然這裡有一些技術資料,但這是一個é¢å‘éŽç¨‹çš„討論,ä¸éœ€è¦æ·±å…¥äº†è§£å…§æ ¸ç·¨ç¨‹å°±å¯ä»¥ç†è§£ã€‚
+本文檔的目的是幫助開發人員(åŠå…¶ç¶“ç†ï¼‰ä»¥æœ€å°çš„挫折感與開發社å€åˆä½œã€‚它試圖記錄這個社å€å¦‚何以一種ä¸ç†Ÿæ‚‰Linux內核開發(或者實際上是自由軟件開發)的人å¯ä»¥è¨ªå•çš„æ–¹å¼å·¥ä½œã€‚雖然這è£æœ‰ä¸€äº›æŠ€è¡“資料,但這是一個é¢å‘éŽç¨‹çš„討論,ä¸éœ€è¦æ·±å…¥çž­è§£å…§æ ¸ç·¨ç¨‹å°±å¯ä»¥ç†è§£ã€‚
diff --git a/Documentation/translations/zh_TW/process/email-clients.rst b/Documentation/translations/zh_TW/process/email-clients.rst
index ae63e41d9cee..55e10d3fc28a 100644
--- a/Documentation/translations/zh_TW/process/email-clients.rst
+++ b/Documentation/translations/zh_TW/process/email-clients.rst
@@ -1,20 +1,21 @@
-.. SPDX-License-Identifier: GPL-2.0
-
-.. _tw_email_clients:
+.. SPDX-License-Identifier: GPL-2.0-or-later
.. include:: ../disclaimer-zh_TW.rst
-:Original: :ref:`Documentation/process/email-clients.rst <email_clients>`
+.. _tw_email_clients:
-譯者::
+:Original: Documentation/process/email-clients.rst
- 中文版維護者: 賈å¨å¨ Harry Wei <harryxiyou@gmail.com>
- 中文版翻譯者: 賈å¨å¨ Harry Wei <harryxiyou@gmail.com>
- 時奎亮 Alex Shi <alex.shi@linux.alibaba.com>
- 中文版校譯者: Yinglin Luan <synmyth@gmail.com>
- Xiaochen Wang <wangxiaochen0@gmail.com>
- yaxinsn <yaxinsn@163.com>
- Hu Haowen <src.res.211@gmail.com>
+:譯者:
+ - 賈å¨å¨ Harry Wei <harryxiyou@gmail.com>
+ - 時奎亮 Alex Shi <alexs@kernel.org>
+ - å³æƒ³æˆ Wu XiangCheng <bobwxc@email.cn>
+
+:æ ¡è­¯:
+ - Yinglin Luan <synmyth@gmail.com>
+ - Xiaochen Wang <wangxiaochen0@gmail.com>
+ - yaxinsn <yaxinsn@163.com>
+ - Hu Haowen <src.res.211@gmail.com>
Linux郵件客戶端é…置信æ¯
=======================
@@ -30,30 +31,35 @@ Git
改日誌。如果工作正常,å†å°‡è£œä¸ç™¼é€åˆ°ç›¸æ‡‰çš„郵件列表。
-普通é…ç½®
+通用é…ç½®
--------
+
Linux內核補ä¸æ˜¯é€šéŽéƒµä»¶è¢«æ交的,最好把補ä¸ä½œçˆ²éƒµä»¶é«”的內嵌文本。有些維護者
接收附件,但是附件的內容格å¼æ‡‰è©²æ˜¯"text/plain"。然而,附件一般是ä¸è´Šæˆçš„,
因爲這會使補ä¸çš„引用部分在評論éŽç¨‹ä¸­è®Šçš„很困難。
+åŒæ™‚也強烈建議在補ä¸æˆ–其他郵件的正文中使用純文本格å¼ã€‚https://useplaintext.email
+有助於瞭解如何é…置你喜歡的郵件客戶端,並在您還沒有首é¸çš„情æ³ä¸‹åˆ—出一些推薦的
+客戶端。
+
用來發é€Linux內核補ä¸çš„郵件客戶端在發é€è£œä¸æ™‚應該處於文本的原始狀態。例如,
-他們ä¸èƒ½æ”¹è®Šæˆ–者刪除制表符或者空格,甚至是在æ¯ä¸€è¡Œçš„開頭或者çµå°¾ã€‚
+他們ä¸èƒ½æ”¹è®Šæˆ–者刪除製表符或者空格,甚至是在æ¯ä¸€è¡Œçš„開頭或者çµå°¾ã€‚
ä¸è¦é€šéŽ"format=flowed"模å¼ç™¼é€è£œä¸ã€‚這樣會引起ä¸å¯é æœŸä»¥åŠæœ‰å®³çš„斷行。
ä¸è¦è®“你的郵件客戶端進行自動æ›è¡Œã€‚這樣也會破壞你的補ä¸ã€‚
-郵件客戶端ä¸èƒ½æ”¹è®Šæ–‡æœ¬çš„字符集編碼方å¼ã€‚è¦ç™¼é€çš„補ä¸åªèƒ½æ˜¯ASCII或者UTF-8編碼方å¼ï¼Œ
-如果你使用UTF-8編碼方å¼ç™¼é€éƒµä»¶ï¼Œé‚£éº¼ä½ å°‡æœƒé¿å…一些å¯èƒ½ç™¼ç”Ÿçš„字符集å•é¡Œã€‚
+郵件客戶端ä¸èƒ½æ”¹è®Šæ–‡æœ¬çš„字符集編碼方å¼ã€‚è¦ç™¼é€çš„補ä¸åªèƒ½æ˜¯ASCII或者UTF-8編碼
+æ–¹å¼ï¼Œå¦‚果你使用UTF-8編碼方å¼ç™¼é€éƒµä»¶ï¼Œé‚£éº¼ä½ å°‡æœƒé¿å…一些å¯èƒ½ç™¼ç”Ÿçš„字符集å•é¡Œã€‚
-郵件客戶端應該形æˆä¸¦ä¸”ä¿æŒ References: 或者 In-Reply-To: 標題,那麼
-郵件話題就ä¸æœƒä¸­æ–·ã€‚
+郵件客戶端應該生æˆä¸¦ä¸”ä¿æŒâ€œReferences:â€æˆ–者“In-Reply-To:â€éƒµä»¶é ­ï¼Œé€™æ¨£éƒµä»¶æœƒè©±
+å°±ä¸æœƒä¸­æ–·ã€‚
-複製粘帖(或者剪貼粘帖)通常ä¸èƒ½ç”¨æ–¼è£œä¸ï¼Œå› çˆ²åˆ¶è¡¨ç¬¦æœƒè½‰æ›çˆ²ç©ºæ ¼ã€‚使用xclipboard, xclip
-或者xcutsel也許å¯ä»¥ï¼Œä½†æ˜¯æœ€å¥½æ¸¬è©¦ä¸€ä¸‹æˆ–者é¿å…使用複製粘帖。
+複製粘帖(或者剪貼粘帖)通常ä¸èƒ½ç”¨æ–¼è£œä¸ï¼Œå› çˆ²è£½è¡¨ç¬¦æœƒè½‰æ›çˆ²ç©ºæ ¼ã€‚使用xclipboard,
+xclip或者xcutsel也許å¯ä»¥ï¼Œä½†æ˜¯æœ€å¥½æ¸¬è©¦ä¸€ä¸‹æˆ–者é¿å…使用複製粘帖。
-ä¸è¦åœ¨ä½¿ç”¨PGP/GPGç½²å的郵件中包å«è£œä¸ã€‚這樣會使得很多腳本ä¸èƒ½è®€å–å’Œé©ç”¨æ–¼ä½ çš„補ä¸ã€‚
-(這個å•é¡Œæ‡‰è©²æ˜¯å¯ä»¥ä¿®å¾©çš„)
+ä¸è¦åœ¨ä½¿ç”¨PGP/GPGç°½å的郵件中包å«è£œä¸ã€‚這樣會使得很多腳本ä¸èƒ½è®€å–å’Œé©ç”¨æ–¼ä½ çš„
+補ä¸ã€‚(這個å•é¡Œæ‡‰è©²æ˜¯å¯ä»¥ä¿®å¾©çš„)
在給內核郵件列表發é€è£œä¸ä¹‹å‰ï¼Œçµ¦è‡ªå·±ç™¼é€ä¸€å€‹è£œä¸æ˜¯å€‹ä¸éŒ¯çš„主æ„,ä¿å­˜æŽ¥æ”¶åˆ°çš„
郵件,將補ä¸ç”¨'patch'命令打上,如果æˆåŠŸäº†ï¼Œå†çµ¦å…§æ ¸éƒµä»¶åˆ—表發é€ã€‚
@@ -61,100 +67,135 @@ Linux內核補ä¸æ˜¯é€šéŽéƒµä»¶è¢«æ交的,最好把補ä¸ä½œçˆ²éƒµä»¶é«”çš„
一些郵件客戶端æ示
------------------
-這裡給出一些詳細的MUAé…ç½®æ示,å¯ä»¥ç”¨æ–¼çµ¦Linux內核發é€è£œä¸ã€‚這些並ä¸æ„味是
-所有的軟體包é…置總çµã€‚
+
+這è£çµ¦å‡ºä¸€äº›è©³ç´°çš„MUAé…ç½®æ示,å¯ä»¥ç”¨æ–¼çµ¦Linux內核發é€è£œä¸ã€‚這些並ä¸æ„味是
+所有的軟件包é…置總çµã€‚
說明:
-TUI = 以文本爲基礎的用戶接å£
-GUI = 圖形界é¢ç”¨æˆ¶æŽ¥å£
+
+- TUI = 以文本爲基礎的用戶接å£
+- GUI = 圖形界é¢ç”¨æˆ¶æŽ¥å£
Alpine (TUI)
-~~~~~~~~~~~~
+************
é…ç½®é¸é …:
-在"Sending Preferences"部分:
-- "Do Not Send Flowed Text"必須開啓
-- "Strip Whitespace Before Sending"必須關閉
+在 :menuselection:`Sending Preferences` èœå–®ï¼š
+
+- :menuselection:`Do Not Send Flowed Text` 必須開啓
+- :menuselection:`Strip Whitespace Before Sending` 必須關閉
+
+當寫郵件時,光標應該放在補ä¸æœƒå‡ºç¾çš„地方,然後按下 :kbd:`CTRL-R` 組åˆéµï¼Œä½¿æŒ‡
+定的補ä¸æ–‡ä»¶åµŒå…¥åˆ°éƒµä»¶ä¸­ã€‚
-當寫郵件時,光標應該放在補ä¸æœƒå‡ºç¾çš„地方,然後按下CTRL-R組åˆéµï¼Œä½¿æŒ‡å®šçš„
-補ä¸æ–‡ä»¶åµŒå…¥åˆ°éƒµä»¶ä¸­ã€‚
+Claws Mail (GUI)
+****************
+
+å¯ä»¥ç”¨ï¼Œæœ‰äººç”¨å®ƒæˆåŠŸåœ°ç™¼éŽè£œä¸ã€‚
+
+用 :menuselection:`Message-->Insert File` (:kbd:`CTRL-I`) 或外置編輯器æ’入補ä¸ã€‚
+
+è‹¥è¦åœ¨Claws編輯窗å£é‡ä¿®æ”¹æ’入的補ä¸ï¼Œéœ€é—œé–‰
+:menuselection:`Configuration-->Preferences-->Compose-->Wrapping`
+的 `Auto wrapping` 。
Evolution (GUI)
-~~~~~~~~~~~~~~~
+***************
-一些開發者æˆåŠŸçš„使用它發é€è£œä¸
+一些開發者æˆåŠŸçš„使用它發é€è£œä¸ã€‚
-當é¸æ“‡éƒµä»¶é¸é …:Preformat
- 從Format->Heading->Preformatted (Ctrl-7)或者工具欄
+撰寫郵件時:
+從 :menuselection:`æ ¼å¼-->段è½æ¨£å¼-->é æ ¼å¼åŒ–` (:kbd:`CTRL-7`)
+或工具欄é¸æ“‡ :menuselection:`é æ ¼å¼åŒ–` ï¼›
然後使用:
- Insert->Text File... (Alt-n x)æ’入補ä¸æ–‡ä»¶ã€‚
+:menuselection:`æ’å…¥-->文本文件...` (:kbd:`ALT-N x`) æ’入補ä¸æ–‡ä»¶ã€‚
-ä½ é‚„å¯ä»¥"diff -Nru old.c new.c | xclip",é¸æ“‡Preformat,然後使用中間éµé€²è¡Œç²˜å¸–。
+ä½ é‚„å¯ä»¥ ``diff -Nru old.c new.c | xclip`` ,é¸æ“‡ :menuselection:`é æ ¼å¼åŒ–` ,
+然後使用鼠標中éµé€²è¡Œç²˜å¸–。
Kmail (GUI)
-~~~~~~~~~~~
+***********
一些開發者æˆåŠŸçš„使用它發é€è£œä¸ã€‚
-默èªè¨­ç½®ä¸çˆ²HTMLæ ¼å¼æ˜¯åˆé©çš„ï¼›ä¸è¦å•“用它。
+默èªæ’°å¯«è¨­ç½®ç¦ç”¨HTMLæ ¼å¼æ˜¯åˆé©çš„ï¼›ä¸è¦å•“用它。
+
+當書寫一å°éƒµä»¶çš„時候,在é¸é …下é¢ä¸è¦é¸æ“‡è‡ªå‹•æ›è¡Œã€‚唯一的缺點就是你在郵件中輸
+入的任何文本都ä¸æœƒè¢«è‡ªå‹•æ›è¡Œï¼Œå› æ­¤ä½ å¿…須在發é€è£œä¸ä¹‹å‰æ‰‹å‹•æ›è¡Œã€‚最簡單的方法
+就是啓用自動æ›è¡Œä¾†æ›¸å¯«éƒµä»¶ï¼Œç„¶å¾ŒæŠŠå®ƒä¿å­˜çˆ²è‰ç¨¿ã€‚一旦你在è‰ç¨¿ä¸­å†æ¬¡æ‰“開它,它
+已經全部自動æ›è¡Œäº†ï¼Œé‚£éº¼ä½ çš„郵件雖然沒有é¸æ“‡è‡ªå‹•æ›è¡Œï¼Œä½†æ˜¯é‚„ä¸æœƒå¤±åŽ»å·²æœ‰çš„自
+å‹•æ›è¡Œã€‚
-當書寫一å°éƒµä»¶çš„時候,在é¸é …下é¢ä¸è¦é¸æ“‡è‡ªå‹•æ›è¡Œã€‚唯一的缺點就是你在郵件中輸入的任何文本
-都ä¸æœƒè¢«è‡ªå‹•æ›è¡Œï¼Œå› æ­¤ä½ å¿…須在發é€è£œä¸ä¹‹å‰æ‰‹å‹•æ›è¡Œã€‚最簡單的方法就是啓用自動æ›è¡Œä¾†æ›¸å¯«éƒµä»¶ï¼Œ
-然後把它ä¿å­˜çˆ²è‰ç¨¿ã€‚一旦你在è‰ç¨¿ä¸­å†æ¬¡æ‰“開它,它已經全部自動æ›è¡Œäº†ï¼Œé‚£éº¼ä½ çš„郵件雖然沒有
-é¸æ“‡è‡ªå‹•æ›è¡Œï¼Œä½†æ˜¯é‚„ä¸æœƒå¤±åŽ»å·²æœ‰çš„自動æ›è¡Œã€‚
+在郵件的底部,æ’入補ä¸ä¹‹å‰ï¼Œæ”¾ä¸Šå¸¸ç”¨çš„補ä¸å®šç•Œç¬¦ï¼šä¸‰å€‹é€£å­—符(``---``)。
-在郵件的底部,æ’入補ä¸ä¹‹å‰ï¼Œæ”¾ä¸Šå¸¸ç”¨çš„補ä¸å®šç•Œç¬¦ï¼šä¸‰å€‹é€£å­—號(---)。
+然後在 :menuselection:`信件` èœå–®ï¼Œé¸æ“‡ :menuselection:`æ’入文本文件` ,接
+ç€é¸å–你的補ä¸æ–‡ä»¶ã€‚還有一個é¡å¤–çš„é¸é …,你å¯ä»¥é€šéŽå®ƒé…置你的創建新郵件工具欄,
+加上 :menuselection:`æ’入文本文件` 圖標。
-然後在"Message"èœå–®æ¢ç›®ï¼Œé¸æ“‡æ’入文件,接著é¸å–你的補ä¸æ–‡ä»¶ã€‚還有一個é¡å¤–çš„é¸é …,你å¯ä»¥
-通éŽå®ƒé…置你的郵件建立工具欄èœå–®ï¼Œé‚„å¯ä»¥å¸¶ä¸Š"insert file"圖標。
+將編輯器窗å£æ‹‰åˆ°è¶³å¤ å¯¬é¿å…折行。å°æ–¼KMail 1.13.5 (KDE 4.5.4),它會在發é€éƒµä»¶
+時å°ç·¨è¼¯å™¨çª—å£ä¸­é¡¯ç¤ºæŠ˜è¡Œçš„地方自動æ›è¡Œã€‚在é¸é …èœå–®ä¸­å–消自動æ›è¡Œä»ä¸èƒ½è§£æ±ºã€‚
+因此,如果你的補ä¸ä¸­æœ‰éžå¸¸é•·çš„行,必須在發é€ä¹‹å‰æŠŠç·¨è¼¯å™¨çª—å£æ‹‰å¾—éžå¸¸å¯¬ã€‚
+åƒè¦‹ï¼šhttps://bugs.kde.org/show_bug.cgi?id=174034
-ä½ å¯ä»¥å®‰å…¨åœ°é€šéŽGPG標記附件,但是內嵌補ä¸æœ€å¥½ä¸è¦ä½¿ç”¨GPG標記它們。作爲內嵌文本的簽發補ä¸ï¼Œ
-當從GPG中æå–7ä½ç·¨ç¢¼æ™‚會使他們變的更加複雜。
+ä½ å¯ä»¥å®‰å…¨åœ°ç”¨GPGç°½å附件,但是內嵌補ä¸æœ€å¥½ä¸è¦ä½¿ç”¨GPGç°½å它們。作爲內嵌文本
+æ’入的簽å補ä¸å°‡ä½¿å…¶é›£ä»¥å¾ž7-bit編碼中æå–。
-如果你éžè¦ä»¥é™„件的形å¼ç™¼é€è£œä¸ï¼Œé‚£éº¼å°±å³éµé»žæ“Šé™„件,然後é¸ä¸­å±¬æ€§ï¼Œçªå‡º"Suggest automatic
-display",這樣內嵌附件更容易讓讀者看到。
+如果你éžè¦ä»¥é™„件的形å¼ç™¼é€è£œä¸ï¼Œé‚£éº¼å°±å³éµé»žæ“Šé™„件,然後é¸æ“‡
+:menuselection:`屬性` ,打開 :menuselection:`建議自動顯示` ,使附件內è¯æ›´å®¹
+易讓讀者看到。
-當你è¦ä¿å­˜å°‡è¦ç™¼é€çš„內嵌文本補ä¸ï¼Œä½ å¯ä»¥å¾žæ¶ˆæ¯åˆ—表窗格é¸æ“‡åŒ…å«è£œä¸çš„郵件,然後å³æ“Šé¸æ“‡
-"save as"。你å¯ä»¥ä½¿ç”¨ä¸€å€‹æ²’有更改的包å«è£œä¸çš„郵件,如果它是以正確的形å¼çµ„æˆã€‚當你正真在它
-自己的窗å£ä¹‹ä¸‹å¯Ÿçœ‹ï¼Œé‚£æ™‚沒有é¸é …å¯ä»¥ä¿å­˜éƒµä»¶--已經有一個這樣的bug被匯報到了kmailçš„bugzilla
-並且希望這將會被處ç†ã€‚郵件是以åªé‡å°æŸå€‹ç”¨æˆ¶å¯è®€å¯«çš„權é™è¢«ä¿å­˜çš„,所以如果你想把郵件複製到其他地方,
-ä½ ä¸å¾—ä¸æŠŠä»–們的權é™æ”¹çˆ²çµ„或者整體å¯è®€ã€‚
+當你è¦ä¿å­˜å°‡è¦ç™¼é€çš„內嵌文本補ä¸ï¼Œä½ å¯ä»¥å¾žæ¶ˆæ¯åˆ—表窗格é¸æ“‡åŒ…å«è£œä¸çš„郵件,然
+後å³éµé¸æ“‡ :menuselection:`å¦å­˜çˆ²` 。如果整個電å­éƒµä»¶çš„組æˆæ­£ç¢ºï¼Œæ‚¨å¯ç›´æŽ¥å°‡
+其作爲補ä¸ä½¿ç”¨ã€‚é›»å­éƒµä»¶ä»¥ç•¶å‰ç”¨æˆ¶å¯è®€å¯«æ¬Šé™ä¿å­˜ï¼Œå› æ­¤æ‚¨å¿…é ˆ ``chmod`` ,以
+使其在複製到別處時用戶組和其他人å¯è®€ã€‚
Lotus Notes (GUI)
-~~~~~~~~~~~~~~~~~
+*****************
ä¸è¦ä½¿ç”¨å®ƒã€‚
+IBM Verse (Web GUI)
+*******************
+
+åŒä¸Šæ¢ã€‚
+
Mutt (TUI)
-~~~~~~~~~~
+**********
-很多Linux開發人員使用mutt客戶端,所以證明它肯定工作的éžå¸¸æ¼‚亮。
+很多Linux開發人員使用mutt客戶端,這證明它肯定工作得éžå¸¸æ¼‚亮。
-Muttä¸è‡ªå¸¶ç·¨è¼¯å™¨ï¼Œæ‰€ä»¥ä¸ç®¡ä½ ä½¿ç”¨ä»€éº¼ç·¨è¼¯å™¨éƒ½ä¸æ‡‰è©²å¸¶æœ‰è‡ªå‹•æ–·è¡Œã€‚大多數編輯器都帶有
-一個"insert file"é¸é …,它å¯ä»¥é€šéŽä¸æ”¹è®Šæ–‡ä»¶å…§å®¹çš„æ–¹å¼æ’入文件。
+Muttä¸è‡ªå¸¶ç·¨è¼¯å™¨ï¼Œæ‰€ä»¥ä¸ç®¡ä½ ä½¿ç”¨ä»€éº¼ç·¨è¼¯å™¨ï¼Œä¸è‡ªå‹•æ–·è¡Œå°±è¡Œã€‚大多數編輯器都有
+:menuselection:`æ’入文件` é¸é …,它å¯ä»¥åœ¨ä¸æ”¹è®Šæ–‡ä»¶å…§å®¹çš„情æ³ä¸‹æ’入文件。
+
+用 ``vim`` 作爲mutt的編輯器::
-'vim'作爲mutt的編輯器:
set editor="vi"
- 如果使用xclip,敲入以下命令
+如果使用xclip,敲入以下命令::
+
:set paste
- 按中éµä¹‹å‰æˆ–者shift-insert或者使用
+
+然後å†æŒ‰ä¸­éµæˆ–者shift-insert或者使用::
+
:r filename
-如果想è¦æŠŠè£œä¸ä½œçˆ²å…§åµŒæ–‡æœ¬ã€‚
-(a)ttach工作的很好,ä¸å¸¶æœ‰"set paste"。
+把補ä¸æ’入爲內嵌文本。
+在未設置 ``set paste`` 時(a)ttach工作的很好。
ä½ å¯ä»¥é€šéŽ ``git format-patch`` 生æˆè£œä¸ï¼Œç„¶å¾Œç”¨ Mutt發é€å®ƒå€‘::
- $ mutt -H 0001-some-bug-fix.patch
+ $ mutt -H 0001-some-bug-fix.patch
é…ç½®é¸é …:
+
它應該以默èªè¨­ç½®çš„å½¢å¼å·¥ä½œã€‚
-然而,把"send_charset"設置爲"us-ascii::utf-8"也是一個ä¸éŒ¯çš„主æ„。
+然而,把 ``send_charset`` 設置一下也是一個ä¸éŒ¯çš„主æ„::
-Mutt 是高度å¯é…置的。 這裡是個使用mutté€šéŽ Gmail 發é€çš„補ä¸çš„最å°é…ç½®::
+ set send_charset="us-ascii:utf-8"
+
+Mutt 是高度å¯é…置的。 這è£æ˜¯å€‹ä½¿ç”¨mutté€šéŽ Gmail 發é€çš„補ä¸çš„最å°é…ç½®::
# .muttrc
# ================ IMAP ====================
@@ -181,72 +222,108 @@ Mutt 是高度å¯é…置的。 這裡是個使用mutté€šéŽ Gmail 發é€çš„補ä¸
set from = "username@gmail.com"
set use_from = yes
-Mutt文檔å«æœ‰æ›´å¤šä¿¡æ¯:
+Mutt文檔å«æœ‰æ›´å¤šä¿¡æ¯ï¼š
- http://dev.mutt.org/trac/wiki/UseCases/Gmail
+ https://gitlab.com/muttmua/mutt/-/wikis/UseCases/Gmail
- http://dev.mutt.org/doc/manual.html
+ http://www.mutt.org/doc/manual/
Pine (TUI)
-~~~~~~~~~~
+**********
PineéŽåŽ»æœ‰ä¸€äº›ç©ºæ ¼åˆªæ¸›å•é¡Œï¼Œä½†æ˜¯é€™äº›ç¾åœ¨æ‡‰è©²éƒ½è¢«ä¿®å¾©äº†ã€‚
-如果å¯ä»¥ï¼Œè«‹ä½¿ç”¨alpine(pine的繼承者)
+如果å¯ä»¥ï¼Œè«‹ä½¿ç”¨alpine(pine的繼承者)。
é…ç½®é¸é …:
-- 最近的版本需è¦æ¶ˆé™¤æµç¨‹æ–‡æœ¬
-- "no-strip-whitespace-before-send"é¸é …也是需è¦çš„。
+
+- æœ€è¿‘çš„ç‰ˆæœ¬éœ€è¦ ``quell-flowed-text``
+- ``no-strip-whitespace-before-send`` é¸é …也是需è¦çš„。
Sylpheed (GUI)
-~~~~~~~~~~~~~~
+**************
- 內嵌文本å¯ä»¥å¾ˆå¥½çš„工作(或者使用附件)。
- å…許使用外部的編輯器。
-- å°æ–¼ç›®éŒ„較多時éžå¸¸æ…¢ã€‚
+- 收件箱較多時éžå¸¸æ…¢ã€‚
- 如果通éŽnon-SSL連接,無法使用TLS SMTP授權。
-- 在組æˆçª—å£ä¸­æœ‰ä¸€å€‹å¾ˆæœ‰ç”¨çš„ruler bar。
-- 給地å€æœ¬ä¸­æ·»åŠ åœ°å€å°±ä¸æœƒæ­£ç¢ºçš„了解顯示å。
+- 撰寫窗å£çš„標尺很有用。
+- 將地å€æ·»åŠ åˆ°é€šè¨Šç°¿æ™‚無法正確ç†è§£é¡¯ç¤ºçš„å稱。
Thunderbird (GUI)
-~~~~~~~~~~~~~~~~~
+*****************
+
+Thunderbird是Outlook的克隆版本,它很容易æ壞文本,但也有一些方法強制修正。
+
+在完æˆä¿®æ”¹å¾Œï¼ˆåŒ…括安è£æ“´å±•ï¼‰ï¼Œæ‚¨éœ€è¦é‡æ–°å•“å‹•Thunderbird。
+
+- å…許使用外部編輯器:
+
+ 使用Thunderbird發補ä¸æœ€ç°¡å–®çš„方法是使用擴展來打開您最喜歡的外部編輯器。
+
+ 下é¢æ˜¯ä¸€äº›èƒ½å¤ åšåˆ°é€™ä¸€é»žçš„擴展樣例。
+
+ - “External Editor Revivedâ€
+
+ https://github.com/Frederick888/external-editor-revived
+
+ https://addons.thunderbird.net/en-GB/thunderbird/addon/external-editor-revived/
+
+ 它需è¦å®‰è£â€œæœ¬åœ°æ¶ˆæ¯ä¸»æ©Ÿï¼ˆnative messaging host)â€ã€‚
+ åƒè¦‹ä»¥ä¸‹æ–‡æª”:
+ https://github.com/Frederick888/external-editor-revived/wiki
+
+ - “External Editorâ€
+
+ https://github.com/exteditor/exteditor
+
+ 下載並安è£æ­¤æ“´å±•ï¼Œç„¶å¾Œæ‰“é–‹ :menuselection:`新建消æ¯` 窗å£, 用
+ :menuselection:`查看-->工具欄-->自定義...` 給它增加一個按鈕,直接點擊此
+ 按鈕å³å¯ä½¿ç”¨å¤–置編輯器。
+
+ 請注æ„,“External Editorâ€è¦æ±‚你的編輯器ä¸èƒ½fork,æ›å¥è©±èªªï¼Œç·¨è¼¯å™¨å¿…須在
+ 關閉å‰ä¸è¿”回。你å¯èƒ½éœ€è¦å‚³éžé¡å¤–çš„åƒæ•¸æˆ–修改編輯器設置。最值得注æ„的是,
+ 如果您使用的是gvim,那麼您必須將 :menuselection:`external editor` 設置的
+ 編輯器字段設置爲 ``/usr/bin/gvim --nofork"`` (å‡è¨­å¯åŸ·è¡Œæ–‡ä»¶åœ¨
+ ``/usr/bin`` ï¼‰ï¼Œä»¥å‚³éž ``-f`` åƒæ•¸ã€‚如果您正在使用其他編輯器,請閱讀其
+ 手冊瞭解如何處ç†ã€‚
-默èªæƒ…æ³ä¸‹ï¼Œthunderbird很容易æ壞文本,但是還有一些方法å¯ä»¥å¼·åˆ¶å®ƒè®Šå¾—更好。
+è‹¥è¦ä¿®æ­£å…§éƒ¨ç·¨è¼¯å™¨ï¼Œè«‹åŸ·è¡Œä»¥ä¸‹æ“作:
-- 在用戶帳號設置里,組æˆå’Œå°‹å€ï¼Œä¸è¦é¸æ“‡"Compose messages in HTML format"。
+- 修改你的Thunderbird設置,ä¸è¦ä½¿ç”¨ ``format=flowed`` ï¼
+ 回到主窗å£ï¼ŒæŒ‰ç…§
+ :menuselection:`主èœå–®-->首é¸é …-->常è¦-->é…置編輯器...`
+ 打開Thunderbirdçš„é…置編輯器。
-- 編輯你的Thunderbirdé…置設置來使它ä¸è¦æ‹†è¡Œä½¿ç”¨ï¼šuser_pref("mailnews.wraplength", 0);
+ - 將 ``mailnews.send_plaintext_flowed`` 設爲 ``false``
-- 編輯你的Thunderbirdé…置設置,使它ä¸è¦ä½¿ç”¨"format=flowed"æ ¼å¼ï¼šuser_pref("mailnews.
- send_plaintext_flowed", false);
+ - 將 ``mailnews.wraplength`` 從 ``72`` 改爲 ``0``
-- 你需è¦ä½¿Thunderbird變爲é å…ˆæ ¼å¼æ–¹å¼ï¼š
- 如果默èªæƒ…æ³ä¸‹ä½ æ›¸å¯«çš„是HTMLæ ¼å¼ï¼Œé‚£ä¸æ˜¯å¾ˆé›£ã€‚僅僅從標題欄的下拉框中é¸æ“‡"Preformat"æ ¼å¼ã€‚
- 如果默èªæƒ…æ³ä¸‹ä½ æ›¸å¯«çš„是文本格å¼ï¼Œä½ ä¸å¾—把它改爲HTMLæ ¼å¼ï¼ˆåƒ…僅作爲一次性的)來書寫新的消æ¯ï¼Œ
- 然後強制使它回到文本格å¼ï¼Œå¦å‰‡å®ƒå°±æœƒæ‹†è¡Œã€‚è¦å¯¦ç¾å®ƒï¼Œåœ¨å¯«ä¿¡çš„圖標上使用shiftéµä¾†ä½¿å®ƒè®Šçˆ²HTML
- æ ¼å¼ï¼Œç„¶å¾Œæ¨™é¡Œæ¬„的下拉框中é¸æ“‡"Preformat"æ ¼å¼ã€‚
+- ä¸è¦å¯«HTML郵件ï¼
+ 回到主窗å£ï¼Œæ‰“é–‹
+ :menuselection:`主èœå–®-->賬戶設置-->ä½ çš„@郵件.地å€-->通訊錄/編寫&地å€ç°¿` ,
+ 關掉 ``以HTMLæ ¼å¼ç·¨å¯«æ¶ˆæ¯`` 。
-- å…許使用外部的編輯器:
- é‡å°Thunderbird打補ä¸æœ€ç°¡å–®çš„方法就是使用一個"external editor"擴展,然後使用你最喜歡的
- $EDITOR來讀å–或者åˆä½µè£œä¸åˆ°æ–‡æœ¬ä¸­ã€‚è¦å¯¦ç¾å®ƒï¼Œå¯ä»¥ä¸‹è¼‰ä¸¦ä¸”安è£é€™å€‹æ“´å±•ï¼Œç„¶å¾Œæ·»åŠ ä¸€å€‹ä½¿ç”¨å®ƒçš„
- 按éµView->Toolbars->Customize...最後當你書寫信æ¯çš„時候僅僅點擊它就å¯ä»¥äº†ã€‚
+- åªç”¨ç´”文本格å¼æŸ¥çœ‹éƒµä»¶ï¼
+ 回到主窗å£ï¼Œ :menuselection:`主èœå–®-->查看-->消æ¯é«”爲-->純文本` ï¼
TkRat (GUI)
-~~~~~~~~~~~
+***********
å¯ä»¥ä½¿ç”¨å®ƒã€‚使用"Insert file..."或者外部的編輯器。
Gmail (Web GUI)
-~~~~~~~~~~~~~~~
+***************
ä¸è¦ä½¿ç”¨å®ƒç™¼é€è£œä¸ã€‚
-Gmail網é å®¢æˆ¶ç«¯è‡ªå‹•åœ°æŠŠåˆ¶è¡¨ç¬¦è½‰æ›çˆ²ç©ºæ ¼ã€‚
+Gmail網é å®¢æˆ¶ç«¯è‡ªå‹•åœ°æŠŠè£½è¡¨ç¬¦è½‰æ›çˆ²ç©ºæ ¼ã€‚
-雖然制表符轉æ›çˆ²ç©ºæ ¼å•é¡Œå¯ä»¥è¢«å¤–部編輯器解決,åŒæ™‚它還會使用回車æ›è¡ŒæŠŠæ¯è¡Œæ‹†åˆ†çˆ²78個字符。
+雖然製表符轉æ›çˆ²ç©ºæ ¼å•é¡Œå¯ä»¥è¢«å¤–部編輯器解決,但它åŒæ™‚還會使用回車æ›è¡ŒæŠŠæ¯è¡Œ
+拆分爲78個字符。
-å¦ä¸€å€‹å•é¡Œæ˜¯Gmail還會把任何ä¸æ˜¯ASCII的字符的信æ¯æ”¹çˆ²base64編碼。它把æ±è¥¿è®Šçš„åƒæ­æ´²äººçš„å字。
+å¦ä¸€å€‹å•é¡Œæ˜¯Gmail還會把任何å«æœ‰éžASCII的字符的消æ¯æ”¹ç”¨base64編碼,如æ­æ´²äººçš„
+å字。
- ###
diff --git a/Documentation/translations/zh_TW/process/embargoed-hardware-issues.rst b/Documentation/translations/zh_TW/process/embargoed-hardware-issues.rst
index 8e4db8baa0d1..b9f6ab7b6666 100644
--- a/Documentation/translations/zh_TW/process/embargoed-hardware-issues.rst
+++ b/Documentation/translations/zh_TW/process/embargoed-hardware-issues.rst
@@ -6,17 +6,17 @@
:Translator: Alex Shi <alex.shi@linux.alibaba.com>
Hu Haowen <src.res.211@gmail.com>
-被é™åˆ¶çš„硬體å•é¡Œ
+被é™åˆ¶çš„硬件å•é¡Œ
================
範åœ
----
-導致安全å•é¡Œçš„硬體å•é¡Œèˆ‡åªå½±éŸ¿Linux內核的純軟體錯誤是ä¸åŒçš„安全錯誤類別。
+導致安全å•é¡Œçš„硬件å•é¡Œèˆ‡éš»å½±éŸ¿Linux內核的純軟件錯誤是ä¸åŒçš„安全錯誤類別。
-å¿…é ˆå€åˆ¥å°å¾…諸如熔毀(Meltdown)ã€Spectreã€L1TF等硬體å•é¡Œï¼Œå› çˆ²å®ƒå€‘通常會影響
-所有作業系統(「OSã€ï¼‰ï¼Œå› æ­¤éœ€è¦åœ¨ä¸åŒçš„OS供應商ã€ç™¼è¡Œç‰ˆã€ç¡¬é«”供應商和其他å„æ–¹
-之間進行å”調。å°æ–¼æŸäº›å•é¡Œï¼Œè»Ÿé«”緩解å¯èƒ½ä¾è³´æ–¼å¾®ç¢¼æˆ–固件更新,這需è¦é€²ä¸€æ­¥çš„
+å¿…é ˆå€åˆ¥å°å¾…諸如熔燬(Meltdown)ã€Spectreã€L1TF等硬件å•é¡Œï¼Œå› çˆ²å®ƒå€‘通常會影響
+所有æ“作系統(“OSâ€ï¼‰ï¼Œå› æ­¤éœ€è¦åœ¨ä¸åŒçš„OS供應商ã€ç™¼è¡Œç‰ˆã€ç¡¬ä»¶ä¾›æ‡‰å•†å’Œå…¶ä»–å„æ–¹
+之間進行å”調。å°æ–¼æŸäº›å•é¡Œï¼Œè»Ÿä»¶ç·©è§£å¯èƒ½ä¾è³´æ–¼å¾®ç¢¼æˆ–固件更新,這需è¦é€²ä¸€æ­¥çš„
å”調。
.. _tw_Contact:
@@ -24,9 +24,9 @@
接觸
----
-Linux內核硬體安全å°çµ„ç¨ç«‹æ–¼æ™®é€šçš„Linux內核安全å°çµ„。
+Linux內核硬件安全å°çµ„ç¨ç«‹æ–¼æ™®é€šçš„Linux內核安全å°çµ„。
-該å°çµ„åªè² è²¬å”調被é™åˆ¶çš„硬體安全å•é¡Œã€‚Linux內核中純軟體安全æ¼æ´žçš„報告ä¸ç”±è©²
+該å°çµ„åªè² è²¬å”調被é™åˆ¶çš„硬件安全å•é¡Œã€‚Linux內核中純軟件安全æ¼æ´žçš„報告ä¸ç”±è©²
å°çµ„處ç†ï¼Œå ±å‘Šè€…將被引導至常è¦Linux內核安全å°çµ„(:ref:`Documentation/admin-guide/
<securitybugs>`)è¯ç¹«ã€‚
@@ -37,13 +37,13 @@ Linux內核硬體安全å°çµ„ç¨ç«‹æ–¼æ™®é€šçš„Linux內核安全å°çµ„。
者的PGP密鑰或S/MIME證書籤å。該列表的PGP密鑰和S/MIME證書å¯å¾ž
https://www.kernel.org/.... ç²å¾—。
-雖然硬體安全å•é¡Œé€šå¸¸ç”±å—影響的硬體供應商處ç†ï¼Œä½†æˆ‘們歡迎發ç¾æ½›åœ¨ç¡¬é«”缺陷的研究
+雖然硬件安全å•é¡Œé€šå¸¸ç”±å—影響的硬件供應商處ç†ï¼Œä½†æˆ‘們歡迎發ç¾æ½›åœ¨ç¡¬ä»¶ç¼ºé™·çš„研究
人員或個人與我們è¯ç¹«ã€‚
-硬體安全官
+硬件安全官
^^^^^^^^^^
-ç›®å‰çš„硬體安全官å°çµ„:
+ç›®å‰çš„硬件安全官å°çµ„:
- Linus Torvalds(Linux基金會院士)
- Greg Kroah Hartman(Linux基金會院士)
@@ -62,50 +62,50 @@ Linux基金會目å‰çš„IT基礎設施安全總監是 Konstantin Ryabitsev。
ä¿å¯†å”è­°
--------
-Linux內核硬體安全å°çµ„ä¸æ˜¯æ­£å¼çš„機構,因此無法簽訂任何ä¿å¯†å”議。核心社å€æ„識到
+Linux內核硬件安全å°çµ„ä¸æ˜¯æ­£å¼çš„機構,因此無法簽訂任何ä¿å¯†å”議。核心社å€æ„識到
這些å•é¡Œçš„æ•æ„Ÿæ€§ï¼Œä¸¦æ供了一份諒解備忘錄。
諒解備忘錄
----------
-Linux內核社å€æ·±åˆ»ç†è§£åœ¨ä¸åŒä½œæ¥­ç³»çµ±ä¾›æ‡‰å•†ã€ç™¼è¡Œå•†ã€ç¡¬é«”供應商和其他å„方之間
-進行å”調時,ä¿æŒç¡¬é«”安全å•é¡Œè™•æ–¼é™åˆ¶ç‹€æ…‹çš„è¦æ±‚。
+Linux內核社å€æ·±åˆ»ç†è§£åœ¨ä¸åŒæ“作系統供應商ã€ç™¼è¡Œå•†ã€ç¡¬ä»¶ä¾›æ‡‰å•†å’Œå…¶ä»–å„方之間
+進行å”調時,ä¿æŒç¡¬ä»¶å®‰å…¨å•é¡Œè™•æ–¼é™åˆ¶ç‹€æ…‹çš„è¦æ±‚。
-Linux內核社å€åœ¨éŽåŽ»å·²ç¶“æˆåŠŸåœ°è™•ç†äº†ç¡¬é«”安全å•é¡Œï¼Œä¸¦ä¸”有必è¦çš„機制å…許在é™åˆ¶
+Linux內核社å€åœ¨éŽåŽ»å·²ç¶“æˆåŠŸåœ°è™•ç†äº†ç¡¬ä»¶å®‰å…¨å•é¡Œï¼Œä¸¦ä¸”有必è¦çš„機制å…許在é™åˆ¶
é™åˆ¶ä¸‹é€²è¡Œç¬¦åˆç¤¾å€çš„開發。
-Linux內核社å€æœ‰ä¸€å€‹å°ˆé–€çš„硬體安全å°çµ„負責åˆå§‹è¯ç¹«ï¼Œä¸¦ç›£ç£åœ¨é™åˆ¶è¦å‰‡ä¸‹è™•ç†
+Linux內核社å€æœ‰ä¸€å€‹å°ˆé–€çš„硬件安全å°çµ„負責åˆå§‹è¯ç¹«ï¼Œä¸¦ç›£ç£åœ¨é™åˆ¶è¦å‰‡ä¸‹è™•ç†
此類å•é¡Œçš„éŽç¨‹ã€‚
-硬體安全å°çµ„確定開發人員(領域專家),他們將組æˆç‰¹å®šå•é¡Œçš„åˆå§‹éŸ¿æ‡‰å°çµ„。最åˆ
+硬件安全å°çµ„確定開發人員(領域專家),他們將組æˆç‰¹å®šå•é¡Œçš„åˆå§‹éŸ¿æ‡‰å°çµ„。最åˆ
的響應å°çµ„å¯ä»¥å¼•å…¥æ›´å¤šçš„開發人員(領域專家)以最佳的技術方å¼è§£æ±ºé€™å€‹å•é¡Œã€‚
所有相關開發商承諾éµå®ˆé™åˆ¶è¦å®šï¼Œä¸¦å°æ”¶åˆ°çš„ä¿¡æ¯ä¿å¯†ã€‚é•å承諾將導致立å³å¾žç•¶å‰
-å•é¡Œä¸­æŽ’除,並從所有相關郵件列表中刪除。此外,硬體安全å°çµ„還將把é•å者排除在
+å•é¡Œä¸­æŽ’除,並從所有相關郵件列表中刪除。此外,硬件安全å°çµ„還將把é•å者排除在
未來的å•é¡Œä¹‹å¤–。這一後果的影響在我們社å€æ˜¯ä¸€ç¨®éžå¸¸æœ‰æ•ˆçš„å¨æ‡¾ã€‚如果發生é•è¦
-情æ³ï¼Œç¡¬é«”安全å°çµ„將立å³é€šçŸ¥ç›¸é—œæ–¹ã€‚如果您或任何人發ç¾æ½›åœ¨çš„é•è¦è¡Œçˆ²ï¼Œè«‹ç«‹å³
-å‘硬體安全人員報告。
+情æ³ï¼Œç¡¬ä»¶å®‰å…¨å°çµ„將立å³é€šçŸ¥ç›¸é—œæ–¹ã€‚如果您或任何人發ç¾æ½›åœ¨çš„é•è¦è¡Œçˆ²ï¼Œè«‹ç«‹å³
+å‘硬件安全人員報告。
æµç¨‹
^^^^
-由於Linux內核開發的全çƒåˆ†å¸ƒå¼ç‰¹æ€§ï¼Œé¢å°é¢çš„會議幾乎ä¸å¯èƒ½è§£æ±ºç¡¬é«”安全å•é¡Œã€‚
+由於Linux內核開發的全çƒåˆ†ä½ˆå¼ç‰¹æ€§ï¼Œé¢å°é¢çš„會議幾乎ä¸å¯èƒ½è§£æ±ºç¡¬ä»¶å®‰å…¨å•é¡Œã€‚
由於時å€å’Œå…¶ä»–因素,電話會議很難å”調,åªèƒ½åœ¨çµ•å°å¿…è¦æ™‚使用。加密電å­éƒµä»¶å·²è¢«
證明是解決此類å•é¡Œçš„最有效和最安全的通信方法。
開始披露
""""""""
-披露內容首先通éŽé›»å­éƒµä»¶è¯ç¹«Linux內核硬體安全å°çµ„。此åˆå§‹è¯ç¹«äººæ‡‰åŒ…å«å•é¡Œçš„
-æ述和任何已知å—影響硬體的列表。如果您的組織製造或分發å—影響的硬體,我們建議
-您也考慮哪些其他硬體å¯èƒ½æœƒå—到影響。
+披露內容首先通éŽé›»å­éƒµä»¶è¯ç¹«Linux內核硬件安全å°çµ„。此åˆå§‹è¯ç¹«äººæ‡‰åŒ…å«å•é¡Œçš„
+æ述和任何已知å—影響硬件的列表。如果您的組織製造或分發å—影響的硬件,我們建議
+您也考慮哪些其他硬件å¯èƒ½æœƒå—到影響。
-硬體安全å°çµ„å°‡æ供一個特定於事件的加密郵件列表,用於與報告者進行åˆæ­¥è¨Žè«–ã€
+硬件安全å°çµ„å°‡æ供一個特定於事件的加密郵件列表,用於與報告者進行åˆæ­¥è¨Žè«–ã€
進一步披露和å”調。
-硬體安全å°çµ„å°‡å‘披露方æ供一份開發人員(領域專家)å單,在與開發人員確èªä»–們
+硬件安全å°çµ„å°‡å‘披露方æ供一份開發人員(領域專家)å單,在與開發人員確èªä»–們
å°‡éµå®ˆæœ¬è«’解備忘錄和文件化æµç¨‹å¾Œï¼Œæ‡‰é¦–先告知開發人員有關該å•é¡Œçš„ä¿¡æ¯ã€‚這些開發
-人員組æˆåˆå§‹éŸ¿æ‡‰å°çµ„,並在åˆå§‹æŽ¥è§¸å¾Œè² è²¬è™•ç†å•é¡Œã€‚硬體安全å°çµ„支æŒéŸ¿æ‡‰å°çµ„,
+人員組æˆåˆå§‹éŸ¿æ‡‰å°çµ„,並在åˆå§‹æŽ¥è§¸å¾Œè² è²¬è™•ç†å•é¡Œã€‚硬件安全å°çµ„支æŒéŸ¿æ‡‰å°çµ„,
但ä¸ä¸€å®šåƒèˆ‡ç·©è§£é–‹ç™¼éŽç¨‹ã€‚
雖然個別開發人員å¯èƒ½é€šéŽå…¶åƒ±ä¸»å—到ä¿å¯†å”è­°çš„ä¿è­·ï¼Œä½†ä»–們ä¸èƒ½ä»¥Linux內核開發
@@ -113,7 +113,7 @@ Linux內核社å€æœ‰ä¸€å€‹å°ˆé–€çš„硬體安全å°çµ„負責åˆå§‹è¯ç¹«ï¼Œä¸¦ç›£
披露方應æ供已經或應該被告知該å•é¡Œçš„所有其他實體的è¯ç¹«äººå單。這有幾個目的:
- - 披露的實體列表å…許跨行業通信,例如其他作業系統供應商ã€ç¡¬é«”供應商等。
+ - 披露的實體列表å…許跨行業通信,例如其他æ“作系統供應商ã€ç¡¬ä»¶ä¾›æ‡‰å•†ç­‰ã€‚
- å¯è¯ç¹«å·²æŠ«éœ²çš„實體,指定應åƒèˆ‡ç·©è§£æŽªæ–½é–‹ç™¼çš„專家。
@@ -133,10 +133,10 @@ Linux內核社å€æœ‰ä¸€å€‹å°ˆé–€çš„硬體安全å°çµ„負責åˆå§‹è¯ç¹«ï¼Œä¸¦ç›£
åˆå§‹éŸ¿æ‡‰å°çµ„設置加密郵件列表,或在é©ç•¶çš„情æ³ä¸‹é‡æ–°ä¿®æ”¹ç¾æœ‰éƒµä»¶åˆ—表。
-使用郵件列表接近於正常的Linux開發éŽç¨‹ï¼Œä¸¦ä¸”在éŽåŽ»å·²ç¶“æˆåŠŸåœ°ç”¨æ–¼çˆ²å„種硬體安全
+使用郵件列表接近於正常的Linux開發éŽç¨‹ï¼Œä¸¦ä¸”在éŽåŽ»å·²ç¶“æˆåŠŸåœ°ç”¨æ–¼çˆ²å„種硬件安全
å•é¡Œé–‹ç™¼ç·©è§£æŽªæ–½ã€‚
-郵件列表的æ“作方å¼èˆ‡æ­£å¸¸çš„Linux開發相åŒã€‚發布ã€è¨Žè«–和審查修補程åºï¼Œå¦‚æžœåŒæ„,
+郵件列表的æ“作方å¼èˆ‡æ­£å¸¸çš„Linux開發相åŒã€‚發佈ã€è¨Žè«–和審查修補程åºï¼Œå¦‚æžœåŒæ„,
則應用於éžå…¬å…±git存儲庫,åƒèˆ‡é–‹ç™¼äººå“¡åªèƒ½é€šéŽå®‰å…¨é€£æŽ¥è¨ªå•è©²å­˜å„²åº«ã€‚存儲庫包å«
é‡å°ä¸»ç·šå…§æ ¸çš„主開發分支,並根據需è¦çˆ²ç©©å®šçš„內核版本æä¾›å‘後移æ¤åˆ†æ”¯ã€‚
@@ -155,9 +155,9 @@ Linux內核社å€æœ‰ä¸€å€‹å°ˆé–€çš„硬體安全å°çµ„負責åˆå§‹è¯ç¹«ï¼Œä¸¦ç›£
""""""""
有關å„方將å”商é™åˆ¶çµæŸçš„日期和時間。此時,準備好的緩解措施集æˆåˆ°ç›¸é—œçš„內核樹中
-並發布。
+併發布。
-雖然我們ç†è§£ç¡¬é«”安全å•é¡Œéœ€è¦å”調é™åˆ¶æ™‚間,但é™åˆ¶æ™‚間應é™åˆ¶åœ¨æ‰€æœ‰æœ‰é—œå„方制定ã€
+雖然我們ç†è§£ç¡¬ä»¶å®‰å…¨å•é¡Œéœ€è¦å”調é™åˆ¶æ™‚間,但é™åˆ¶æ™‚間應é™åˆ¶åœ¨æ‰€æœ‰æœ‰é—œå„方制定ã€
測試和準備緩解措施所需的最短時間內。人爲地延長é™åˆ¶æ™‚間以滿足會議討論日期或其他
éžæŠ€è¡“原因,會給相關的開發人員和響應å°çµ„帶來了更多的工作和負擔,因爲補ä¸éœ€è¦
ä¿æŒæœ€æ–°ï¼Œä»¥ä¾¿è·Ÿè¹¤æ­£åœ¨é€²è¡Œçš„上游內核開發,這å¯èƒ½æœƒé€ æˆè¡çªçš„更改。
@@ -165,7 +165,7 @@ Linux內核社å€æœ‰ä¸€å€‹å°ˆé–€çš„硬體安全å°çµ„負責åˆå§‹è¯ç¹«ï¼Œä¸¦ç›£
CVE分é…
"""""""
-硬體安全å°çµ„å’Œåˆå§‹éŸ¿æ‡‰å°çµ„都ä¸åˆ†é…CVE,開發éŽç¨‹ä¹Ÿä¸éœ€è¦CVE。如果CVE是由披露方
+硬件安全å°çµ„å’Œåˆå§‹éŸ¿æ‡‰å°çµ„都ä¸åˆ†é…CVE,開發éŽç¨‹ä¹Ÿä¸éœ€è¦CVE。如果CVE是由披露方
æ供的,則å¯ç”¨æ–¼æ–‡æª”中。
æµç¨‹å°ˆä½¿
@@ -196,22 +196,22 @@ CVE分é…
Google Kees Cook <keescook@chromium.org>
============= ========================================================
-如果è¦å°‡æ‚¨çš„組織添加到專使å單中,請與硬體安全å°çµ„è¯ç¹«ã€‚被æå的專使必須完全
+如果è¦å°‡æ‚¨çš„組織添加到專使å單中,請與硬件安全å°çµ„è¯ç¹«ã€‚被æå的專使必須完全
ç†è§£å’Œæ”¯æŒæˆ‘們的éŽç¨‹ï¼Œä¸¦ä¸”在Linux內核社å€ä¸­å¾ˆå®¹æ˜“è¯ç¹«ã€‚
加密郵件列表
------------
我們使用加密郵件列表進行通信。這些列表的工作原ç†æ˜¯ï¼Œç™¼é€åˆ°åˆ—表的電å­éƒµä»¶ä½¿ç”¨
-列表的PGP密鑰或列表的/MIME證書進行加密。郵件列表軟體å°é›»å­éƒµä»¶é€²è¡Œè§£å¯†ï¼Œä¸¦
+列表的PGP密鑰或列表的/MIME證書進行加密。郵件列表軟件å°é›»å­éƒµä»¶é€²è¡Œè§£å¯†ï¼Œä¸¦
使用訂閱者的PGP密鑰或S/MIME證書爲æ¯å€‹è¨‚閱者分別å°å…¶é€²è¡Œé‡æ–°åŠ å¯†ã€‚有關郵件列表
-軟體和用於確ä¿åˆ—表安全和數據ä¿è­·çš„設置的詳細信æ¯ï¼Œè«‹è¨ªå•:
+軟件和用於確ä¿åˆ—表安全和數據ä¿è­·çš„設置的詳細信æ¯ï¼Œè«‹è¨ªå•:
https://www.kernel.org/....
é—œéµé»ž
^^^^^^
-åˆæ¬¡æŽ¥è§¸è¦‹ :ref:`tw_Contact`. å°æ–¼ç‰¹å®šæ–¼äº‹ä»¶çš„郵件列表,密鑰和S/MIME證書通éŽ
+åˆæ¬¡æŽ¥è§¸è¦‹ :ref:`zh_Contact`. å°æ–¼ç‰¹å®šæ–¼äº‹ä»¶çš„郵件列表,密鑰和S/MIME證書通éŽ
特定列表發é€çš„é›»å­éƒµä»¶å‚³éžçµ¦è¨‚閱者。
訂閱事件特定列表
@@ -220,8 +220,8 @@ https://www.kernel.org/....
訂閱由響應å°çµ„處ç†ã€‚希望åƒèˆ‡é€šä¿¡çš„披露方將潛在訂戶的列表發é€çµ¦éŸ¿æ‡‰çµ„,以便
響應組å¯ä»¥é©—證訂閱請求。
-æ¯å€‹è¨‚戶都需è¦é€šéŽé›»å­éƒµä»¶å‘響應å°çµ„發é€è¨‚閱請求。電å­éƒµä»¶å¿…須使用訂閱伺æœå™¨
-çš„PGP密鑰或S/MIME證書籤å。如果使用PGP密鑰,則必須從公鑰伺æœå™¨ç²å¾—該密鑰,
+æ¯å€‹è¨‚戶都需è¦é€šéŽé›»å­éƒµä»¶å‘響應å°çµ„發é€è¨‚閱請求。電å­éƒµä»¶å¿…須使用訂閱æœå‹™å™¨
+çš„PGP密鑰或S/MIME證書籤å。如果使用PGP密鑰,則必須從公鑰æœå‹™å™¨ç²å¾—該密鑰,
並且ç†æƒ³æƒ…æ³ä¸‹è©²å¯†é‘°é€£æŽ¥åˆ°Linux內核的PGP信任網。å¦è«‹åƒè¦‹:
https://www.kernel.org/signature.html.
diff --git a/Documentation/translations/zh_TW/process/index.rst b/Documentation/translations/zh_TW/process/index.rst
index d742642dab01..6a0d98b2f9ee 100644
--- a/Documentation/translations/zh_TW/process/index.rst
+++ b/Documentation/translations/zh_TW/process/index.rst
@@ -13,11 +13,12 @@
.. _tw_process_index:
+========================
與Linux 內核社å€ä¸€èµ·å·¥ä½œ
========================
你想æˆçˆ²Linux內核開發人員嗎?歡迎之至ï¼åœ¨å­¸ç¿’許多關於內核的技術知識的åŒæ™‚,
-了解我們社å€çš„工作方å¼ä¹Ÿå¾ˆé‡è¦ã€‚閱讀這些文檔å¯ä»¥è®“您以更輕鬆的ã€éº»ç…©æ›´å°‘çš„
+瞭解我們社å€çš„工作方å¼ä¹Ÿå¾ˆé‡è¦ã€‚閱讀這些文檔å¯ä»¥è®“您以更輕鬆的ã€éº»ç…©æ›´å°‘çš„
æ–¹å¼å°‡æ›´æ”¹åˆä½µåˆ°å…§æ ¸ã€‚
以下是æ¯ä½é–‹ç™¼äººå“¡éƒ½æ‡‰é–±è®€çš„基本指å—:
@@ -49,7 +50,7 @@
management-style
embargoed-hardware-issues
-這些是一些總體性技術指å—,由於ä¸å¤§å¥½åˆ†é¡žè€Œæ”¾åœ¨é€™è£¡ï¼š
+這些是一些總體性技術指å—,由於ä¸å¤§å¥½åˆ†é¡žè€Œæ”¾åœ¨é€™è£ï¼š
.. toctree::
:maxdepth: 1
diff --git a/Documentation/translations/zh_TW/process/kernel-driver-statement.rst b/Documentation/translations/zh_TW/process/kernel-driver-statement.rst
index 963ecece3db1..e967089d2e1f 100644
--- a/Documentation/translations/zh_TW/process/kernel-driver-statement.rst
+++ b/Documentation/translations/zh_TW/process/kernel-driver-statement.rst
@@ -1,6 +1,6 @@
.. SPDX-License-Identifier: GPL-2.0
-.. _zh_process_statement_driver:
+.. _tw_process_statement_driver:
.. include:: ../disclaimer-zh_TW.rst
diff --git a/Documentation/translations/zh_TW/process/license-rules.rst b/Documentation/translations/zh_TW/process/license-rules.rst
index 503b6701bde4..2c43bcf2ac79 100644
--- a/Documentation/translations/zh_TW/process/license-rules.rst
+++ b/Documentation/translations/zh_TW/process/license-rules.rst
@@ -1,7 +1,5 @@
.. SPDX-License-Identifier: GPL-2.0
-.. SPDX-License-Identifier: GPL-2.0
-
.. include:: ../disclaimer-zh_TW.rst
:Original: :ref:`Documentation/process/license-rules.rst <kernel_licensing>`
@@ -17,10 +15,10 @@ Linux內核根據LICENSES/preferred/GPL-2.0中æ供的GNU通用公共許å¯è­‰ç
(GPL-2.0)的æ¢æ¬¾æ供,並在LICENSES/exceptions/Linux-syscall-note中顯å¼
æ述了例外的系統調用,如COPYING文件中所述。
-此文檔文件æ供了如何å°æ¯å€‹æºæ–‡ä»¶é€²è¡Œæ³¨é‡‹ä»¥ä½¿å…¶è¨±å¯è­‰æ¸…晰明確的說明。
+此文檔文件æ供瞭如何å°æ¯å€‹æºæ–‡ä»¶é€²è¡Œè¨»é‡‹ä»¥ä½¿å…¶è¨±å¯è­‰æ¸…晰明確的說明。
它ä¸æœƒå–代內核的許å¯è­‰ã€‚
-內核原始碼作爲一個整體é©ç”¨æ–¼COPYING文件中æ述的許å¯è­‰ï¼Œä½†æ˜¯å–®å€‹æºæ–‡ä»¶å¯ä»¥
+內核æºä»£ç¢¼ä½œçˆ²ä¸€å€‹æ•´é«”é©ç”¨æ–¼COPYING文件中æ述的許å¯è­‰ï¼Œä½†æ˜¯å–®å€‹æºæ–‡ä»¶å¯ä»¥
具有ä¸åŒçš„與GPL-20兼容的許å¯è­‰::
GPL-1.0+ : GNU通用公共許å¯è­‰v1.0或更高版本
@@ -34,18 +32,18 @@ Linux內核根據LICENSES/preferred/GPL-2.0中æ供的GNU通用公共許å¯è­‰ç
MIT等許å¯ã€‚
用戶空間API(UAPI)頭文件æ述了用戶空間程åºèˆ‡å…§æ ¸çš„接å£ï¼Œé€™æ˜¯ä¸€ç¨®ç‰¹æ®Šæƒ…æ³ã€‚
-根據內核COPYING文件中的注釋,syscall接å£æ˜¯ä¸€å€‹æ˜Žç¢ºçš„邊界,它ä¸æœƒå°‡GPLè¦æ±‚
-擴展到任何使用它與內核通信的軟體。由於UAPI頭文件必須包å«åœ¨å‰µå»ºåœ¨Linux內核
+根據內核COPYING文件中的註釋,syscall接å£æ˜¯ä¸€å€‹æ˜Žç¢ºçš„邊界,它ä¸æœƒå°‡GPLè¦æ±‚
+擴展到任何使用它與內核通信的軟件。由於UAPI頭文件必須包å«åœ¨å‰µå»ºåœ¨Linux內核
上é‹è¡Œçš„å¯åŸ·è¡Œæ–‡ä»¶çš„任何æºæ–‡ä»¶ä¸­ï¼Œå› æ­¤æ­¤ä¾‹å¤–必須記錄在特別的許å¯è­‰è¡¨è¿°ä¸­ã€‚
-表é”æºæ–‡ä»¶è¨±å¯è­‰çš„常用方法是將匹é…的樣æ¿æ–‡æœ¬æ·»åŠ åˆ°æ–‡ä»¶çš„頂部注釋中。由於
-æ ¼å¼ï¼Œæ‹¼å¯«éŒ¯èª¤ç­‰ï¼Œé€™äº›ã€Œæ¨£æ¿ã€å¾ˆé›£é€šéŽé‚£äº›åœ¨ä¸Šä¸‹æ–‡ä¸­ä½¿ç”¨çš„驗證許å¯è­‰åˆè¦æ€§
+表é”æºæ–‡ä»¶è¨±å¯è­‰çš„常用方法是將匹é…的樣æ¿æ–‡æœ¬æ·»åŠ åˆ°æ–‡ä»¶çš„頂部註釋中。由於
+æ ¼å¼ï¼Œæ‹¼å¯«éŒ¯èª¤ç­‰ï¼Œé€™äº›â€œæ¨£æ¿â€å¾ˆé›£é€šéŽé‚£äº›åœ¨ä¸Šä¸‹æ–‡ä¸­ä½¿ç”¨çš„驗證許å¯è­‰åˆè¦æ€§
的工具。
-樣æ¿æ–‡æœ¬çš„替代方法是在æ¯å€‹æºæ–‡ä»¶ä¸­ä½¿ç”¨è»Ÿé«”包數據交æ›ï¼ˆSPDX)許å¯è­‰æ¨™è­˜ç¬¦ã€‚
+樣æ¿æ–‡æœ¬çš„替代方法是在æ¯å€‹æºæ–‡ä»¶ä¸­ä½¿ç”¨è»Ÿä»¶åŒ…數據交æ›ï¼ˆSPDX)許å¯è­‰æ¨™è­˜ç¬¦ã€‚
SPDX許å¯è­‰æ¨™è­˜ç¬¦æ˜¯æ©Ÿå™¨å¯è§£æžçš„,並且是用於æ供文件內容的許å¯è­‰çš„精確縮寫。
SPDX許å¯è­‰æ¨™è­˜ç¬¦ç”±Linux 基金會的SPDX 工作組管ç†ï¼Œä¸¦å¾—到了整個行業,工具
-供應商和法律團隊的åˆä½œå¤¥ä¼´çš„一致åŒæ„。有關詳細信æ¯ï¼Œè«‹åƒé–±
+供應商和法律團隊的åˆä½œä¼™ä¼´çš„一致åŒæ„。有關詳細信æ¯ï¼Œè«‹åƒé–±
https://spdx.org/
Linux內核需è¦æ‰€æœ‰æºæ–‡ä»¶ä¸­çš„精確SPDX標識符。內核中使用的有效標識符在
@@ -58,7 +56,7 @@ https://spdx.org/licenses/ 上的官方SPDX許å¯è­‰åˆ—表中檢索,並附帶è
1.安置:
-   內核文件中的SPDX許å¯è­‰æ¨™è­˜ç¬¦æ‡‰æ·»åŠ åˆ°å¯åŒ…å«æ³¨é‡‹çš„文件中的第一行。å°æ–¼å¤§å¤š
+   內核文件中的SPDX許å¯è­‰æ¨™è­˜ç¬¦æ‡‰æ·»åŠ åˆ°å¯åŒ…å«è¨»é‡‹çš„文件中的第一行。å°æ–¼å¤§å¤š
數文件,這是第一行,除了那些在第一行中需è¦'#!PATH_TO_INTERPRETER'的腳本。
å°æ–¼é€™äº›è…³æœ¬ï¼ŒSPDX標識符進入第二行。
@@ -66,7 +64,7 @@ https://spdx.org/licenses/ 上的官方SPDX許å¯è­‰åˆ—表中檢索,並附帶è
2. 風格:
- SPDX許å¯è­‰æ¨™è­˜ç¬¦ä»¥æ³¨é‡‹çš„å½¢å¼æ·»åŠ ã€‚注釋樣å¼å–決於文件類型::
+ SPDX許å¯è­‰æ¨™è­˜ç¬¦ä»¥è¨»é‡‹çš„å½¢å¼æ·»åŠ ã€‚註釋樣å¼å–決於文件類型::
C source: // SPDX-License-Identifier: <SPDX License Expression>
C header: /* SPDX-License-Identifier: <SPDX License Expression> */
@@ -75,20 +73,20 @@ https://spdx.org/licenses/ 上的官方SPDX許å¯è­‰åˆ—表中檢索,並附帶è
.rst: .. SPDX-License-Identifier: <SPDX License Expression>
.dts{i}: // SPDX-License-Identifier: <SPDX License Expression>
- 如果特定工具無法處ç†æ¨™æº–注釋樣å¼ï¼Œå‰‡æ‡‰ä½¿ç”¨å·¥å…·æŽ¥å—的相應注釋機制。這是在
- C 頭文件中使用「/\*\*/ã€æ¨£å¼æ³¨é‡‹çš„原因。éŽåŽ»åœ¨ä½¿ç”¨ç”Ÿæˆçš„.lds文件中觀察到
- 構建被破壞,其中'ld'無法解æžC++注釋。ç¾åœ¨å·²ç¶“解決了這個å•é¡Œï¼Œä½†ä»ç„¶æœ‰è¼ƒ
- 舊的彙編程åºå·¥å…·ç„¡æ³•è™•ç†C++樣å¼çš„注釋。
+ 如果特定工具無法處ç†æ¨™æº–註釋樣å¼ï¼Œå‰‡æ‡‰ä½¿ç”¨å·¥å…·æŽ¥å—的相應註釋機制。這是在
+ C 頭文件中使用“/\*\*/â€æ¨£å¼è¨»é‡‹çš„原因。éŽåŽ»åœ¨ä½¿ç”¨ç”Ÿæˆçš„.lds文件中觀察到
+ 構建被破壞,其中'ld'無法解æžC++註釋。ç¾åœ¨å·²ç¶“解決了這個å•é¡Œï¼Œä½†ä»ç„¶æœ‰è¼ƒ
+ 舊的彙編程åºå·¥å…·ç„¡æ³•è™•ç†C++樣å¼çš„註釋。
|
3. å¥æ³•:
<SPDX許å¯è­‰è¡¨é”å¼>是SPDX許å¯è­‰åˆ—表中的SPDX短格å¼è¨±å¯è­‰æ¨™è­˜ç¬¦ï¼Œæˆ–者在許å¯
- 證例外é©ç”¨æ™‚由「WITHã€åˆ†éš”的兩個SPDX短格å¼è¨±å¯è­‰æ¨™è­˜ç¬¦çš„組åˆã€‚當應用多個許
- å¯è­‰æ™‚,表é”å¼ç”±åˆ†éš”å­è¡¨é”å¼çš„é—œéµå­—「ANDã€ï¼Œã€ŒORã€çµ„æˆï¼Œä¸¦ç”±ã€Œï¼ˆã€ï¼Œã€Œï¼‰ã€åŒ…åœã€‚
+ 證例外é©ç”¨æ™‚由“WITHâ€åˆ†éš”的兩個SPDX短格å¼è¨±å¯è­‰æ¨™è­˜ç¬¦çš„組åˆã€‚當應用多個許
+ å¯è­‰æ™‚,表é”å¼ç”±åˆ†éš”å­è¡¨é”å¼çš„é—œéµå­—“ANDâ€ï¼Œâ€œORâ€çµ„æˆï¼Œä¸¦ç”±â€œï¼ˆâ€ï¼Œâ€œï¼‰â€åŒ…åœã€‚
- 帶有「或更高ã€é¸é …çš„[L]GPL等許å¯è­‰çš„許å¯è­‰æ¨™è­˜ç¬¦é€šéŽä½¿ç”¨ã€Œ+ã€ä¾†è¡¨ç¤ºã€Œæˆ–更高ã€
+ 帶有“或更高â€é¸é …çš„[L]GPL等許å¯è­‰çš„許å¯è­‰æ¨™è­˜ç¬¦é€šéŽä½¿ç”¨â€œ+â€ä¾†è¡¨ç¤ºâ€œæˆ–更高â€
é¸é …來構建。::
// SPDX-License-Identifier: GPL-2.0+
@@ -230,7 +228,7 @@ https://spdx.org/licenses/ 上的官方SPDX許å¯è­‰åˆ—表中檢索,並附帶è
元標籤:
- 「其他ã€è¨±å¯è­‰çš„元標籤è¦æ±‚與 `優先許å¯`_ çš„è¦æ±‚相åŒã€‚
+ “其他â€è¨±å¯è­‰çš„元標籤è¦æ±‚與 `優先許å¯`_ çš„è¦æ±‚相åŒã€‚
文件格å¼ç¤ºä¾‹::
@@ -267,8 +265,8 @@ https://spdx.org/licenses/ 上的官方SPDX許å¯è­‰åˆ—表中檢索,並附帶è
LICENSES/exceptions/GCC-exception-2.0
- 包å«GCC'連çµä¾‹å¤–',它å…許ç¨ç«‹æ–¼å…¶è¨±å¯è­‰çš„任何二進ä½æ–‡ä»¶èˆ‡æ¨™è¨˜æœ‰æ­¤ä¾‹å¤–çš„
- 文件的編譯版本連çµã€‚這是從GPLä¸å…¼å®¹åŽŸå§‹ç¢¼å‰µå»ºå¯é‹è¡Œçš„å¯åŸ·è¡Œæ–‡ä»¶æ‰€å¿…需的。
+ 包å«GCC'éˆæŽ¥ä¾‹å¤–',它å…許ç¨ç«‹æ–¼å…¶è¨±å¯è­‰çš„任何二進制文件與標記有此例外的
+ 文件的編譯版本éˆæŽ¥ã€‚這是從GPLä¸å…¼å®¹æºä»£ç¢¼å‰µå»ºå¯é‹è¡Œçš„å¯åŸ·è¡Œæ–‡ä»¶æ‰€å¿…需的。
_`例外元標記`:
@@ -333,11 +331,11 @@ https://spdx.org/licenses/ 上的官方SPDX許å¯è­‰åˆ—表中檢索,並附帶è
_`模塊許å¯`
-----------------
- å¯åŠ è¼‰å…§æ ¸æ¨¡å¡Šé‚„需è¦MODULE_LICENSE()標記。此標記既ä¸æ›¿ä»£æ­£ç¢ºçš„原始碼
+ å¯åŠ è¼‰å…§æ ¸æ¨¡å¡Šé‚„需è¦MODULE_LICENSE()標記。此標記既ä¸æ›¿ä»£æ­£ç¢ºçš„æºä»£ç¢¼
許å¯è­‰ä¿¡æ¯ï¼ˆSPDX-License-Identifier),也ä¸ä»¥ä»»ä½•æ–¹å¼è¡¨ç¤ºæˆ–確定æ供模塊
- 原始碼的確切許å¯è­‰ã€‚
+ æºä»£ç¢¼çš„確切許å¯è­‰ã€‚
- 此標記的唯一目的是æ供足夠的信æ¯ï¼Œè©²æ¨¡å¡Šæ˜¯å¦æ˜¯è‡ªç”±è»Ÿé«”或者是內核模塊加
+ 此標記的唯一目的是æ供足夠的信æ¯ï¼Œè©²æ¨¡å¡Šæ˜¯å¦æ˜¯è‡ªç”±è»Ÿä»¶æˆ–者是內核模塊加
載器和用戶空間工具的專有模塊。
MODULE_LICENSE()的有效許å¯è­‰å­—符串是:
@@ -365,9 +363,9 @@ _`模塊許å¯`
åªèƒ½é€šéŽç›¸æ‡‰çš„æºæ–‡ä»¶ä¸­çš„許å¯è­‰ä¿¡æ¯ä¾†ç¢ºå®šã€‚
"Proprietary" 該模塊屬於專有許å¯ã€‚此字符串僅用於專有的第三
- 方模塊,ä¸èƒ½ç”¨æ–¼åœ¨å…§æ ¸æ¨¹ä¸­å…·æœ‰åŽŸå§‹ç¢¼çš„模塊。
- 以這種方å¼æ¨™è¨˜çš„模塊在加載時會使用'P'標記汙
- 染內核,並且內核模塊加載器拒絕將這些模塊連çµ
+ 方模塊,ä¸èƒ½ç”¨æ–¼åœ¨å…§æ ¸æ¨¹ä¸­å…·æœ‰æºä»£ç¢¼çš„模塊。
+ 以這種方å¼æ¨™è¨˜çš„模塊在加載時會使用'P'標記污
+ 染內核,並且內核模塊加載器拒絕將這些模塊éˆæŽ¥
到使用EXPORT_SYMBOL_GPL()導出的符號。
============================= =============================================
diff --git a/Documentation/translations/zh_TW/process/management-style.rst b/Documentation/translations/zh_TW/process/management-style.rst
index e9d29024f4c9..f3913e3c159d 100644
--- a/Documentation/translations/zh_TW/process/management-style.rst
+++ b/Documentation/translations/zh_TW/process/management-style.rst
@@ -16,20 +16,20 @@ Linux內核管ç†é¢¨æ ¼
主è¦æ˜¯çˆ²äº†é¿å…å覆回答 [#cnf1]_ 相åŒï¼ˆæˆ–類似)的å•é¡Œã€‚
管ç†é¢¨æ ¼æ˜¯éžå¸¸å€‹äººåŒ–的,比簡單的編碼風格è¦å‰‡æ›´é›£ä»¥é‡åŒ–,因此本文檔å¯èƒ½èˆ‡å¯¦
-際情æ³æœ‰é—œï¼Œä¹Ÿå¯èƒ½èˆ‡å¯¦éš›æƒ…æ³ç„¡é—œã€‚èµ·åˆå®ƒæ˜¯ä¸€å€‹çŽ©ç¬‘,但這並ä¸æ„味著它å¯èƒ½ä¸
+際情æ³æœ‰é—œï¼Œä¹Ÿå¯èƒ½èˆ‡å¯¦éš›æƒ…æ³ç„¡é—œã€‚èµ·åˆå®ƒæ˜¯ä¸€å€‹çŽ©ç¬‘,但這並ä¸æ„味ç€å®ƒå¯èƒ½ä¸
是真的。你得自己決定。
-順便說一å¥ï¼Œåœ¨è«‡åˆ°ã€Œæ ¸å¿ƒç®¡ç†è€…ã€æ™‚,主è¦æ˜¯æŠ€è¡“負責人,而ä¸æ˜¯åœ¨å…¬å¸å…§éƒ¨é€²è¡Œå‚³
-統管ç†çš„人。如果你簽署了採購訂單或者å°ä½ çš„團隊的é ç®—有任何了解,你幾乎肯定
+順便說一å¥ï¼Œåœ¨è«‡åˆ°â€œæ ¸å¿ƒç®¡ç†è€…â€æ™‚,主è¦æ˜¯æŠ€è¡“負責人,而ä¸æ˜¯åœ¨å…¬å¸å…§éƒ¨é€²è¡Œå‚³
+統管ç†çš„人。如果你簽署了採購訂單或者å°ä½ çš„團隊的é ç®—有任何瞭解,你幾乎肯定
ä¸æ˜¯ä¸€å€‹æ ¸å¿ƒç®¡ç†è€…。這些建議å¯èƒ½é©ç”¨æ–¼æ‚¨ï¼Œä¹Ÿå¯èƒ½ä¸é©ç”¨æ–¼æ‚¨ã€‚
-首先,我建議你購買「高效人的七個習慣ã€ï¼Œè€Œä¸æ˜¯é–±è®€å®ƒã€‚燒了它,這是一個å‰å¤§çš„
+首先,我建議你購買“高效人的七個習慣â€ï¼Œè€Œä¸æ˜¯é–±è®€å®ƒã€‚燒了它,這是一個å‰å¤§çš„
象徵性姿態。
.. [#cnf1] 本文件並ä¸æ˜¯é€šéŽå›žç­”å•é¡Œï¼Œè€Œæ˜¯é€šéŽè®“æå•è€…痛苦地明白,我們ä¸çŸ¥é“
答案是什麼。
-ä¸ç®¡æ€Žæ¨£ï¼Œé€™è£¡æ˜¯ï¼š
+ä¸ç®¡æ€Žæ¨£ï¼Œé€™è£æ˜¯ï¼š
.. _tw_decisions:
@@ -39,14 +39,14 @@ Linux內核管ç†é¢¨æ ¼
æ¯å€‹äººéƒ½èªçˆ²ç®¡ç†è€…åšæ±ºå®šï¼Œè€Œä¸”決策很é‡è¦ã€‚決定越大越痛苦,管ç†è€…就必須越高級。
這很明顯,但事實並éžå¦‚此。
-éŠæˆ²çš„å字是 **é¿å…** åšå‡ºæ±ºå®šã€‚尤其是,如果有人告訴你「é¸æ“‡ï¼ˆa)或(b),
-我們真的需è¦ä½ ä¾†åšæ±ºå®šã€ï¼Œä½ å°±æ˜¯é™·å…¥éº»ç…©çš„管ç†è€…。你管ç†çš„人比你更了解細節,
+最é‡è¦çš„是 **é¿å…** åšå‡ºæ±ºå®šã€‚尤其是,如果有人告訴你“é¸æ“‡ï¼ˆa)或(b),
+我們真的需è¦ä½ ä¾†åšæ±ºå®šâ€ï¼Œä½ å°±æ˜¯é™·å…¥éº»ç…©çš„管ç†è€…。你管ç†çš„人比你更瞭解細節,
所以如果他們來找你åšæŠ€è¡“決策,你完蛋了。你顯然沒有能力爲他們åšé€™å€‹æ±ºå®šã€‚
-(推論:如果你管ç†çš„人ä¸æ¯”你更了解細節,你也會被æžç ¸ï¼Œå„˜ç®¡åŽŸå› å®Œå…¨ä¸åŒã€‚
+(推論:如果你管ç†çš„人ä¸æ¯”你更瞭解細節,你也會被æžç ¸ï¼Œå„˜ç®¡åŽŸå› å®Œå…¨ä¸åŒã€‚
也就是說,你的工作是錯的,他們應該管ç†ä½ çš„æ‰æ™ºï¼‰
-所以éŠæˆ²çš„å字是 **é¿å…** åšå‡ºæ±ºå®šï¼Œè‡³å°‘是那些大而痛苦的決定。åšä¸€äº›å°çš„
+所以最é‡è¦çš„是 **é¿å…** åšå‡ºæ±ºå®šï¼Œè‡³å°‘是那些大而痛苦的決定。åšä¸€äº›å°çš„
å’Œéžçµæžœæ€§çš„決定是很好的,並且使您看起來好åƒçŸ¥é“自己在åšä»€éº¼ï¼Œæ‰€ä»¥å…§æ ¸ç®¡ç†è€…
需è¦åšçš„是將那些大的和痛苦的決定變æˆé‚£äº›æ²’有人真正關心的å°äº‹æƒ…。
@@ -61,7 +61,7 @@ Linux內核管ç†é¢¨æ ¼
逃離的角è½ã€‚走投無路的è€é¼ å¯èƒ½å¾ˆå±éšªâ€”—走投無路的管ç†è€…真å¯æ†ã€‚
事實證明,由於沒有人會愚蠢到讓內核管ç†è€…承擔巨大的財政責任,所以通常很容易
-回溯。既然你ä¸å¯èƒ½æµªè²»æŽ‰ä½ ç„¡æ³•å„Ÿé‚„çš„å·¨é¡è³‡é‡‘,你唯一å¯ä»¥å›žæº¯çš„就是技術決策,
+回溯。既然你ä¸å¯èƒ½æµªè²»æŽ‰ä½ ç„¡æ³•å„Ÿé‚„的鉅é¡è³‡é‡‘,你唯一å¯ä»¥å›žæº¯çš„就是技術決策,
而回溯很容易:åªè¦å‘Šè¨´å¤§å®¶ä½ æ˜¯å€‹ä¸ç¨±è·çš„傻瓜,說å°ä¸èµ·ï¼Œç„¶å¾Œæ’¤éŠ·ä½ åŽ»å¹´è®“別
人所åšçš„毫無價值的工作。çªç„¶é–“,你一年å‰åšçš„決定ä¸åœ¨æ˜¯ä¸€å€‹é‡å¤§çš„決定,因爲
它很容易被推翻。
@@ -72,7 +72,7 @@ Linux內核管ç†é¢¨æ ¼
確實很難。
- 如果有人告訴你,你去年所åšçš„工作終究是ä¸å€¼å¾—的,那麼å°é‚£äº›å¯æ†çš„低級工
程師來說也是很困難的,雖然實際的 **工作** 很容易刪除,但你å¯èƒ½å·²ç¶“ä¸å¯
- 挽回地失去了工程師的信任。記ä½ï¼šã€Œä¸å¯æ’¤éŠ·ã€æ˜¯æˆ‘們一開始就試圖é¿å…的,
+ 挽回地失去了工程師的信任。記ä½ï¼šâ€œä¸å¯æ’¤éŠ·â€æ˜¯æˆ‘們一開始就試圖é¿å…的,
而你的決定終究是一個é‡å¤§çš„決定。
令人欣慰的是,這兩個原因都å¯ä»¥é€šéŽé å…ˆæ‰¿èªä½ æ²’有任何線索,æå‰å‘Šè¨´äººå€‘ä½ çš„
@@ -80,19 +80,19 @@ Linux內核管ç†é¢¨æ ¼
的權利,並讓人們 **æ„è­˜** 到這一點。當你 **還沒有** åšéŽçœŸæ­£æ„šè ¢çš„事情的時
候,承èªè‡ªå·±æ˜¯æ„šè ¢çš„è¦å®¹æ˜“得多。
-然後,當它真的被證明是愚蠢的時候,人們就轉動他們的眼ç èªªã€Œå“Žå‘€ï¼Œä¸‹æ¬¡ä¸è¦äº†ã€ã€‚
+然後,當它真的被證明是愚蠢的時候,人們就轉動他們的眼ç èªªâ€œå“Žå‘€ï¼Œä¸‹æ¬¡ä¸è¦äº†â€ã€‚
這種å°ä¸ç¨±è·çš„先發制人的承èªï¼Œä¹Ÿå¯èƒ½ä½¿çœŸæ­£åšé€™é …工作的人也會三æ€æ˜¯å¦å€¼å¾—åšã€‚
畢竟,如果他們ä¸ç¢ºå®šé€™æ˜¯å¦æ˜¯ä¸€å€‹å¥½ä¸»æ„,你肯定ä¸æ‡‰è©²é€šéŽå‘他們ä¿è­‰ä»–們所åš
的工作將會進入(內核)鼓勵他們。在他們開始一項巨大的努力之å‰ï¼Œè‡³å°‘讓他們三
æ€è€Œå¾Œè¡Œã€‚
-記ä½ï¼šä»–們最好比你更了解細節,而且他們通常èªçˆ²ä»–們å°æ¯ä»¶äº‹éƒ½æœ‰ç­”案。作爲一
+記ä½ï¼šä»–們最好比你更瞭解細節,而且他們通常èªçˆ²ä»–們å°æ¯ä»¶äº‹éƒ½æœ‰ç­”案。作爲一
個管ç†è€…,你能åšçš„最好的事情ä¸æ˜¯çŒè¼¸è‡ªä¿¡ï¼Œè€Œæ˜¯å°ä»–們所åšçš„事情進行å¥åº·çš„批
判性æ€è€ƒã€‚
-順便說一å¥ï¼Œå¦ä¸€ç¨®é¿å…åšå‡ºæ±ºå®šçš„方法是看起來很å¯æ†çš„抱怨 「我們ä¸èƒ½å…©è€…å…¼
-得嗎?〠相信我,它是有效的。如果ä¸æ¸…楚哪種方法更好,他們最終會弄清楚的。
+順便說一å¥ï¼Œå¦ä¸€ç¨®é¿å…åšå‡ºæ±ºå®šçš„方法是看起來很å¯æ†çš„抱怨 “我們ä¸èƒ½å…©è€…å…¼
+得嗎?†相信我,它是有效的。如果ä¸æ¸…楚哪種方法更好,他們最終會弄清楚的。
最終的答案å¯èƒ½æ˜¯å…©å€‹åœ˜éšŠéƒ½æœƒå› çˆ²é€™ç¨®æƒ…æ³è€Œæ„Ÿåˆ°æ²®å–ªï¼Œä»¥è‡³æ–¼ä»–們放棄了。
這è½èµ·ä¾†åƒæ˜¯ä¸€å€‹å¤±æ•—,但這通常是一個跡象,表明兩個項目都有å•é¡Œï¼Œè€Œåƒèˆ‡å…¶ä¸­
@@ -102,7 +102,7 @@ Linux內核管ç†é¢¨æ ¼
2)人
-----
-大多數人都是白癡,åšä¸€å管ç†è€…æ„味著你必須處ç†å¥½é€™ä»¶äº‹ï¼Œä¹Ÿè¨±æ›´é‡è¦çš„是,
+大多數人都是白癡,åšä¸€å管ç†è€…æ„味ç€ä½ å¿…須處ç†å¥½é€™ä»¶äº‹ï¼Œä¹Ÿè¨±æ›´é‡è¦çš„是,
**他們** 必須處ç†å¥½ä½ ã€‚
事實證明,雖然很容易糾正技術錯誤,但ä¸å®¹æ˜“糾正人格障礙。你åªèƒ½å’Œä»–們的和
@@ -110,16 +110,16 @@ Linux內核管ç†é¢¨æ ¼
但是,爲了åšå¥½ä½œçˆ²å…§æ ¸ç®¡ç†è€…的準備,最好記ä½ä¸è¦ç‡’掉任何橋樑,ä¸è¦è½Ÿç‚¸ä»»ä½•
無辜的æ‘民,也ä¸è¦ç–é å¤ªå¤šçš„內核開發人員。事實證明,ç–é äººæ˜¯ç›¸ç•¶å®¹æ˜“的,而
-親近一個ç–é çš„人是很難的。因此,「ç–é ã€ç«‹å³å±¬æ–¼ã€Œä¸å¯é€†ã€çš„範疇,並根據
+親近一個ç–é çš„人是很難的。因此,“ç–é â€ç«‹å³å±¬æ–¼â€œä¸å¯é€†â€çš„範疇,並根據
:ref:`tw_decisions` æˆçˆ²çµ•ä¸å¯ä»¥åšçš„事情。
-這裡åªæœ‰å¹¾å€‹ç°¡å–®çš„è¦å‰‡ï¼š
+這è£åªæœ‰å¹¾å€‹ç°¡å–®çš„è¦å‰‡ï¼š
(1) ä¸è¦å«äººç¬¨è›‹ï¼ˆè‡³å°‘ä¸è¦åœ¨å…¬å…±å ´åˆï¼‰
(2) 學習如何在忘記è¦å‰‡(1)時é“æ­‰
-å•é¡Œåœ¨æ–¼ #1 很容易去åšï¼Œå› çˆ²ä½ å¯ä»¥ç”¨æ•¸ç™¾è¬ç¨®ä¸åŒçš„æ–¹å¼èªªã€Œä½ æ˜¯ä¸€å€‹ç¬¨è›‹ã€ [#cnf2]_
-有時甚至沒有æ„識到,而且幾乎總是帶著一種白熱化的信念,èªçˆ²ä½ æ˜¯å°çš„。
+å•é¡Œåœ¨æ–¼ #1 很容易去åšï¼Œå› çˆ²ä½ å¯ä»¥ç”¨æ•¸ç™¾è¬ç¨®ä¸åŒçš„æ–¹å¼èªªâ€œä½ æ˜¯ä¸€å€‹ç¬¨è›‹â€ [#cnf2]_
+有時甚至沒有æ„識到,而且幾乎總是帶ç€ä¸€ç¨®ç™½ç†±åŒ–的信念,èªçˆ²ä½ æ˜¯å°çš„。
你越確信自己是å°çš„(讓我們é¢å°ç¾å¯¦å§ï¼Œä½ å¯ä»¥æŠŠå¹¾ä¹Žæ‰€æœ‰äººéƒ½ç¨±çˆ²å£žäººï¼Œè€Œä¸”ä½ 
經常是å°çš„),事後é“歉就越難。
@@ -127,12 +127,12 @@ Linux內核管ç†é¢¨æ ¼
è¦è§£æ±ºæ­¤å•é¡Œï¼Œæ‚¨å¯¦éš›ä¸Šåªæœ‰å…©å€‹é¸é …:
- éžå¸¸æ“…é•·é“æ­‰
- - 把「愛ã€å‡å‹»åœ°æ•£é–‹ï¼Œæ²’有人會真正感覺到自己被ä¸å…¬å¹³åœ°çž„準了。讓它有足夠的
+ - 把“愛â€å‡å‹»åœ°æ•£é–‹ï¼Œæ²’有人會真正感覺到自己被ä¸å…¬å¹³åœ°çž„準了。讓它有足夠的
創造性,他們甚至å¯èƒ½æœƒè¦ºå¾—好笑。
é¸æ“‡æ°¸é ä¿æŒç¦®è²Œæ˜¯ä¸å­˜åœ¨çš„。沒有人會相信一個如此明顯地隱è—了他們真實性格的人。
-.. [#cnf2] ä¿ç¾…·西蒙演唱了「離開愛人的50種方法ã€ï¼Œå› çˆ²å¦çŽ‡åœ°èªªï¼Œã€Œå‘Šè¨´é–‹ç™¼è€…
+.. [#cnf2] ä¿ç¾…·西蒙演唱了“離開愛人的50種方法â€ï¼Œå› çˆ²å¦çŽ‡åœ°èªªï¼Œâ€œå‘Šè¨´é–‹ç™¼è€…
他們是D*CKHEAD" çš„100è¬ç¨®æ–¹æ³•éƒ½ç„¡æ³•ç¢ºèªã€‚但我確信他已經這麼想了。
3)人2 - 好人
@@ -148,8 +148,8 @@ Linux內核管ç†é¢¨æ ¼
特別是,他們能夠爲你åšæ±ºå®šï¼Œé€™å°±æ˜¯éŠæˆ²çš„全部內容。
所以當你發ç¾ä¸€å€‹æ¯”ä½ è°æ˜Žçš„人時,就順其自然å§ã€‚你的管ç†è·è²¬åœ¨å¾ˆå¤§ç¨‹åº¦ä¸Šè®Šæˆ
-了「è½èµ·ä¾†åƒæ˜¯å€‹å¥½ä¸»æ„——去嘗試å§ã€ï¼Œæˆ–者「è½èµ·ä¾†ä¸éŒ¯ï¼Œä½†æ˜¯XXX呢?ã€ã€Œã€‚第二個版
-本尤其是一個很好的方法,è¦éº¼å­¸ç¿’一些關於「XXXã€çš„æ–°æ±è¥¿ï¼Œè¦éº¼é€šéŽæŒ‡å‡ºä¸€äº›è°æ˜Ž
+了“è½èµ·ä¾†åƒæ˜¯å€‹å¥½ä¸»æ„——去嘗試å§â€ï¼Œæˆ–者“è½èµ·ä¾†ä¸éŒ¯ï¼Œä½†æ˜¯XXX呢?â€â€œã€‚第二個版
+本尤其是一個很好的方法,è¦éº¼å­¸ç¿’一些關於“XXXâ€çš„æ–°æ±è¥¿ï¼Œè¦éº¼é€šéŽæŒ‡å‡ºä¸€äº›è°æ˜Ž
人沒有想到的æ±è¥¿ä¾†é¡¯å¾—更具管ç†æ€§ã€‚無論哪種情æ³ï¼Œä½ éƒ½æœƒè´ã€‚
è¦æ³¨æ„的一件事是èªè­˜åˆ°ä¸€å€‹é ˜åŸŸçš„å‰å¤§ä¸ä¸€å®šæœƒè½‰åŒ–爲其他領域。所以你å¯èƒ½æœƒå‘
@@ -172,22 +172,22 @@ Linux內核管ç†é¢¨æ ¼
他們也å¯èƒ½æ˜¯èƒ½å¤ è§£æ±ºå•é¡Œçš„人。因爲,讓我們é¢å°ç¾å¯¦å§ï¼Œè‚¯å®šä¸æ˜¯ä½ ã€‚
承擔責任也是你首先æˆçˆ²ç®¡ç†è€…的原因。這是讓人們信任你,讓你ç²å¾—潛在的榮耀的
-一部分,因爲你就是那個會說「我æžç ¸äº†ã€çš„人。如果你已經éµå¾ªäº†ä»¥å‰çš„è¦å‰‡ï¼Œä½ ç¾
+一部分,因爲你就是那個會說“我æžç ¸äº†â€çš„人。如果你已經éµå¾ªäº†ä»¥å‰çš„è¦å‰‡ï¼Œä½ ç¾
在已經很擅長說了。
5)應é¿å…的事情
---------------
-有一件事人們甚至比被稱爲「笨蛋ã€æ›´è¨ŽåŽ­ï¼Œé‚£å°±æ˜¯åœ¨ä¸€å€‹ç¥žè–çš„è²éŸ³ä¸­è¢«ç¨±çˆ²ã€Œç¬¨è›‹ã€ã€‚
+有一件事人們甚至比被稱爲“笨蛋â€æ›´è¨ŽåŽ­ï¼Œé‚£å°±æ˜¯åœ¨ä¸€å€‹ç¥žè–çš„è²éŸ³ä¸­è¢«ç¨±çˆ²â€œç¬¨è›‹â€ã€‚
第一個你å¯ä»¥é“歉,第二個你ä¸æœƒçœŸæ­£å¾—到機會。å³ä½¿ä½ åšå¾—很好,他們也å¯èƒ½ä¸å†
傾è½ã€‚
-我們都èªçˆ²è‡ªå·±æ¯”別人強,這æ„味著當別人è£è…”作勢時,這會讓我們很惱ç«ã€‚你也許
+我們都èªçˆ²è‡ªå·±æ¯”別人強,這æ„味ç€ç•¶åˆ¥äººè£è…”作勢時,這會讓我們很惱ç«ã€‚你也許
在é“德和智力上比你周åœçš„æ¯å€‹äººéƒ½å„ªè¶Šï¼Œä½†ä¸è¦è©¦åœ–太明顯,除éžä½ çœŸçš„打算激怒
æŸäºº [#cnf3]_
åŒæ¨£ï¼Œä¸è¦å°äº‹æƒ…太客氣或太微妙。禮貌很容易è½å¾—è½èŠ±æµæ°´ï¼ŒæŠŠå•é¡Œéš±è—起來,
-正如他們所說,「在網際網路上,沒人能è½åˆ°ä½ çš„å«è“„。ã€ç”¨ä¸€å€‹éˆå™¨æŠŠé€™ä¸€é»žéŒ˜é€²åŽ»ï¼Œ
+正如他們所說,“在互è¯ç¶²ä¸Šï¼Œæ²’人能è½åˆ°ä½ çš„å«è“„。â€ç”¨ä¸€å€‹éˆå™¨æŠŠé€™ä¸€é»žéŒ˜é€²åŽ»ï¼Œ
因爲你ä¸èƒ½çœŸçš„ä¾é åˆ¥äººä¾†ç²å¾—你的觀點。
一些幽默å¯ä»¥å¹«åŠ©ç·©å’Œç›´çŽ‡å’Œé“德化。éŽåº¦åˆ°è’謬的地步,å¯ä»¥çŒè¼¸ä¸€å€‹è§€é»žï¼Œè€Œä¸
@@ -203,8 +203,8 @@ Linux內核管ç†é¢¨æ ¼
既然你的主è¦è²¬ä»»ä¼¼ä¹Žæ˜¯çˆ²åˆ¥äººçš„錯誤承擔責任,並且讓別人痛苦地明白你是ä¸ç¨±è·
的,那麼顯而易見的å•é¡Œä¹‹ä¸€å°±è®Šæˆäº†çˆ²ä»€éº¼é¦–å…ˆè¦é€™æ¨£åšã€‚
-首先,雖然你å¯èƒ½æœƒæˆ–å¯èƒ½ä¸æœƒè½åˆ°å幾歲女孩(或男孩,讓我們ä¸è¦åœ¨é€™è£¡è©•åˆ¤æˆ–
-性別歧視)敲你的更衣室門,你會得到一個巨大的個人æˆå°±æ„Ÿçˆ²ã€Œè² è²¬ã€ã€‚別介æ„你真
+首先,雖然你å¯èƒ½æœƒæˆ–å¯èƒ½ä¸æœƒè½åˆ°å幾歲女孩(或男孩,讓我們ä¸è¦åœ¨é€™è£è©•åˆ¤æˆ–
+性別歧視)敲你的更衣室門,你會得到一個巨大的個人æˆå°±æ„Ÿçˆ²â€œè² è²¬â€ã€‚別介æ„你真
的在領導別人,你è¦è·Ÿä¸Šåˆ¥äººï¼Œå„˜å¯èƒ½å¿«åœ°è¿½è¶•ä»–們。æ¯å€‹äººéƒ½æœƒèªçˆ²ä½ æ˜¯è² è²¬äººã€‚
如果你å¯ä»¥åšåˆ°é€™å€‹ï¼Œ 這是個å‰å¤§çš„工作ï¼
diff --git a/Documentation/translations/zh_TW/process/stable-api-nonsense.rst b/Documentation/translations/zh_TW/process/stable-api-nonsense.rst
index 33fc85c2cc51..6839d25bb22a 100644
--- a/Documentation/translations/zh_TW/process/stable-api-nonsense.rst
+++ b/Documentation/translations/zh_TW/process/stable-api-nonsense.rst
@@ -17,45 +17,45 @@
Linux 內核驅動接å£
==================
-寫作本文檔的目的,是爲了解釋爲什麼Linux既沒有二進ä½å…§æ ¸æŽ¥å£ï¼Œä¹Ÿæ²’有穩定
-的內核接å£ã€‚這裡所說的內核接å£ï¼Œæ˜¯æŒ‡å…§æ ¸é‡Œçš„接å£ï¼Œè€Œä¸æ˜¯å…§æ ¸å’Œç”¨æˆ¶ç©ºé–“
-的接å£ã€‚內核到用戶空間的接å£ï¼Œæ˜¯æ供給應用程å¼ä½¿ç”¨çš„系統調用,系統調用
-在歷å²ä¸Šå¹¾ä¹Žæ²’有éŽè®ŠåŒ–,將來也ä¸æœƒæœ‰è®ŠåŒ–。我有一些è€æ‡‰ç”¨ç¨‹å¼æ˜¯åœ¨0.9版本
-或者更早版本的內核上編譯的,在使用2.6版本內核的Linux發布上ä¾ç„¶ç”¨å¾—很好
-。用戶和應用程å¼ä½œè€…å¯ä»¥å°‡é€™å€‹æŽ¥å£çœ‹æˆæ˜¯ç©©å®šçš„。
+寫作本文檔的目的,是爲了解釋爲什麼Linux既沒有二進制內核接å£ï¼Œä¹Ÿæ²’有穩定
+的內核接å£ã€‚這è£æ‰€èªªçš„內核接å£ï¼Œæ˜¯æŒ‡å…§æ ¸è£çš„接å£ï¼Œè€Œä¸æ˜¯å…§æ ¸å’Œç”¨æˆ¶ç©ºé–“
+的接å£ã€‚內核到用戶空間的接å£ï¼Œæ˜¯æ供給應用程åºä½¿ç”¨çš„系統調用,系統調用
+在歷å²ä¸Šå¹¾ä¹Žæ²’有éŽè®ŠåŒ–,將來也ä¸æœƒæœ‰è®ŠåŒ–。我有一些è€æ‡‰ç”¨ç¨‹åºæ˜¯åœ¨0.9版本
+或者更早版本的內核上編譯的,在使用2.6版本內核的Linux發佈上ä¾ç„¶ç”¨å¾—很好
+。用戶和應用程åºä½œè€…å¯ä»¥å°‡é€™å€‹æŽ¥å£çœ‹æˆæ˜¯ç©©å®šçš„。
執行綱è¦
--------
你也許以爲自己想è¦ç©©å®šçš„內核接å£ï¼Œä½†æ˜¯ä½ ä¸æ¸…楚你è¦çš„實際上ä¸æ˜¯å®ƒã€‚你需
-è¦çš„其實是穩定的驅動程åºï¼Œè€Œä½ åªæœ‰å°‡é©…動程åºæ”¾åˆ°å…¬ç‰ˆå…§æ ¸çš„原始碼樹里,
-æ‰æœ‰å¯èƒ½é”到這個目的。而且這樣åšé‚„有很多其它好處,正是因爲這些好處使得
-Linux能æˆçˆ²å¼·å£¯ï¼Œç©©å®šï¼Œæˆç†Ÿçš„作業系統,這也是你最開始é¸æ“‡Linux的原因。
+è¦çš„其實是穩定的驅動程åºï¼Œè€Œä½ åªæœ‰å°‡é©…動程åºæ”¾åˆ°å…¬ç‰ˆå…§æ ¸çš„æºä»£ç¢¼æ¨¹è£ï¼Œ
+纔有å¯èƒ½é”到這個目的。而且這樣åšé‚„有很多其它好處,正是因爲這些好處使得
+Linux能æˆçˆ²å¼·å£¯ï¼Œç©©å®šï¼Œæˆç†Ÿçš„æ“作系統,這也是你最開始é¸æ“‡Linux的原因。
入門
-----
-åªæœ‰é‚£äº›å¯«é©…動程åºçš„「怪人ã€æ‰æœƒæ“”心內核接å£çš„改變,å°å»£å¤§ç”¨æˆ¶ä¾†èªªï¼Œæ—¢
+åªæœ‰é‚£äº›å¯«é©…動程åºçš„“怪人â€çº”會擔心內核接å£çš„改變,å°å»£å¤§ç”¨æˆ¶ä¾†èªªï¼Œæ—¢
看ä¸åˆ°å…§æ ¸æŽ¥å£ï¼Œä¹Ÿä¸éœ€è¦åŽ»é—œå¿ƒå®ƒã€‚
首先,我ä¸æ‰“算討論關於任何éžGPL許å¯çš„內核驅動的法律å•é¡Œï¼Œé€™äº›éžGPL許å¯
-的驅動程åºåŒ…括ä¸å…¬é–‹åŽŸå§‹ç¢¼ï¼Œéš±è—原始碼,二進ä½æˆ–者是用原始碼包è£ï¼Œæˆ–者
-是其它任何形å¼çš„ä¸èƒ½ä»¥GPL許å¯å…¬é–‹åŽŸå§‹ç¢¼çš„驅動程åºã€‚如果有法律å•é¡Œï¼Œè«‹å’¨
-詢律師,我åªæ˜¯ä¸€å€‹ç¨‹å¼è¨­è¨ˆå¸«ï¼Œæ‰€ä»¥æˆ‘åªæ‰“算探討技術å•é¡Œï¼ˆä¸æ˜¯å°çœ‹æ³•å¾‹å•é¡Œï¼Œ
+的驅動程åºåŒ…括ä¸å…¬é–‹æºä»£ç¢¼ï¼Œéš±è—æºä»£ç¢¼ï¼ŒäºŒé€²åˆ¶æˆ–者是用æºä»£ç¢¼åŒ…è£ï¼Œæˆ–者
+是其它任何形å¼çš„ä¸èƒ½ä»¥GPL許å¯å…¬é–‹æºä»£ç¢¼çš„驅動程åºã€‚如果有法律å•é¡Œï¼Œè«‹è«®
+詢律師,我åªæ˜¯ä¸€å€‹ç¨‹åºå“¡ï¼Œæ‰€ä»¥æˆ‘åªæ‰“算探討技術å•é¡Œï¼ˆä¸æ˜¯å°çœ‹æ³•å¾‹å•é¡Œï¼Œ
法律å•é¡Œå¾ˆå¯¦éš›ï¼Œä¸¦ä¸”需è¦ä¸€ç›´é—œæ³¨ï¼‰ã€‚
-既然åªè«‡æŠ€è¡“å•é¡Œï¼Œæˆ‘們就有了下é¢å…©å€‹ä¸»é¡Œï¼šäºŒé€²ä½å…§æ ¸æŽ¥å£å’Œç©©å®šçš„內核æº
-代碼接å£ã€‚這兩個å•é¡Œæ˜¯äº’相關è¯çš„,讓我們先解決掉二進ä½æŽ¥å£çš„å•é¡Œã€‚
+既然åªè«‡æŠ€è¡“å•é¡Œï¼Œæˆ‘們就有了下é¢å…©å€‹ä¸»é¡Œï¼šäºŒé€²åˆ¶å…§æ ¸æŽ¥å£å’Œç©©å®šçš„內核æº
+代碼接å£ã€‚這兩個å•é¡Œæ˜¯äº’相關è¯çš„,讓我們先解決掉二進制接å£çš„å•é¡Œã€‚
-二進ä½å…§æ ¸æŽ¥å£
+二進制內核接å£
--------------
-å‡å¦‚我們有一個穩定的內核原始碼接å£ï¼Œé‚£éº¼è‡ªç„¶è€Œç„¶çš„,我們就æ“有了穩定的
-二進ä½æŽ¥å£ï¼Œæ˜¯é€™æ¨£çš„嗎?錯。讓我們看看關於Linux內核的幾點事實:
+å‡å¦‚我們有一個穩定的內核æºä»£ç¢¼æŽ¥å£ï¼Œé‚£éº¼è‡ªç„¶è€Œç„¶çš„,我們就æ“有了穩定的
+二進制接å£ï¼Œæ˜¯é€™æ¨£çš„嗎?錯。讓我們看看關於Linux內核的幾點事實:
- - å–決於所用的C編譯器的版本,ä¸åŒçš„內核數據çµæ§‹é‡Œçš„çµæ§‹é«”çš„å°é½Šæ–¹
+ - å–決於所用的C編譯器的版本,ä¸åŒçš„內核數據çµæ§‹è£çš„çµæ§‹é«”çš„å°é½Šæ–¹
å¼æœƒæœ‰å·®åˆ¥ï¼Œä»£ç¢¼ä¸­ä¸åŒå‡½æ•¸çš„表ç¾å½¢å¼ä¹Ÿä¸ä¸€æ¨£ï¼ˆå‡½æ•¸æ˜¯ä¸æ˜¯è¢«inline
編譯å–決於編譯器行爲)。ä¸åŒçš„函數的表ç¾å½¢å¼ä¸¦ä¸é‡è¦ï¼Œä½†æ˜¯æ•¸æ“š
çµæ§‹å…§éƒ¨çš„å°é½Šæ–¹å¼å¾ˆé—œéµã€‚
@@ -69,33 +69,33 @@ Linux能æˆçˆ²å¼·å£¯ï¼Œç©©å®šï¼Œæˆç†Ÿçš„作業系統,這也是你最開始é¸
項。
- Linuxå¯ä»¥åœ¨å¾ˆå¤šçš„ä¸åŒé«”ç³»çµæ§‹çš„處ç†å™¨ä¸Šé‹è¡Œã€‚在æŸå€‹é«”ç³»çµæ§‹ä¸Šç·¨
- 譯好的二進ä½é©…動程åºï¼Œä¸å¯èƒ½åœ¨å¦å¤–一個體系çµæ§‹ä¸Šæ­£ç¢ºçš„é‹è¡Œã€‚
+ 譯好的二進制驅動程åºï¼Œä¸å¯èƒ½åœ¨å¦å¤–一個體繫çµæ§‹ä¸Šæ­£ç¢ºçš„é‹è¡Œã€‚
å°æ–¼ä¸€å€‹ç‰¹å®šçš„內核,滿足這些æ¢ä»¶ä¸¦ä¸é›£ï¼Œä½¿ç”¨åŒä¸€å€‹C編譯器和åŒæ¨£çš„內核é…
-ç½®é¸é …來編譯驅動程åºæ¨¡å¡Šå°±å¯ä»¥äº†ã€‚這å°æ–¼çµ¦ä¸€å€‹ç‰¹å®šLinux發布的特定版本æ
-供驅動程åºï¼Œæ˜¯å®Œå…¨å¯ä»¥æ»¿è¶³éœ€æ±‚的。但是如果你è¦çµ¦ä¸åŒç™¼å¸ƒçš„ä¸åŒç‰ˆæœ¬éƒ½ç™¼
-布一個驅動程åºï¼Œå°±éœ€è¦åœ¨æ¯å€‹ç™¼å¸ƒä¸Šç”¨ä¸åŒçš„內核設置åƒæ•¸éƒ½ç·¨è­¯ä¸€æ¬¡å…§æ ¸ï¼Œ
-這簡直跟噩夢一樣。而且還è¦æ³¨æ„到,æ¯å€‹Linux發布還æä¾›ä¸åŒçš„Linux內核,
-這些內核都é‡å°ä¸åŒçš„硬體類型進行了優化(有很多種ä¸åŒçš„處ç†å™¨ï¼Œé‚„有ä¸åŒ
-的內核設置é¸é …)。所以æ¯ç™¼å¸ƒä¸€æ¬¡é©…動程åºï¼Œéƒ½éœ€è¦æ供很多ä¸åŒç‰ˆæœ¬çš„內核
+ç½®é¸é …來編譯驅動程åºæ¨¡å¡Šå°±å¯ä»¥äº†ã€‚這å°æ–¼çµ¦ä¸€å€‹ç‰¹å®šLinux發佈的特定版本æ
+供驅動程åºï¼Œæ˜¯å®Œå…¨å¯ä»¥æ»¿è¶³éœ€æ±‚的。但是如果你è¦çµ¦ä¸åŒç™¼ä½ˆçš„ä¸åŒç‰ˆæœ¬éƒ½ç™¼
+佈一個驅動程åºï¼Œå°±éœ€è¦åœ¨æ¯å€‹ç™¼ä½ˆä¸Šç”¨ä¸åŒçš„內核設置åƒæ•¸éƒ½ç·¨è­¯ä¸€æ¬¡å…§æ ¸ï¼Œ
+這簡直跟噩夢一樣。而且還è¦æ³¨æ„到,æ¯å€‹Linux發佈還æä¾›ä¸åŒçš„Linux內核,
+這些內核都é‡å°ä¸åŒçš„硬件類型進行了優化(有很多種ä¸åŒçš„處ç†å™¨ï¼Œé‚„有ä¸åŒ
+的內核設置é¸é …)。所以æ¯ç™¼ä½ˆä¸€æ¬¡é©…動程åºï¼Œéƒ½éœ€è¦æ供很多ä¸åŒç‰ˆæœ¬çš„內核
模塊。
-相信我,如果你真的è¦æŽ¡å–這種發布方å¼ï¼Œä¸€å®šæœƒæ…¢æ…¢ç˜‹æŽ‰ï¼Œæˆ‘很久以å‰å°±æœ‰éŽ
+相信我,如果你真的è¦æŽ¡å–這種發佈方å¼ï¼Œä¸€å®šæœƒæ…¢æ…¢ç˜‹æŽ‰ï¼Œæˆ‘很久以å‰å°±æœ‰éŽ
深刻的教訓...
-穩定的內核原始碼接å£
+穩定的內核æºä»£ç¢¼æŽ¥å£
--------------------
-如果有人ä¸å°‡ä»–的內核驅動程åºï¼Œæ”¾å…¥å…¬ç‰ˆå…§æ ¸çš„原始碼樹,而åˆæƒ³è®“驅動程åº
+如果有人ä¸å°‡ä»–的內核驅動程åºï¼Œæ”¾å…¥å…¬ç‰ˆå…§æ ¸çš„æºä»£ç¢¼æ¨¹ï¼Œè€Œåˆæƒ³è®“驅動程åº
一直ä¿æŒåœ¨æœ€æ–°çš„內核中å¯ç”¨ï¼Œé‚£éº¼é€™å€‹è©±é¡Œå°‡æœƒè®Šå¾—沒完沒了。
內核開發是æŒçºŒè€Œä¸”快節å¥çš„,從來都ä¸æœƒæ…¢ä¸‹ä¾†ã€‚內核開發人員在當å‰æŽ¥å£ä¸­
找到bug,或者找到更好的實ç¾æ–¹å¼ã€‚一旦發ç¾é€™äº›ï¼Œä»–們就很快會去修改當å‰çš„
-接å£ã€‚修改接å£æ„味著,函數åå¯èƒ½æœƒæ”¹è®Šï¼Œçµæ§‹é«”å¯èƒ½è¢«æ“´å……或者刪減,函數
+接å£ã€‚修改接å£æ„味ç€ï¼Œå‡½æ•¸åå¯èƒ½æœƒæ”¹è®Šï¼Œçµæ§‹é«”å¯èƒ½è¢«æ“´å……或者刪減,函數
çš„åƒæ•¸ä¹Ÿå¯èƒ½ç™¼ç”Ÿæ”¹è®Šã€‚一旦接å£è¢«ä¿®æ”¹ï¼Œå…§æ ¸ä¸­ä½¿ç”¨é€™äº›æŽ¥å£çš„地方需è¦åŒæ™‚
修正,這樣æ‰èƒ½ä¿è­‰æ‰€æœ‰çš„æ±è¥¿ç¹¼çºŒå·¥ä½œã€‚
-舉一個例å­ï¼Œå…§æ ¸çš„USB驅動程åºæŽ¥å£åœ¨USBå­ç³»çµ±çš„整個生命周期中,至少經歷
+舉一個例å­ï¼Œå…§æ ¸çš„USB驅動程åºæŽ¥å£åœ¨USBå­ç³»çµ±çš„整個生命週期中,至少經歷
了三次é‡å¯«ã€‚這些é‡å¯«è§£æ±ºä»¥ä¸‹å•é¡Œï¼š
- 把數據æµå¾žåŒæ­¥æ¨¡å¼æ”¹æˆéžåŒæ­¥æ¨¡å¼ï¼Œé€™å€‹æ”¹å‹•æ¸›å°‘了一些驅動程åºçš„
@@ -104,11 +104,11 @@ Linux能æˆçˆ²å¼·å£¯ï¼Œç©©å®šï¼Œæˆç†Ÿçš„作業系統,這也是你最開始é¸
- 修改了USB核心代碼中爲USB驅動分é…數據包內存的方å¼ï¼Œæ‰€æœ‰çš„驅動都
需è¦æ供更多的åƒæ•¸çµ¦USB核心,以修正了很多已經被記錄在案的死鎖。
-這和一些å°é–‰åŽŸå§‹ç¢¼çš„作業系統形æˆé®®æ˜Žçš„å°æ¯”,在那些作業系統上,ä¸å¾—ä¸é¡
+這和一些å°é–‰æºä»£ç¢¼çš„æ“作系統形æˆé®®æ˜Žçš„å°æ¯”,在那些æ“作系統上,ä¸å¾—ä¸é¡
外的維護舊的USB接å£ã€‚這導致了一個å¯èƒ½æ€§ï¼Œæ–°çš„開發者ä¾ç„¶æœƒä¸å°å¿ƒä½¿ç”¨èˆŠçš„
-接å£ï¼Œä»¥ä¸æ°ç•¶çš„æ–¹å¼ç·¨å¯«ä»£ç¢¼ï¼Œé€²è€Œå½±éŸ¿åˆ°ä½œæ¥­ç³»çµ±çš„穩定性。
+接å£ï¼Œä»¥ä¸æ°ç•¶çš„æ–¹å¼ç·¨å¯«ä»£ç¢¼ï¼Œé€²è€Œå½±éŸ¿åˆ°æ“作系統的穩定性。
在上é¢çš„例å­ä¸­ï¼Œæ‰€æœ‰çš„開發者都åŒæ„這些é‡è¦çš„改動,在這樣的情æ³ä¸‹ä¿®æ”¹ä»£
-價很低。如果Linuxä¿æŒä¸€å€‹ç©©å®šçš„內核原始碼接å£ï¼Œé‚£éº¼å°±å¾—創建一個新的接å£
+價很低。如果Linuxä¿æŒä¸€å€‹ç©©å®šçš„內核æºä»£ç¢¼æŽ¥å£ï¼Œé‚£éº¼å°±å¾—創建一個新的接å£
;舊的,有å•é¡Œçš„接å£å¿…須一直維護,給Linux USB開發者帶來é¡å¤–的工作。既然
所有的Linux USB驅動的作者都是利用自己的時間工作,那麼è¦æ±‚他們去åšæ¯«ç„¡æ„
義的å…è²»é¡å¤–工作,是ä¸å¯èƒ½çš„。
@@ -126,28 +126,28 @@ Linux能æˆçˆ²å¼·å£¯ï¼Œç©©å®šï¼Œæˆç†Ÿçš„作業系統,這也是你最開始é¸
è¦åšä»€éº¼
--------
-如果你寫了一個Linux內核驅動,但是它還ä¸åœ¨Linux原始碼樹里,作爲一個開發
-者,你應該怎麼åšï¼Ÿçˆ²æ¯å€‹ç™¼å¸ƒçš„æ¯å€‹ç‰ˆæœ¬æ供一個二進ä½é©…動,那簡直是一個
+如果你寫了一個Linux內核驅動,但是它還ä¸åœ¨Linuxæºä»£ç¢¼æ¨¹è£ï¼Œä½œçˆ²ä¸€å€‹é–‹ç™¼
+者,你應該怎麼åšï¼Ÿçˆ²æ¯å€‹ç™¼ä½ˆçš„æ¯å€‹ç‰ˆæœ¬æ供一個二進制驅動,那簡直是一個
噩夢,è¦è·Ÿä¸Šæ°¸é è™•æ–¼è®ŠåŒ–之中的內核接å£ï¼Œä¹Ÿæ˜¯ä¸€ä»¶è¾›è‹¦æ´»ã€‚
-很簡單,讓你的驅動進入內核原始碼樹(è¦è¨˜å¾—我們在談論的是以GPL許å¯ç™¼è¡Œ
+很簡單,讓你的驅動進入內核æºä»£ç¢¼æ¨¹ï¼ˆè¦è¨˜å¾—我們在談論的是以GPL許å¯ç™¼è¡Œ
的驅動,如果你的代碼ä¸ç¬¦åˆGPL,那麼ç¥ä½ å¥½é‹ï¼Œä½ åªèƒ½è‡ªå·±è§£æ±ºé€™å€‹å•é¡Œäº†ï¼Œ
-你這個å¸è¡€é¬¼<把Andrewå’ŒLinuså°å¸è¡€é¬¼çš„定義連çµåˆ°é€™è£¡>)。當你的代碼加入
-公版內核原始碼樹之後,如果一個內核接å£æ”¹è®Šï¼Œä½ çš„驅動會直接被修改接å£çš„
+你這個å¸è¡€é¬¼<把Andrewå’ŒLinuså°å¸è¡€é¬¼çš„定義éˆæŽ¥åˆ°é€™è£>)。當你的代碼加入
+公版內核æºä»£ç¢¼æ¨¹ä¹‹å¾Œï¼Œå¦‚果一個內核接å£æ”¹è®Šï¼Œä½ çš„驅動會直接被修改接å£çš„
那個人修改。ä¿è­‰ä½ çš„é©…å‹•æ°¸é éƒ½å¯ä»¥ç·¨è­¯é€šéŽï¼Œä¸¦ä¸”一直工作,你幾乎ä¸éœ€è¦
åšä»€éº¼äº‹æƒ…。
-把驅動放到內核原始碼樹里會有很多的好處:
+把驅動放到內核æºä»£ç¢¼æ¨¹è£æœƒæœ‰å¾ˆå¤šçš„好處:
- 驅動的質é‡æœƒæå‡ï¼Œè€Œç¶­è­·æˆæœ¬ï¼ˆå°åŽŸå§‹ä½œè€…來說)會下é™ã€‚
- 其他人會給驅動添加新特性。
- 其他人會找到驅動中的bug並修復。
- 其他人會在驅動中找到性能優化的機會。
- 當外部的接å£çš„改變需è¦ä¿®æ”¹é©…動程åºçš„時候,其他人會修改驅動程åº
- - ä¸éœ€è¦è¯ç¹«ä»»ä½•ç™¼è¡Œå•†ï¼Œé€™å€‹é©…動會自動的隨著所有的Linux發布一起發
+ - ä¸éœ€è¦è¯ç¹«ä»»ä½•ç™¼è¡Œå•†ï¼Œé€™å€‹é©…動會自動的隨ç€æ‰€æœ‰çš„Linux發佈一起發
布。
-和別的作業系統相比,Linux爲更多ä¸åŒçš„設備æä¾›ç¾æˆçš„驅動,而且能在更多ä¸
-åŒé«”ç³»çµæ§‹çš„處ç†å™¨ä¸Šæ”¯æŒé€™äº›è¨­å‚™ã€‚這個經éŽè€ƒé©—的開發模å¼ï¼Œå¿…然是錯ä¸äº†
+和別的æ“作系統相比,Linux爲更多ä¸åŒçš„設備æä¾›ç¾æˆçš„驅動,而且能在更多ä¸
+åŒé«”繫çµæ§‹çš„處ç†å™¨ä¸Šæ”¯æŒé€™äº›è¨­å‚™ã€‚這個經éŽè€ƒé©—的開發模å¼ï¼Œå¿…然是錯ä¸äº†
çš„ :)
æ„Ÿè¬
diff --git a/Documentation/translations/zh_TW/process/stable-kernel-rules.rst b/Documentation/translations/zh_TW/process/stable-kernel-rules.rst
index 29d9a70a1868..bd82a8ff3969 100644
--- a/Documentation/translations/zh_TW/process/stable-kernel-rules.rst
+++ b/Documentation/translations/zh_TW/process/stable-kernel-rules.rst
@@ -17,10 +17,10 @@
- Kangkai Yin <e12051@motorola.com>
- 胡皓文 Hu Haowen <src.res.211@gmail.com>
-所有你想知é“的事情 - 關於linux穩定版發布
+所有你想知é“的事情 - 關於linux穩定版發佈
========================================
-關於Linux 2.6穩定版發布,所有你想知é“的事情。
+關於Linux 2.6穩定版發佈,所有你想知é“的事情。
關於哪些類型的補ä¸å¯ä»¥è¢«æŽ¥æ”¶é€²å…¥ç©©å®šç‰ˆä»£ç¢¼æ¨¹ï¼Œå“ªäº›ä¸å¯ä»¥çš„è¦å‰‡ï¼š
----------------------------------------------------------------
@@ -28,39 +28,39 @@
- 必須是顯而易見的正確,並且經éŽæ¸¬è©¦çš„。
- 連åŒä¸Šä¸‹æ–‡ï¼Œä¸èƒ½å¤§æ–¼100行。
- å¿…é ˆåªä¿®æ­£ä¸€ä»¶äº‹æƒ…。
- - 必須修正了一個給大家帶來麻煩的真正的bug(ä¸æ˜¯ã€Œé€™ä¹Ÿè¨±æ˜¯ä¸€å€‹å•é¡Œ...ã€
+ - 必須修正了一個給大家帶來麻煩的真正的bug(ä¸æ˜¯â€œé€™ä¹Ÿè¨±æ˜¯ä¸€å€‹å•é¡Œ...â€
那樣的æ±è¥¿ï¼‰ã€‚
- 必須修正帶來如下後果的å•é¡Œï¼šç·¨è­¯éŒ¯èª¤ï¼ˆå°è¢«æ¨™è¨˜çˆ²CONFIG_BROKEN的例外),
- 內核崩潰,掛起,數據æ壞,真正的安全å•é¡Œï¼Œæˆ–者一些類似「哦,這ä¸
- 好ã€çš„å•é¡Œã€‚簡短的說,就是一些致命的å•é¡Œã€‚
- - 沒有「ç†è«–上的競爭æ¢ä»¶ã€ï¼Œé™¤éžèƒ½çµ¦å‡ºç«¶çˆ­æ¢ä»¶å¦‚何被利用的解釋。
- - ä¸èƒ½å­˜åœ¨ä»»ä½•çš„「瑣碎的ã€ä¿®æ­£ï¼ˆæ‹¼å¯«ä¿®æ­£ï¼ŒåŽ»æŽ‰å¤šé¤˜ç©ºæ ¼ä¹‹é¡žçš„)。
+ 內核崩潰,掛起,數據æ壞,真正的安全å•é¡Œï¼Œæˆ–者一些類似“哦,這ä¸
+ 好â€çš„å•é¡Œã€‚簡短的說,就是一些致命的å•é¡Œã€‚
+ - 沒有“ç†è«–上的競爭æ¢ä»¶â€ï¼Œé™¤éžèƒ½çµ¦å‡ºç«¶çˆ­æ¢ä»¶å¦‚何被利用的解釋。
+ - ä¸èƒ½å­˜åœ¨ä»»ä½•çš„“瑣碎的â€ä¿®æ­£ï¼ˆæ‹¼å¯«ä¿®æ­£ï¼ŒåŽ»æŽ‰å¤šé¤˜ç©ºæ ¼ä¹‹é¡žçš„)。
- 必須被相關å­ç³»çµ±çš„維護者接å—。
- - å¿…é ˆéµå¾ªDocumentation/translations/zh_TW/process/submitting-patches.rst里的è¦å‰‡ã€‚
+ - å¿…é ˆéµå¾ªDocumentation/translations/zh_CN/process/submitting-patches.rstè£çš„è¦å‰‡ã€‚
å‘穩定版代碼樹æ交補ä¸çš„éŽç¨‹ï¼š
------------------------------
- 在確èªäº†è£œä¸ç¬¦åˆä»¥ä¸Šçš„è¦å‰‡å¾Œï¼Œå°‡è£œä¸ç™¼é€åˆ°stable@vger.kernel.org。
- - 如果補ä¸è¢«æŽ¥å—到隊列里,發é€è€…會收到一個ACK回復,如果沒有被接å—,收
- 到的是NAK回復。回復需è¦å¹¾å¤©çš„時間,這å–決於開發者的時間安排。
- - 被接å—的補ä¸æœƒè¢«åŠ åˆ°ç©©å®šç‰ˆæœ¬éšŠåˆ—里,等待其他開發者的審查。
+ - 如果補ä¸è¢«æŽ¥å—到隊列è£ï¼Œç™¼é€è€…會收到一個ACK回覆,如果沒有被接å—,收
+ 到的是NAK回覆。回覆需è¦å¹¾å¤©çš„時間,這å–決於開發者的時間安排。
+ - 被接å—的補ä¸æœƒè¢«åŠ åˆ°ç©©å®šç‰ˆæœ¬éšŠåˆ—è£ï¼Œç­‰å¾…其他開發者的審查。
- 安全方é¢çš„補ä¸ä¸è¦ç™¼åˆ°é€™å€‹åˆ—表,應該發é€åˆ°security@kernel.org。
-審查周期:
+審查週期:
----------
- - 當穩定版的維護者決定開始一個審查周期,補ä¸å°‡è¢«ç™¼é€åˆ°å¯©æŸ¥å§”員會,以
+ - 當穩定版的維護者決定開始一個審查週期,補ä¸å°‡è¢«é«®é€åˆ°å¯©æŸ¥å§”員會,以
åŠè¢«è£œä¸å½±éŸ¿çš„領域的維護者(除éžæ交者就是該領域的維護者)並且抄é€
到linux-kernel郵件列表。
- - 審查委員會有48å°æ™‚的時間,用來決定給該補ä¸å›žå¾©ACK還是NAK。
+ - 審查委員會有48å°æ™‚的時間,用來決定給該補ä¸å›žè¦†ACK還是NAK。
- 如果委員會中有æˆå“¡æ‹’絕這個補ä¸ï¼Œæˆ–者linux-kernel列表上有人åå°é€™å€‹
補ä¸ï¼Œä¸¦æ出維護者和審查委員會之å‰æ²’有æ„識到的å•é¡Œï¼Œè£œä¸æœƒå¾žéšŠåˆ—中
丟棄。
- - 在審查周期çµæŸçš„時候,那些得到ACK回應的補ä¸å°‡æœƒè¢«åŠ å…¥åˆ°æœ€æ–°çš„穩定版
- 發布中,一個新的穩定版發布就此產生。
- - 安全性補ä¸å°‡å¾žå…§æ ¸å®‰å…¨å°çµ„那裡直接接收到穩定版代碼樹中,而ä¸æ˜¯é€šéŽ
- 通常的審查周期。請è¯ç¹«å…§æ ¸å®‰å…¨å°çµ„以ç²å¾—關於這個éŽç¨‹çš„更多細節。
+ - 在審查週期çµæŸçš„時候,那些得到ACK回應的補ä¸å°‡æœƒè¢«åŠ å…¥åˆ°æœ€æ–°çš„穩定版
+ 發佈中,一個新的穩定版發佈就此產生。
+ - 安全性補ä¸å°‡å¾žå…§æ ¸å®‰å…¨å°çµ„é‚£è£ç›´æŽ¥æŽ¥æ”¶åˆ°ç©©å®šç‰ˆä»£ç¢¼æ¨¹ä¸­ï¼Œè€Œä¸æ˜¯é€šéŽ
+ 通常的審查週期。請è¯ç¹«å…§æ ¸å®‰å…¨å°çµ„以ç²å¾—關於這個éŽç¨‹çš„更多細節。
審查委員會:
------------
diff --git a/Documentation/translations/zh_TW/process/submit-checklist.rst b/Documentation/translations/zh_TW/process/submit-checklist.rst
index 12bf6f5ca5c6..942962d1e2f4 100644
--- a/Documentation/translations/zh_TW/process/submit-checklist.rst
+++ b/Documentation/translations/zh_TW/process/submit-checklist.rst
@@ -2,108 +2,114 @@
.. include:: ../disclaimer-zh_TW.rst
-:Original: :ref:`Documentation/process/submit-checklist.rst <submitchecklist>`
-:Translator: Alex Shi <alex.shi@linux.alibaba.com>
- Hu Haowen <src.res.211@gmail.com>
+:Original: Documentation/process/submit-checklist.rst
+:Translator:
+ - Alex Shi <alexs@kernel.org>
+ - Wu XiangCheng <bobwxc@email.cn>
+ - Hu Haowen <src.res.211@gmail.com>
.. _tw_submitchecklist:
-Linux內核補ä¸æ交清單
-~~~~~~~~~~~~~~~~~~~~~
+Linux內核補ä¸æ交檢查單
+~~~~~~~~~~~~~~~~~~~~~~~
如果開發人員希望看到他們的內核補ä¸æ交更快地被接å—,那麼他們應該åšä¸€äº›åŸºæœ¬
的事情。
-這些都是在
-:ref:`Documentation/translations/zh_TW/process/submitting-patches.rst <tw_submittingpatches>`
+這些都是在 Documentation/translations/zh_CN/process/submitting-patches.rst
和其他有關æ交Linux內核補ä¸çš„文檔中æ供的。
-1) 如果使用工具,則包括定義/è²æ˜Žè©²å·¥å…·çš„文件。ä¸è¦ä¾è³´æ–¼å…¶ä»–頭文件拉入您使用
+1) 如果使用工具,則包括定義/è²æ˜Žè©²å·¥å…·çš„文件。ä¸è¦ä¾è³´å…¶ä»–頭文件來引入您使用
的頭文件。
2) 乾淨的編譯:
- a) 使用é©ç”¨æˆ–修改的 ``CONFIG`` é¸é … ``=y``ã€``=m`` å’Œ ``=n`` 。沒有GCC
- 警告/錯誤,沒有連çµå™¨è­¦å‘Š/錯誤。
+ a) 使用åˆé©çš„ ``CONFIG`` é¸é … ``=y``ã€``=m`` å’Œ ``=n`` 。沒有 ``gcc``
+ 警告/錯誤,沒有éˆæŽ¥å™¨è­¦å‘Š/錯誤。
- b) 通éŽallnoconfigã€allmodconfig
+ b) é€šéŽ ``allnoconfig`` 〠``allmodconfig``
c) 使用 ``O=builddir`` 時å¯ä»¥æˆåŠŸç·¨è­¯
-3) 通éŽä½¿ç”¨æœ¬åœ°äº¤å‰ç·¨è­¯å·¥å…·æˆ–其他一些構建場在多個CPU體系çµæ§‹ä¸Šæ§‹å»ºã€‚
+ d) 任何 Doucmentation/ 下的變更都能æˆåŠŸæ§‹å»ºä¸”ä¸å¼•å…¥æ–°è­¦å‘Š/錯誤。
+ 用 ``make htmldocs`` 或 ``make pdfdocs`` 檢驗構建情æ³ä¸¦ä¿®å¾©å•é¡Œã€‚
+
+3) 通éŽä½¿ç”¨æœ¬åœ°äº¤å‰ç·¨è­¯å·¥å…·æˆ–其他一些構建設施在多個CPU體系çµæ§‹ä¸Šæ§‹å»ºã€‚
4) PPC64是一種很好的交å‰ç·¨è­¯æª¢æŸ¥é«”ç³»çµæ§‹ï¼Œå› çˆ²å®ƒå‚¾å‘æ–¼å°64ä½çš„數使用無符號
長整型。
-5) 如下所述 :ref:`Documentation/translations/zh_TW/process/coding-style.rst <tw_codingstyle>`.
- 檢查您的補ä¸æ˜¯å¦çˆ²å¸¸è¦æ¨£å¼ã€‚在æ交( ``scripts/check patch.pl`` )之å‰ï¼Œ
- 使用補ä¸æ¨£å¼æª¢æŸ¥å™¨æª¢æŸ¥æ˜¯å¦æœ‰è¼•å¾®çš„è¡çªã€‚您應該能夠處ç†æ‚¨çš„補ä¸ä¸­å­˜åœ¨çš„所有
+5) 按 Documentation/translations/zh_CN/process/coding-style.rst 所述檢查您的
+ 補ä¸æ˜¯å¦çˆ²å¸¸è¦æ¨£å¼ã€‚在æ交之å‰ä½¿ç”¨è£œä¸æ¨£å¼æª¢æŸ¥å™¨ ``scripts/checkpatch.pl``
+ 檢查是å¦æœ‰è¼•å¾®çš„è¡çªã€‚您應該能夠處ç†æ‚¨çš„補ä¸ä¸­å­˜åœ¨çš„所有
é•è¦è¡Œçˆ²ã€‚
-6) 任何新的或修改éŽçš„ ``CONFIG`` é¸é …都ä¸æœƒå¼„é«’é…ç½®èœå–®ï¼Œä¸¦é»˜èªçˆ²é—œé–‰ï¼Œé™¤éž
- å®ƒå€‘ç¬¦åˆ ``Documentation/kbuild/kconfig-language.rst`` 中記錄的異常æ¢ä»¶,
- èœå–®å±¬æ€§ï¼šé»˜èªå€¼.
+6) 任何新的或修改éŽçš„ ``CONFIG`` é¸é …都ä¸æ‡‰æžäº‚é…ç½®èœå–®ï¼Œä¸¦é»˜èªçˆ²é—œé–‰ï¼Œé™¤éž
+ å®ƒå€‘ç¬¦åˆ ``Documentation/kbuild/kconfig-language.rst`` èœå–®å±¬æ€§ï¼šé»˜èªå€¼ä¸­
+ 記錄的例外æ¢ä»¶ã€‚
7) 所有新的 ``kconfig`` é¸é …都有幫助文本。
-8) 已仔細審查了相關的 ``Kconfig`` 組åˆã€‚這很難用測試來糾正——腦力在這裡是有
+8) 已仔細審查了相關的 ``Kconfig`` 組åˆã€‚這很難用測試來糾正——腦力在這è£æ˜¯æœ‰
回報的。
-9) 用 sparse 檢查乾淨。
+9) é€šéŽ sparse 清查。
+ (åƒè¦‹ Documentation/translations/zh_CN/dev-tools/sparse.rst )
10) 使用 ``make checkstack`` å’Œ ``make namespacecheck`` 並修復他們發ç¾çš„任何
å•é¡Œã€‚
.. note::
- ``checkstack`` 並沒有明確指出å•é¡Œï¼Œä½†æ˜¯ä»»ä½•ä¸€å€‹åœ¨å †æ£§ä¸Šä½¿ç”¨è¶…éŽ512
+ ``checkstack`` 並ä¸æœƒæ˜Žç¢ºæŒ‡å‡ºå•é¡Œï¼Œä½†æ˜¯ä»»ä½•ä¸€å€‹åœ¨å †æ£§ä¸Šä½¿ç”¨è¶…éŽ512
字節的函數都å¯ä»¥é€²è¡Œæ›´æ”¹ã€‚
-11) 包括 :ref:`kernel-doc <kernel_doc>` 內核文檔以記錄全局內核API。(éœæ…‹å‡½æ•¸
- ä¸éœ€è¦ï¼Œä½†ä¹Ÿå¯ä»¥ã€‚)使用 ``make htmldocs`` 或 ``make pdfdocs`` 檢查
- :ref:`kernel-doc <kernel_doc>` 並修復任何å•é¡Œã€‚
+11) 包括 :ref:`kernel-doc <kernel_doc_zh>` 內核文檔以記錄全局內核API。(éœæ…‹
+ 函數ä¸éœ€è¦ï¼Œä½†ä¹Ÿå¯ä»¥ã€‚)使用 ``make htmldocs`` 或 ``make pdfdocs`` 檢查
+ :ref:`kernel-doc <kernel_doc_zh>` 並修復任何å•é¡Œã€‚
-12) 通éŽä»¥ä¸‹é¸é …åŒæ™‚啓用的測試 ``CONFIG_PREEMPT``, ``CONFIG_DEBUG_PREEMPT``,
+12) 通éŽä»¥ä¸‹é¸é …åŒæ™‚啓用的測試: ``CONFIG_PREEMPT``, ``CONFIG_DEBUG_PREEMPT``,
``CONFIG_DEBUG_SLAB``, ``CONFIG_DEBUG_PAGEALLOC``, ``CONFIG_DEBUG_MUTEXES``,
``CONFIG_DEBUG_SPINLOCK``, ``CONFIG_DEBUG_ATOMIC_SLEEP``,
- ``CONFIG_PROVE_RCU`` and ``CONFIG_DEBUG_OBJECTS_RCU_HEAD``
-
-13) 已經éŽæ§‹å»ºå’Œé‹è¡Œæ™‚測試,包括有或沒有 ``CONFIG_SMP``, ``CONFIG_PREEMPT``.
+ ``CONFIG_PROVE_RCU`` 和 ``CONFIG_DEBUG_OBJECTS_RCU_HEAD`` 。
-14) 如果補ä¸ç¨‹åºå½±éŸ¿IO/ç£ç¢Ÿç­‰ï¼šä½¿ç”¨æˆ–ä¸ä½¿ç”¨ ``CONFIG_LBDAF`` 進行測試。
+13) 在 ``CONFIG_SMP``, ``CONFIG_PREEMPT`` 開啓和關閉的情æ³ä¸‹éƒ½é€²è¡Œæ§‹å»ºå’Œé‹è¡Œ
+ 時測試。
-15) 所有代碼路徑都已在啓用所有lockdep功能的情æ³ä¸‹é‹è¡Œã€‚
+14) 所有代碼路徑都已在啓用所有死鎖檢測(lockdep)功能的情æ³ä¸‹é‹è¡Œã€‚
-16) 所有新的/procæ¢ç›®éƒ½è¨˜éŒ„在 ``Documentation/``
+15) 所有新的 ``/proc`` æ¢ç›®éƒ½è¨˜éŒ„在 ``Documentation/``
-17) 所有新的內核引導åƒæ•¸éƒ½è¨˜éŒ„在
+16) 所有新的內核引導åƒæ•¸éƒ½è¨˜éŒ„在
Documentation/admin-guide/kernel-parameters.rst 中。
-18) 所有新的模塊åƒæ•¸éƒ½è¨˜éŒ„在 ``MODULE_PARM_DESC()``
+17) 所有新的模塊åƒæ•¸éƒ½è¨˜éŒ„在 ``MODULE_PARM_DESC()``
-19) 所有新的用戶空間接å£éƒ½è¨˜éŒ„在 ``Documentation/ABI/`` 中。有關詳細信æ¯ï¼Œ
+18) 所有新的用戶空間接å£éƒ½è¨˜éŒ„在 ``Documentation/ABI/`` 中。有關詳細信æ¯ï¼Œ
è«‹åƒé–± ``Documentation/ABI/README`` 。更改用戶空間接å£çš„補ä¸æ‡‰è©²æŠ„é€
linux-api@vger.kernel.org。
-20) 已通éŽè‡³å°‘注入slabå’Œpage分é…失敗進行檢查。請åƒé–± ``Documentation/fault-injection/``
+19) 已通éŽè‡³å°‘注入slabå’Œpage分é…失敗進行檢查。請åƒé–± ``Documentation/fault-injection/`` 。
如果新代碼是實質性的,那麼添加å­ç³»çµ±ç‰¹å®šçš„故障注入å¯èƒ½æ˜¯åˆé©çš„。
-21) 新添加的代碼已經用 ``gcc -W`` 編譯(使用 ``make EXTRA-CFLAGS=-W`` )。這
- 將產生大é‡å™ªè²ï¼Œä½†å°æ–¼æŸ¥æ‰¾è«¸å¦‚「警告:有符號和無符號之間的比較ã€ä¹‹é¡žçš„錯誤
+20) 新添加的代碼已經用 ``gcc -W`` 編譯(使用 ``make EXTRA-CFLAGS=-W`` )。這
+ 將產生大é‡å™ªè²ï¼Œä½†å°æ–¼æŸ¥æ‰¾è«¸å¦‚“警告:有符號和無符號之間的比較â€ä¹‹é¡žçš„錯誤
很有用。
-22) 在它被åˆä½µåˆ°-mm補ä¸é›†ä¸­ä¹‹å¾Œé€²è¡Œæ¸¬è©¦ï¼Œä»¥ç¢ºä¿å®ƒä»ç„¶èˆ‡æ‰€æœ‰å…¶ä»–排隊的補ä¸ä»¥
+21) 在它被åˆä½µåˆ°-mm補ä¸é›†ä¸­ä¹‹å¾Œé€²è¡Œæ¸¬è©¦ï¼Œä»¥ç¢ºä¿å®ƒä»ç„¶èˆ‡æ‰€æœ‰å…¶ä»–排隊的補ä¸ä»¥
åŠVMã€VFS和其他å­ç³»çµ±ä¸­çš„å„種更改一起工作。
-23) 所有內存å±éšœä¾‹å¦‚ ``barrier()``, ``rmb()``, ``wmb()`` 都需è¦åŽŸå§‹ç¢¼ä¸­çš„注
+22) 所有內存å±éšœï¼ˆä¾‹å¦‚ ``barrier()``, ``rmb()``, ``wmb()`` )都需è¦æºä»£ç¢¼æ³¨
釋來解釋它們正在執行的æ“作åŠå…¶åŽŸå› çš„é‚輯。
-24) 如果補ä¸æ·»åŠ äº†ä»»ä½•ioctl,那麼也è¦æ›´æ–° ``Documentation/userspace-api/ioctl/ioctl-number.rst``
+23) 如果補ä¸æ·»åŠ äº†ä»»ä½•ioctl,那麼也è¦æ›´æ–°
+ ``Documentation/userspace-api/ioctl/ioctl-number.rst`` 。
-25) 如果修改後的原始碼ä¾è³´æˆ–使用與以下 ``Kconfig`` 符號相關的任何內核API或
+24) 如果修改後的æºä»£ç¢¼ä¾è³´æˆ–使用與以下 ``Kconfig`` 符號相關的任何內核API或
功能,則在ç¦ç”¨ç›¸é—œ ``Kconfig`` 符號和/或 ``=m`` (如果該é¸é …å¯ç”¨ï¼‰çš„情æ³
下測試以下多個構建[並éžæ‰€æœ‰é€™äº›éƒ½åŒæ™‚存在,åªæ˜¯å®ƒå€‘çš„å„種/隨機組åˆ]:
- ``CONFIG_SMP``, ``CONFIG_SYSFS``, ``CONFIG_PROC_FS``, ``CONFIG_INPUT``, ``CONFIG_PCI``, ``CONFIG_BLOCK``, ``CONFIG_PM``, ``CONFIG_MAGIC_SYSRQ``,
- ``CONFIG_NET``, ``CONFIG_INET=n`` (但是後者伴隨 ``CONFIG_NET=y``).
+ ``CONFIG_SMP``, ``CONFIG_SYSFS``, ``CONFIG_PROC_FS``, ``CONFIG_INPUT``,
+ ``CONFIG_PCI``, ``CONFIG_BLOCK``, ``CONFIG_PM``, ``CONFIG_MAGIC_SYSRQ``,
+ ``CONFIG_NET``, ``CONFIG_INET=n`` ï¼ˆä½†æ˜¯æœ€å¾Œä¸€å€‹éœ€è¦ ``CONFIG_NET=y`` )。
diff --git a/Documentation/translations/zh_TW/process/submitting-patches.rst b/Documentation/translations/zh_TW/process/submitting-patches.rst
index 0746809c31a2..8272b3218b54 100644
--- a/Documentation/translations/zh_TW/process/submitting-patches.rst
+++ b/Documentation/translations/zh_TW/process/submitting-patches.rst
@@ -1,229 +1,199 @@
-.. SPDX-License-Identifier: GPL-2.0
-
-.. _tw_submittingpatches:
+.. SPDX-License-Identifier: GPL-2.0-or-later
.. include:: ../disclaimer-zh_TW.rst
-:Original: :ref:`Documentation/process/submitting-patches.rst <submittingpatches>`
+.. _tw_submittingpatches:
-譯者::
+:Original: Documentation/process/submitting-patches.rst
- 中文版維護者: é¾å®‡ TripleX Chung <xxx.phy@gmail.com>
- 中文版翻譯者: é¾å®‡ TripleX Chung <xxx.phy@gmail.com>
- 時奎亮 Alex Shi <alex.shi@linux.alibaba.com>
- 中文版校譯者: æŽé™½ Li Yang <leoyang.li@nxp.com>
- çŽ‹è° Wang Cong <xiyou.wangcong@gmail.com>
- 胡皓文 Hu Haowen <src.res.211@gmail.com>
+:譯者:
+ - é¾å®‡ TripleX Chung <xxx.phy@gmail.com>
+ - 時奎亮 Alex Shi <alexs@kernel.org>
+ - å³æƒ³æˆ Wu XiangCheng <bobwxc@email.cn>
+:æ ¡è­¯:
+ - æŽé™½ Li Yang <leoyang.li@nxp.com>
+ - çŽ‹è° Wang Cong <xiyou.wangcong@gmail.com>
+ - 胡皓文 Hu Haowen <src.res.211@gmail.com>
-如何讓你的改動進入內核
-======================
-å°æ–¼æƒ³è¦å°‡æ”¹å‹•æ交到 Linux 內核的個人或者公å¸ä¾†èªªï¼Œå¦‚æžœä¸ç†Ÿæ‚‰ã€Œè¦çŸ©ã€ï¼Œ
-æ交的æµç¨‹æœƒè®“人ç•æ‡¼ã€‚本文檔收集了一系列建議,這些建議å¯ä»¥å¤§å¤§çš„æ高你
+æ交補ä¸ï¼šå¦‚何讓你的改動進入內核
+================================
+
+å°æ–¼æƒ³è¦å°‡æ”¹å‹•æ交到 Linux 內核的個人或者公å¸ä¾†èªªï¼Œå¦‚æžœä¸ç†Ÿæ‚‰â€œè¦çŸ©â€ï¼Œ
+æ交的æµç¨‹æœƒè®“人ç•æ‡¼ã€‚本文檔包å«äº†ä¸€ç³»åˆ—建議,å¯ä»¥å¤§å¤§æ高你
的改動被接å—的機會.
-以下文檔å«æœ‰å¤§é‡ç°¡æ½”的建議, 具體請見:
-:ref:`Documentation/process <development_process_main>`
-åŒæ¨£ï¼Œ:ref:`Documentation/translations/zh_TW/process/submit-checklist.rst <tw_submitchecklist>`
-給出在æ交代碼å‰éœ€è¦æª¢æŸ¥çš„項目的列表。
+本文檔以較爲簡潔的行文給出了大é‡å»ºè­°ã€‚關於內核開發æµç¨‹å¦‚何進行的詳細信æ¯ï¼Œ
+åƒè¦‹ï¼š Documentation/translations/zh_CN/process/development-process.rst 。
+Documentation/translations/zh_CN/process/submit-checklist.rst 給出了一系列
+æ交補ä¸ä¹‹å‰è¦æª¢æŸ¥çš„事項。設備樹相關的補ä¸ï¼Œè«‹åƒé–±
+Documentation/devicetree/bindings/submitting-patches.rst 。
-其中許多步驟æ述了Git版本控制系統的默èªè¡Œçˆ²ï¼›å¦‚果您使用Git來準備補ä¸ï¼Œ
-您將發ç¾å®ƒçˆ²æ‚¨å®Œæˆçš„大部分機械工作,儘管您ä»ç„¶éœ€è¦æº–備和記錄一組åˆç†çš„
-補ä¸ã€‚一般來說,使用git將使您作爲內核開發人員的生活更輕鬆。
+本文檔å‡è¨­æ‚¨æ­£åœ¨ä½¿ç”¨ ``git`` 準備你的補ä¸ã€‚如果您ä¸ç†Ÿæ‚‰ ``git`` ,最好學習
+如何使用它,這將使您作爲內核開發人員的生活變得更加輕鬆。
+部分å­ç³»çµ±å’Œç¶­è­·äººå“¡çš„樹有一些關於其工作æµç¨‹å’Œè¦æ±‚çš„é¡å¤–ä¿¡æ¯ï¼Œè«‹åƒé–±
+Documentation/process/maintainer-handbooks.rst 。
-0) ç²å–當å‰æºç¢¼æ¨¹
------------------
+ç²å–當å‰æºç¢¼æ¨¹
+--------------
-如果您沒有一個å¯ä»¥ä½¿ç”¨ç•¶å‰å…§æ ¸åŽŸå§‹ç¢¼çš„存儲庫,請使用gitç²å–一個。您將è¦
-從主線存儲庫開始,它å¯ä»¥é€šéŽä»¥ä¸‹æ–¹å¼ç²å–::
+如果您手頭沒有當å‰å…§æ ¸æºä»£ç¢¼çš„存儲庫,請使用 ``git`` ç²å–一份。您需è¦å…ˆç²å–
+主線存儲庫,它å¯ä»¥é€šéŽä»¥ä¸‹å‘½ä»¤æ‹‰å–::
- git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
+ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
-但是,請注æ„,您å¯èƒ½ä¸å¸Œæœ›ç›´æŽ¥é‡å°ä¸»ç·šæ¨¹é€²è¡Œé–‹ç™¼ã€‚大多數å­ç³»çµ±ç¶­è­·äººå“¡é‹
+但是,請注æ„,您å¯èƒ½ä¸æƒ³ç›´æŽ¥é‡å°ä¸»ç·šæ¨¹é€²è¡Œé–‹ç™¼ã€‚大多數å­ç³»çµ±ç¶­è­·äººå“¡é‹
行自己的樹,並希望看到é‡å°é€™äº›æ¨¹æº–備的補ä¸ã€‚è«‹åƒè¦‹MAINTAINERS文件中å­ç³»
-統的 **T:** 項以查找該樹,或者簡單地詢å•ç¶­è­·è€…該樹是å¦æœªåœ¨å…¶ä¸­åˆ—出。
-
-ä»ç„¶å¯ä»¥é€šéŽtarballs下載內核版本(如下一節所述),但這是進行內核開發的
-一種困難的方å¼ã€‚
-
-1) "diff -up"
--------------
-
-使用 "diff -up" 或者 "diff -uprN" 來創建補ä¸ã€‚
-
-所有內核的改動,都是以補ä¸çš„å½¢å¼å‘ˆç¾çš„,補ä¸ç”± diff(1) 生æˆã€‚創建補ä¸çš„
-時候,è¦ç¢ºèªå®ƒæ˜¯ä»¥ "unified diff" æ ¼å¼å‰µå»ºçš„,這種格å¼ç”± diff(1) çš„ '-u'
-åƒæ•¸ç”Ÿæˆã€‚而且,請使用 '-p' åƒæ•¸ï¼Œé‚£æ¨£æœƒé¡¯ç¤ºæ¯å€‹æ”¹å‹•æ‰€åœ¨çš„C函數,使得
-產生的補ä¸å®¹æ˜“讀得多。補ä¸æ‡‰è©²åŸºæ–¼å…§æ ¸åŽŸå§‹ç¢¼æ¨¹çš„根目錄,而ä¸æ˜¯è£¡é‚Šçš„ä»»
-何å­ç›®éŒ„。
-
-爲一個單ç¨çš„文件創建補ä¸ï¼Œä¸€èˆ¬ä¾†èªªé€™æ¨£åšå°±å¤ äº†::
-
- SRCTREE=linux
- MYFILE=drivers/net/mydriver.c
-
- cd $SRCTREE
- cp $MYFILE $MYFILE.orig
- vi $MYFILE # make your change
- cd ..
- diff -up $SRCTREE/$MYFILE{.orig,} > /tmp/patch
-
-爲多個文件創建補ä¸ï¼Œä½ å¯ä»¥è§£é–‹ä¸€å€‹æ²’有修改éŽçš„內核原始碼樹,然後和你自
-å·±çš„ä»£ç¢¼æ¨¹ä¹‹é–“åš diff 。例如::
-
- MYSRC=/devel/linux
-
- tar xvfz linux-3.19.tar.gz
- mv linux-3.19 linux-3.19-vanilla
- diff -uprN -X linux-3.19-vanilla/Documentation/dontdiff \
- linux-3.19-vanilla $MYSRC > /tmp/patch
-
-"dontdiff" 是內核在編譯的時候產生的文件的列表,列表中的文件在 diff(1)
-產生的補ä¸é‡Œæœƒè¢«è·³éŽã€‚
-
-確定你的補ä¸é‡Œæ²’有包å«ä»»ä½•ä¸å±¬æ–¼é€™æ¬¡è£œä¸æ交的é¡å¤–文件。記得在用diff(1)
-生æˆè£œä¸ä¹‹å¾Œï¼Œå¯©é–±ä¸€æ¬¡è£œä¸ï¼Œä»¥ç¢ºä¿æº–確。
-
-如果你的改動很散亂,你應該研究一下如何將補ä¸åˆ†å‰²æˆç¨ç«‹çš„部分,將改動分
-割æˆä¸€ç³»åˆ—åˆä¹Žé‚輯的步驟。這樣更容易讓其他內核開發者審核,如果你想你的
-補ä¸è¢«æŽ¥å—,這是很é‡è¦çš„。請åƒé–±ï¼š
-:ref:`tw_split_changes`
-
-如果你用 ``git`` , ``git rebase -i`` å¯ä»¥å¹«åŠ©ä½ é€™ä¸€é»žã€‚如果你ä¸ç”¨ ``git``,
-``quilt`` <https://savannah.nongnu.org/projects/quilt> å¦å¤–一個æµè¡Œçš„é¸æ“‡ã€‚
+統的 **T:** 項以查找該樹,或者直接詢å•ç¶­è­·è€…該樹是å¦æœªåœ¨å…¶ä¸­åˆ—出。
.. _tw_describe_changes:
-2) æ述你的改動
----------------
+æ述你的改動
+------------
æè¿°ä½ çš„å•é¡Œã€‚無論您的補ä¸æ˜¯ä¸€è¡ŒéŒ¯èª¤ä¿®å¾©é‚„是5000行新功能,都必須有一個潛在
-çš„å•é¡Œæ¿€å‹µæ‚¨å®Œæˆé€™é …工作。讓審稿人相信有一個å•é¡Œå€¼å¾—解決,讓他們讀完第一段
-是有æ„義的。
+çš„å•é¡Œæ¿€å‹µæ‚¨å®Œæˆé€™é …工作。說æœå¯©é–±è€…相信有一個å•é¡Œå€¼å¾—解決,讓他們讀完第一段
+後就能明白這一點。
æ述用戶å¯è¦‹çš„影響。直接崩潰和鎖定是相當有說æœåŠ›çš„,但並ä¸æ˜¯æ‰€æœ‰çš„錯誤都那麼
-明目張胆。å³ä½¿åœ¨ä»£ç¢¼å¯©æŸ¥æœŸé–“發ç¾äº†é€™å€‹å•é¡Œï¼Œä¹Ÿè¦æ述一下您èªçˆ²å®ƒå¯èƒ½å°ç”¨æˆ¶ç”¢
+明目張膽。å³ä½¿åœ¨ä»£ç¢¼å¯©é–±æœŸé–“發ç¾äº†é€™å€‹å•é¡Œï¼Œä¹Ÿè¦æ述一下您èªçˆ²å®ƒå¯èƒ½å°ç”¨æˆ¶ç”¢
生的影響。請記ä½ï¼Œå¤§å¤šæ•¸Linux安è£é‹è¡Œçš„內核來自二級穩定樹或特定於供應商/產å“
的樹,åªå¾žä¸Šæ¸¸ç²¾é¸ç‰¹å®šçš„補ä¸ï¼Œå› æ­¤è«‹åŒ…å«ä»»ä½•å¯ä»¥å¹«åŠ©æ‚¨å°‡æ›´æ”¹å®šä½åˆ°ä¸‹æ¸¸çš„內容:
-觸發的場景ã€DMESG的摘錄ã€å´©æ½°æè¿°ã€æ€§èƒ½å›žæ­¸ã€å»¶é²å°–峯ã€éŽ–定等。
+觸發的場景ã€DMESG的摘錄ã€å´©æ½°æè¿°ã€æ€§èƒ½è¿´æ­¸ã€å»¶é²å°–峯ã€éŽ–定等。
-é‡åŒ–優化和權衡。如果您è²ç¨±åœ¨æ€§èƒ½ã€å…§å­˜æ¶ˆè€—ã€å †æ£§å ç”¨ç©ºé–“或二進ä½å¤§å°æ–¹é¢æœ‰æ‰€
-改進,請包括支æŒå®ƒå€‘的數字。但也è¦æè¿°ä¸æ˜Žé¡¯çš„æˆæœ¬ã€‚優化通常ä¸æ˜¯å…費的,而是
-在CPUã€å…§å­˜å’Œå¯è®€æ€§ä¹‹é–“進行權衡;或者,探索性的工作,在ä¸åŒçš„工作負載之間進
+質é‡å„ªåŒ–和權衡。如果您è²ç¨±åœ¨æ€§èƒ½ã€å…§å­˜æ¶ˆè€—ã€å †æ£§ä½”用空間或二進制大å°æ–¹é¢æœ‰æ‰€
+改進,請包括支æŒå®ƒå€‘的數據。但也è¦æè¿°ä¸æ˜Žé¡¯çš„æˆæœ¬ã€‚優化通常ä¸æ˜¯é›¶æˆæœ¬çš„,而是
+在CPUã€å…§å­˜å’Œå¯è®€æ€§ä¹‹é–“進行權衡;或者,åšæŽ¢ç´¢æ€§çš„工作,在ä¸åŒçš„工作負載之間進
行權衡。請æ述優化的é æœŸç¼ºé»žï¼Œä»¥ä¾¿å¯©é–±è€…å¯ä»¥æ¬Šè¡¡æˆæœ¬å’Œæ”¶ç›Šã€‚
-一旦å•é¡Œå»ºç«‹èµ·ä¾†ï¼Œå°±è¦è©³ç´°åœ°æ述一下您實際在åšä»€éº¼ã€‚å°æ–¼å¯©é–±è€…來說,用簡單的
-英語æ述代碼的變化是很é‡è¦çš„,以驗證代碼的行爲是å¦ç¬¦åˆæ‚¨çš„æ„願。
+æ出å•é¡Œä¹‹å¾Œï¼Œå°±è¦è©³ç´°åœ°æ述一下您實際在åšçš„技術細節。å°æ–¼å¯©é–±è€…來說,用簡練的
+英語æ述代碼的變化是很é‡è¦çš„,以驗證代碼的行爲是å¦ç¬¦åˆæ‚¨çš„æ„圖。
-如果您將補ä¸æ述寫在一個表單中,這個表單å¯ä»¥å¾ˆå®¹æ˜“地作爲「æ交日誌ã€æ”¾å…¥Linux
-的原始碼管ç†ç³»çµ±git中,那麼維護人員將éžå¸¸æ„Ÿè¬æ‚¨ã€‚見 :ref:`tw_explicit_in_reply_to`.
+如果您將補ä¸æ述寫æˆâ€œæ¨™æº–æ ¼å¼â€ï¼Œå¯ä»¥å¾ˆå®¹æ˜“地作爲“æ交日誌â€æ”¾å…¥Linuxçš„æºä»£
+碼管ç†ç³»çµ± ``git`` 中,那麼維護人員將éžå¸¸æ„Ÿè¬æ‚¨ã€‚
+åƒè¦‹ :ref:`zh_the_canonical_patch_format` 。
æ¯å€‹è£œä¸åªè§£æ±ºä¸€å€‹å•é¡Œã€‚如果你的æ述開始變長,這就表明你å¯èƒ½éœ€è¦æ‹†åˆ†ä½ çš„補ä¸ã€‚
-請見 :ref:`tw_split_changes`
+請見 :ref:`zh_split_changes` 。
-æ交或é‡æ–°æ交修補程åºæˆ–修補程åºç³»åˆ—時,請包括完整的修補程åºèªªæ˜Žå’Œç†ç”±ã€‚ä¸è¦
+æ交或é‡æ–°æ交補ä¸æˆ–補ä¸ç³»åˆ—時,請包括完整的補ä¸èªªæ˜Žå’Œç†ç”±ã€‚ä¸è¦
åªèªªé€™æ˜¯è£œä¸ï¼ˆç³»åˆ—)的第幾版。ä¸è¦æœŸæœ›å­ç³»çµ±ç¶­è­·äººå“¡å¼•ç”¨æ›´æ—©çš„補ä¸ç‰ˆæœ¬æˆ–引用
URL來查找補ä¸æ述並將其放入補ä¸ä¸­ã€‚也就是說,補ä¸ï¼ˆç³»åˆ—)åŠå…¶æ述應該是ç¨ç«‹çš„。
-這å°ç¶­è­·äººå“¡å’Œå¯©æŸ¥äººå“¡éƒ½æœ‰å¥½è™•ã€‚一些評審者å¯èƒ½ç”šè‡³æ²’有收到補ä¸çš„早期版本。
+這å°ç¶­è­·äººå“¡å’Œå¯©é–±è€…都有好處。一些審閱者å¯èƒ½ç”šè‡³æ²’有收到補ä¸çš„早期版本。
-æ述你在命令語氣中的變化,例如「make xyzzy do frotzã€è€Œä¸æ˜¯ã€Œ[這個補ä¸]make
-xyzzy do frotzã€æˆ–「[我]changed xyzzy to do frotzã€ï¼Œå°±å¥½åƒä½ åœ¨å‘½ä»¤ä»£ç¢¼åº«æ”¹è®Š
+用祈使å¥æ述你的變更,例如“make xyzzy do frotzâ€è€Œä¸æ˜¯â€œ[This patch]make
+xyzzy do frotzâ€æˆ–“[I]changed xyzzy to do frotzâ€ï¼Œå°±å¥½åƒä½ åœ¨å‘½ä»¤ä»£ç¢¼åº«æ”¹è®Š
它的行爲一樣。
-如果修補程åºä¿®å¾©äº†ä¸€å€‹è¨˜éŒ„çš„bugæ¢ç›®ï¼Œè«‹æŒ‰ç·¨è™Ÿå’ŒURL引用該bugæ¢ç›®ã€‚如果補ä¸ä¾†
-自郵件列表討論,請給出郵件列表存檔的URL;使用帶有 ``Message-ID`` 的
-https://lore.kernel.org/ é‡å®šå‘,以確ä¿é€£çµä¸æœƒéŽæ™‚。
-
-但是,在沒有外部資æºçš„情æ³ä¸‹ï¼Œå„˜é‡è®“你的解釋å¯ç†è§£ã€‚除了æ供郵件列表存檔或
-bugçš„URL之外,還è¦ç¸½çµéœ€è¦æ交補ä¸çš„相關討論è¦é»žã€‚
-
-如果您想è¦å¼•ç”¨ä¸€å€‹ç‰¹å®šçš„æ交,ä¸è¦åªå¼•ç”¨æ交的 SHA-1 ID。還請包括æ交的一行
-摘è¦ï¼Œä»¥ä¾¿æ–¼å¯©é–±è€…了解它是關於什麼的。例如::
+如果您想è¦å¼•ç”¨ä¸€å€‹ç‰¹å®šçš„æ交,ä¸è¦åªå¼•ç”¨æ交的SHA-1 ID。還請包括æ交的一行
+摘è¦ï¼Œä»¥ä¾¿æ–¼å¯©é–±è€…瞭解它是關於什麼的。例如::
Commit e21d2170f36602ae2708 ("video: remove unnecessary
platform_set_drvdata()") removed the unnecessary
platform_set_drvdata(), but left the variable "dev" unused,
delete it.
-您還應該確ä¿è‡³å°‘使用å‰12ä½ SHA-1 ID. 內核存儲庫包å«*許多*å°è±¡ï¼Œä½¿èˆ‡è¼ƒçŸ­çš„ID
+您還應該確ä¿è‡³å°‘使用å‰12ä½SHA-1 IDã€‚å…§æ ¸å­˜å„²åº«åŒ…å« *許多* å°è±¡ï¼Œä½¿è¼ƒçŸ­çš„ID
發生è¡çªçš„å¯èƒ½æ€§å¾ˆå¤§ã€‚記ä½ï¼Œå³ä½¿ç¾åœ¨ä¸æœƒèˆ‡æ‚¨çš„六個字符ID發生è¡çªï¼Œé€™ç¨®æƒ…æ³
-å¯èƒ½äº”年後改變。
+也å¯èƒ½åœ¨äº”年後改變。
+
+如果該變更的相關討論或背景信æ¯å¯ä»¥åœ¨ç¶²ä¸ŠæŸ¥é–±ï¼Œè«‹åŠ ä¸Šâ€œLink:â€æ¨™ç±¤æŒ‡å‘它。例如
+你的補ä¸ä¿®å¾©äº†ä¸€å€‹ç¼ºé™·ï¼Œéœ€è¦æ·»åŠ ä¸€å€‹å¸¶æœ‰URL的標籤指å‘郵件列表存檔或缺陷跟蹤器
+的相關報告;如果該補ä¸æ˜¯ç”±ä¸€äº›æ—©å…ˆéƒµä»¶åˆ—表討論或網絡上的記錄引起的,請指å‘它。
+
+當éˆæŽ¥åˆ°éƒµä»¶åˆ—表存檔時,請首é¸lore.kernel.org郵件存檔æœå‹™ã€‚用郵件中的
+``Message-ID`` 頭(去掉尖括號)å¯ä»¥å‰µå»ºéˆæŽ¥URL。例如::
+
+ Link: https://lore.kernel.org/r/30th.anniversary.repost@klaava.Helsinki.FI/
+
+請檢查該éˆæŽ¥ä»¥ç¢ºä¿å¯ç”¨ä¸”指å‘正確的郵件。
+
+ä¸éŽï¼Œåœ¨æ²’有外部資æºçš„情æ³ä¸‹ï¼Œä¹Ÿè¦å„˜é‡è®“你的解釋å¯ç†è§£ã€‚除了æ供郵件列表存檔或
+缺陷的URL之外,還è¦éœ€è¦ç¸½çµè©²è£œä¸çš„相關討論è¦é»žã€‚
-如果修補程åºä¿®å¾©äº†ç‰¹å®šæ交中的錯誤,例如,使用 ``git bisct`` ,請使用帶有å‰
-12個字符SHA-1 ID çš„"Fixes:"標記和單行摘è¦ã€‚爲了簡化ä¸è¦å°‡æ¨™è¨˜æ‹†åˆ†çˆ²å¤šå€‹ï¼Œ
-è¡Œã€æ¨™è¨˜ä¸å—分æžè…³æœ¬ã€Œ75列æ›è¡Œã€è¦å‰‡çš„é™åˆ¶ã€‚例如::
+如果補ä¸ä¿®å¾©äº†ç‰¹å®šæ交中的錯誤,例如使用 ``git bisct`` 發ç¾äº†ä¸€å€‹å•é¡Œï¼Œè«‹ä½¿ç”¨
+帶有å‰12個字符SHA-1 ID的“Fixes:â€æ¨™ç±¤å’Œå–®è¡Œæ‘˜è¦ã€‚爲了簡化解æžè…³æœ¬ï¼Œä¸è¦å°‡è©²
+標籤拆分爲多行,標籤ä¸å—“75列æ›è¡Œâ€è¦å‰‡çš„é™åˆ¶ã€‚例如::
- Fixes: 54a4f0239f2e ("KVM: MMU: make kvm_mmu_zap_page() return the number of pages it actually freed")
+ Fixes: 54a4f0239f2e ("KVM: MMU: make kvm_mmu_zap_page() return the number of pages it actually freed")
-下列 ``git config`` 設置å¯ä»¥æ·»åŠ è®“ ``git log``, ``git show`` 漂亮的顯示格å¼::
+下列 ``git config`` 設置å¯ä»¥è®“ ``git log``, ``git show`` 增加上述風格的顯示格å¼::
[core]
abbrev = 12
[pretty]
fixes = Fixes: %h (\"%s\")
+使用示例::
+
+ $ git log -1 --pretty=fixes 54a4f0239f2e
+ Fixes: 54a4f0239f2e ("KVM: MMU: make kvm_mmu_zap_page() return the number of pages it actually freed")
+
.. _tw_split_changes:
-3) 拆分你的改動
----------------
+拆分你的改動
+------------
-å°‡æ¯å€‹é‚輯更改分隔æˆä¸€å€‹å–®ç¨çš„補ä¸ã€‚
+å°‡æ¯å€‹ **é‚輯更改** 拆分æˆä¸€å€‹å–®ç¨çš„補ä¸ã€‚
-例如,如果你的改動里åŒæ™‚有bug修正和性能優化,那麼把這些改動拆分到兩個或
-者更多的補ä¸æ–‡ä»¶ä¸­ã€‚如果你的改動包å«å°API的修改,並且修改了驅動程åºä¾†é©
-應這些新的API,那麼把這些修改分æˆå…©å€‹è£œä¸ã€‚
+例如,如果你的改動è£åŒæ™‚有bug修正和性能優化,那麼把這些改動拆分到兩個或
+者更多的補ä¸æ–‡ä»¶ä¸­ã€‚如果你的改動包å«å°API的修改,並且增加了一個使用該新API
+的驅動,那麼把這些修改分æˆå…©å€‹è£œä¸ã€‚
å¦ä¸€æ–¹é¢ï¼Œå¦‚果你將一個單ç¨çš„改動åšæˆå¤šå€‹è£œä¸æ–‡ä»¶ï¼Œé‚£éº¼å°‡å®ƒå€‘åˆä½µæˆä¸€å€‹
-å–®ç¨çš„補ä¸æ–‡ä»¶ã€‚這樣一個é‚輯上單ç¨çš„改動åªè¢«åŒ…å«åœ¨ä¸€å€‹è£œä¸æ–‡ä»¶é‡Œã€‚
+å–®ç¨çš„補ä¸æ–‡ä»¶ã€‚這樣一個é‚輯上單ç¨çš„改動åªè¢«åŒ…å«åœ¨ä¸€å€‹è£œä¸æ–‡ä»¶è£ã€‚
-如果有一個補ä¸ä¾è³´å¦å¤–一個補ä¸ä¾†å®Œæˆå®ƒçš„改動,那沒å•é¡Œã€‚簡單的在你的補
-ä¸æ述里指出「這個補ä¸ä¾è³´æŸè£œä¸ã€å°±å¥½äº†ã€‚
+需è¦è¨˜ä½çš„一點是,æ¯å€‹è£œä¸çš„更改都應易於ç†è§£ï¼Œä»¥ä¾¿å¯©é–±è€…驗證。æ¯å€‹è£œä¸éƒ½æ‡‰è©²
+å°å…¶åƒ¹å€¼é€²è¡Œé—¡è¿°ã€‚
-在將您的更改劃分爲一系列補ä¸æ™‚,è¦ç‰¹åˆ¥æ³¨æ„確ä¿å…§æ ¸åœ¨ç³»åˆ—中的æ¯å€‹è£œä¸ä¹‹å¾Œ
-都能正常構建和é‹è¡Œã€‚使用 ``git bisect`` 來追蹤å•é¡Œçš„開發者å¯èƒ½æœƒåœ¨ä»»ä½•æ™‚
-候分割你的補ä¸ç³»åˆ—;如果你在中間引入錯誤,他們ä¸æœƒæ„Ÿè¬ä½ ã€‚
+如果有一個補ä¸ä¾è³´å¦å¤–一個補ä¸ä¾†å®Œæˆå®ƒçš„改動,那沒å•é¡Œã€‚直接在你的補
+ä¸æè¿°è£æŒ‡å‡º **“這個補ä¸ä¾è³´æŸè£œä¸â€** 就好了。
-如果你ä¸èƒ½å°‡è£œä¸æ¿ƒç¸®æˆæ›´å°‘的文件,那麼æ¯æ¬¡å¤§ç´„發é€å‡º15個,然後等待審查
+在將您的更改劃分爲一系列補ä¸æ™‚,è¦ç‰¹åˆ¥æ³¨æ„確ä¿å…§æ ¸åœ¨æ‡‰ç”¨ç³»åˆ—中的æ¯å€‹è£œä¸ä¹‹å¾Œ
+都能正常構建和é‹è¡Œã€‚使用 ``git bisect`` 來追蹤å•é¡Œçš„開發者å¯èƒ½æœƒåœ¨ä»»ä½•åœ°æ–¹åˆ†
+割你的補ä¸ç³»åˆ—;如果你在中間引入錯誤,他們ä¸æœƒæ„Ÿè¬ä½ ã€‚
+
+如果你ä¸èƒ½å°‡è£œä¸ç³»åˆ—濃縮得更å°ï¼Œé‚£éº¼æ¯æ¬¡å¤§ç´„發é€å‡º15個補ä¸ï¼Œç„¶å¾Œç­‰å¾…審閱
和集æˆã€‚
-4) 檢查你的更改風格
--------------------
+檢查你的更改風格
+----------------
-檢查您的補ä¸æ˜¯å¦å­˜åœ¨åŸºæœ¬æ¨£å¼è¡çªï¼Œè©³ç´°ä¿¡æ¯å¯åœ¨
-:ref:`Documentation/translations/zh_TW/process/coding-style.rst <tw_codingstyle>`
-中找到。如果ä¸é€™æ¨£åšï¼Œåªæœƒæµªè²»å¯©ç¨¿äººçš„時間,並且會導致你的補ä¸è¢«æ‹’絕,甚至
+檢查您的補ä¸æ˜¯å¦é•å了基本樣å¼è¦å®šï¼Œè©³ç´°ä¿¡æ¯åƒè¦‹
+Documentation/translations/zh_CN/process/coding-style.rst
+中找到。如果ä¸é€™æ¨£åšï¼Œåªæœƒæµªè²»å¯©é–±è€…的時間,並且會導致你的補ä¸è¢«æ‹’絕,甚至
å¯èƒ½æ²’有被閱讀。
一個é‡è¦çš„例外是在將代碼從一個文件移動到å¦ä¸€å€‹æ–‡ä»¶æ™‚——在這種情æ³ä¸‹ï¼Œæ‚¨ä¸æ‡‰
該在移動代碼的åŒä¸€å€‹è£œä¸ä¸­ä¿®æ”¹ç§»å‹•çš„代碼。這清楚地æ述了移動代碼和您的更改
-的行爲。這大大有助於審查實際差異,並å…許工具更好地跟蹤代碼本身的歷å²ã€‚
+的行爲。這大大有助於審閱實際差異,並å…許工具更好地跟蹤代碼本身的歷å²ã€‚
在æ交之å‰ï¼Œä½¿ç”¨è£œä¸æ¨£å¼æª¢æŸ¥ç¨‹åºæª¢æŸ¥è£œä¸ï¼ˆscripts/check patch.pl)。ä¸éŽï¼Œ
請注æ„,樣å¼æª¢æŸ¥ç¨‹åºæ‡‰è©²è¢«è¦–爲一個指å—,而ä¸æ˜¯ä½œçˆ²äººé¡žåˆ¤æ–·çš„替代å“。如果您
-的代碼看起來更好,但有é•è¦è¡Œçˆ²ï¼Œé‚£éº¼æœ€å¥½ä¸è¦ä½¿ç”¨å®ƒã€‚
+的代碼看起來更好,但有é•è¦è¡Œçˆ²ï¼Œé‚£éº¼æœ€å¥½åˆ¥ç®¡å®ƒã€‚
檢查者報告三個級別:
- ERROR:很å¯èƒ½å‡ºéŒ¯çš„事情
- - WARNING:需è¦ä»”細審查的事項
+ - WARNING:需è¦ä»”細審閱的事項
- CHECK:需è¦æ€è€ƒçš„事情
您應該能夠判斷您的補ä¸ä¸­å­˜åœ¨çš„所有é•è¦è¡Œçˆ²ã€‚
-5) é¸æ“‡è£œä¸æ”¶ä»¶äºº
------------------
+é¸æ“‡è£œä¸æ”¶ä»¶äºº
+--------------
-您應該總是在任何補ä¸ä¸Šè¤‡è£½ç›¸æ‡‰çš„å­ç³»çµ±ç¶­è­·äººå“¡ï¼Œä»¥ç²å¾—他們維護的代碼;查看
-維護人員文件和原始碼修訂歷å²è¨˜éŒ„,以了解這些維護人員是誰。腳本
-scripts/get_Maintainer.pl在這個步驟中éžå¸¸æœ‰ç”¨ã€‚如果您找ä¸åˆ°æ­£åœ¨å·¥ä½œçš„å­ç³»çµ±
+您應該總是知會任何補ä¸ç›¸æ‡‰ä»£ç¢¼çš„å­ç³»çµ±ç¶­è­·äººå“¡ï¼›æŸ¥çœ‹
+維護人員文件和æºä»£ç¢¼ä¿®è¨‚æ­·å²è¨˜éŒ„,以瞭解這些維護人員是誰。腳本
+scripts/get_maintainer.pl在這個步驟中éžå¸¸æœ‰ç”¨ã€‚如果您找ä¸åˆ°æ­£åœ¨å·¥ä½œçš„å­ç³»çµ±
的維護人員,那麼Andrew Morton(akpm@linux-foundation.org)將充當最後的維護
人員。
-您通常還應該é¸æ“‡è‡³å°‘一個郵件列表來接收補ä¸é›†çš„。linux-kernel@vger.kernel.org
-作爲最後一個解決辦法的列表,但是這個列表上的體ç©å·²ç¶“引起了許多開發人員的拒絕。
-在MAINTAINERS文件中查找å­ç³»çµ±ç‰¹å®šçš„列表;您的補ä¸å¯èƒ½æœƒåœ¨é‚£è£¡å¾—到更多的關注。
+您通常還應該é¸æ“‡è‡³å°‘一個郵件列表來接收補ä¸é›†çš„副本。linux-kernel@vger.kernel.org
+是所有補ä¸çš„默èªåˆ—表,但是這個列表的æµé‡å·²ç¶“導致了許多開發人員ä¸å†çœ‹å®ƒã€‚
+在MAINTAINERS文件中查找å­ç³»çµ±ç‰¹å®šçš„列表;您的補ä¸å¯èƒ½æœƒåœ¨é‚£è£å¾—到更多的關注。
ä¸éŽï¼Œè«‹ä¸è¦ç™¼é€åžƒåœ¾éƒµä»¶åˆ°ç„¡é—œçš„列表。
許多與內核相關的列表託管在vger.kernel.org上;您å¯ä»¥åœ¨
@@ -232,188 +202,170 @@ http://vger.kernel.org/vger-lists.html 上找到它們的列表。ä¸éŽï¼Œä¹Ÿæœ
ä¸è¦ä¸€æ¬¡ç™¼é€è¶…éŽ15個補ä¸åˆ°vger郵件列表ï¼ï¼ï¼ï¼
-Linus Torvalds 是決定改動能å¦é€²å…¥ Linux 內核的最終è£æ±ºè€…。他的 e-mail
-地å€æ˜¯ <torvalds@linux-foundation.org> 。他收到的 e-mail 很多,所以一般
-的說,最好別給他發 e-mail。
+Linus Torvalds是決定改動能å¦é€²å…¥ Linux 內核的最終è£æ±ºè€…。他的郵件地å€æ˜¯
+torvalds@linux-foundation.org 。他收到的郵件很多,所以一般來說最好 **別**
+給他發郵件。
-如果您有修復å¯åˆ©ç”¨å®‰å…¨æ¼æ´žçš„補ä¸ï¼Œè«‹å°‡è©²è£œä¸ç™¼é€åˆ° security@kernel.org。å°æ–¼
-åš´é‡çš„bug,å¯ä»¥è€ƒæ…®çŸ­æœŸæš«åœä»¥å…許分銷商å‘用戶發布補ä¸ï¼›åœ¨é€™ç¨®æƒ…æ³ä¸‹ï¼Œé¡¯ç„¶ä¸æ‡‰
-將補ä¸ç™¼é€åˆ°ä»»ä½•å…¬å…±åˆ—表。
+如果您有修復å¯åˆ©ç”¨å®‰å…¨æ¼æ´žçš„補ä¸ï¼Œè«‹å°‡è©²è£œä¸ç™¼é€åˆ° security@kernel.org 。å°æ–¼
+åš´é‡çš„bug,å¯ä»¥è€ƒæ…®çŸ­æœŸç¦ä»¤ä»¥å…許分銷商(有時間)å‘用戶發佈補ä¸ï¼›åœ¨é€™ç¨®æƒ…æ³ä¸‹ï¼Œ
+顯然ä¸æ‡‰å°‡è£œä¸ç™¼é€åˆ°ä»»ä½•å…¬å…±åˆ—表。
+åƒè¦‹ Documentation/translations/zh_CN/admin-guide/security-bugs.rst 。
-修復已發布內核中嚴é‡éŒ¯èª¤çš„補ä¸ç¨‹åºæ‡‰è©²æŒ‡å‘穩定版維護人員,方法是放這樣的一行::
+修復已發佈內核中嚴é‡éŒ¯èª¤çš„補ä¸ç¨‹åºæ‡‰è©²æŠ„é€çµ¦ç©©å®šç‰ˆç¶­è­·äººå“¡ï¼Œæ–¹æ³•æ˜¯æŠŠä»¥ä¸‹åˆ—è¡Œ
+放進補ä¸çš„籤準å€ï¼ˆæ³¨æ„,ä¸æ˜¯é›»å­éƒµä»¶æ”¶ä»¶äººï¼‰::
- Cc: stable@vger.kernel.org
+ Cc: stable@vger.kernel.org
-進入補ä¸çš„簽准å€ï¼ˆæ³¨æ„,ä¸æ˜¯é›»å­éƒµä»¶æ”¶ä»¶äººï¼‰ã€‚除了這個文件之外,您還應該閱讀
-:ref:`Documentation/process/stable-kernel-rules.rst <stable_kernel_rules>`
+除了本文件之外,您還應該閱讀
+Documentation/translations/zh_CN/process/stable-kernel-rules.rst 。
-但是,請注æ„,一些å­ç³»çµ±ç¶­è­·äººå“¡å¸Œæœ›å¾—出他們自己的çµè«–,å³å“ªäº›è£œä¸æ‡‰è©²è¢«æ”¾åˆ°
-穩定的樹上。尤其是網絡維護人員,ä¸å¸Œæœ›çœ‹åˆ°å–®å€‹é–‹ç™¼äººå“¡åœ¨è£œä¸ä¸­æ·»åŠ åƒä¸Šé¢é€™æ¨£
-的行。
-
-如果更改影響到用戶和內核接å£ï¼Œè«‹å‘手冊é ç¶­è­·äººå“¡ï¼ˆå¦‚維護人員文件中所列)發é€
+如果更改影響到用戶å´å…§æ ¸æŽ¥å£ï¼Œè«‹å‘手冊é ç¶­è­·äººå“¡ï¼ˆå¦‚維護人員文件中所列)發é€
手冊é è£œä¸ï¼Œæˆ–至少發é€æ›´æ”¹é€šçŸ¥ï¼Œä»¥ä¾¿ä¸€äº›ä¿¡æ¯é€²å…¥æ‰‹å†Šé ã€‚還應將用戶空間API
-更改複製到 linux-api@vger.kernel.org。
+更改抄é€åˆ° linux-api@vger.kernel.org 。
+
-6) 沒有 MIME 編碼,沒有連çµï¼Œæ²’有壓縮,沒有附件,åªæœ‰ç´”文本
------------------------------------------------------------
+ä¸è¦MIME編碼,ä¸è¦éˆæŽ¥ï¼Œä¸è¦å£“縮,ä¸è¦é™„件,åªè¦ç´”文本
+------------------------------------------------------
Linus 和其他的內核開發者需è¦é–±è®€å’Œè©•è«–ä½ æ交的改動。å°æ–¼å…§æ ¸é–‹ç™¼è€…來說
-,å¯ä»¥ã€Œå¼•ç”¨ã€ä½ çš„改動很é‡è¦ï¼Œä½¿ç”¨ä¸€èˆ¬çš„ e-mail 工具,他們就å¯ä»¥åœ¨ä½ çš„
+,å¯ä»¥â€œå¼•ç”¨â€ä½ çš„改動很é‡è¦ï¼Œä½¿ç”¨ä¸€èˆ¬çš„郵件工具,他們就å¯ä»¥åœ¨ä½ çš„
代碼的任何ä½ç½®æ·»åŠ è©•è«–。
-因爲這個原因,所有的æ交的補ä¸éƒ½æ˜¯ e-mail 中「內嵌ã€çš„。
+因爲這個原因,所有的æ交的補ä¸éƒ½æ˜¯éƒµä»¶ä¸­â€œå…§åµŒâ€çš„。最簡單(和推薦)的方法就
+是使用 ``git send-email`` 。https://git-send-email.io 有 ``git send-email``
+的交互å¼æ•™ç¨‹ã€‚
+
+如果你é¸æ“‡ä¸ç”¨ ``git send-email`` :
.. warning::
- 如果你使用剪切-粘貼你的補ä¸ï¼Œå°å¿ƒä½ çš„編輯器的自動æ›è¡ŒåŠŸèƒ½ç ´å£žä½ çš„補ä¸
-ä¸è¦å°‡è£œä¸ä½œçˆ² MIME 編碼的附件,ä¸ç®¡æ˜¯å¦å£“縮。很多æµè¡Œçš„ e-mail 軟體ä¸
-是任何時候都將 MIME 編碼的附件當作純文本發é€çš„,這會使得別人無法在你的
-代碼中加評論。å¦å¤–,MIME 編碼的附件會讓 Linus 多花一點時間來處ç†ï¼Œé€™å°±
-é™ä½Žäº†ä½ çš„改動被接å—çš„å¯èƒ½æ€§ã€‚
+ 如果你使用剪切-粘貼你的補ä¸ï¼Œå°å¿ƒä½ çš„編輯器的自動æ›è¡ŒåŠŸèƒ½ç ´å£žä½ çš„補ä¸
-例外:如果你的郵éžå“¡å¼„壞了補ä¸ï¼Œé‚£éº¼æœ‰äººå¯èƒ½æœƒè¦æ±‚你使用mimeé‡æ–°ç™¼é€è£œä¸
+ä¸è¦å°‡è£œä¸ä½œçˆ²MIME編碼的附件,ä¸ç®¡æ˜¯å¦å£“縮。很多æµè¡Œçš„郵件軟件ä¸
+是任何時候都將MIME編碼的附件當作純文本發é€çš„,這會使得別人無法在你的
+代碼中加評論。å¦å¤–,MIME編碼的附件會讓Linus多花一點時間來處ç†ï¼Œé€™å°±
+é™ä½Žäº†ä½ çš„改動被接å—çš„å¯èƒ½æ€§ã€‚
-è«‹åƒé–± :ref:`Documentation/translations/zh_TW/process/email-clients.rst <tw_email_clients>`
-以ç²å–有關é…置電å­éƒµä»¶å®¢æˆ¶ç«¯ä»¥ä½¿å…¶ä¸å—影響地發é€ä¿®è£œç¨‹åºçš„æ示。
+例外:如果你的郵路æ壞了補ä¸ï¼Œé‚£éº¼æœ‰äººå¯èƒ½æœƒè¦æ±‚你使用MIMEé‡æ–°ç™¼é€è£œä¸ã€‚
-7) e-mail 的大å°
-----------------
+è«‹åƒé–± Documentation/translations/zh_CN/process/email-clients.rst
+以ç²å–有關é…置電å­éƒµä»¶å®¢æˆ¶ç«¯ä»¥ä½¿å…¶ä¸å—影響地發é€è£œä¸çš„æ示。
-大的改動å°éƒµä»¶åˆ—表ä¸åˆé©ï¼Œå°æŸäº›ç¶­è­·è€…也ä¸åˆé©ã€‚如果你的補ä¸ï¼Œåœ¨ä¸å£“縮
-的情æ³ä¸‹ï¼Œè¶…éŽäº†300kB,那麼你最好將補ä¸æ”¾åœ¨ä¸€å€‹èƒ½é€šéŽ internet 訪å•çš„æœ
-務器上,然後用指å‘你的補ä¸çš„ URL 替代。但是請注æ„,如果您的補ä¸è¶…éŽäº†
-300kb,那麼它幾乎肯定需è¦è¢«ç ´å£žã€‚
+回覆審閱æ„見
+------------
-8)回複評審æ„見
----------------
+你的補ä¸å¹¾ä¹Žè‚¯å®šæœƒå¾—到審閱者å°è£œä¸æ”¹é€²æ–¹æ³•çš„評論(以回覆郵件的形å¼ï¼‰ã€‚您必須
+å°é€™äº›è©•è«–作出回應;讓補ä¸è¢«å¿½ç•¥çš„一個好辦法就是忽略審閱者的æ„見。直接回復郵
+件來回應æ„見å³å¯ã€‚ä¸æœƒå°Žè‡´ä»£ç¢¼æ›´æ”¹çš„æ„見或å•é¡Œå¹¾ä¹Žè‚¯å®šæœƒå¸¶ä¾†è¨»é‡‹æˆ–變更日誌的
+改變,以便下一個審閱者更好地瞭解正在發生的事情。
-你的補ä¸å¹¾ä¹Žè‚¯å®šæœƒå¾—到評審者å°è£œä¸æ”¹é€²æ–¹æ³•çš„評論。您必須å°é€™äº›è©•è«–作出
-回應;讓補ä¸è¢«å¿½ç•¥çš„一個好辦法就是忽略審閱者的æ„見。ä¸æœƒå°Žè‡´ä»£ç¢¼æ›´æ”¹çš„
-æ„見或å•é¡Œå¹¾ä¹Žè‚¯å®šæœƒå¸¶ä¾†æ³¨é‡‹æˆ–變更日誌的改變,以便下一個評審者更好地了解
-正在發生的事情。
+一定è¦å‘Šè¨´å¯©é–±è€…你在åšä»€éº¼æ”¹è®Šï¼Œä¸¦æ„Ÿè¬ä»–們的時間。代碼審閱是一個累人且耗時的
+éŽç¨‹ï¼Œå¯©é–±è€…有時會變得暴èºã€‚å³ä½¿åœ¨é€™ç¨®æƒ…æ³ä¸‹ï¼Œä¹Ÿè¦ç¦®è²Œåœ°å›žæ‡‰ä¸¦è§£æ±ºä»–們指出的
+å•é¡Œã€‚當發é€ä¸‹ä¸€ç‰ˆæ™‚,在å°é¢éƒµä»¶æˆ–ç¨ç«‹è£œä¸é‡ŒåŠ ä¸Š ``patch changelog`` 說明與
+å‰ä¸€ç‰ˆæœ¬çš„ä¸åŒä¹‹è™•ï¼ˆåƒè¦‹ :ref:`zh_the_canonical_patch_format` )。
-一定è¦å‘Šè¨´å¯©ç¨¿äººä½ åœ¨åšä»€éº¼æ”¹è®Šï¼Œä¸¦æ„Ÿè¬ä»–們的時間。代碼審查是一個累人且
-耗時的éŽç¨‹ï¼Œå¯©æŸ¥äººå“¡æœ‰æ™‚會變得暴èºã€‚å³ä½¿åœ¨é€™ç¨®æƒ…æ³ä¸‹ï¼Œä¹Ÿè¦ç¦®è²Œåœ°å›žæ‡‰ä¸¦
-解決他們指出的å•é¡Œã€‚
+.. _tw_resend_reminders:
-9)ä¸è¦æ´©æ°£æˆ–ä¸è€ç…©
--------------------
+ä¸è¦æ³„氣或ä¸è€ç…©
+----------------
-æ交更改後,請è€å¿ƒç­‰å¾…。審閱者是忙碌的人,å¯èƒ½ç„¡æ³•ç«‹å³è¨ªå•æ‚¨çš„修補程åºã€‚
+æ交更改後,請è€å¿ƒç­‰å¾…。審閱者是大忙人,å¯èƒ½ç„¡æ³•ç«‹å³å¯©é–±æ‚¨çš„補ä¸ã€‚
-曾幾何時,補ä¸æ›¾åœ¨æ²’有評論的情æ³ä¸‹æ¶ˆå¤±åœ¨ç©ºç™½ä¸­ï¼Œä½†é–‹ç™¼éŽç¨‹æ¯”ç¾åœ¨æ›´åŠ é †åˆ©ã€‚
-您應該在一周左å³çš„時間內收到評論;如果沒有收到評論,請確ä¿æ‚¨å·²å°‡è£œä¸ç™¼é€
-到正確的ä½ç½®ã€‚在é‡æ–°æ交或è¯ç¹«å¯©é–±è€…之å‰è‡³å°‘等待一周-在諸如åˆä½µçª—å£ä¹‹é¡žçš„
+曾幾何時,補ä¸æ›¾åœ¨æ²’收到評論的情æ³ä¸‹æ¶ˆå¤±åœ¨è™›ç©ºä¸­ï¼Œä½†ç¾åœ¨é–‹ç™¼éŽç¨‹æ‡‰è©²æ›´åŠ é †åˆ©äº†ã€‚
+您應該在一週左å³çš„時間內收到評論;如果沒有收到評論,請確ä¿æ‚¨å·²å°‡è£œä¸ç™¼é€
+到正確的ä½ç½®ã€‚在é‡æ–°æ交或è¯ç¹«å¯©é–±è€…之å‰è‡³å°‘等待一週——在諸如åˆä½µçª—å£ä¹‹é¡žçš„
ç¹å¿™æ™‚é–“å¯èƒ½æ›´é•·ã€‚
-10ï¼‰ä¸»é¡Œä¸­åŒ…å« PATCH
---------------------
-
-由於到linuså’Œlinux內核的電å­éƒµä»¶æµé‡å¾ˆé«˜ï¼Œé€šå¸¸æœƒåœ¨ä¸»é¡Œè¡Œå‰é¢åŠ ä¸Š[PATCH]
-å‰ç¶´. 這使Linus和其他內核開發人員更容易將補ä¸èˆ‡å…¶ä»–é›»å­éƒµä»¶è¨Žè«–å€åˆ†é–‹ã€‚
+在等了幾個星期後,用帶RESEND的主題é‡ç™¼è£œä¸ä¹Ÿæ˜¯å¯ä»¥çš„::
-11)簽署你的作å“-開發者原始èªè­‰
--------------------------------
+ [PATCH Vx RESEND] sub/sys: Condensed patch summary
-爲了加強å°èª°åšäº†ä½•äº‹çš„追蹤,尤其是å°é‚£äº›é€éŽå¥½å¹¾å±¤çš„維護者的補ä¸ï¼Œæˆ‘們
-建議在發é€å‡ºåŽ»çš„補ä¸ä¸ŠåŠ ä¸€å€‹ 「sign-off〠的éŽç¨‹ã€‚
+當你發佈補ä¸ï¼ˆç³»åˆ—)修改版的時候,ä¸è¦åŠ ä¸Šâ€œRESENDâ€â€”—“RESENDâ€åªé©ç”¨æ–¼é‡
+æ–°æ交之å‰æœªç¶“修改的補ä¸ï¼ˆç³»åˆ—)。
-"sign-off" 是在補ä¸çš„注釋的最後的簡單的一行文字,èªè­‰ä½ ç·¨å¯«äº†å®ƒæˆ–者其他
-人有權力將它作爲開放原始碼的補ä¸å‚³éžã€‚è¦å‰‡å¾ˆç°¡å–®ï¼šå¦‚果你能èªè­‰å¦‚下信æ¯:
-
-開發者來æºè­‰æ›¸ 1.1
-^^^^^^^^^^^^^^^^^^
-
-å°æ–¼æœ¬é …目的貢ç»ï¼Œæˆ‘èªè­‰å¦‚下信æ¯ï¼š
+ä¸»é¡Œä¸­åŒ…å« PATCH
+----------------
- (a)這些貢ç»æ˜¯å®Œå…¨æˆ–者部分的由我創建,我有權利以文件中指出
- 的開放原始碼許å¯è­‰æ交它;或者
- (b)這些貢ç»åŸºæ–¼ä»¥å‰çš„工作,據我所知,這些以å‰çš„工作å—æ°ç•¶çš„開放
- 原始碼許å¯è­‰ä¿è­·ï¼Œè€Œä¸”,根據許å¯è­‰ï¼Œæˆ‘有權æ交修改後的貢ç»ï¼Œ
- 無論是完全還是部分由我創造,這些貢ç»éƒ½ä½¿ç”¨åŒä¸€å€‹é–‹æ”¾åŽŸå§‹ç¢¼è¨±å¯è­‰
- (除éžæˆ‘被å…許用其它的許å¯è­‰ï¼‰ï¼Œæ­£å¦‚文件中指出的;或者
- (c)這些貢ç»ç”±èªè­‰ï¼ˆa),(b)或者(c)的人直接æ供給我,而
- 且我沒有修改它。
- (d)我ç†è§£ä¸¦åŒæ„這個項目和貢ç»æ˜¯å…¬é–‹çš„,貢ç»çš„記錄(包括我
- 一起æ交的個人記錄,包括 sign-off )被永久維護並且å¯ä»¥å’Œé€™å€‹é …ç›®
- 或者開放原始碼的許å¯è­‰åŒæ­¥åœ°å†ç™¼è¡Œã€‚
+由於到Linuså’Œlinux-kernelçš„é›»å­éƒµä»¶æµé‡å¾ˆé«˜ï¼Œé€šå¸¸æœƒåœ¨ä¸»é¡Œè¡Œå‰é¢åŠ ä¸Š[PATCH]
+å‰ç¶´ã€‚這使Linus和其他內核開發人員更容易將補ä¸èˆ‡å…¶ä»–é›»å­éƒµä»¶è¨Žè«–å€åˆ†é–‹ã€‚
-那麼加入這樣一行::
+``git send-email`` 會自動爲你加上。
- Signed-off-by: Random J Developer <random@developer.example.org>
+簽署你的作å“——開發者來æºèªè­‰
+------------------------------
-使用你的真å(抱歉,ä¸èƒ½ä½¿ç”¨å‡å或者匿å。)
+爲了加強å°èª°åšäº†ä½•äº‹çš„追蹤,尤其是å°é‚£äº›é€éŽå¥½å¹¾å±¤ç¶­è­·è€…æ‰æœ€çµ‚到é”的補ä¸ï¼Œæˆ‘
+們在通éŽéƒµä»¶ç™¼é€çš„補ä¸ä¸Šå¼•å…¥äº†â€œç°½ç½²ï¼ˆsign-off)â€æµç¨‹ã€‚
-有人在最後加上標籤。ç¾åœ¨é€™äº›æ±è¥¿æœƒè¢«å¿½ç•¥ï¼Œä½†æ˜¯ä½ å¯ä»¥é€™æ¨£åšï¼Œä¾†æ¨™è¨˜å…¬å¸
-內部的éŽç¨‹ï¼Œæˆ–者åªæ˜¯æŒ‡å‡ºé—œæ–¼ sign-off 的一些特殊細節。
+“簽署â€æ˜¯åœ¨è£œä¸è¨»é‡‹æœ€å¾Œçš„一行簡單文字,èªè­‰ä½ ç·¨å¯«äº†å®ƒæˆ–者其他
+人有權力將它作爲開放æºä»£ç¢¼çš„補ä¸å‚³éžã€‚è¦å‰‡å¾ˆç°¡å–®ï¼šå¦‚果你能èªè­‰å¦‚下信æ¯:
-如果您是å­ç³»çµ±æˆ–分支維護人員,有時需è¦ç¨å¾®ä¿®æ”¹æ”¶åˆ°çš„補ä¸ï¼Œä»¥ä¾¿åˆä½µå®ƒå€‘,
-因爲樹和æ交者中的代碼ä¸å®Œå…¨ç›¸åŒã€‚如果你嚴格éµå®ˆè¦å‰‡ï¼ˆc),你應該è¦æ±‚æ交者
-é‡æ–°ç™¼å¸ƒï¼Œä½†é€™å®Œå…¨æ˜¯åœ¨æµªè²»æ™‚間和精力。è¦å‰‡ï¼ˆb)å…許您調整代碼,但是更改一個
-æ交者的代碼並讓他èªå¯æ‚¨çš„錯誤是éžå¸¸ä¸ç¦®è²Œçš„。è¦è§£æ±ºæ­¤å•é¡Œï¼Œå»ºè­°åœ¨æœ€å¾Œä¸€å€‹
-由簽å行和您的行之間添加一行,指示更改的性質。雖然這並ä¸æ˜¯å¼·åˆ¶æ€§çš„,但似乎
-在æè¿°å‰åŠ ä¸Šæ‚¨çš„郵件和/或姓å(全部用方括號括起來),這足以讓人注æ„到您å°æœ€
-後一分é˜çš„更改負有責任。例如::
+開發者來æºèªè­‰ 1.1
+^^^^^^^^^^^^^^^^^^
- Signed-off-by: Random J Developer <random@developer.example.org>
- [lucky@maintainer.example.org: struct foo moved from foo.c to foo.h]
- Signed-off-by: Lucky K Maintainer <lucky@maintainer.example.org>
+å°æ–¼æœ¬é …目的貢ç»ï¼Œæˆ‘èªè­‰å¦‚下信æ¯ï¼š
-如果您維護一個穩定的分支機構,åŒæ™‚希望å°ä½œè€…進行致è¬ã€è·Ÿè¹¤æ›´æ”¹ã€åˆä½µä¿®å¾©ä¸¦
-ä¿è­·æ交者ä¸å—投訴,那麼這種åšæ³•å°¤å…¶æœ‰ç”¨ã€‚請注æ„,在任何情æ³ä¸‹éƒ½ä¸èƒ½æ›´æ”¹ä½œè€…
-çš„ID(From 頭),因爲它是出ç¾åœ¨æ›´æ”¹æ—¥èªŒä¸­çš„標識。
+ (a) 這些貢ç»æ˜¯å®Œå…¨æˆ–者部分的由我創建,我有權利以文件中指出
+ 的開放æºä»£ç¢¼è¨±å¯è­‰æ交它;或者
-å°å›žåˆï¼ˆback-porters)的特別說明:在æ交消æ¯çš„頂部(主題行之後)æ’入一個補ä¸
-çš„èµ·æºæŒ‡ç¤ºä¼¼ä¹Žæ˜¯ä¸€ç¨®å¸¸è¦‹ä¸”有用的實è¸ï¼Œä»¥ä¾¿æ–¼è·Ÿè¹¤ã€‚例如,下é¢æ˜¯æˆ‘們在3.x穩定
-版本中看到的內容::
+ (b) 這些貢ç»åŸºæ–¼ä»¥å‰çš„工作,據我所知,這些以å‰çš„工作å—æ°ç•¶çš„開放
+ æºä»£ç¢¼è¨±å¯è­‰ä¿è­·ï¼Œè€Œä¸”,根據文件中指出的許å¯è­‰ï¼Œæˆ‘有權æ交修改後的貢ç»ï¼Œ
+ 無論是完全還是部分由我創造,這些貢ç»éƒ½ä½¿ç”¨åŒä¸€å€‹é–‹æ”¾æºä»£ç¢¼è¨±å¯è­‰
+ (除éžæˆ‘被å…許用其它的許å¯è­‰ï¼‰ï¼›æˆ–者
- Date: Tue Oct 7 07:26:38 2014 -0400
+ (c) 這些貢ç»ç”±èªè­‰ï¼ˆa),(b)或者(c)的人直接æ供給我,而
+ 且我沒有修改它。
- libata: Un-break ATA blacklist
+ (d) 我ç†è§£ä¸¦åŒæ„這個項目和貢ç»æ˜¯å…¬é–‹çš„,貢ç»çš„記錄(包括我
+ 一起æ交的個人記錄,包括sign-off)被永久維護並且å¯ä»¥å’Œé€™å€‹é …ç›®
+ 或者開放æºä»£ç¢¼çš„許å¯è­‰åŒæ­¥åœ°å†ç™¼è¡Œã€‚
- commit 1c40279960bcd7d52dbdf1d466b20d24b99176c8 upstream.
+那麼加入這樣一行::
-還有, 這裡是一個舊版內核中的一個回åˆè£œä¸::
+ Signed-off-by: Random J Developer <random@developer.example.org>
- Date: Tue May 13 22:12:27 2008 +0200
+使用你的真å(抱歉,ä¸èƒ½ä½¿ç”¨å‡å或者匿å。)如果使用 ``git commit -s`` 的話
+將會自動完æˆã€‚撤銷也應當包å«â€œSigned-off-byâ€ï¼Œ ``git revert -s`` 會幫你æžå®šã€‚
- wireless, airo: waitbusy() won't delay
+有些人會在最後加上é¡å¤–的標籤。ç¾åœ¨é€™äº›æ±è¥¿æœƒè¢«å¿½ç•¥ï¼Œä½†æ˜¯ä½ å¯ä»¥é€™æ¨£åšï¼Œä¾†æ¨™è¨˜
+å…¬å¸å…§éƒ¨çš„éŽç¨‹ï¼Œæˆ–者åªæ˜¯æŒ‡å‡ºé—œæ–¼ç°½ç½²çš„一些特殊細節。
- [backport of 2.6 commit b7acbdfbd1f277c1eb23f344f899cfa4cd0bf36a]
+作者簽署之後的任何其他簽署(Signed-off-by:'s)å‡ä¾†è‡ªè™•ç†å’Œå‚³éžè£œä¸çš„人員,但
+未åƒèˆ‡å…¶é–‹ç™¼ã€‚簽署éˆæ‡‰ç•¶å映補ä¸å‚³æ’­åˆ°ç¶­è­·è€…並最終傳播到Linus所經éŽçš„ **真實**
+路徑,首個簽署指明單個作者的主è¦ä½œè€…身份。
-12)何時使用Acked-by:,CC:,和Co-Developed by:
-----------------------------------------------
+何時使用Acked-by:,CC:,和Co-Developed by:
+------------------------------------------
-Singed-off-by: 標記表示簽å者åƒèˆ‡äº†è£œä¸çš„開發,或者他/她在補ä¸çš„傳éžè·¯å¾‘中。
+Singed-off-by: 標籤表示簽å者åƒèˆ‡äº†è£œä¸çš„開發,或者他/她在補ä¸çš„傳éžè·¯å¾‘中。
-如果一個人沒有直接åƒèˆ‡è£œä¸çš„準備或處ç†ï¼Œä½†å¸Œæœ›è¡¨ç¤ºä¸¦è¨˜éŒ„他們å°è£œä¸çš„批准,
-那麼他們å¯ä»¥è¦æ±‚在補ä¸çš„變更日誌中添加一個 Acked-by:
+如果一個人沒有直接åƒèˆ‡è£œä¸çš„準備或處ç†ï¼Œä½†å¸Œæœ›è¡¨ç¤ºä¸¦è¨˜éŒ„他們å°è£œä¸çš„批准/è´Šæˆï¼Œ
+那麼他們å¯ä»¥è¦æ±‚在補ä¸çš„變更日誌中添加一個Acked-by:。
-Acked-by:通常由å—影響代碼的維護者使用,當該維護者既沒有貢ç»ä¹Ÿæ²’有轉發補ä¸æ™‚。
+Acked-by: 通常由å—影響代碼的維護者使用,當該維護者既沒有貢ç»ä¹Ÿæ²’有轉發補ä¸æ™‚。
-Acked-by: ä¸åƒç°½å­—人那樣正å¼ã€‚這是一個記錄,確èªäººè‡³å°‘審查了補ä¸ï¼Œä¸¦è¡¨ç¤ºæŽ¥å—。
-因此,補ä¸åˆä½µæœ‰æ™‚會手動將Acker的「Yep,looks good to meã€è½‰æ›çˆ² Acked-By:(但
+Acked-by: ä¸åƒç°½ç½²é‚£æ¨£æ­£å¼ã€‚這是一個記錄,確èªäººè‡³å°‘審閱了補ä¸ï¼Œä¸¦è¡¨ç¤ºæŽ¥å—。
+因此,補ä¸åˆä½µæœ‰æ™‚會手動將Acker的“Yep,looks good to meâ€è½‰æ›çˆ² Acked-By:(但
請注æ„,通常最好è¦æ±‚一個明確的Ack)。
Acked-by:ä¸ä¸€å®šè¡¨ç¤ºå°æ•´å€‹è£œä¸çš„確èªã€‚例如,如果一個補ä¸å½±éŸ¿å¤šå€‹å­ç³»çµ±ï¼Œä¸¦ä¸”
-有一個:來自一個å­ç³»çµ±ç¶­è­·è€…,那麼這通常表示åªç¢ºèªå½±éŸ¿ç¶­è­·è€…代碼的部分。這裡
-應該仔細判斷。如有疑å•ï¼Œæ‡‰åƒè€ƒéƒµä»¶åˆ—表檔案中的原始討論。
+有一個來自æŸå€‹å­ç³»çµ±ç¶­è­·è€…çš„Acked-By:,那麼這通常表示åªç¢ºèªå½±éŸ¿ç¶­è­·è€…代碼的部
+分。這è£æ‡‰è©²ä»”細判斷。如有疑å•ï¼Œæ‡‰åƒè€ƒéƒµä»¶åˆ—表存檔中的原始討論。
-如果æŸäººæœ‰æ©Ÿæœƒå°è£œä¸é€²è¡Œè©•è«–,但沒有æ供此類評論,您å¯ä»¥é¸æ“‡åœ¨è£œä¸ä¸­æ·»åŠ  ``Cc:``
-這是唯一一個標籤,它å¯ä»¥åœ¨æ²’有被它命å的人顯å¼æ“作的情æ³ä¸‹æ·»åŠ ï¼Œä½†å®ƒæ‡‰è©²è¡¨æ˜Ž
-這個人是在補ä¸ä¸ŠæŠ„é€çš„。討論中包å«äº†æ½›åœ¨åˆ©ç›Šç›¸é—œæ–¹ã€‚
+如果æŸäººæœ¬æ‡‰æœ‰æ©Ÿæœƒå°è£œä¸é€²è¡Œè©•è«–,但沒有æ供此類評論,您å¯ä»¥é¸æ“‡åœ¨è£œä¸ä¸­æ·»åŠ 
+``Cc:`` 這是唯一å¯ä»¥åœ¨æ²’有被該人明確åŒæ„的情æ³ä¸‹æ·»åŠ çš„標籤——但它應該表明
+這個人是在補ä¸ä¸ŠæŠ„é€çš„。此標籤記錄了討論中包å«çš„潛在利益相關方。
Co-developed-by: è²æ˜Žè£œä¸æ˜¯ç”±å¤šå€‹é–‹ç™¼äººå“¡å…±åŒå‰µå»ºçš„;當幾個人在一個補ä¸ä¸Šå·¥
-作時,它用於將屬性賦予共åŒä½œè€…(除了 From: 所賦予的作者之外)。因爲
-Co-developed-by: 表示作者身份,所以æ¯å€‹å…±åŒé–‹ç™¼äººï¼šå¿…須緊跟在相關åˆä½œä½œè€…çš„
-ç°½å之後。標準的簽核程åºè¦æ±‚:標記的簽核順åºæ‡‰å„˜å¯èƒ½å映補ä¸çš„時間歷å²ï¼Œè€Œä¸
-ç®¡ä½œè€…æ˜¯é€šéŽ From :還是由 Co-developed-by: å…±åŒé–‹ç™¼çš„。值得注æ„的是,最後一
-個簽字人:必須始終是æ交補ä¸çš„開發人員。
+作時,它用於給出共åŒä½œè€…(除了From:所給出的作者之外)。因爲Co-developed-by:
+表示作者身份,所以æ¯å€‹Co-developed-by:必須緊跟在相關åˆä½œä½œè€…的簽署之後。標準
+簽署程åºè¦æ±‚Singed-off-by:標籤的順åºæ‡‰å„˜å¯èƒ½å映補ä¸çš„時間歷å²ï¼Œç„¡è«–作者是通
+éŽFrom:還是Co-developed-by:表明。值得注æ„的是,最後一個Singed-off-by:必須是
+æ交補ä¸çš„開發人員。
-注æ„,當作者也是電å­éƒµä»¶æ¨™é¡Œã€Œç™¼ä»¶äººï¼šã€è¡Œä¸­åˆ—出的人時,「From: 〠標記是å¯é¸çš„。
+注æ„,如果From:作者也是電å­éƒµä»¶æ¨™é¡Œçš„From:行中列出的人,則From:標籤是å¯é¸çš„。
-作者æ交的補ä¸ç¨‹åºç¤ºä¾‹::
+被From:作者æ交的補ä¸ç¤ºä¾‹::
<changelog>
@@ -423,7 +375,7 @@ Co-developed-by: 表示作者身份,所以æ¯å€‹å…±åŒé–‹ç™¼äººï¼šå¿…須緊跟
Signed-off-by: Second Co-Author <second@coauthor.example.org>
Signed-off-by: From Author <from@author.example.org>
-åˆä½œé–‹ç™¼è€…æ交的補ä¸ç¤ºä¾‹::
+被åˆä½œé–‹ç™¼è€…æ交的補ä¸ç¤ºä¾‹::
From: From Author <from@author.example.org>
@@ -436,106 +388,115 @@ Co-developed-by: 表示作者身份,所以æ¯å€‹å…±åŒé–‹ç™¼äººï¼šå¿…須緊跟
Signed-off-by: Submitting Co-Author <sub@coauthor.example.org>
-13)使用報告人:ã€æ¸¬è©¦äººï¼šã€å¯©æ ¸äººï¼šã€å»ºè­°äººï¼šã€ä¿®å¾©äººï¼š
---------------------------------------------------------
+使用Reported-by:ã€Tested-by:ã€Reviewed-by:ã€Suggested-by:å’ŒFixes:
+-----------------------------------------------------------------
Reported-by: 給那些發ç¾éŒ¯èª¤ä¸¦å ±å‘ŠéŒ¯èª¤çš„人致è¬ï¼Œå®ƒå¸Œæœ›æ¿€å‹µä»–們在將來å†æ¬¡å¹«åŠ©
-我們。請注æ„,如果bug是以ç§æœ‰æ–¹å¼å ±å‘Šçš„,那麼在使用Reported-by標記之å‰ï¼Œè«‹
-先請求權é™ã€‚
+我們。請注æ„,如果bug是以ç§æœ‰æ–¹å¼å ±å‘Šçš„,那麼在使用Reported-by標籤之å‰ï¼Œè«‹
+先請求許å¯ã€‚此標籤是爲Bug設計的;請ä¸è¦å°‡å…¶ç”¨æ–¼æ„Ÿè¬åŠŸèƒ½è«‹æ±‚。
-Tested-by: 標記表示補ä¸å·²ç”±æŒ‡å®šçš„人(在æŸäº›ç’°å¢ƒä¸­ï¼‰æˆåŠŸæ¸¬è©¦ã€‚這個標籤通知
-維護人員已經執行了一些測試,爲將來的補ä¸æ供了一種定ä½æ¸¬è©¦äººå“¡çš„方法,並確
-ä¿æ¸¬è©¦äººå“¡çš„信譽。
+Tested-by: 標籤表示補ä¸å·²ç”±æŒ‡å®šçš„人(在æŸäº›ç’°å¢ƒä¸­ï¼‰æˆåŠŸæ¸¬è©¦ã€‚這個標籤通知
+維護人員已經執行了一些測試,爲將來的補ä¸æ供了一種定ä½æ¸¬è©¦äººå“¡çš„方法,並彰顯測試人員的功勞。
-Reviewed-by:相å,根據審查人的è²æ˜Žï¼Œè¡¨æ˜Žè©²è£œä¸å·²è¢«å¯©æŸ¥ä¸¦è¢«èªçˆ²æ˜¯å¯æŽ¥å—的:
+Reviewed-by:根據審閱者的監ç£è²æ˜Žï¼Œè¡¨æ˜Žè©²è£œä¸å·²è¢«å¯©é–±ä¸¦è¢«èªçˆ²æ˜¯å¯æŽ¥å—的:
-審查人的監ç£è²æ˜Ž
+審閱者的監ç£è²æ˜Ž
^^^^^^^^^^^^^^^^
-通éŽæ供我的 Reviewed-by,我è²æ˜Žï¼š
+通éŽæ供我的Reviewed-by:標籤,我è²æ˜Žï¼š
- (a) 我已經å°é€™å€‹è£œä¸é€²è¡Œäº†ä¸€æ¬¡æŠ€è¡“審查,以評估它是å¦é©åˆè¢«åŒ…å«åˆ°
+ (a) 我已經å°é€™å€‹è£œä¸é€²è¡Œäº†ä¸€æ¬¡æŠ€è¡“審閱,以評估它是å¦é©åˆè¢«åŒ…å«åˆ°
主線內核中。
(b) 與補ä¸ç›¸é—œçš„任何å•é¡Œã€é¡§æ…®æˆ–å•é¡Œéƒ½å·²å饋給æ交者。我å°æ交者å°
我的評論的回應感到滿æ„。
- (c) 雖然這一æ交å¯èƒ½æœƒæ”¹é€²ä¸€äº›æ±è¥¿ï¼Œä½†æˆ‘相信,此時,(1)å°å…§æ ¸
+ (c) 雖然這一æ交å¯èƒ½ä»å¯è¢«æ”¹é€²ï¼Œä½†æˆ‘相信,此時,(1)å°å…§æ ¸
進行了有價值的修改,(2)沒有包å«çˆ­è«–中涉åŠçš„已知å•é¡Œã€‚
- (d) 雖然我已經審查了補ä¸ä¸¦èªçˆ²å®ƒæ˜¯å¥å…¨çš„,但我ä¸æœƒï¼ˆé™¤éžå¦æœ‰æ˜Žç¢º
- 說明)作出任何ä¿è­‰æˆ–ä¿è­‰å®ƒå°‡åœ¨ä»»ä½•çµ¦å®šæƒ…æ³ä¸‹å¯¦ç¾å…¶è¦å®šçš„目的
+ (d) 雖然我已經審閱了補ä¸ä¸¦èªçˆ²å®ƒæ˜¯å¥å…¨çš„,但我ä¸æœƒï¼ˆé™¤éžå¦æœ‰æ˜Žç¢º
+ 說明)作出任何ä¿è­‰æˆ–æ“”ä¿å®ƒæœƒåœ¨ä»»ä½•çµ¦å®šæƒ…æ³ä¸‹å¯¦ç¾å…¶è¦å®šçš„目的
或正常é‹è¡Œã€‚
-Reviewed-by 是一種觀點è²æ˜Žï¼Œå³è£œä¸æ˜¯å°å…§æ ¸çš„é©ç•¶ä¿®æ”¹ï¼Œæ²’有任何éºç•™çš„åš´é‡æŠ€è¡“
-å•é¡Œã€‚任何感興趣的審閱者(完æˆå·¥ä½œçš„人)都å¯ä»¥çˆ²ä¸€å€‹è£œä¸æ供一個 Review-by
-標籤。此標籤用於å‘審閱者æ供致è¬ï¼Œä¸¦é€šçŸ¥ç¶­è­·è€…已在修補程åºä¸Šå®Œæˆçš„審閱程度。
-Reviewed-by: 當由已知了解主題å€åŸŸä¸¦åŸ·è¡Œå¾¹åº•æª¢æŸ¥çš„審閱者æ供時,通常會增加
+Reviewed-by是一種觀點è²æ˜Žï¼Œå³è£œä¸æ˜¯å°å…§æ ¸çš„é©ç•¶ä¿®æ”¹ï¼Œæ²’有任何éºç•™çš„åš´é‡æŠ€è¡“
+å•é¡Œã€‚任何感興趣的審閱者(完æˆå·¥ä½œçš„人)都å¯ä»¥çˆ²ä¸€å€‹è£œä¸æ供一個Reviewed-by
+標籤。此標籤用於å‘審閱者æ供致è¬ï¼Œä¸¦é€šçŸ¥ç¶­è­·è€…補ä¸çš„審閱進度。
+當Reviewed-by:標籤由已知了解主題å€åŸŸä¸¦åŸ·è¡Œå¾¹åº•æª¢æŸ¥çš„審閱者æ供時,通常會增加
補ä¸é€²å…¥å…§æ ¸çš„å¯èƒ½æ€§ã€‚
+一旦從測試人員或審閱者的“Tested-byâ€å’Œâ€œReviewed-byâ€æ¨™ç±¤å‡ºç¾åœ¨éƒµä»¶åˆ—表中,
+作者應在發é€ä¸‹ä¸€å€‹ç‰ˆæœ¬æ™‚將其添加到é©ç”¨çš„補ä¸ä¸­ã€‚但是,如果補ä¸åœ¨ä»¥ä¸‹ç‰ˆæœ¬ä¸­ç™¼
+生了實質性更改,這些標籤å¯èƒ½ä¸å†é©ç”¨ï¼Œå› æ­¤æ‡‰è©²åˆªé™¤ã€‚通常,在補ä¸æ›´æ”¹æ—¥èªŒä¸­
+(在 ``---`` 分隔符之後)應該æ到刪除æŸäººçš„測試者或審閱者標籤。
+
Suggested-by: 表示補ä¸çš„想法是由指定的人æ出的,並確ä¿å°‡æ­¤æƒ³æ³•æ­¸åŠŸæ–¼æŒ‡å®šçš„
-人。請注æ„,未經許å¯ï¼Œä¸å¾—添加此標籤,特別是如果該想法未在公共論壇上發布。
-這就是說,如果我們勤快地致è¬æˆ‘們的創æ„者,他們很有希望在未來得到鼓舞,å†æ¬¡
+人。請注æ„,未經許å¯ï¼Œä¸å¾—添加此標籤,特別是如果該想法未在公共論壇上發佈。
+也就是說,如果我們勤快地致è¬å‰µæ„æ供者,他們將å—到鼓舞,很有希望在未來å†æ¬¡
幫助我們。
-Fixes: 指示補ä¸åœ¨ä»¥å‰çš„æ交中修復了一個å•é¡Œã€‚它å¯ä»¥å¾ˆå®¹æ˜“地確定錯誤的來æºï¼Œ
-這有助於檢查錯誤修復。這個標記還幫助穩定內核團隊確定應該接收修復的穩定內核
-版本。這是指示補ä¸ä¿®å¾©çš„錯誤的首é¸æ–¹æ³•ã€‚è«‹åƒé–± :ref:`tw_describe_changes`
-æ述您的更改以了解更多詳細信æ¯ã€‚
+Fixes: 指示補ä¸ä¿®å¾©äº†ä¹‹å‰æ交的一個å•é¡Œã€‚它å¯ä»¥ä¾¿æ–¼ç¢ºå®šéŒ¯èª¤çš„來æºï¼Œé€™æœ‰åŠ©æ–¼
+檢查錯誤修復。這個標籤還幫助穩定內核團隊確定應該接收修復的穩定內核版本。這是
+指示補ä¸ä¿®å¾©çš„錯誤的首é¸æ–¹æ³•ã€‚è«‹åƒé–± :ref:`zh_describe_changes` 瞭解更多信æ¯ã€‚
+
+.. note::
+
+ 附加Fixes:標籤ä¸æœƒæ”¹è®Šç©©å®šå…§æ ¸è¦å‰‡æµç¨‹ï¼Œä¹Ÿä¸æ”¹è®Šæ‰€æœ‰ç©©å®šç‰ˆè£œä¸æŠ„é€
+ stable@vger.kernel.orgçš„è¦æ±‚。有關更多信æ¯ï¼Œè«‹é–±è®€
+ Documentation/translations/zh_CN/process/stable-kernel-rules.rst 。
.. _tw_the_canonical_patch_format:
-12)標準補ä¸æ ¼å¼
-----------------
+標準補ä¸æ ¼å¼
+------------
本節æ述如何格å¼åŒ–補ä¸æœ¬èº«ã€‚請注æ„,如果您的補ä¸å­˜å„²åœ¨ ``Git`` 存儲庫中,則
-å¯ä»¥ä½¿ç”¨ ``git format-patch`` 進行正確的補ä¸æ ¼å¼è¨­ç½®ã€‚但是,這些工具無法創建
+å¯ä»¥ä½¿ç”¨ ``git format-patch`` 進行正確的補ä¸æ ¼å¼åŒ–。但是,這些工具無法創建
å¿…è¦çš„文本,因此請務必閱讀下é¢çš„說明。
-標準的補ä¸ï¼Œæ¨™é¡Œè¡Œæ˜¯::
+標準的補ä¸æ¨™é¡Œè¡Œæ˜¯::
Subject: [PATCH 001/123] å­ç³»çµ±:一å¥è©±æ¦‚è¿°
-標準補ä¸çš„信體存在如下部分:
+標準補ä¸çš„信體包å«å¦‚下部分:
- - 一個 "from" 行指出補ä¸ä½œè€…。後跟空行(僅當發é€ä¿®è£œç¨‹åºçš„人ä¸æ˜¯ä½œè€…時æ‰éœ€è¦ï¼‰ã€‚
+ - 一個 ``from`` 行指出補ä¸ä½œè€…。後跟空行(僅當發é€è£œä¸çš„人ä¸æ˜¯ä½œè€…時æ‰éœ€è¦ï¼‰ã€‚
- - 解釋的正文,行以75列包è£ï¼Œé€™å°‡è¢«è¤‡è£½åˆ°æ°¸ä¹…變更日誌來æ述這個補ä¸ã€‚
+ - 說明文字,æ¯è¡Œæœ€é•·75列,這將被複制到永久變更日誌來æ述這個補ä¸ã€‚
- 一個空行
- - 上é¢æ述的「Signed-off-by〠行,也將出ç¾åœ¨æ›´æ”¹æ—¥èªŒä¸­ã€‚
+ - 上述的 ``Signed-off-by:`` 行,也將出ç¾åœ¨æ›´æ”¹æ—¥èªŒä¸­ã€‚
- åªåŒ…å« ``---`` 的標記線。
- - 任何其他ä¸é©åˆæ”¾åœ¨è®Šæ›´æ—¥èªŒçš„注釋。
+ - 任何其他ä¸é©åˆæ”¾åœ¨è®Šæ›´æ—¥èªŒçš„註釋。
- 實際補ä¸ï¼ˆ ``diff`` 輸出)。
-標題行的格å¼ï¼Œä½¿å¾—å°æ¨™é¡Œè¡ŒæŒ‰å­—æ¯åºæŽ’åºéžå¸¸çš„容易 - 很多 e-mail 客戶端都
-å¯ä»¥æ”¯æŒ - 因爲åºåˆ—號是用零填充的,所以按數字排åºå’ŒæŒ‰å­—æ¯æŽ’åºæ˜¯ä¸€æ¨£çš„。
+標題行的格å¼ï¼Œä½¿å¾—å°æ¨™é¡Œè¡ŒæŒ‰å­—æ¯åºæŽ’åºéžå¸¸çš„容易——很多郵件客戶端都
+å¯ä»¥æ”¯æŒâ€”—因爲åºåˆ—號是用零填充的,所以按數字排åºå’ŒæŒ‰å­—æ¯æŽ’åºæ˜¯ä¸€æ¨£çš„。
-e-mail 標題中的「å­ç³»çµ±ã€æ¨™è­˜å“ªå€‹å…§æ ¸å­ç³»çµ±å°‡è¢«æ‰“補ä¸ã€‚
+郵件標題中的“å­ç³»çµ±â€æ¨™è­˜å“ªå€‹å…§æ ¸å­ç³»çµ±å°‡è¢«æ‰“補ä¸ã€‚
-e-mail 標題中的「一å¥è©±æ¦‚è¿°ã€æ‰¼è¦çš„æè¿° e-mail 中的補ä¸ã€‚「一å¥è©±æ¦‚è¿°ã€
-ä¸æ‡‰è©²æ˜¯ä¸€å€‹æ–‡ä»¶å。å°æ–¼ä¸€å€‹è£œä¸ç³»åˆ—(「補ä¸ç³»åˆ—ã€æŒ‡ä¸€ç³»åˆ—的多個相關補
-ä¸ï¼‰ï¼Œä¸è¦å°æ¯å€‹è£œä¸éƒ½ä½¿ç”¨åŒæ¨£çš„「一å¥è©±æ¦‚è¿°ã€ã€‚
+郵件標題中的“一å¥è©±æ¦‚è¿°â€æ‰¼è¦çš„æ述郵件中的補ä¸ã€‚“一å¥è©±æ¦‚è¿°â€
+ä¸æ‡‰è©²æ˜¯ä¸€å€‹æ–‡ä»¶å。å°æ–¼ä¸€å€‹è£œä¸ç³»åˆ—(“補ä¸ç³»åˆ—â€æŒ‡ä¸€ç³»åˆ—的多個相關補
+ä¸ï¼‰ï¼Œä¸è¦å°æ¯å€‹è£œä¸éƒ½ä½¿ç”¨åŒæ¨£çš„“一å¥è©±æ¦‚è¿°â€ã€‚
-è¨˜ä½ e-mail 的「一å¥è©±æ¦‚è¿°ã€æœƒæˆçˆ²è©²è£œä¸çš„全局唯一標識。它會蔓延到 git
-的改動記錄里。然後「一å¥è©±æ¦‚è¿°ã€æœƒè¢«ç”¨åœ¨é–‹ç™¼è€…的討論里,用來指代這個補
-ä¸ã€‚ç”¨æˆ¶å°‡å¸Œæœ›é€šéŽ google 來æœç´¢"一å¥è©±æ¦‚è¿°"來找到那些討論這個補ä¸çš„æ–‡
+記ä½éƒµä»¶çš„“一å¥è©±æ¦‚è¿°â€æœƒæˆçˆ²è©²è£œä¸çš„全局唯一標識。它會進入 ``git``
+的改動記錄è£ã€‚然後“一å¥è©±æ¦‚è¿°â€æœƒè¢«ç”¨åœ¨é–‹ç™¼è€…的討論è£ï¼Œç”¨ä¾†æŒ‡ä»£é€™å€‹è£œ
+ä¸ã€‚用戶將希望通éŽæœç´¢å¼•æ“Žæœç´¢â€œä¸€å¥è©±æ¦‚è¿°â€ä¾†æ‰¾åˆ°é‚£äº›è¨Žè«–這個補ä¸çš„æ–‡
章。當人們在兩三個月後使用諸如 ``gitk`` 或 ``git log --oneline`` 之類
的工具查看數åƒå€‹è£œä¸æ™‚,也會很快看到它。
出於這些原因,概述必須ä¸è¶…éŽ70-75個字符,並且必須æ述補ä¸çš„更改以åŠçˆ²
-什麼需è¦è£œä¸ã€‚æ—¢è¦ç°¡æ½”åˆè¦æ述性很有挑戰性,但寫得好的概述應該這樣åšã€‚
+什麼需è¦è£œä¸ã€‚æ—¢è¦ç°¡æ½”åˆè¦æ述性很有挑戰性,但寫得好的概述應該這樣。
-概述的å‰ç¶´å¯ä»¥ç”¨æ–¹æ‹¬è™Ÿæ‹¬èµ·ä¾†ï¼šã€ŒSubject: [PATCH <tag>...] <概述>ã€ã€‚標記
+概述的å‰ç¶´å¯ä»¥ç”¨æ–¹æ‹¬è™Ÿæ‹¬èµ·ä¾†ï¼šâ€œSubject: [PATCH <tag>...] <概述>â€ã€‚標記
ä¸è¢«è¦–爲概述的一部分,而是æ述應該如何處ç†è£œä¸ã€‚如果補ä¸çš„多個版本已發
-é€å‡ºä¾†ä»¥éŸ¿æ‡‰è©•å¯©ï¼ˆå³ã€Œv1,v2,v3ã€ï¼‰æˆ–「rfcã€ï¼Œä»¥æŒ‡ç¤ºè©•å¯©è«‹æ±‚,那麼通用標記
-å¯èƒ½åŒ…括版本æ述符。如果一個補ä¸ç³»åˆ—中有四個補ä¸ï¼Œé‚£éº¼å„個補ä¸å¯ä»¥é€™æ¨£
-編號:1/4ã€2/4ã€3/4ã€4/4。這å¯ä»¥ç¢ºä¿é–‹ç™¼äººå“¡äº†è§£è£œä¸æ‡‰ç”¨çš„é †åºï¼Œä¸¦ä¸”他們
+é€å‡ºä¾†ä»¥éŸ¿æ‡‰è©•å¯©ï¼ˆå³â€œv1,v2,v3â€ï¼‰å‰‡å¿…須包å«ç‰ˆæœ¬è™Ÿï¼Œæˆ–包å«â€œRFCâ€ä»¥æŒ‡ç¤º
+評審請求。如果一個補ä¸ç³»åˆ—中有四個補ä¸ï¼Œé‚£éº¼å„個補ä¸å¯ä»¥é€™æ¨£ç·¨è™Ÿï¼š1/4ã€2/4ã€
+3/4ã€4/4。這å¯ä»¥ç¢ºä¿é–‹ç™¼äººå“¡çž­è§£è£œä¸æ‡‰ç”¨çš„é †åºï¼Œä¸”
已經查看或應用了補ä¸ç³»åˆ—中的所有補ä¸ã€‚
一些標題的例å­::
@@ -543,95 +504,134 @@ e-mail 標題中的「一å¥è©±æ¦‚è¿°ã€æ‰¼è¦çš„æè¿° e-mail 中的補ä¸ã€‚ã€
Subject: [patch 2/5] ext2: improve scalability of bitmap searching
Subject: [PATCHv2 001/207] x86: fix eflags tracking
-"From" 行是信體裡的最上é¢ä¸€è¡Œï¼Œå…·æœ‰å¦‚下格å¼ï¼š
+``From`` 行是信體è£çš„最上é¢ä¸€è¡Œï¼Œå…·æœ‰å¦‚下格å¼::
+
From: Patch Author <author@example.com>
-"From" 行指明在永久改動日誌里,誰會被確èªçˆ²ä½œè€…。如果沒有 "From" 行,那
-麼郵件頭裡的 "From: " 行會被用來決定改動日誌中的作者。
+``From`` 行指明在永久改動日誌è£ï¼Œèª°æœƒè¢«ç¢ºèªçˆ²ä½œè€…。如果沒有 ``From`` 行,那
+麼郵件頭è£çš„ ``From:`` 行會被用來決定改動日誌中的作者。
-說明的主題將會被æ交到永久的原始碼改動日誌里,因此å°é‚£äº›æ—©å·²ç¶“ä¸è¨˜å¾—å’Œ
-這個補ä¸ç›¸é—œçš„討論細節的有能力的讀者來說,是有æ„義的。包括補ä¸ç¨‹åºå®šä½
-錯誤的(內核日誌消æ¯ã€OOPS消æ¯ç­‰ï¼‰ç—‡ç‹€ï¼Œå°æ–¼æœç´¢æ交日誌以尋找é©ç”¨è£œä¸çš„人
-尤其有用。如果一個補ä¸ä¿®å¾©äº†ä¸€å€‹ç·¨è­¯å¤±æ•—,那麼å¯èƒ½ä¸éœ€è¦åŒ…å«æ‰€æœ‰ç·¨è­¯å¤±æ•—ï¼›
+說明文字將會被æ交到永久的æºä»£ç¢¼æ”¹å‹•æ—¥èªŒè£ï¼Œå› æ­¤æ‡‰é‡å°é‚£äº›æ—©å·²ç¶“ä¸è¨˜å¾—和這
+個補ä¸ç›¸é—œçš„討論細節的讀者。包括補ä¸è™•ç†çš„故障症狀(內核日誌消æ¯ã€oops消æ¯
+等),這å°æ–¼å¯èƒ½æ­£åœ¨æœç´¢æ交日誌以查找é©ç”¨è£œä¸çš„人特別有用。文本應該寫得如
+此詳細,以便在數週ã€æ•¸æœˆç”šè‡³æ•¸å¹´å¾Œé–±è®€æ™‚,能夠爲讀者æ供所需的細節信æ¯ï¼Œä»¥
+掌æ¡å‰µå»ºè£œä¸çš„ **原因** 。
+
+如果一個補ä¸ä¿®å¾©äº†ä¸€å€‹ç·¨è­¯å¤±æ•—,那麼å¯èƒ½ä¸éœ€è¦åŒ…å« *所有* 編譯失敗;
åªè¦è¶³å¤ è®“æœç´¢è£œä¸çš„人能夠找到它就行了。與概述一樣,既è¦ç°¡æ½”åˆè¦æ述性。
-"---" 標記行å°æ–¼è£œä¸è™•ç†å·¥å…·è¦æ‰¾åˆ°å“ªè£¡æ˜¯æ”¹å‹•æ—¥èªŒä¿¡æ¯çš„çµæŸï¼Œæ˜¯ä¸å¯ç¼ºå°‘
+``---`` 標記行å°æ–¼è£œä¸è™•ç†å·¥å…·è¦æ‰¾åˆ°å“ªè£æ˜¯æ”¹å‹•æ—¥èªŒä¿¡æ¯çš„çµæŸï¼Œæ˜¯ä¸å¯ç¼ºå°‘
的。
-å°æ–¼ "---" 標記之後的é¡å¤–註解,一個好的用途就是用來寫 diffstat,用來顯
-示修改了什麼文件和æ¯å€‹æ–‡ä»¶éƒ½å¢žåŠ å’Œåˆªé™¤äº†å¤šå°‘行。diffstat å°æ–¼æ¯”較大的補
-ä¸ç‰¹åˆ¥æœ‰ç”¨ã€‚其餘那些åªæ˜¯å’Œæ™‚刻或者開發者相關的註解,ä¸åˆé©æ”¾åˆ°æ°¸ä¹…的改
-動日誌里的,也應該放這裡。
-使用 diffstatçš„é¸é … "-p 1 -w 70" 這樣文件å就會從內核原始碼樹的目錄開始
-,ä¸æœƒå ç”¨å¤ªå¯¬çš„空間(很容易é©åˆ80列的寬度,也許會有一些縮進。)
+å°æ–¼ ``---`` 標記之後的é¡å¤–註解,一個好的用途就是用來寫 ``diffstat`` ,用來顯
+示修改了什麼文件和æ¯å€‹æ–‡ä»¶éƒ½å¢žåŠ å’Œåˆªé™¤äº†å¤šå°‘行。 ``diffstat`` å°æ–¼æ¯”較大的補
+ä¸ç‰¹åˆ¥æœ‰ç”¨ã€‚
+使用 ``diffstat`` çš„é¸é … ``-p 1 -w 70`` 這樣文件å就會從內核æºä»£ç¢¼æ¨¹çš„目錄開始
+,ä¸æœƒä½”用太寬的空間(很容易é©åˆ80列的寬度,也許會有一些縮進。)
+( ``git`` 默èªæœƒç”Ÿæˆåˆé©çš„diffstat。)
-在後é¢çš„åƒè€ƒè³‡æ–™ä¸­èƒ½çœ‹åˆ°é©ç•¶çš„補ä¸æ ¼å¼çš„更多細節。
+其餘那些åªé©ç”¨æ–¼ç•¶æ™‚或者與維護者相關的註解,ä¸åˆé©æ”¾åˆ°æ°¸ä¹…的改動日誌è£çš„,也
+應該放這è£ã€‚較好的例å­å°±æ˜¯ ``補ä¸æ›´æ”¹è¨˜éŒ„`` ,記錄了v1å’Œv2版本補ä¸ä¹‹é–“的差異。
-.. _tw_explicit_in_reply_to:
+請將此信æ¯æ”¾åœ¨å°‡è®Šæ›´æ—¥èªŒèˆ‡è£œä¸çš„其餘部分分隔開的 ``---`` è¡Œ **之後** 。版本
+ä¿¡æ¯ä¸æ˜¯æ交到git樹的變更日誌的一部分。åªæ˜¯ä¾›å¯©é–±äººå“¡ä½¿ç”¨çš„附加信æ¯ã€‚如果將
+其放置在æ交標記上方,則需è¦æ‰‹å‹•äº¤äº’æ‰èƒ½å°‡å…¶åˆªé™¤ã€‚如果它ä½æ–¼åˆ†éš”線以下,則在
+應用補ä¸æ™‚會自動å‰é›¢::
-15) 明確回覆郵件頭(In-Reply-To)
--------------------------------
+ <commit message>
+ ...
+ Signed-off-by: Author <author@mail>
+ ---
+ V2 -> V3: Removed redundant helper function
+ V1 -> V2: Cleaned up coding style and addressed review comments
-手動添加回復補ä¸çš„的標題頭(In-Reply_To:) 是有幫助的(例如,使用 ``git send-email`` )
-將補ä¸èˆ‡ä»¥å‰çš„相關討論關è¯èµ·ä¾†ï¼Œä¾‹å¦‚,將bug修復程åºé€£çµåˆ°é›»å­éƒµä»¶å’Œbug報告。
-但是,å°æ–¼å¤šè£œä¸ç³»åˆ—,最好é¿å…在回復時使用連çµåˆ°è©²ç³»åˆ—的舊版本。這樣,
-補ä¸çš„多個版本就ä¸æœƒæˆçˆ²é›»å­éƒµä»¶å®¢æˆ¶ç«¯ä¸­ç„¡æ³•ç®¡ç†çš„引用åºåˆ—。如果連çµæœ‰ç”¨ï¼Œ
-å¯ä»¥ä½¿ç”¨ https://lore.kernel.org/ é‡å®šå‘器(例如,在å°é¢é›»å­éƒµä»¶æ–‡æœ¬ä¸­ï¼‰
-連çµåˆ°è£œä¸ç³»åˆ—的早期版本。
+ path/to/file | 5+++--
+ ...
+
+在後é¢çš„åƒè€ƒè³‡æ–™ä¸­èƒ½çœ‹åˆ°æ­£ç¢ºè£œä¸æ ¼å¼çš„更多細節。
-16) 發é€git pull請求
---------------------
+.. _tw_backtraces:
-如果您有一系列補ä¸ï¼Œé‚£éº¼è®“維護人員通éŽgit pullæ“作將它們直接拉入å­ç³»çµ±å­˜å„²
-庫å¯èƒ½æ˜¯æœ€æ–¹ä¾¿çš„。但是,請注æ„,從開發人員那裡ç²å–補ä¸æ¯”從郵件列表中ç²å–補
-ä¸éœ€è¦æ›´é«˜çš„信任度。因此,許多å­ç³»çµ±ç¶­è­·äººå“¡ä¸é¡˜æ„接å—請求,特別是來自新的
-未知開發人員的請求。如果有疑å•ï¼Œæ‚¨å¯ä»¥åœ¨å°é¢éƒµä»¶ä¸­ä½¿ç”¨pull 請求作爲補ä¸ç³»åˆ—
-正常發布的一個é¸é …,讓維護人員å¯ä»¥é¸æ“‡ä½¿ç”¨å…¶ä¸­ä¹‹ä¸€ã€‚
+æ交消æ¯ä¸­çš„回溯(Backtraces)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+回溯有助於記錄導致å•é¡Œçš„調用éˆã€‚然而,並éžæ‰€æœ‰å›žæº¯éƒ½æœ‰å¹«åŠ©ã€‚例如,早期引導調
+用éˆæ˜¯ç¨ç‰¹è€Œæ˜Žé¡¯çš„。而é€å­—複製完整的dmesg輸出則會增加時間戳ã€æ¨¡å¡Šåˆ—表ã€å¯„å­˜
+器和堆棧轉儲等分散注æ„力的信æ¯ã€‚
+
+因此,最有用的回溯應該從轉儲中æå–相關信æ¯ï¼Œä»¥æ›´å®¹æ˜“集中在真實å•é¡Œä¸Šã€‚下é¢æ˜¯
+一個剪è£è‰¯å¥½çš„回溯示例::
+
+ unchecked MSR access error: WRMSR to 0xd51 (tried to write 0x0000000000000064)
+ at rIP: 0xffffffffae059994 (native_write_msr+0x4/0x20)
+ Call Trace:
+ mba_wrmsr
+ update_domains
+ rdtgroup_mkdir
+
+.. _tw_explicit_in_reply_to:
+
+明確回覆郵件頭(In-Reply-To)
+-----------------------------
+
+手動添加回復補ä¸çš„的郵件頭(In-Reply_To:)是有用的(例如,使用 ``git send-email`` ),
+å¯ä»¥å°‡è£œä¸èˆ‡ä»¥å‰çš„相關討論關è¯èµ·ä¾†ï¼Œä¾‹å¦‚,將bug補ä¸éˆæŽ¥åˆ°é›»å­éƒµä»¶å’Œbug報告。
+但是,å°æ–¼å¤šè£œä¸ç³»åˆ—,最好é¿å…在回覆時使用éˆæŽ¥åˆ°è©²ç³»åˆ—的舊版本。這樣,
+補ä¸çš„多個版本就ä¸æœƒæˆçˆ²é›»å­éƒµä»¶å®¢æˆ¶ç«¯ä¸­ç„¡æ³•ç®¡ç†çš„引用樹。如果éˆæŽ¥æœ‰ç”¨ï¼Œ
+å¯ä»¥ä½¿ç”¨ https://lore.kernel.org/ é‡å®šå‘器(例如,在å°é¢é›»å­éƒµä»¶æ–‡æœ¬ä¸­ï¼‰
+éˆæŽ¥åˆ°è£œä¸ç³»åˆ—的早期版本。
-pull 請求的主題行中應該有[Git Pull]。請求本身應該在一行中包å«å­˜å„²åº«å稱和
-感興趣的分支;它應該看起來åƒ::
+給出基礎樹信æ¯
+--------------
- Please pull from
+當其他開發人員收到您的補ä¸ä¸¦é–‹å§‹å¯©é–±æ™‚,知é“應該將您的工作放到代碼樹歷å²è¨˜éŒ„
+中的什麼ä½ç½®é€šå¸¸å¾ˆæœ‰ç”¨ã€‚這å°æ–¼è‡ªå‹•åŒ–æŒçºŒé›†æˆæµæ°´ï¼ˆCI)特別有用,這些æµæ°´ç·šè©¦
+圖é‹è¡Œä¸€ç³»åˆ—測試,以便在維護人員開始審閱之å‰ç¢ºå®šæ交的質é‡ã€‚
- git://jdelvare.pck.nerim.net/jdelvare-2.6 i2c-for-linus
+如果您使用 ``git format-patch`` 生æˆè£œä¸ï¼Œå‰‡å¯ä»¥é€šéŽ ``--base`` 標誌在æ交中
+自動包å«åŸºç¤Žæ¨¹ä¿¡æ¯ã€‚使用此é¸é …最簡單ã€æœ€æ–¹ä¾¿çš„方法是é…åˆä¸»é¡Œåˆ†æ”¯::
- to get these changes:
+ $ git checkout -t -b my-topical-branch master
+ Branch 'my-topical-branch' set up to track local branch 'master'.
+ Switched to a new branch 'my-topical-branch'
+ [perform your edits and commits]
-pull 請求還應該包å«ä¸€æ¢æ•´é«”消æ¯ï¼Œèªªæ˜Žè«‹æ±‚中將包å«ä»€éº¼ï¼Œä¸€å€‹è£œä¸æœ¬èº«çš„ ``Git shortlog``
-以åŠä¸€å€‹é¡¯ç¤ºè£œä¸ç³»åˆ—整體效果的 ``diffstat`` 。當然,將所有這些信æ¯æ”¶é›†åœ¨ä¸€èµ·
-的最簡單方法是讓 ``git`` 使用 ``git request-pull`` 命令爲您完æˆé€™äº›å·¥ä½œã€‚
+ $ git format-patch --base=auto --cover-letter -o outgoing/ master
+ outgoing/0000-cover-letter.patch
+ outgoing/0001-First-Commit.patch
+ outgoing/...
-一些維護人員(包括Linus)希望看到來自已簽åæ交的請求;這增加了他們å°ä½ çš„
-請求信心。特別是,在沒有簽å標籤的情æ³ä¸‹ï¼ŒLinus ä¸æœƒå¾žåƒ Github 這樣的公共
-託管站點拉請求。
+當你編輯 ``outgoing/0000-cover-letter.patch`` 時,您會注æ„到在它的最底部有一
+è¡Œ ``base-commit:`` 尾註,它爲審閱者和CI工具æ供了足夠的信æ¯ä»¥æ­£ç¢ºåŸ·è¡Œ
+``git am`` 而ä¸å¿…擔心è¡çª::
-創建此類簽å的第一步是生æˆä¸€å€‹ GNRPG 密鑰,並由一個或多個核心內核開發人員å°
-其進行簽å。這一步å°æ–°é–‹ç™¼äººå“¡ä¾†èªªå¯èƒ½å¾ˆå›°é›£ï¼Œä½†æ²’有辦法繞éŽå®ƒã€‚åƒåŠ æœƒè­°æ˜¯
-找到å¯ä»¥ç°½ç½²æ‚¨çš„密鑰的開發人員的好方法。
+ $ git checkout -b patch-review [base-commit-id]
+ Switched to a new branch 'patch-review'
+ $ git am patches.mbox
+ Applying: First Commit
+ Applying: ...
-一旦您在Git 中準備了一個您希望有人拉的補ä¸ç³»åˆ—,就用 ``git tag -s`` 創建一
-個簽å標記。這將創建一個新標記,標識該系列中的最後一次æ交,並包å«ç”¨æ‚¨çš„ç§
-鑰創建的簽å。您還å¯ä»¥å°‡changelog樣å¼çš„消æ¯æ·»åŠ åˆ°æ¨™è¨˜ä¸­ï¼›é€™æ˜¯ä¸€å€‹æ述拉請求
-整體效果的ç†æƒ³ä½ç½®ã€‚
+有關此é¸é …的更多信æ¯ï¼Œè«‹åƒé–± ``man git-format-patch`` 。
-如果維護人員將è¦å¾žä¸­æå–的樹ä¸æ˜¯æ‚¨æ­£åœ¨ä½¿ç”¨çš„存儲庫,請ä¸è¦å¿˜è¨˜å°‡å·²ç°½å的標記
-顯å¼æŽ¨é€åˆ°å…¬å…±æ¨¹ã€‚
+.. note::
-生æˆæ‹‰è«‹æ±‚時,請使用已簽å的標記作爲目標。這樣的命令å¯ä»¥å¯¦ç¾::
+ ``--base`` 功能是在2.9.0版git中引入的。
- git request-pull master git://my.public.tree/linux.git my-signed-tag
+如果您ä¸ä½¿ç”¨gitæ ¼å¼åŒ–補ä¸ï¼Œä»ç„¶å¯ä»¥åŒ…å«ç›¸åŒçš„ ``base-commit`` 尾註,以指示您
+的工作所基於的樹的æ交哈希。你應該在å°é¢éƒµä»¶æˆ–系列的第一個補ä¸ä¸­æ·»åŠ å®ƒï¼Œå®ƒæ‡‰
+該放在 ``---`` 行的下é¢æˆ–所有其他內容之後,å³åªåœ¨ä½ çš„é›»å­éƒµä»¶ç°½å之å‰ã€‚
åƒè€ƒæ–‡ç»
--------
-Andrew Morton, "The perfect patch" (tpp).
+Andrew Morton,“完美的補ä¸â€ï¼ˆtpp)
<https://www.ozlabs.org/~akpm/stuff/tpp.txt>
-Jeff Garzik, "Linux kernel patch submission format".
+Jeff Garzik,“Linux內核補ä¸æ交格å¼â€
<https://web.archive.org/web/20180829112450/http://linux.yyz.us/patch-format.html>
-Greg Kroah-Hartman, "How to piss off a kernel subsystem maintainer".
+Greg Kroah-Hartman,“如何惹惱內核å­ç³»çµ±ç¶­è­·äººå“¡â€
<http://www.kroah.com/log/linux/maintainer.html>
<http://www.kroah.com/log/linux/maintainer-02.html>
@@ -644,17 +644,16 @@ Greg Kroah-Hartman, "How to piss off a kernel subsystem maintainer".
<http://www.kroah.com/log/linux/maintainer-06.html>
-NO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people!
+ä¸ï¼ï¼ï¼åˆ¥å†ç™¼å·¨åž‹è£œä¸ç‚¸å½ˆçµ¦linux-kernel@vger.kernel.org的人們了ï¼
<https://lore.kernel.org/r/20050711.125305.08322243.davem@davemloft.net>
-Kernel Documentation/process/coding-style.rst:
- :ref:`Documentation/translations/zh_TW/process/coding-style.rst <tw_codingstyle>`
+內核 Documentation/translations/zh_CN/process/coding-style.rst
-Linus Torvalds's mail on the canonical patch format:
+Linus Torvalds關於標準補ä¸æ ¼å¼çš„郵件
<https://lore.kernel.org/r/Pine.LNX.4.58.0504071023190.28951@ppc970.osdl.org>
-Andi Kleen, "On submitting kernel patches"
- Some strategies to get difficult or controversial changes in.
+Andi Kleen,“æ交補ä¸ä¹‹è·¯â€
+ 一些幫助åˆå…¥å›°é›£æˆ–有爭議的變更的策略。
http://halobates.de/on-submitting-patches.pdf
diff --git a/Documentation/translations/zh_TW/process/volatile-considered-harmful.rst b/Documentation/translations/zh_TW/process/volatile-considered-harmful.rst
index 469cb5b3a07c..a609620affb0 100644
--- a/Documentation/translations/zh_TW/process/volatile-considered-harmful.rst
+++ b/Documentation/translations/zh_TW/process/volatile-considered-harmful.rst
@@ -19,20 +19,20 @@
時奎亮 Alex Shi <alex.shi@linux.alibaba.com>
胡皓文 Hu Haowen <src.res.211@gmail.com>
-爲什麼ä¸æ‡‰è©²ä½¿ç”¨ã€Œvolatileã€é¡žåž‹
-================================
+爲什麼ä¸æ‡‰è©²ä½¿ç”¨â€œvolatileâ€é¡žåž‹
+==============================
-C程å¼è¨­è¨ˆå¸«é€šå¸¸èªçˆ²volatile表示æŸå€‹è®Šé‡å¯ä»¥åœ¨ç•¶å‰åŸ·è¡Œçš„線程之外被改變;因此,在內核
-中用到共享數據çµæ§‹æ™‚,常常會有C程å¼è¨­è¨ˆå¸«å–œæ­¡ä½¿ç”¨volatile這類變é‡ã€‚æ›å¥è©±èªªï¼Œä»–們經
+C程åºå“¡é€šå¸¸èªçˆ²volatile表示æŸå€‹è®Šé‡å¯ä»¥åœ¨ç•¶å‰åŸ·è¡Œçš„線程之外被改變;因此,在內核
+中用到共享數據çµæ§‹æ™‚,常常會有C程åºå“¡å–œæ­¡ä½¿ç”¨volatile這類變é‡ã€‚æ›å¥è©±èªªï¼Œä»–們經
常會把volatile類型看æˆæŸç¨®ç°¡æ˜“的原å­è®Šé‡ï¼Œç•¶ç„¶å®ƒå€‘ä¸æ˜¯ã€‚在內核中使用volatileå¹¾
乎總是錯誤的;本文檔將解釋爲什麼這樣。
ç†è§£volatileçš„é—œéµæ˜¯çŸ¥é“它的目的是用來消除優化,實際上很少有人真正需è¦é€™æ¨£çš„應
-用。在內核中,程å¼è¨­è¨ˆå¸«å¿…須防止æ„外的並發訪å•ç ´å£žå…±äº«çš„數據çµæ§‹ï¼Œé€™å…¶å¯¦æ˜¯ä¸€å€‹å®Œå…¨
-ä¸åŒçš„任務。用來防止æ„外並發訪å•çš„ä¿è­·æŽªæ–½ï¼Œå¯ä»¥æ›´åŠ é«˜æ•ˆçš„é¿å…大多數優化相關的
+用。在內核中,程åºå“¡å¿…須防止æ„外的併發訪å•ç ´å£žå…±äº«çš„數據çµæ§‹ï¼Œé€™å…¶å¯¦æ˜¯ä¸€å€‹å®Œå…¨
+ä¸åŒçš„任務。用來防止æ„外併發訪å•çš„ä¿è­·æŽªæ–½ï¼Œå¯ä»¥æ›´åŠ é«˜æ•ˆçš„é¿å…大多數優化相關的
å•é¡Œã€‚
-åƒvolatile一樣,內核æ供了很多原語來ä¿è­‰ä¸¦ç™¼è¨ªå•æ™‚的數據安全(自旋鎖, 互斥é‡,å…§
+åƒvolatile一樣,內核æ供了很多原語來ä¿è­‰ä½µç™¼è¨ªå•æ™‚的數據安全(自旋鎖, 互斥é‡,å…§
å­˜å±éšœç­‰ç­‰ï¼‰ï¼ŒåŒæ¨£å¯ä»¥é˜²æ­¢æ„外的優化。如果å¯ä»¥æ­£ç¢ºä½¿ç”¨é€™äº›å…§æ ¸åŽŸèªžï¼Œé‚£éº¼å°±æ²’有
å¿…è¦å†ä½¿ç”¨volatile。如果ä»ç„¶å¿…須使用volatile,那麼幾乎å¯ä»¥è‚¯å®šåœ¨ä»£ç¢¼çš„æŸè™•æœ‰ä¸€
個bug。在正確設計的內核代碼中,volatile能帶來的僅僅是使事情變慢。
@@ -46,8 +46,8 @@ C程å¼è¨­è¨ˆå¸«é€šå¸¸èªçˆ²volatile表示æŸå€‹è®Šé‡å¯ä»¥åœ¨ç•¶å‰åŸ·è¡Œçš„ç·
如果所有的代碼都éµå¾ªåŠ éŽ–è¦å‰‡ï¼Œç•¶æŒæœ‰the_lock的時候,ä¸å¯èƒ½æ„外的改變shared_dataçš„
值。任何å¯èƒ½è¨ªå•è©²æ•¸æ“šçš„其他代碼都會在這個鎖上等待。自旋鎖原語跟內存å±éšœä¸€æ¨£â€”— 它
-們顯å¼çš„用來書寫æˆé€™æ¨£ —— æ„味著數據訪å•ä¸æœƒè·¨è¶Šå®ƒå€‘而被優化。所以本來編譯器èªçˆ²
-它知é“在shared_data裡é¢å°‡æœ‰ä»€éº¼ï¼Œä½†æ˜¯å› çˆ²spin_lock()調用跟內存å±éšœä¸€æ¨£ï¼Œæœƒå¼·åˆ¶ç·¨
+們顯å¼çš„用來書寫æˆé€™æ¨£ —— æ„味ç€æ•¸æ“šè¨ªå•ä¸æœƒè·¨è¶Šå®ƒå€‘而被優化。所以本來編譯器èªçˆ²
+它知é“在shared_dataè£é¢å°‡æœ‰ä»€éº¼ï¼Œä½†æ˜¯å› çˆ²spin_lock()調用跟內存å±éšœä¸€æ¨£ï¼Œæœƒå¼·åˆ¶ç·¨
譯器忘記它所知é“的一切。那麼在訪å•é€™äº›æ•¸æ“šæ™‚ä¸æœƒæœ‰å„ªåŒ–çš„å•é¡Œã€‚
如果shared_data被è²å爲volatile,鎖æ“作將ä»ç„¶æ˜¯å¿…須的。就算我們知é“沒有其他人正在
@@ -55,13 +55,13 @@ C程å¼è¨­è¨ˆå¸«é€šå¸¸èªçˆ²volatile表示æŸå€‹è®Šé‡å¯ä»¥åœ¨ç•¶å‰åŸ·è¡Œçš„ç·
shared_dataä¸æ˜¯volatile的。在處ç†å…±äº«æ•¸æ“šçš„時候,é©ç•¶çš„鎖æ“作å¯ä»¥ä¸å†éœ€è¦
volatile —— 並且是有潛在å±å®³çš„。
-volatile的存儲類型最åˆæ˜¯çˆ²é‚£äº›å…§å­˜æ˜ å°„çš„I/O寄存器而定義。在內核里,寄存器訪å•ä¹Ÿæ‡‰
-該被鎖ä¿è­·ï¼Œä½†æ˜¯äººå€‘也ä¸å¸Œæœ›ç·¨è­¯å™¨ã€Œå„ªåŒ–ã€è‡¨ç•Œå€å…§çš„寄存器訪å•ã€‚內核里I/O的內存訪å•
+volatile的存儲類型最åˆæ˜¯çˆ²é‚£äº›å…§å­˜æ˜ å°„çš„I/O寄存器而定義。在內核è£ï¼Œå¯„存器訪å•ä¹Ÿæ‡‰
+該被鎖ä¿è­·ï¼Œä½†æ˜¯äººå€‘也ä¸å¸Œæœ›ç·¨è­¯å™¨â€œå„ªåŒ–â€è‡¨ç•Œå€å…§çš„寄存器訪å•ã€‚內核è£I/O的內存訪å•
是通éŽè¨ªå•å‡½æ•¸å®Œæˆçš„ï¼›ä¸è´Šæˆé€šéŽæŒ‡é‡å°I/O內存的直接訪å•ï¼Œä¸¦ä¸”ä¸æ˜¯åœ¨æ‰€æœ‰é«”系架構上
都能工作。那些訪å•å‡½æ•¸æ­£æ˜¯çˆ²äº†é˜²æ­¢æ„外優化而寫的,因此,å†èªªä¸€æ¬¡ï¼Œvolatileé¡žåž‹ä¸
是必需的。
-å¦ä¸€ç¨®å¼•èµ·ç”¨æˆ¶å¯èƒ½ä½¿ç”¨volatile的情æ³æ˜¯ç•¶è™•ç†å™¨æ­£å¿™è‘—等待一個變é‡çš„值。正確執行一
+å¦ä¸€ç¨®å¼•èµ·ç”¨æˆ¶å¯èƒ½ä½¿ç”¨volatile的情æ³æ˜¯ç•¶è™•ç†å™¨æ­£å¿™ç€ç­‰å¾…一個變é‡çš„值。正確執行一
個忙等待的方法是::
while (my_variable != what_i_want)
@@ -74,14 +74,14 @@ cpu_relax()調用會é™ä½ŽCPU的能é‡æ¶ˆè€—或者讓ä½æ–¼è¶…線程雙處ç†å™¨
- 在一些體系架構的系統上,å…許直接的I/0內存訪å•ï¼Œé‚£éº¼å‰é¢æ到的訪å•å‡½æ•¸å¯ä»¥ä½¿ç”¨
volatile。基本上,æ¯ä¸€å€‹è¨ªå•å‡½æ•¸èª¿ç”¨å®ƒè‡ªå·±éƒ½æ˜¯ä¸€å€‹å°çš„臨界å€åŸŸä¸¦ä¸”ä¿è­‰äº†æŒ‰ç…§
- 程å¼è¨­è¨ˆå¸«æœŸæœ›çš„那樣發生訪å•æ“作。
+ 程åºå“¡æœŸæœ›çš„那樣發生訪å•æ“作。
- æŸäº›æœƒæ”¹è®Šå…§å­˜çš„å…§è¯å½™ç·¨ä»£ç¢¼é›–然沒有什麼其他明顯的附作用,但是有被GCC刪除的å¯
能性。在彙編è²æ˜Žä¸­åŠ ä¸Švolatileé—œéµå­—å¯ä»¥é˜²æ­¢é€™ç¨®åˆªé™¤æ“作。
- Jiffies變é‡æ˜¯ä¸€ç¨®ç‰¹æ®Šæƒ…æ³ï¼Œé›–然æ¯æ¬¡å¼•ç”¨å®ƒçš„時候都å¯ä»¥æœ‰ä¸åŒçš„值,但讀jiffies
變é‡æ™‚ä¸éœ€è¦ä»»ä½•ç‰¹æ®Šçš„加鎖ä¿è­·ã€‚所以jiffies變é‡å¯ä»¥ä½¿ç”¨volatile,但是ä¸è´Šæˆ
- 其他跟jiffies相åŒé¡žåž‹è®Šé‡ä½¿ç”¨volatile。Jiffies被èªçˆ²æ˜¯ä¸€ç¨®ã€Œæ„šè ¢çš„éºç•™ç‰©"
+ 其他跟jiffies相åŒé¡žåž‹è®Šé‡ä½¿ç”¨volatile。Jiffies被èªçˆ²æ˜¯ä¸€ç¨®â€œæ„šè ¢çš„éºç•™ç‰©"
(Linus的話)因爲解決這個å•é¡Œæ¯”ä¿æŒç¾ç‹€è¦éº»ç…©çš„多。
- 由於æŸäº›I/0設備å¯èƒ½æœƒä¿®æ”¹é€£çºŒä¸€è‡´çš„內存,所以有時,指å‘連續一致內存的數據çµæ§‹
@@ -92,9 +92,9 @@ cpu_relax()調用會é™ä½ŽCPU的能é‡æ¶ˆè€—或者讓ä½æ–¼è¶…線程雙處ç†å™¨
bug並且需è¦å°é€™æ¨£çš„代碼é¡å¤–仔細檢查。那些試圖使用volatile的開發人員需è¦é€€ä¸€æ­¥æƒ³æƒ³
他們真正想實ç¾çš„是什麼。
-éžå¸¸æ­¡è¿Žåˆªé™¤volatile變é‡çš„è£œä¸ ï¼ åªè¦è­‰æ˜Žé€™äº›è£œä¸å®Œæ•´çš„考慮了並發å•é¡Œã€‚
+éžå¸¸æ­¡è¿Žåˆªé™¤volatile變é‡çš„è£œä¸ ï¼ åªè¦è­‰æ˜Žé€™äº›è£œä¸å®Œæ•´çš„考慮了併發å•é¡Œã€‚
-注釋
+註釋
----
[1] https://lwn.net/Articles/233481/
diff --git a/Documentation/usb/gadget_uvc.rst b/Documentation/usb/gadget_uvc.rst
index 80a1f031b593..bf78fba3ce23 100644
--- a/Documentation/usb/gadget_uvc.rst
+++ b/Documentation/usb/gadget_uvc.rst
@@ -126,7 +126,7 @@ might do:
create_frame 1920 1080 uncompressed yuyv
The only uncompressed format currently supported is YUYV, which is detailed at
-Documentation/userspace-api/media/v4l/pixfmt-packed.yuv.rst.
+Documentation/userspace-api/media/v4l/pixfmt-packed-yuv.rst.
Color Matching Descriptors
~~~~~~~~~~~~~~~~~~~~~~~~~~