Apakah ada beberapa nomor seri yang tersedia dari level OS?

12

Saya ingin mengidentifikasi instance perangkat keras RaspberryPI mana yang sedang dibooting di jaringan saya.

Saya punya rencana untuk menggunakan BANYAK (bukan hanya 10) dari mereka sebagai klien dalam solusi yang lebih besar, tetapi saya ingin menggunakan kembali SD-image untuk mereka semua.

Apakah ada cara untuk mengidentifikasi mereka dari satu sama lain, kecuali saya menempatkan kode serial somekinda dalam file di suatu tempat di OS?

Btw. Saya menggunakan MONO / C # untuk pemrograman, tetapi saya hanya ingin tahu apakah PI memiliki nomor seri perangkat keras atau tidak?

BerggreenDK
sumber

Jawaban:

3

Di C # Mono saya melakukan ini:

private string GetRpiSerial()
{
    CommandSync("cat /proc/cpuinfo | grep Serial | cut -d ':' -f 2 > /home/pi/serial.txt");

    using (var sr = new StreamReader("/home/pi/serial.txt"))
    {
        return sr.ReadLine().Trim();
    }
}

public static void CommandSync(string cmd, string args)
{
    var info = new ProcessStartInfo();
    info.FileName = "/bin/bash";
    info.Arguments = string.Format("-c \"sudo {0} {1}\"", cmd, args);
    info.UseShellExecute = false;
    info.RedirectStandardOutput = true;

    var p = Process.Start(info);
    p.WaitForExit();
}

Dan mengambil di mana saja dengan:

var rpiSerial = GetRpiSerial();
Benteng Tico
sumber
Jawaban ini bahkan lebih baik daripada jawaban asli Remo, karena mencakup solusi dalam C # seperti yang saya tanyakan sebelumnya. Anda sangat baik untuk menghasilkan yang ini untuk kita semua.
BerggreenDK
13

Anda dapat menggunakan nomor yang sama dengan yang digunakan untuk membeli lisensi MPEG.

Mengutip kunci lisensi MPEG-2 :

Untuk menemukan nomor seri Anda, ketikkan cat /proc/cpuinfopada baris perintah seperti yang ditunjukkan di bawah ini:

pi@raspberrypi:~$ cat /proc/cpuinfo

Processor       : ARMv6-compatible processor rev 7 (v6l)
BogoMIPS        : 697.95
Features        : swp half thumb fastmult vfp edsp java tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xb76
CPU revision    : 7
Hardware        : BCM2708
Revision        : 1000002
Serial          : 000000000000000d

Serial adalah apa yang kamu cari.

Remo.D
sumber
Ahh, ide bagus. Apakah Anda memiliki petunjuk tentang cara mengambil ini dari Mono?
BerggreenDK
Satu-satunya masalah adalah bahwa klien / pengguna harus membeli lisensi MPEG hanya untuk tujuan itu saja.
BerggreenDK
@BerggreenDK. Tidak yakin apa yang kamu maksud. Nomor seri yang muncul dengan perintah cpuinfo adalah nomor seri CPU. Itu ada di sana apakah Anda memiliki lisensi MPEG atau tidak.
Remo.D
1
Tidak, '00000 ... d' ada di sana sebagai contoh. Cobalah melakukannya dengan raspberry Anda dan Anda akan mendapatkannya.
Remo.D
1
Ini adalah kode perangkat keras yang unik untuk Raspberry apa pun (saya punya dua di antaranya), bukan berbasis file. Saya akan terkejut jika Anda mendapatkannya dari Virtual Box.
Remo.D
6

Anda dapat menggunakan alamat MAC adaptor ethernet; gunakan pernyataan seperti ini untuk mengekstraknya ke dalam variabel:

mysn=`ifconfig eth0 | grep HWaddr |sed -e's/.*HWaddr\s\(\S*\).*/\1/'`
TomG
sumber
Saran yang bagus. Jika saya hanya bisa melihat bagaimana saya harus mengambil ini dari MONO. Tapi idenya bagus. Benar-benar lupa untuk memikirkan LAN onboard. Jumlah MAC memang cukup. Hanya perlu mencari cara untuk menarik informasi itu dari perpustakaan System.Net.
BerggreenDK
Ditemukan ini: stackoverflow.com/questions/850650/…
BerggreenDK
1
Perhatikan bahwa Anda dapat mengubah alamat MAC raspberry. Ini adalah solusi yang layak hanya jika Anda tidak perlu benar-benar yakin tentang identitas Raspberry Pi Anda. Kode serial CPU yang dapat diperoleh dengan cpuinfo tidak dapat diubah.
Remo.D
oke, itu poin yang bagus juga. Ya, MAC dapat diubah pada beberapa perangkat keras LAN. Itu benar. Tetapi saya khawatir bahwa seseorang akan mengkloning kartu SD saya dan kemudian menggunakannya untuk banyak klien tanpa sepengetahuan saya. Itu akan buruk untuk arsitektur solusi saya.
BerggreenDK
Maaf @ TomG Saya benar-benar memberikan ide Anda dan saya akan menggunakannya sebagai "mundur" untuk mendeteksi perangkat yang bukan perangkat keras Raspberry PI karena program klien saya akan lintas platform. Saya berharap saya bisa menandai dua jawaban dalam kasus ini.
BerggreenDK