लिनक्स ओएस के बिना रास्पबेरी पाई का उपयोग करना?


33

मैं एम्बेडेड अनुप्रयोगों के विकास के लिए एक शुद्ध एम्बेडेड सीपीयू इकाई के रूप में रास्पबेरी पाई का उपयोग करने में रुचि रखता हूं। चूंकि रास्पबेरी पाई में काफी शक्तिशाली मेमोरी है, इसलिए यह एक उत्कृष्ट एम्बेडेड बोर्ड बनाता है।

क्या लिनक्स ओएस के बिना रास्पबेरी पाई का उपयोग करना संभव है? मैं यह कैसे कर सकता हूँ?


2
मुझे नहीं लगता कि यह एक वास्तविक प्रश्न है और प्रश्नोत्तर प्रारूप के लिए अच्छा फिट नहीं है।
एलेक्स चैंबरलेन

5
क्यों नहीं? आपको नहीं लगता कि लोग लिनक्स ओएस के अलावा किसी अन्य तरीके से रापी का उपयोग करने के बारे में पूछ सकते हैं? जहां इस समूह के उपनियमों की सूची में एक खंड है जो कहता है कि कोई व्यक्ति इस तरह के प्रश्न नहीं पूछ सकता है?
फरहाद

2
मैंने ऐसा नहीं कहा। मुझे वास्तव में लगता है कि लिनक्स का उपयोग नहीं करने वाली कुछ परियोजनाओं को देखने के लिए यह काफी अच्छा होगा, लेकिन आपने वास्तव में एक निश्चित जवाब के साथ सवाल नहीं पूछा, बल्कि आपने एक चर्चा बिंदु बनाया।
एलेक्स चेम्बरलेन

@AlexChamberlain मैं सहमत हूँ - मैंने इसे एक प्रश्न में संपादित किया है। फरहदा - मुझे उम्मीद है कि यह ठीक है, वर्तमान स्थिति में इसे बंद कर दिया जाएगा। कृपया समीक्षा करें और मेरे संपादन में सुधार करें!
एलेक्स एल

ठीक है, सच है, मुझे इसे एक प्रश्न बनाना है, क्योंकि यह एक प्रश्नोत्तर साइट है :)
फरहाद

जवाबों:


23

मैंने रास्पबेरी पाई पर नंगे धातु प्रोग्रामिंग में देखा है और यह लगता है कि आप क्या करना चाहते हैं। कुछ लोगों के साथ नंगे धातु प्रोग्रामिंग के बारे में कई अच्छे मंच विषय हैं जिन्होंने अपने कोड को काम करने के लिए बहुत प्रयास किया है। आरंभ करने के लिए इन्हें देखें:

रास्पी पर नंगे धातु की शुरुआत करने के लिए गाइड

नंगे धातु पर आरपीआई प्रोग्रामिंग

बेयर मेटल ट्यूटोरियल 1 पर बेसिक में प्रोग्रामिंग

या सामान्य रूप से आप रास्पबेरी पाई के नंगे धातु फोरम पर जा सकते हैं और बस चारों ओर ब्राउज़ कर सकते हैं।

मेरी समझ यह है कि ब्रॉडकॉम चिप में निर्मित बूट अनुक्रम के कारण आपको एसडी कार्ड से बूट करना होगा। मैं बूट अनुक्रम के लिए लिंक ढूंढने की कोशिश कर रहा हूं, लेकिन मेरा Google फू काम नहीं कर रहा है, अगर मुझे यह मिल जाए तो मैं बाद में इसे संपादित करूंगा।


3
इसके अलावा, आप इस ट्यूटोरियल का उपयोग कर सकते हैं: cl.cam.ac.uk/freshers/raspberrypi/tutorials/os यह एक ऑपरेटिंग सिस्टम बनाने के बारे में है, लेकिन यदि आप एक ऑपरेटिंग सिस्टम के अपने विचार का विस्तार करते हैं, तो इसे एम्बेडेड सिस्टम पर लागू किया जा सकता है।
ओहब्लहिट्समे

6

जिस तरह से यह बूट होगा वह एक fat32 स्वरूपित sdcard से है, पावरऑन से gpu फर्मवेयर लोडिंग के लिए जाता है जो कि कर्नेल .img नाम की किसी भी बाइनरी फ़ाइल को निष्पादित करता है इसलिए यदि आप एक कस्टम कर्नेल बनाना चाहते हैं जो वह करता है जो आप करना चाहते हैं। इस समय


3
हां, लेकिन ऐसा नहीं है कि मैं क्या करना चाहता हूं, मैं यह जानना चाहूंगा कि क्या बूट छवि को देखने के लिए एसडी कार्ड पर जाने के बजाय चिप के बूट कोड को बदलना संभव है, इसे जाने के लिए बदला जा सकता है एक SPI फ्लैश मेमोरी और बूट इसके बजाय वहां से। इस तरह, बूट कोड AT25FS040 या AT25DF641 या अन्य समान इकाइयों जैसे SPI फ्लैश मेमोरी पर हो सकता है। एम्बेडेड अनुप्रयोगों के लिए, वे सभी कोड स्टोर करने के लिए पर्याप्त हैं, और उन्हें बूट के बाद एसडीआरएएम में लोड किया जा सकता है। लेकिन बड़ी चुनौती बूट रॉम कोड को बदलना है।
फरहाद

9
यह वही नहीं है जो आपने अपने प्रश्न में पूछा था।
एलिस्टेयर बुक्सटन

मुझे पता है, लेकिन रापी बूट अनुक्रम के बारे में मेरा ज्ञान सीमित है, मेरे मूल प्रश्न में उचित प्रश्न था, इससे पहले कि इसे नीचे वोट दिया गया और इस वर्तमान प्रारूप में संपादित किया गया।
फरहदा

