Lưu ý
Mục đích của file này là để độc giả tiếng Việt có thể đọc và hiểu tài liệu nhân kernel dễ dàng hơn, không phải để tạo ra một nhánh tài liệu riêng. Nếu bạn có bất kỳ nhận xét hoặc cập nhật nào cho file này, vui lòng thử cập nhật file tiếng Anh gốc trước. Nếu bạn thấy có sự khác biệt giữa bản dịch và bản gốc, hoặc có vấn đề về bản dịch, vui lòng gửi góp ý hoặc patch cho người dịch của file này, hoặc nhờ người bảo trì và người review tài liệu tiếng Việt giúp đỡ.
- Bản gốc:
- Người dịch:
Google Translate (machine translation)
- Phiên bản gốc:
8541d8f725c6
Cảnh báo
Tài liệu này được dịch tự động bằng máy và chưa được review bởi người dịch. Nội dung có thể không chính xác hoặc khó hiểu ở một số chỗ. Khi có sự khác biệt với bản gốc, bản gốc luôn là chuẩn. Bản dịch chất lượng cao (được review) được đặt trong thư mục vi_VN/.
ARM64 ELF hwcaps¶
Tài liệu này mô tả cách sử dụng và ngữ nghĩa của hwcaps arm64 ELF.
1. Giới thiệu¶
Một số tính năng phần cứng hoặc phần mềm chỉ có trên một số CPU triển khai và/hoặc với các cấu hình kernel nhất định, nhưng không có cơ chế khám phá được kiến trúc sẵn có cho mã không gian người dùng tại EL0. các kernel hiển thị sự hiện diện của các tính năng này cho không gian người dùng thông qua một tập hợp của các cờ được gọi là hwcaps, hiển thị trong vectơ phụ trợ.
Phần mềm không gian người dùng có thể kiểm tra các tính năng bằng cách mua AT_HWCAP, Mục nhập AT_HWCAP2 hoặc AT_HWCAP3 của vectơ phụ và thử nghiệm liệu các cờ liên quan có được đặt hay không, ví dụ:
- bool float_point_is_hiện tại (void)
- {
hwcaps dài không dấu = getauxval(AT_HWCAP); nếu (hwcaps & HWCAP_FP)
trả về đúng sự thật;
- trả về sai;
}
Khi phần mềm dựa vào một tính năng được mô tả bởi hwcap, phần mềm đó phải kiểm tra cờ hwcap có liên quan để xác minh rằng tính năng này có mặt trước đó đang cố gắng sử dụng tính năng này.
Các tính năng không thể được thăm dò một cách đáng tin cậy thông qua các phương tiện khác. Khi một tính năng không có sẵn, cố gắng sử dụng nó có thể dẫn đến kết quả không thể đoán trước hành vi và không được đảm bảo sẽ dẫn đến bất kỳ dấu hiệu đáng tin cậy nào rằng tính năng này không khả dụng, chẳng hạn như SIGILL.
2. Giải thích hwcaps¶
Phần lớn các hwcap nhằm mục đích chỉ ra sự hiện diện của các tính năng được mô tả bởi các thanh ghi ID được thiết kế không thể truy cập được mã không gian người dùng tại EL0. Những hwcap này được xác định theo thanh ghi ID các trường và nên được giải thích bằng cách tham chiếu đến định nghĩa của các trường này trong Sách hướng dẫn tham khảo kiến trúc ARM (ARM ARM).
Những hwcap như vậy được mô tả bên dưới dưới dạng:
Chức năng được ngụ ý bởi idreg.field == val.
Những hwcap như vậy cho biết tính khả dụng của chức năng mà ARM ARM định nghĩa là hiện diện khi idreg.field có giá trị val, nhưng không chỉ ra rằng idreg.field chính xác bằng val, chúng cũng không chỉ ra sự vắng mặt của chức năng ngụ ý bởi các giá trị khác của idreg.field.
Các hwcap khác có thể chỉ ra sự hiện diện của các tính năng không thể được mô tả chỉ bởi các thanh ghi ID. Những điều này có thể được mô tả mà không cần tham chiếu đến sổ đăng ký ID và có thể tham khảo các tài liệu khác.
3. Các hwcap được hiển thị trong AT_HWCAP¶
- HWCAP_FP
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.FP == 0b0000.
- HWCAP_ASIMD
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.AdvSIMD == 0b0000.
- HWCAP_EVTSTRM
Bộ hẹn giờ chung được cấu hình để tạo ra các sự kiện với tần suất khoảng 10KHz.
- HWCAP_AES
Chức năng được ngụ ý bởi ID_AA64ISAR0_EL1.AES == 0b0001.
- HWCAP_PMULL
Chức năng được ngụ ý bởi ID_AA64ISAR0_EL1.AES == 0b0010.
- HWCAP_SHA1
Chức năng được ngụ ý bởi ID_AA64ISAR0_EL1.SHA1 == 0b0001.
- HWCAP_SHA2
Chức năng được ngụ ý bởi ID_AA64ISAR0_EL1.SHA2 == 0b0001.
- HWCAP_CRC32
Chức năng được ngụ ý bởi ID_AA64ISAR0_EL1.CRC32 == 0b0001.
- HWCAP_ATOMICS
Chức năng được ngụ ý bởi ID_AA64ISAR0_EL1.Atomic == 0b0010.
- HWCAP_FPHP
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.FP == 0b0001.
- HWCAP_ASIMDHP
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.AdvSIMD == 0b0001.
- HWCAP_CPUID
Có sẵn quyền truy cập EL0 vào một số thanh ghi ID nhất định, trong phạm vi được mô tả bởi ARM64 CPU Feature Registers.
Các thanh ghi ID này có thể ngụ ý tính khả dụng của các tính năng.
- HWCAP_ASIMDRDM
Chức năng được ngụ ý bởi ID_AA64ISAR0_EL1.RDM == 0b0001.
- HWCAP_JSCVT
Chức năng được ngụ ý bởi ID_AA64ISAR1_EL1.JSCVT == 0b0001.
- HWCAP_FCMA
Chức năng được ngụ ý bởi ID_AA64ISAR1_EL1.FCMA == 0b0001.
- HWCAP_LRCPC
Chức năng được ngụ ý bởi ID_AA64ISAR1_EL1.LRCPC == 0b0001.
- HWCAP_DCPOP
Chức năng được ngụ ý bởi ID_AA64ISAR1_EL1.DPB == 0b0001.
- HWCAP_SHA3
Chức năng được ngụ ý bởi ID_AA64ISAR0_EL1.SHA3 == 0b0001.
- HWCAP_SM3
Chức năng được ngụ ý bởi ID_AA64ISAR0_EL1.SM3 == 0b0001.
- HWCAP_SM4
Chức năng được ngụ ý bởi ID_AA64ISAR0_EL1.SM4 == 0b0001.
- HWCAP_ASIMDDP
Chức năng được ngụ ý bởi ID_AA64ISAR0_EL1.DP == 0b0001.
- HWCAP_SHA512
Chức năng được ngụ ý bởi ID_AA64ISAR0_EL1.SHA2 == 0b0010.
- HWCAP_SVE
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.SVE == 0b0001.
- HWCAP_ASIMDFHM
Chức năng được ngụ ý bởi ID_AA64ISAR0_EL1.FHM == 0b0001.
- HWCAP_DIT
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.DIT == 0b0001.
- HWCAP_USCAT
Chức năng được ngụ ý bởi ID_AA64MMFR2_EL1.AT == 0b0001.
- HWCAP_ILRCPC
Chức năng được ngụ ý bởi ID_AA64ISAR1_EL1.LRCPC == 0b0010.
- HWCAP_FLAGM
Chức năng được ngụ ý bởi ID_AA64ISAR0_EL1.TS == 0b0001.
- HWCAP_SSBS
Chức năng được ngụ ý bởi ID_AA64PFR1_EL1.SSBS == 0b0010.
- HWCAP_SB
Chức năng được ngụ ý bởi ID_AA64ISAR1_EL1.SB == 0b0001.
- HWCAP_PACA
Chức năng được ngụ ý bởi ID_AA64ISAR1_EL1.APA == 0b0001 hoặc ID_AA64ISAR1_EL1.API == 0b0001, như được mô tả bởi Tài liệu/arch/arm64/pointer-authentication.rst.
- HWCAP_PACG
Chức năng được ngụ ý bởi ID_AA64ISAR1_EL1.GPA == 0b0001 hoặc ID_AA64ISAR1_EL1.GPI == 0b0001, như được mô tả bởi Tài liệu/arch/arm64/pointer-authentication.rst.
- HWCAP_GCS
Chức năng được ngụ ý bởi ID_AA64PFR1_EL1.GCS == 0b1, như được mô tả bởi Guarded Control Stack support for AArch64 Linux.
- HWCAP_CMPBR
Chức năng được ngụ ý bởi ID_AA64ISAR2_EL1.CSSC == 0b0010.
- HWCAP_FPRCVT
Chức năng được ngụ ý bởi ID_AA64ISAR3_EL1.FPRCVT == 0b0001.
- HWCAP_F8MM8
Chức năng được ngụ ý bởi ID_AA64FPFR0_EL1.F8MM8 == 0b0001.
- HWCAP_F8MM4
Chức năng được ngụ ý bởi ID_AA64FPFR0_EL1.F8MM4 == 0b0001.
- HWCAP_SVE_F16MM
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.SVE == 0b0001 và ID_AA64ZFR0_EL1.F16MM == 0b0001.
- HWCAP_SVE_ELTPERM
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.SVE == 0b0001 và ID_AA64ZFR0_EL1.ELTPERM == 0b0001.
- HWCAP_SVE_AES2
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.SVE == 0b0001 và ID_AA64ZFR0_EL1.AES == 0b0011.
- HWCAP_SVE_BFSCALE
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.SVE == 0b0001 và ID_AA64ZFR0_EL1.B16B16 == 0b0010.
- HWCAP_SVE2P2
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.SVE == 0b0001 và ID_AA64ZFR0_EL1.SVEver == 0b0011.
- HWCAP_SME2P2
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.SMever == 0b0011.
- HWCAP_SME_SBITPERM
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.SBitPerm == 0b1.
- HWCAP_SME_AES
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.AES == 0b1.
- HWCAP_SME_SFEXPA
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.SFEXPA == 0b1.
- HWCAP_SME_STMOP
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.STMOP == 0b1.
- HWCAP_SME_SMOP4
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.SMOP4 == 0b1.
- HWCAP2_DCPODP
Chức năng được ngụ ý bởi ID_AA64ISAR1_EL1.DPB == 0b0010.
- HWCAP2_SVE2
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.SVE == 0b0001 và ID_AA64ZFR0_EL1.SVEver == 0b0001.
- HWCAP2_SVEAES
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.SVE == 0b0001 và ID_AA64ZFR0_EL1.AES == 0b0001.
- HWCAP2_SVEPMULL
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.SVE == 0b0001 và ID_AA64ZFR0_EL1.AES == 0b0010.
- HWCAP2_SVEBITPERM
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.SVE == 0b0001 và ID_AA64ZFR0_EL1.BitPerm == 0b0001.
- HWCAP2_SVESHA3
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.SVE == 0b0001 và ID_AA64ZFR0_EL1.SHA3 == 0b0001.
- HWCAP2_SVESM4
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.SVE == 0b0001 và ID_AA64ZFR0_EL1.SM4 == 0b0001.
- HWCAP2_FLAGM2
Chức năng được ngụ ý bởi ID_AA64ISAR0_EL1.TS == 0b0010.
- HWCAP2_FRINT
Chức năng được ngụ ý bởi ID_AA64ISAR1_EL1.FRINTTS == 0b0001.
- HWCAP2_SVEI8MM
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.SVE == 0b0001 và ID_AA64ZFR0_EL1.I8MM == 0b0001.
- HWCAP2_SVEF32MM
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.SVE == 0b0001 và ID_AA64ZFR0_EL1.F32MM == 0b0001.
- HWCAP2_SVEF64MM
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.SVE == 0b0001 và ID_AA64ZFR0_EL1.F64MM == 0b0001.
- HWCAP2_SVEBF16
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.SVE == 0b0001 và ID_AA64ZFR0_EL1.BF16 == 0b0001.
- HWCAP2_I8MM
Chức năng được ngụ ý bởi ID_AA64ISAR1_EL1.I8MM == 0b0001.
- HWCAP2_BF16
Chức năng được ngụ ý bởi ID_AA64ISAR1_EL1.BF16 == 0b0001.
- HWCAP2_DGH
Chức năng được ngụ ý bởi ID_AA64ISAR1_EL1.DGH == 0b0001.
- HWCAP2_RNG
Chức năng được ngụ ý bởi ID_AA64ISAR0_EL1.RNDR == 0b0001.
- HWCAP2_BTI
Chức năng được ngụ ý bởi ID_AA64PFR1_EL1.BT == 0b0001.
- HWCAP2_MTE
Chức năng được ngụ ý bởi ID_AA64PFR1_EL1.MTE == 0b0010, như được mô tả bởi Memory Tagging Extension (MTE) in AArch64 Linux.
- HWCAP2_ECV
Chức năng được ngụ ý bởi ID_AA64MMFR0_EL1.ECV == 0b0001.
- HWCAP2_AFP
Chức năng được ngụ ý bởi ID_AA64MMFR1_EL1.AFP == 0b0001.
- HWCAP2_RPRES
Chức năng được ngụ ý bởi ID_AA64ISAR2_EL1.RPRES == 0b0001.
- HWCAP2_MTE3
Chức năng được ngụ ý bởi ID_AA64PFR1_EL1.MTE == 0b0011, như được mô tả bởi Memory Tagging Extension (MTE) in AArch64 Linux.
- HWCAP2_SME
Chức năng được ngụ ý bởi ID_AA64PFR1_EL1.SME == 0b0001, như được mô tả bởi Scalable Matrix Extension support for AArch64 Linux.
- HWCAP2_SME_I16I64
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.I16I64 == 0b1111.
- HWCAP2_SME_F64F64
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.F64F64 == 0b1.
- HWCAP2_SME_I8I32
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.I8I32 == 0b1111.
- HWCAP2_SME_F16F32
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.F16F32 == 0b1.
- HWCAP2_SME_B16F32
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.B16F32 == 0b1.
- HWCAP2_SME_F32F32
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.F32F32 == 0b1.
- HWCAP2_SME_FA64
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.FA64 == 0b1.
- HWCAP2_WFXT
Chức năng được ngụ ý bởi ID_AA64ISAR2_EL1.WFXT == 0b0010.
- HWCAP2_EBF16
Chức năng được ngụ ý bởi ID_AA64ISAR1_EL1.BF16 == 0b0010.
- HWCAP2_SVE_EBF16
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.SVE == 0b0001 và ID_AA64ZFR0_EL1.BF16 == 0b0010.
- HWCAP2_CSSC
Chức năng được ngụ ý bởi ID_AA64ISAR2_EL1.CSSC == 0b0001.
- HWCAP2_RPRFM
Chức năng được ngụ ý bởi ID_AA64ISAR2_EL1.RPRFM == 0b0001.
- HWCAP2_SVE2P1
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.SVE == 0b0001 và ID_AA64ZFR0_EL1.SVEver == 0b0010.
- HWCAP2_SME2
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.SMever == 0b0001.
- HWCAP2_SME2P1
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.SMever == 0b0010.
- HWCAP2_SMEI16I32
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.I16I32 == 0b0101
- HWCAP2_SMEBI32I32
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.BI32I32 == 0b1
- HWCAP2_SMEB16B16
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.B16B16 == 0b1
- HWCAP2_SMEF16F16
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.F16F16 == 0b1
- HWCAP2_MOPS
Chức năng được ngụ ý bởi ID_AA64ISAR2_EL1.MOPS == 0b0001.
- HWCAP2_HBC
Chức năng được ngụ ý bởi ID_AA64ISAR2_EL1.BC == 0b0001.
- HWCAP2_SVE_B16B16
Chức năng được ngụ ý bởi ID_AA64PFR0_EL1.SVE == 0b0001 và ID_AA64ZFR0_EL1.B16B16 == 0b0001.
- HWCAP2_LRCPC3
Chức năng được ngụ ý bởi ID_AA64ISAR1_EL1.LRCPC == 0b0011.
- HWCAP2_LSE128
Chức năng được ngụ ý bởi ID_AA64ISAR0_EL1.Atomic == 0b0011.
- HWCAP2_FPMR
Chức năng được ngụ ý bởi ID_AA64PFR2_EL1.FMR == 0b0001.
- HWCAP2_LUT
Chức năng được ngụ ý bởi ID_AA64ISAR2_EL1.LUT == 0b0001.
- HWCAP2_FAMINMAX
Chức năng được ngụ ý bởi ID_AA64ISAR3_EL1.FAMINMAX == 0b0001.
- HWCAP2_F8CVT
Chức năng được ngụ ý bởi ID_AA64FPFR0_EL1.F8CVT == 0b1.
- HWCAP2_F8FMA
Chức năng được ngụ ý bởi ID_AA64FPFR0_EL1.F8FMA == 0b1.
- HWCAP2_F8DP4
Chức năng được ngụ ý bởi ID_AA64FPFR0_EL1.F8DP4 == 0b1.
- HWCAP2_F8DP2
Chức năng được ngụ ý bởi ID_AA64FPFR0_EL1.F8DP2 == 0b1.
- HWCAP2_F8E4M3
Chức năng được ngụ ý bởi ID_AA64FPFR0_EL1.F8E4M3 == 0b1.
- HWCAP2_F8E5M2
Chức năng được ngụ ý bởi ID_AA64FPFR0_EL1.F8E5M2 == 0b1.
- HWCAP2_SME_LUTV2
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.LUTv2 == 0b1.
- HWCAP2_SME_F8F16
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.F8F16 == 0b1.
- HWCAP2_SME_F8F32
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.F8F32 == 0b1.
- HWCAP2_SME_SF8FMA
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.SF8FMA == 0b1.
- HWCAP2_SME_SF8DP4
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.SF8DP4 == 0b1.
- HWCAP2_SME_SF8DP2
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.SF8DP2 == 0b1.
- HWCAP2_SME_SF8DP4
Chức năng được ngụ ý bởi ID_AA64SMFR0_EL1.SF8DP4 == 0b1.
- HWCAP2_POE
Chức năng được ngụ ý bởi ID_AA64MMFR3_EL1.S1POE == 0b0001.
- HWCAP3_MTE_FAR
Chức năng được ngụ ý bởi ID_AA64PFR2_EL1.MTEFAR == 0b0001.
- HWCAP3_MTE_STORE_ONLY
Chức năng được ngụ ý bởi ID_AA64PFR2_EL1.MTESTOREONLY == 0b0001.
- HWCAP3_LSFE
Chức năng được ngụ ý bởi ID_AA64ISAR3_EL1.LSFE == 0b0001
- HWCAP3_LS64
Chức năng được ngụ ý bởi ID_AA64ISAR1_EL1.LS64 == 0b0001. Lưu ý rằng chức năng của lệnh ld64b/st64b yêu cầu sự hỗ trợ của CPU, hệ thống và vị trí bộ nhớ đích (thiết bị) và HWCAP3_LS64 ngụ ý sự hỗ trợ của CPU. Người dùng chỉ nên sử dụng ld64b/st64b trên mục tiêu (thiết bị) được hỗ trợ vị trí bộ nhớ, nếu không thì dự phòng cho các lựa chọn thay thế phi nguyên tử.
4. Các bit AT_HWCAP chưa sử dụng¶
Để tương tác với không gian người dùng, kernel đảm bảo rằng các bit 62 và 63 của AT_HWCAP sẽ luôn được trả về là 0.