Metode baris perintah yang mudah untuk menentukan string arsitektur ARM tertentu?

24

Saya mencoba menulis skrip yang akan menentukan tindakan berdasarkan arsitektur mesin. Saya sudah menggunakan uname -muntuk mengumpulkan garis arsitektur, namun saya tidak tahu berapa banyak arsitektur ARM ada, aku juga tidak tahu apakah seseorang armhf, armelatau arm64.

Karena ini diperlukan untuk skrip ini untuk menentukan apakah bagian skrip dapat dijalankan atau tidak, saya mencoba menemukan cara sederhana untuk menentukan apakah arsitekturnya adalah armhf, armelatau arm64. Apakah ada satu-kapal atau perintah sederhana yang dapat digunakan untuk output baik armhf, armelatau arm64?

Script ini secara khusus ditulis untuk sistem Debian dan Ubuntu, dan saya menandai hal ini dengan mengingat hal ini (berhenti secara otomatis jika Anda tidak berada di salah satu distro itu, tetapi ini dapat diterapkan dengan cara yang jauh lebih luas juga jika perintah ada)


EDIT: Baru-baru ini mengetahui bahwa armel sudah mati, dan pembuat perangkat lunak arm64 (berbasis PPA atau virtual) bukan yang paling stabil. Jadi saya memiliki pencarian pencarian wildcard arm*dan asumsi armhf, tetapi masih perlu untuk mencari tahu satu liner yang mengembalikan salah satu dari tiga - apakah itu perintah Ubuntu / Debian atau panggilan kernel atau sesuatu.

Thomas Ward
sumber
case $(arch) in ; armf)... ;; armel)... ;; arm64)... ;; *) exit ;; esacapakah kamu melihat sesuatu seperti ini?
Costas
@ Costa Ya, itu efektif yang saya cari, tetapi mendapatkan lengkungan adalah bagian yang sulit. Karena solusi mungkin distribusi dan spesifik OS-model, Debian dan Ubuntu adalah serupa dan merupakan target saya, jadi solusi yang akan mengeluarkan lengkungan dan kemudian dapat digunakan akan menjadi besar. (Ini bukan pertanyaan murni pemrograman baik, saya hanya perlu perintah untuk mengambil lengkungan tertentu - saya sudah memiliki i386, i686, dan x86_64kasus berdasarkan uname -m, tapi tidak untuk arm??... atau setidaknya, tidak ada yang mengidentifikasi armhf, armelatau arm64) .
Thomas Ward
Apa maksudmu?
Costas
1
@Costas Pada pengaturan ARM, uname -mkeluarkan papan lengan khusus - armv7lmisalnya. Ini tidak secara eksplisit mengatakan apakah itu armel, armhfatau arm64- yang adalah apa yang saya butuhkan $(arch)untuk berakhir sebagai untuk menyingkirkan arsitektur OS tidak sesuai dengan.
Thomas Ward
Anda mungkin lebih baik mem-parsing /proc/config.gz jika ada.
umeboshi

Jawaban:

39
dpkg --print-architecture

akan menampilkan arsitektur utama dari mesin yang digunakan. Ini akan berada armhfpada mesin yang menjalankan ARM Debian atau Ubuntu 32-bit (atau turunan), arm64pada mesin yang menjalankan ARM 64-bit.

Perhatikan bahwa arsitektur yang berjalan mungkin berbeda dari arsitektur perangkat keras atau bahkan arsitektur kernel. Dimungkinkan untuk menjalankan i386Debian pada Intel 64-bit atau CPU AMD, dan saya percaya itu mungkin untuk dijalankan armhfpada CPU ARM 64-bit. Bahkan mungkin untuk memiliki sebagian besar i386binari (jadi arsitektur utamanya i386) pada amd64kernel ...

Stephen Kitt
sumber
Benar tetapi ini akan menentukan arsitektur yang dibutuhkan untuk paket skrip. Saya akan menguji ini hari ini, terima kasih.
Thomas Ward
1
Pada perangkat android, tidak ada perintah dpkg. Apa yang harus saya lakukan untuk mendeteksi arsitektur perangkat android?
Dr.jacky
@ Mr.Hyde pertanyaan ini khusus ditujukan untuk Debian dan Ubuntu; Saya sarankan Anda mengajukan pertanyaan baru jika Anda ingin jawabannya untuk Android, baik di sini atau di android.stackexchange.com .
Stephen Kitt