2
@ फरहाद - आपकी पहली टिप्पणी मुझे यहाँ लग रही है जैसे यह एक व्यावहारिक, उत्तर देने योग्य प्रश्न है। यह निश्चित रूप से बेहतर होगा कि इस प्रश्न का मूल रूप।
मार्क बूथ

खैर, जैसा कि मैंने कहा कि रासपी बूट अनुक्रम का मेरा ज्ञान सीमित है। मैं एसडी कार्ड पर एक साधारण बूट फ़ाइल बनाने की ओर झुक रहा हूं और अपने स्वयं के विस्तार बोर्ड पर एक एसपीआई आधारित फ्लैश से एप्लिकेशन लोड करता हूं। मुझे वास्तव में अपने सिस्टम में एसडी कार्ड होना पसंद नहीं है, लेकिन ऐसा करने का यह एकमात्र त्वरित और गंदा तरीका है। अब मुझे यह सीखने की जरूरत है कि
रसपी

4

मैंने C # में IBM S / 390 एमुलेटर बनाया है जो सैद्धांतिक रूप से मोनो / लिनक्स के तहत चलेगा क्योंकि यह CIL कोड को संकलित करता है और किसी भी गैर-समर्थित .NET संसाधनों का उपयोग नहीं करता है। यह कस्टम परिमित राज्य मशीन दुभाषिया के साथ प्लेटफ़ॉर्म स्वतंत्र नियंत्रण तालिकाओं का उपयोग करके एम्बेडेड समाधानों की अनुमति देगा। यह अभी भी पृष्ठभूमि में आवश्यक लिनक्स ओ / एस होगा।


2

पूरी तरह से स्वचालित न्यूनतम नंगे धातु ब्लिंकर उदाहरण

उबंटू 16.04 होस्ट, रास्पबेरी पाई 2 पर परीक्षण किया गया।

  1. होस्ट पर एसडी कार्ड डालें

  2. छवि बनाओ:

    ./make.sh /dev/mmblck0 p1
    

    कहा पे:

    • /dev/mmblck0 एसडी कार्ड का उपकरण है
    • p1डिवाइस का पहला विभाजन है ( /dev/mmblck0p1)
  3. पीआई पर इनसेट एसडी कार्ड

  4. बिजली बंद करें और चालू करें

यहाँ छवि विवरण दर्ज करें

GitHub अपस्ट्रीम: https://github.com/cirosantilli/raspberry-pi-bare-metal-blinker/tree/d20f0337189641824b3ad5e4a724aa91e13fd764

start.S

.global _start
_start:
    mov sp, #0x8000
    bl main
hang:
    b hang

main.c

#include <stdint.h>

/* This is bad. Anything remotely serious should use timers
 * provided by the board. But this makes the code simpler. */
#define BUSY_WAIT __asm__ __volatile__("")
#define BUSY_WAIT_N 0x100000

int main( void ) {
    uint32_t i;
    /* At the low level, everything is done by writing to magic memory addresses. */
    volatile uint32_t * const GPFSEL4 = (uint32_t *)0x3F200010;
    volatile uint32_t * const GPFSEL3 = (uint32_t *)0x3F20000C;
    volatile uint32_t * const GPSET1  = (uint32_t *)0x3F200020;
    volatile uint32_t * const GPCLR1  = (uint32_t *)0x3F20002C;

    *GPFSEL4 = (*GPFSEL4 & ~(7 << 21)) | (1 << 21);
    *GPFSEL3 = (*GPFSEL3 & ~(7 << 15)) | (1 << 15);
    while (1) {
        *GPSET1 = 1 << (47 - 32);
        *GPCLR1 = 1 << (35 - 32);
        for (i = 0; i < BUSY_WAIT_N; ++i) { BUSY_WAIT; }
        *GPCLR1 = 1 << (47 - 32);
        *GPSET1 = 1 << (35 - 32);
        for (i = 0; i < BUSY_WAIT_N; ++i) { BUSY_WAIT; }
    }
}

ldscript

MEMORY
{
    ram : ORIGIN = 0x8000, LENGTH = 0x10000
}

SECTIONS
{
    .text : { *(.text*) } > ram
    .bss : { *(.bss*) } > ram
}

make.sh

#!/usr/bin/env bash

set -e

dev="${1:-/dev/mmcblk0}"
part="${2:-p1}"
part_dev="${dev}${part}"
mnt='/mnt/rpi'

sudo apt-get install binutils-arm-none-eabi gcc-arm-none-eabi

# Generate kernel7.img
arm-none-eabi-as start.S -o start.o
arm-none-eabi-gcc -Wall -Werror -O2 -nostdlib -nostartfiles -ffreestanding -c main.c -o main.o
arm-none-eabi-ld start.o main.o -T ldscript -o main.elf
# Get the raw assembly out of the generated elf file.
arm-none-eabi-objcopy main.elf -O binary kernel7.img

# Get the firmware. Those are just magic blobs, likely compiled
# from some Broadcom proprietary C code which we cannot access.
wget -O bootcode.bin https://github.com/raspberrypi/firmware/blob/597c662a613df1144a6bc43e5f4505d83bd748ca/boot/bootcode.bin?raw=true
wget -O start.elf https://github.com/raspberrypi/firmware/blob/597c662a613df1144a6bc43e5f4505d83bd748ca/boot/start.elf?raw=true

# Prepare the filesystem.
sudo umount "$part_dev"
echo 'start=2048, type=c' | sudo sfdisk "$dev"
sudo mkfs.vfat "$part_dev"
sudo mkdir -p "$mnt"
sudo mount "${part_dev}" "$mnt"
sudo cp kernel7.img bootcode.bin start.elf "$mnt"

# Cleanup.
sync
sudo umount "$mnt"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.