Чи є якийсь серійний номер, доступний на рівні ОС?


12

Я хотів би визначити, який апаратний примірник RaspberryPI завантажується в моїй мережі.

У мене є плани використовувати ЛОТ (не лише 10) з них як клієнтів у більшому рішенні, але я хотів би використати SD-образ для всіх.

Чи є якийсь спосіб їх ідентифікації один від одного, якщо я не розміщую якийсь серійний код у файлі десь в ОС?

Btw. Я використовую MONO / C # для програмування, але мені просто цікаво дізнатись, чи є в ПІ апаратне порядкове число якось чи ні?

Відповіді:


3

У C # Mono я роблю це:

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

І завантажте будь-де за допомогою:

var rpiSerial = GetRpiSerial();

Ця відповідь навіть краща за оригінальну відповідь Ремо, оскільки вона включає рішення в C #, як я спочатку запитував. Дуже приємно, що ви створили цей для нас усіх.
BerggreenDK

13

Ви можете використовувати той самий номер, який використовується для придбання ліцензії MPEG.

Цитуючи ліцензійний ключ MPEG-2 :

Щоб знайти свій серійний номер, введіть cat /proc/cpuinfoу командному рядку, як показано нижче:

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 це те, що ви шукаєте.


Ах, приємна ідея. Чи є у вас поняття, як отримати це від Mono?
BerggreenDK

Єдина проблема полягає в тому, що клієнту / користувачеві доведеться купувати ліцензію MPEG тільки для цієї мети.
BerggreenDK

@BerggreenDK. Не впевнений, що ти маєш на увазі. Серійний номер, який з’являється з командою cpuinfo, є порядковим номером ЦП. Ви маєте ліцензію на MPEG чи ні.
Ремо.Д

1
Ні, '00000 ... d' є лише прикладом. Спробуйте зробити це на вашій малині, і ви отримаєте своє.
Ремо.Д

1
Це апаратний код, унікальний для будь-якого Raspberry (у мене їх два), він не заснований на файлах. Я був би здивований, якби у вас це було з Virtual Box.
Ремо.D

6

Ви можете використовувати MAC-адресу адаптера Ethernet; використовуйте оператор щось подібне, щоб витягти його в змінну:

mysn=`ifconfig eth0 | grep HWaddr |sed -e's/.*HWaddr\s\(\S*\).*/\1/'`

Приємна пропозиція. Якби я міг лише бачити, як мені це потрібно отримати від MONO. Але ідея чудова. Зовсім забув подумати про бортову локальну мережу. MAC номерів справді достатньо. Просто потрібно з’ясувати, як витягнути цю інформацію з бібліотеки System.Net.
BerggreenDK


1
Зауважте, що ви можете змінити MAC-адресу малини. Це життєздатне рішення лише в тому випадку, якщо вам не потрібно бути абсолютно впевненим у власності вашого Raspberry Pi. Серійний код CPU, який можна отримати за допомогою cpuinfo, не змінюється.
Ремо.Д

гаразд, і це чудово. Так, MAC можна змінити на деяких апаратних мережах. Це правда. Але я дуже побоююся, що хтось би клонував мій SDCARD, а потім використовував його для кількох клієнтів без мого відома. Це було б погано для моєї архітектури рішення.
BerggreenDK

Вибачте @TomG, я дійсно застосував вашу ідею, і збираюся використати її як "відпадання" для виявлення пристроїв, які не мають апаратне забезпечення Raspberry PI, оскільки мої клієнтські програми будуть кросплатформою. Я б хотів, щоб я міг відзначити дві відповіді в цьому випадку.
BerggreenDK
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.