Vietnamese (machine translation)

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:

Building Linux with Clang/LLVM

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/.

Xây dựng Linux với Clang/LLVM

Tài liệu này trình bày cách xây dựng nhân Linux bằng Clang và LLVM tiện ích.

Về

Nhân Linux theo truyền thống luôn được biên dịch bằng chuỗi công cụ GNU chẳng hạn như GCC và binutils. Công việc đang tiến hành đã cho phép các tiện ích ZZ0000ZZ và ZZ0001ZZ được được sử dụng như những chất thay thế khả thi. Các bản phân phối như ZZ0002ZZ, ZZ0003ZZ, ZZ0004ZZ và ZZ0005ZZ sử dụng hạt nhân được xây dựng bằng Clang. của Google và Meta Nhóm trung tâm dữ liệu cũng chạy các hạt nhân được xây dựng bằng Clang.

ZZ0000ZZ. Clang là giao diện người dùng của LLVM hỗ trợ các phần mở rộng C và GNU C mà kernel yêu cầu và phát âm là “klang,” không phải “see-lang.”

Xây dựng với LLVM

Gọi ZZ0000ZZ qua:

làm cho LLVM=1

để biên dịch cho mục tiêu máy chủ. Để biên dịch chéo:

tạo LLVM=1 ARCH=arm64

Đối số LLVM=

LLVM có các sản phẩm thay thế cho tiện ích binutils GNU. Chúng có thể được kích hoạt riêng lẻ. Danh sách đầy đủ các biến được hỗ trợ:

tạo CC=clang LD=ld.lld AR=llvm-ar NM=llvm-nm STRIP=llvm-strip

OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump READELF=llvm-readelf HOSTCC=clang HOSTCXX=clang++ HOSTAR=llvm-ar HOSTLD=ld.lld

ZZ0000ZZ mở rộng đến mức trên.

Nếu công cụ LLVM của bạn không có sẵn trong PATH, bạn có thể cung cấp chúng vị trí bằng cách sử dụng biến LLVM có dấu gạch chéo ở cuối:

tạo LLVM=/path/to/llvm/

sẽ sử dụng ZZ0000ZZ, ZZ0001ZZ, v.v. sau đây cũng có thể được sử dụng

PATH=/path/to/llvm:$PATH tạo LLVM=1

Nếu công cụ LLVM của bạn có hậu tố phiên bản và bạn muốn thử nghiệm với hậu tố đó phiên bản rõ ràng thay vì các tệp thực thi không có hậu tố như ZZ0000ZZ, bạn có thể chuyển hậu tố bằng biến ZZ0001ZZ

tạo LLVM=-14

sẽ sử dụng ZZ0000ZZ, ZZ0001ZZ, v.v.

Để hỗ trợ sự kết hợp của các đường dẫn ngoài cây với hậu tố phiên bản, chúng tôi đề nghị:

PATH=/path/to/llvm/:$PATH tạo thành LLVM=-14

Giá trị tương tự được sử dụng cho ZZ0000ZZ phải được đặt cho mỗi lần gọi ZZ0001ZZ nếu cấu hình và xây dựng thông qua các lệnh riêng biệt. ZZ0002ZZ cũng nên được đặt như một biến môi trường khi chạy các tập lệnh mà cuối cùng sẽ chạy ZZ0003ZZ.

Biên dịch chéo

Một trình biên dịch Clang nhị phân (và các tiện ích LLVM tương ứng) sẽ thường chứa tất cả các phần cuối được hỗ trợ, có thể giúp đơn giản hóa chéo biên dịch đặc biệt khi ZZ0000ZZ được sử dụng. Nếu bạn chỉ sử dụng công cụ LLVM, ZZ0001ZZ hoặc tiền tố ba mục tiêu trở nên không cần thiết. Ví dụ:

tạo LLVM=1 ARCH=arm64

Như một ví dụ về việc trộn các tiện ích LLVM và GNU, cho mục tiêu như ZZ0000ZZ chưa có hỗ trợ ZZ0001ZZ hoặc ZZ0002ZZ, bạn có thể gọi ZZ0003ZZ qua:

tạo LLVM=1 ARCH=s390 LD=s390x-linux-gnu-ld.bfd

OBJCOPY=s390x-linux-gnu-objcopy

Ví dụ này sẽ gọi ZZ0000ZZ làm trình liên kết và ZZ0001ZZ, vì vậy hãy đảm bảo rằng những nội dung đó có thể truy cập được trong ZZ0002ZZ của bạn.

