arch-test - phát hiện các kiến trúc mà hạt nhân của bạn có thể chạy các tệp nhị phân của
arch-test [-n] arch-test [-n] [-c <chroot>] <arch>
Khi được gọi mà không có đối số, kiểm tra vòm xuất ra danh sách các kiến trúc mà hạt nhân đang chạy của bạn có thể thực thi được, mỗi cấu trúc trên một dòng, sử dụng tên vòm Debian. Libc hoặc các thư viện khác không cần thiết cũng như không được kiểm tra — một vòm được liệt kê nếu mã máy của nó có thể được thực thi và ABI tòa nhà chọc trời thích hợp được hạt nhân hỗ trợ. Điều này có nghĩa là bạn có thể chạy các kiến trúc này trong chroot hoặc vùng chứa, thực thi chúng bằng multiarch, chạy nhị phân tĩnh, v.v. Bạn có thể đạt được khả năng chạy các kiến trúc bổ sung thông qua binfmts trên Linux, mô phỏng Linux trên BSD, v.v.
Một kiến trúc chỉ được coi là có thể chạy được nếu hạt nhân của bạn có thể chạy các nhị phân chưa sửa đổi mà không cần thực hiện các bước bổ sung như biên dịch lại (Raspbian armhf) hoặc sử dụng brandelf trên các nhị phân mà bạn muốn chạy ( mô phỏng FreeBSD của Linux). Ngoài ra, vì Debian yêu cầu 686 trên i386 khi phát hành kéo dài, hỗ trợ 686 được kiểm tra.
Nếu -n được chỉ định, arch-test sẽ cố gắng tắt trình giả lập đã biết (hiện tại là qemu và wine). Lưu ý rằng một trình giả lập toàn bộ máy dường như có liên quan đến hạt nhân.
Với -c <chroot>, thử nghiệm được thực hiện bên trong một chroot nhất định (qemu-user trước 2.12 yêu cầu trình thông dịch phải hoạt động bên trong chroot ). Quyền root được yêu cầu ở đây.
Khi được gọi với tên vòm làm đối số, kiểm tra vòm sẽ kiểm tra kiến trúc đã chỉ định. Một thông báo thân thiện với con người sẽ được in và mã thoát có thể là:
xin chúc mừng, vòm có thể chạy trên kernel của bạn
sự thất bại
không thể kiểm tra — arch-test thiếu trình trợ giúp cho vòm này
Gợi ý Shell: với
set -e
bạn viết:
ret=0; arch-test $ARCH || ret=$?
Việc phát hiện được thực hiện bởi các chương trình nhỏ nằm trong /usr/lib/arch-test/. Các chương trình này kiểm tra xem hạt nhân đang chạy có thể thực thi các tệp nhị phân của một kiến trúc nhất định hay không. Khi chạy, nếu thành công, mỗi chương trình như vậy sẽ in "ok" trên thiết bị xuất chuẩn và trả về mã thoát 0.
Khi kiểm tra không thành công, các chương trình trợ giúp này có thể chết một cách khủng khiếp — luôn có mã thoát khác không. Thông thường, nhân sẽ nhận thấy sự không tương thích và hủy bỏ nỗ lực một cách dễ dàng, nhưng trong một số trường hợp suýt xảy ra, lỗi còn lộn xộn hơn, chẳng hạn như SIGILL hoặc SIGSEGV. Nếu bạn muốn chạy trình trợ giúp trực tiếp, bạn muốn chuyển hướng stderr đến /dev/null và tắt kết xuất lõi (ulimit -c 0).
liệt kê các kiến trúc
kiểm tra một vòm duy nhất