NoWayOS
HI
GitHub
मेन्यूबंद करें

बिल्ड करें

Raspberry Pi 5 पर चलाना

क्या ख़रीदें, SD कार्ड कैसे बिल्ड करें और लिखें, बोर्ड का सीरियल लॉग कैसे पढ़ें और जाँचें, और Pi 5 पर सिस्टम बिना निगरानी के कैसे चलाएँ या उसकी HDMI स्क्रीन पर यूज़र इंटरफ़ेस कैसे देखें।

Raspberry Pi 5 NoWayOS का रेफ़रेंस बोर्ड है: कम लागत वाला, आसानी से मिलने वाला, और वह बोर्ड जिस पर इसके पहले हार्डवेयर टेस्ट चलते हैं। QEMU में पास होने वाले सिस्टम को Pi पर उसी एक्सपेक्ट फ़ाइल से, बोर्ड के सीरियल लॉग के आधार पर, जाँचा जाता है।

बोर्ड के लिए दो नियम। Pi के UART से कभी 5 V सीरियल एडैप्टर न जोड़ें: यह 3.3 V पोर्ट है। और किसी डेवलपमेंट बोर्ड पर कभी Pi की वन-टाइम-प्रोग्रामेबल मेमोरी प्रोग्राम न करें, न सिक्योर बूट चालू करें: इन दोनों को पलटा नहीं जा सकता। make sdcard ऐसी config.txt को ठुकरा देता है जो इनमें से कुछ भी करे, या बोर्ड का वोल्टेज बदले।

आपको क्या चाहिए

चीज़ टिप्पणी
Raspberry Pi 5 16 GB बोर्ड पर विकसित और टेस्ट किया गया। हर कमांड बोर्ड का नाम rpi5b_2gb देता है: Pi 5 के लिए seL4 का वह कॉन्फ़िगरेशन जो उसकी पहली 2 GB मेमोरी इस्तेमाल करता है, जिसमें से बिल्ड seL4 को 1 GB से थोड़ा कम देता है। इसलिए 2, 4 और 8 GB बोर्ड पर कुछ अलग करने की ज़रूरत नहीं होनी चाहिए, लेकिन उन्हें आज़माया नहीं गया है
पावर सप्लाई आधिकारिक 5 V, 5 A USB-C सप्लाई, या उतनी ही अच्छी कोई और। कम पावर वाला Pi 5 ऐसा बर्ताव करता है मानो सॉफ़्टवेयर में बग हो
microSD कार्ड उस बूट पार्टिशन के लिए, जिसे make sdcard बिल्ड करता है
Raspberry Pi Debug Probe इसकी UART केबल Pi 5 के 3-पिन डीबग कनेक्टर में फ़िट होती है। सही केबल वाला कोई भी 3.3 V USB-से-सीरियल एडैप्टर भी काम करता है
HDMI मॉनिटर, USB कीबोर्ड और माउस यूज़र इंटरफ़ेस के लिए। पावर-ऑन से पहले मॉनिटर लगाएँ: फ़र्मवेयर स्क्रीन को सिर्फ़ बूट के समय सेट करता है। USB बूट कीबोर्ड और माउस काम करते हैं; हब अभी नहीं

SD कार्ड बिल्ड करें

make sdcard BOARD=rpi5b_2gb SYSTEM=hello

यह कार्ड का बूट पार्टिशन build/rpi5b_2gb/hello/sdcard/ में लिखता है: U-Boot, डिवाइस ट्री और ओवरले, config.txt, seL4 इमेज loader.img, लाइसेंस फ़ाइलें और बाद में कार्ड जाँचने के लिए एक SHA256SUMS। U-Boot कंटेनर में सोर्स से, रीप्रोड्यूसिबल तरीके से, बिल्ड होता है।

कार्ड लिखें

macOS पर

  1. diskutil list से कार्ड ढूँढ़ें: यह external, physical है, और कार्ड के आकार का। अगला चरण उस पूरी डिस्क को मिटा देता है, इसलिए नंबर दो बार जाँचें।
  2. इसे PIBOOT लेबल के साथ फ़ॉर्मैट करें:
diskutil eraseDisk FAT32 PIBOOT MBRFormat /dev/diskN
  1. फ़ाइलें कॉपी करें, और जाँचें कि हर एक सही-सलामत पहुँची (जब सब मेल खाती हैं, तो यह कुछ भी प्रिंट नहीं करता):
cp -RX build/rpi5b_2gb/hello/sdcard/ /Volumes/PIBOOT/
dot_clean -m /Volumes/PIBOOT
(cd /Volumes/PIBOOT && shasum -a 256 -c SHA256SUMS | grep -v ': OK$')
  1. इसे diskutil eject /dev/diskN से इजेक्ट करें, और Pi में लगाएँ।

Linux पर

Linux के टूल के साथ वही चरण (प्रोजेक्ट के अपने कार्ड macOS पर बनाए जाते हैं):

  1. lsblk -p से कार्ड ढूँढ़ें: कार्ड के आकार की एक डिस्क, जैसे /dev/sdX या /dev/mmcblk0। अगला चरण उस पूरी डिस्क को मिटा देता है, इसलिए नाम दो बार जाँचें, और उसके किसी भी पार्टिशन को अनमाउंट करें।
  2. इसे PIBOOT लेबल वाला एक FAT32 पार्टिशन दें (dosfstools और parted इंस्टॉल होने चाहिए):