ZZ0000ZZ không được sử dụng để thêm tiền tố nhị phân của trình biên dịch Clang (hoặc tiện ích LLVM tương ứng) như trường hợp của tiện ích GNU khi ZZ0001ZZ không được thiết lập.

Đối số LLVM_IAS=

Clang có thể lắp ráp mã trình biên dịch mã. Bạn có thể vượt qua ZZ0000ZZ để tắt tính năng này hành vi và yêu cầu Clang gọi trình biên dịch không tích hợp tương ứng thay vào đó. Ví dụ:

tạo LLVM=1 LLVM_IAS=0

ZZ0000ZZ là cần thiết khi biên dịch chéo và ZZ0001ZZ được sử dụng để đặt ZZ0002ZZ cho trình biên dịch tìm trình biên dịch không tích hợp tương ứng (thông thường, bạn không muốn sử dụng trình biên dịch hệ thống khi nhắm mục tiêu vào kiến trúc khác). Ví dụ:

tạo LLVM=1 ARCH=cánh tay LLVM_IAS=0 CROSS_COMPILE=arm-linux-gnueabi-

bộ đệm

ZZ0000ZZ có thể được sử dụng với ZZ0001ZZ để cải thiện các bản dựng tiếp theo, (mặc dù KBUILD_BUILD_TIMESTAMP phải được đặt thành giá trị xác định giữa các bản dựng để tránh lỗi bộ nhớ đệm 100%, hãy xem Reproducible_builds để biết thêm thông tin):

KBUILD_BUILD_TIMESTAMP=’’ tạo LLVM=1 CC=”ccache clang”

Kiến trúc được hỗ trợ

LLVM không nhắm mục tiêu tất cả các kiến trúc mà Linux hỗ trợ và chỉ vì mục tiêu được hỗ trợ trong LLVM không có nghĩa là kernel sẽ xây dựng hoặc làm việc mà không có bất kỳ vấn đề. Dưới đây là tóm tắt chung về kiến trúc hiện đang hoạt động với ZZ0000ZZ hoặc ZZ0001ZZ. Cấp độ hỗ trợ tương ứng với giá trị “S” trong tệp MAINTAINERS. Nếu một kiến trúc không có mặt, điều đó có nghĩa là LLVM không nhắm mục tiêu nó hoặc có những vấn đề đã biết. Sử dụng phiên bản ổn định mới nhất của LLVM hoặc ngay cả cây phát triển cũng sẽ mang lại kết quả tốt nhất. ZZ0002ZZ của kiến trúc thường được mong đợi sẽ hoạt động tốt, một số cấu hình nhất định có thể có vấn đề chưa được phát hiện chưa. Báo cáo lỗi luôn được chào đón tại trình theo dõi vấn đề bên dưới!

Architecture

Level of support

make command

arm

Supported

LLVM=1

arm64

Supported

LLVM=1

hexagon

Maintained

LLVM=1

loongarch

Maintained

LLVM=1

mips

Maintained

LLVM=1

powerpc

Maintained

LLVM=1

riscv

Supported

LLVM=1

s390

Maintained

LLVM=1 (LLVM >= 18.1.0), CC=clang (LLVM < 18.1.0)

sparc (sparc64 only)

Maintained

CC=clang LLVM_IAS=0 (LLVM >= 20)

um (User Mode)

Maintained

LLVM=1

x86

Supported

LLVM=1

Nhận trợ giúp

-ZZ0000ZZ - ZZ0001ZZ: <llvm@lists.linux.dev> -ZZ0002ZZ -ZZ0003ZZ - IRC: #clangbuiltlinux trên irc.libera.chat - ZZ0004ZZ: @ClangBuiltLinux -ZZ0005ZZ -ZZ0006ZZ

Nhận LLVM

Chúng tôi cung cấp các phiên bản ổn định dựng sẵn của LLVM trên ZZ0000ZZ. Chúng đã được tối ưu hóa với hồ sơ dữ liệu để xây dựng nhân Linux, giúp cải thiện thời gian xây dựng nhân so với các bản phân phối khác của LLVM.

Dưới đây là các liên kết có thể hữu ích cho việc xây dựng LLVM từ nguồn hoặc mua sắm nó thông qua trình quản lý gói của nhà phân phối.

-ZZ0000ZZ -ZZ0001ZZ -ZZ0002ZZ -ZZ0003ZZ -ZZ0004ZZ -ZZ0005ZZ -ZZ0006ZZ -ZZ0007ZZ -ZZ0008ZZ