Phương pháp dòng lệnh dễ dàng để xác định chuỗi kiến ​​trúc ARM cụ thể?


24

Tôi đang cố gắng viết một kịch bản sẽ xác định các hành động dựa trên kiến ​​trúc của máy. Tôi đã sử dụng uname -mđể thu thập các dòng kiến trúc, tuy nhiên tôi không biết có bao nhiêu kiến trúc ARM có, cũng không biết liệu một là armhf, armelhoặc arm64.

Vì đây là cần thiết cho kịch bản này để xác định xem các phần của kịch bản có thể được chạy hay không, tôi đang cố gắng tìm một cách đơn giản để xác định xem các kiến trúc là armhf, armelhoặc arm64. Có một lót hoặc lệnh đơn giản có thể được sử dụng để sản xuất một trong hai armhf, armelhoặc arm64?

Kịch bản được viết riêng cho các hệ thống Debian và Ubuntu và tôi đang gắn thẻ như vậy với ý nghĩ này (nó sẽ tự động thoát nếu bạn không sử dụng một trong những bản phát hành đó, nhưng điều này cũng có thể được áp dụng theo cách rộng hơn nhiều nếu lệnh (s) tồn tại)


EDIT: Gần đây đã biết rằng armel đã chết và các nhà xây dựng phần mềm arm64 (PPA hoặc dựa trên ảo) không ổn định nhất. Vì vậy, tôi có một tìm kiếm ký tự đại diện arm*và giả sử armhf, nhưng vẫn cần phải tìm ra một lớp lót trả về một trong ba - cho dù đó là lệnh Ubuntu / Debian hay lệnh gọi kernel hay gì đó.


case $(arch) in ; armf)... ;; armel)... ;; arm64)... ;; *) exit ;; esacbạn có thấy cái gì đó như thế này không?
Costas

@Costas Vâng, đó thực sự là những gì tôi đang theo đuổi, nhưng có được vòm là phần khó khăn. Vì các giải pháp có thể là phân phối và cụ thể theo mô hình hệ điều hành, Debian và Ubuntu tương tự nhau và là mục tiêu của tôi, vì vậy các giải pháp sẽ đưa ra vòm và sau đó có thể sử dụng được sẽ rất tuyệt. (Đây không phải là một câu hỏi thuần lập trình một trong hai, tôi chỉ cần lệnh để lấy vòm cụ thể - tôi đã có i386, i686x86_64trường hợp dựa trên uname -m, nhưng không cho arm??... hoặc ít nhất, không có gì danh sách chỉ rõ armhf, armelhoặc arm64) .
Thomas Ward

Ý anh là gì?
Costas

1
@Costas Trên các thiết lập ARM, hãy uname -mnhổ ra bảng mạch cụ thể - armv7lví dụ. Nó không rõ ràng nói cho dù đó là armel, armhfhoặc arm64- đó là những gì tôi cần $(arch)để kết thúc như là để lọc bỏ kiến trúc hệ điều hành không tương thích với.
Thomas Ward

Bạn có thể tốt hơn khi phân tích cú pháp /proc/config.gz nếu nó ở đó.
umeboshi

Câu trả lời:


38
dpkg --print-architecture

sẽ xuất ra kiến ​​trúc chính của máy mà nó chạy. Điều này sẽ có armhftrên một máy chạy ARM ARM 32 bit hoặc Ubuntu (hoặc một công cụ phái sinh), arm64trên một máy chạy ARM 64 bit.

Lưu ý rằng kiến ​​trúc đang chạy có thể khác với kiến ​​trúc phần cứng hoặc thậm chí là kiến ​​trúc kernel. Có thể chạy i386Debian trên CPU Intel hoặc AMD 64 bit và tôi tin rằng có thể chạy armhftrên CPU ARM 64 bit. Thậm chí có thể có hầu hết các i386nhị phân (vì vậy kiến ​​trúc chính là i386) trên amd64kernel ...


Phải nhưng điều này sẽ xác định kiến ​​trúc cần thiết cho các gói của tập lệnh. Tôi sẽ kiểm tra điều này ngày hôm nay, cảm ơn.
Thomas Ward

1
Trên thiết bị Android, không có lệnh dpkg. Tôi nên làm gì để phát hiện kiến ​​trúc của một thiết bị Android?
Dr.jacky

@ Mr.Hyde câu hỏi này nhắm mục tiêu cụ thể Debian và Ubuntu; Tôi đề nghị bạn hỏi một câu hỏi mới nếu bạn muốn câu trả lời cho Android, ở đây hoặc trên android.stackexchange.com .
Stephen Kitt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.