sudo parted --script /dev/sdX mklabel msdos mkpart primary fat32 1MiB 100% set 1 lba on
sudo mkfs.vfat -F 32 -n PIBOOT /dev/sdX1
  1. फ़ाइलें कॉपी करें, और जाँचें कि हर एक सही-सलामत पहुँची (जब सब मेल खाती हैं, तो यह कुछ भी प्रिंट नहीं करता):
sudo mount /dev/sdX1 /mnt
sudo cp -r build/rpi5b_2gb/hello/sdcard/. /mnt/
(cd /mnt && sha256sum -c SHA256SUMS | grep -v ': OK$')
sudo umount /mnt
  1. इसे Pi में लगाएँ।

सीरियल कंसोल जोड़ें

Debug Probe को Pi 5 के समर्पित 3-पिन डीबग कनेक्टर में लगाएँ, जो HDMI पोर्ट के बीच है, GPIO पिन में नहीं। यह 115200 baud, 8N1 पर चलता है। प्रोब Mac पर /dev/cu.usbmodem… के रूप में दिखता है, और Linux पर /dev/ttyACM0 या इससे मिलते-जुलते नाम से (आपके यूज़र का dialout ग्रुप में होना ज़रूरी है)।

Pi को चालू करने से पहले कैप्चर शुरू करें, हर लॉग में एक बूट:

mkdir -p build/rpi5b_2gb/hello
(stty 115200 raw -echo; cat) < /dev/cu.usbmodemXXXX | tee build/rpi5b_2gb/hello/serial.log

सेटिंग्स और रीड को एक ही कमांड में रखें, जैसा यहाँ है: macOS पर पोर्ट को दूसरी बार खोलने पर वह 9600 baud पर लौट जाता है। Linux पर पोर्ट को stty -F /dev/ttyACM0 115200 raw -echo से सेट करें और cat /dev/ttyACM0 से पढ़ें। आख़िरी अपेक्षित लाइन के बाद Ctrl-C से रोकें।

पावर-ऑन पर U-Boot तीन सेकंड की उलटी गिनती करता है और फिर कार्ड का loader.img बूट करता है। इसके बजाय उसके प्रॉम्प्ट पर रुकने के लिए, उलटी गिनती के दौरान stopboot टाइप करें। (सिर्फ़ यही शब्द उसे रोकता है, इसलिए बिना जुड़ी सीरियल लाइन पर आने वाला शोर कभी किसी डिवाइस को U-Boot पर नहीं रोक सकता।)

लॉग जाँचें

बोर्ड के लॉग को सिस्टम की एक्सपेक्ट फ़ाइल से जाँचें, उन्हीं नियमों से जिनसे QEMU का आउटपुट जाँचा जाता है:

make check-serial SYSTEM=hello LOG=build/rpi5b_2gb/hello/serial.log

किसी ऐसे सिस्टम के लिए BOARD=rpi5b_2gb जोड़ें, जिसकी Pi के लिए अपनी अलग एक्सपेक्ट फ़ाइल हो।

सिस्टम बिना निगरानी के चलाएँ

प्रोब जुड़ा होने पर, make pi-run बोर्ड पर सिस्टम की एक शृंखला चलाता है, बिना कार्ड बदले और बिना किसी के बोर्ड के पास मौजूद हुए। इसे कंटेनर में नहीं, सीधे अपनी मशीन पर चलाएँ (Mac पर Podman की वर्चुअल मशीन USB सीरियल डिवाइस नहीं देख सकती)। इसके लिए वहाँ Python 3.11 या उससे नया वर्शन चाहिए, सिर्फ़ स्टैंडर्ड लाइब्रेरी के साथ:

make pi-run PI_DEVICE=/dev/cu.usbmodemXXXX PI_SYSTEMS="hello ipc-demo isolation-test"

हर सिस्टम के लिए यह कंटेनर में इमेज बिल्ड करता है, बोर्ड को रीसेट करता है, इमेज को सीरियल लाइन पर भेजता है और जाँचता है कि वह सही-सलामत पहुँची, बोर्ड का वॉचडॉग चालू करता है, और उसे शुरू करता है। हर लॉग पहुँचते ही जाँचा जाता है, और वॉचडॉग अगले सिस्टम के लिए बोर्ड को रीसेट करता है। यह जो भी कमांड टाइप करता है, वह वापस इको होती है और एंटर होने से पहले जाँची जाती है। लॉग build/rpi5b_2gb/pi-run/ में रखे जाते हैं।

यूज़र इंटरफ़ेस देखें

पावर-ऑन से पहले मॉनिटर लगाकर:

make pi-run PI_DEVICE=/dev/cu.usbmodemXXXX PI_SYSTEMS=ui-demo PI_WATCHDOG=15

यह HDMI स्क्रीन पर यूज़र इंटरफ़ेस का स्क्रिप्टेड सेशन चलाता है और हर फ़्रेम का हैश जाँचता है। किसी सिस्टम को किसी व्यक्ति के देखने के लिए चलता छोड़ना हो, बिना वॉचडॉग के, तो make pi-show PI_DEVICE=… SYSTEM=ui-demo इस्तेमाल करें; यह तब तक चलता है, जब तक बोर्ड का पावर बंद करके दोबारा चालू न किया जाए।

जब कुछ फ़ेल हो

पिछली काम करने वाली इमेज पर लौटें, और एक साथ एक से ज़्यादा चीज़ बदलने से पहले सीरियल लाइन और बूट चेन फिर से जाँचें। अगर U-Boot से पहले कुछ भी नहीं दिखता, तो प्रोब या वायरिंग पर शक करने से पहले बूटलोडर की BOOT_UART सेटिंग और कार्ड की config.txt में enable_uart=1 जाँचें।