diff options
Diffstat (limited to 'Documentation')
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 ~~~~~~~~~~~~~~~~~~~~~~~~~~ |