มีหมายเลขซีเรียล kinda จากระดับระบบปฏิบัติการบ้างไหม?


12

ฉันต้องการระบุว่าอินสแตนซ์ของฮาร์ดแวร์ RaspberryPI ใดถูกบูทบนเครือข่ายของฉัน

ฉันมีแผนที่จะใช้ล็อต (ไม่ใช่แค่ 10) เป็นลูกค้าในโซลูชันที่มีขนาดใหญ่ขึ้น แต่ฉันต้องการนำภาพ SD กลับมาใช้ใหม่สำหรับพวกเขาทั้งหมด

มีวิธีใดบ้างในการระบุพวกเขาจากกันและกันเว้นแต่ฉันจะวางรหัสซีเรียลคินคินในไฟล์ที่ใดที่หนึ่งในระบบปฏิบัติการ?

Btw ฉันใช้ MONO / C # ในการเขียนโปรแกรม แต่ฉันแค่อยากรู้ว่า PI มีหมายเลขอนุกรมของฮาร์ดแวร์หรือไม่

คำตอบ:


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

คำตอบนี้ดียิ่งกว่าคำตอบเดิมของ Remo เนื่องจากมีคำตอบใน 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 คือสิ่งที่คุณกำลังมองหา


อ่าความคิดที่ดี คุณมีเงื่อนงำในการดึงข้อมูลนี้จากโมโนหรือไม่?
BerggreenDK

ปัญหาเดียวก็คือลูกค้า / ผู้ใช้จะต้องซื้อใบอนุญาต MPEG เพียงเพื่อจุดประสงค์นั้นเพียงอย่างเดียว
BerggreenDK

@BerggreenDK ไม่แน่ใจว่าคุณหมายถึงอะไร. หมายเลขซีเรียลที่ปรากฏพร้อมกับคำสั่ง cpuinfo คือหมายเลขซีเรียลของ CPU อยู่ที่นั่นไม่ว่าคุณจะมีใบอนุญาต MPEG หรือไม่
Remo.D

1
ไม่ '00000 ... d' เป็นเพียงตัวอย่างเท่านั้น ลองทำกับราสเบอร์รี่แล้วคุณจะได้ของคุณ
Remo.D

1
มันเป็นรหัสฮาร์ดแวร์ที่เป็นเอกลักษณ์สำหรับ Raspberry ใด ๆ (ฉันมีสองคน) มันไม่ได้ใช้ไฟล์ ฉันจะแปลกใจถ้าคุณมีจากกล่องเสมือนจริง
Remo.D

6

คุณสามารถใช้ที่อยู่ MAC ของอะแดปเตอร์อีเธอร์เน็ต ใช้คำสั่งแบบนี้เพื่อแยกมันเป็นตัวแปร:

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

คำแนะนำที่ดี หากฉันสามารถเห็นได้ว่าฉันควรรับข้อมูลนี้จาก MONO ได้อย่างไร แต่ความคิดนั้นยอดเยี่ยม ลืมคิดเกี่ยวกับ LAN ออนบอร์ดอย่างสิ้นเชิง ตัวเลข MAC ก็เพียงพอแล้ว เพียงแค่ต้องคิดหาวิธีดึงข้อมูลจากไลบรารี System.Net
BerggreenDK

พบสิ่งนี้: stackoverflow.com/questions/850650/…
BerggreenDK

1
โปรดทราบว่าคุณสามารถแก้ไขที่อยู่ MAC ของราสเบอร์รี่ นี่เป็นทางออกที่ทำงานได้ก็ต่อเมื่อคุณไม่จำเป็นต้องแน่ใจเกี่ยวกับตัวตนของ Raspberry Pi ของคุณอย่างแน่นอน รหัสซีเรียลของ CPU ที่สามารถใช้ได้กับ cpuinfo นั้นไม่สามารถเปลี่ยนแปลงได้
Remo.D

ตกลงนั่นเป็นจุดที่ดีเช่นกัน ใช่ MAC สามารถเปลี่ยนแปลงได้บนฮาร์ดแวร์ LAN บางตัว นั่นเป็นเรื่องจริง แต่ฉันกังวลอย่างยิ่งว่าใครบางคนจะโคลน SDCARD ของฉันและใช้มันสำหรับลูกค้าหลายคนโดยที่ฉันไม่รู้ มันจะไม่ดีสำหรับสถาปัตยกรรมของการแก้ปัญหาของฉัน
BerggreenDK

ขออภัย @TomG ฉันประเมินความคิดของคุณจริงๆและฉันจะใช้มันเป็น "ถอยกลับ" สำหรับการตรวจสอบอุปกรณ์ที่ไม่ได้ใช้ฮาร์ดแวร์ Raspberry PI เนื่องจากโปรแกรมไคลเอนต์ของฉันจะเป็นแพลตฟอร์มข้ามแพลตฟอร์ม ฉันหวังว่าฉันสามารถทำเครื่องหมายสองคำตอบในกรณีนี้
BerggreenDK
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.