Czy z poziomu systemu operacyjnego dostępny jest jakiś numer seryjny?

12

Chciałbym określić, która instancja sprzętowa RaspberryPI uruchamia się w mojej sieci.

Mam plany wykorzystania LOT-u (nie tylko 10) jako klientów w większym rozwiązaniu, ale chciałbym ponownie użyć obrazu SD dla nich wszystkich.

Czy istnieje jakiś sposób na ich identyfikację, chyba że umieszczę kod seryjny somekinda w pliku gdzieś w systemie operacyjnym?

Btw. Używam MONO / C # do programowania, ale jestem ciekawy, czy PI ma jakiś numer seryjny sprzętu, czy nie?

BerggreenDK
źródło

Odpowiedzi:

3

W C # Mono robię to:

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();
}

I odzyskuj gdziekolwiek dzięki:

var rpiSerial = GetRpiSerial();
Tico Fortes
źródło
Ta odpowiedź jest nawet lepsza niż oryginalna odpowiedź Remo, ponieważ zawiera rozwiązanie w języku C #, jak pierwotnie zapytałem. Bardzo miło z twojej strony, że wyprodukowałeś ten dla nas wszystkich.
BerggreenDK
13

Możesz użyć tego samego numeru, który został użyty do zakupu licencji MPEG.

Cytując klucz licencyjny MPEG-2 :

Aby znaleźć numer seryjny, wpisz cat /proc/cpuinfow wierszu polecenia, jak pokazano poniżej:

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 jest tym, czego szukasz.

Remo.D
źródło
Ahh, niezły pomysł. Czy masz jakiś pomysł, jak odzyskać to z Mono?
BerggreenDK,
Jedynym problemem jest to, że klient / użytkownik będzie musiał kupić licencję MPEG tylko w tym celu.
BerggreenDK
@BerggreenDK. Nie wiem co masz na myśli. Numer seryjny wyświetlany z poleceniem cpuinfo to numer seryjny procesora. Jest tam, czy masz licencję MPEG, czy nie.
Remo.D
1
Nie, „00000 ... d” jest tu tylko przykładem. Spróbuj zrobić to na malinie, a dostaniesz swoją.
Remo.D
1
Jest to kod sprzętowy, który jest unikalny dla każdego Raspberry (mam dwa z nich), nie jest oparty na plikach. Byłbym zaskoczony, gdybyś miał to z Virtual Box.
Remo.D
6

Możesz użyć adresu MAC adaptera Ethernet; użyj wyciągu podobnego do tego, aby wyodrębnić go do zmiennej:

mysn=`ifconfig eth0 | grep HWaddr |sed -e's/.*HWaddr\s\(\S*\).*/\1/'`
TomG
źródło
Fajna sugestia. Gdybym tylko mógł zobaczyć, jak powinienem wycofać to z MONO. Ale pomysł jest świetny. Zupełnie zapomniałem pomyśleć o wbudowanej sieci LAN. Rzeczywiście liczby MAC są wystarczające. Wystarczy dowiedzieć się, jak pobrać te informacje z biblioteki System.Net.
BerggreenDK
Znaleziono to: stackoverflow.com/questions/850650/…
BerggreenDK
1
Pamiętaj, że możesz zmienić adres MAC maliny. Jest to realne rozwiązanie tylko wtedy, gdy nie musisz mieć absolutnej pewności co do tożsamości swojego Raspberry Pi. Kodu seryjnego procesora, który można uzyskać za pomocą cpuinfo, nie można zmieniać.
Remo.D
okej, to też świetny punkt. Tak, MAC można zmienić na niektórych urządzeniach LAN. To prawda. Ale martwię się, że ktoś sklonuje moją SDCARD, a następnie użyje jej dla wielu klientów bez mojej wiedzy. To byłoby złe dla mojej architektury rozwiązania.
BerggreenDK
Przepraszam @TomG Naprawdę doceniłem twój pomysł i wykorzystam go jako „rezerwowy” do wykrywania urządzeń, które nie są sprzętem Raspberry PI, ponieważ moje programy klienckie będą miały formę krzyżową. Chciałbym w tym przypadku zaznaczyć dwie odpowiedzi.
BerggreenDK