লিনাক্স ওএস ছাড়া রাস্পবেরি পাই ব্যবহার করছেন?


33

এম্বেড থাকা অ্যাপ্লিকেশনগুলির বিকাশের জন্য আমি রাস্পবেরি পাইকে খাঁটি এম্বেড থাকা সিপিইউ ইউনিট হিসাবে ব্যবহার করতে আগ্রহী। যেহেতু রাস্পবেরি পাই একটি শক্তিশালী সিপিইউ রয়েছে বেশ কিছুটা স্মৃতির সাথে, এটি একটি দুর্দান্ত এমবেডেড বোর্ড তৈরি করে।

লিনাক্স ওএস ছাড়া রাস্পবেরি পাই ব্যবহার করা কি সম্ভব? কিভাবে আমি এটি করতে পারব?


2
আমি মনে করি না এটি একটি আসল প্রশ্ন এবং প্রশ্নোত্তর বিন্যাসের জন্য উপযুক্ত নয়।
অ্যালেক্স চেম্বারলাইন

5
কেন না? আপনি কি ভাবেন না যে লোকেরা লিনাক্স ওএস ছাড়া আর কোনও উপায়ে রাপি ব্যবহারের বিষয়ে জিজ্ঞাসা করতে পারে? এই গোষ্ঠীর বাইয়ালের তালিকায় যেখানে এমন একটি বিভাগ রয়েছে যেখানে বলা হয়েছে যে কেউ এই জাতীয় প্রশ্ন করতে পারে না?
ফরহাদ

2
আমি তা বলিনি। আমি প্রকৃতপক্ষে লিনাক্স ব্যবহার করে না এমন কিছু প্রকল্প দেখতে বেশ শীতল হবে বলে মনে করি, তবে আপনি আসলে একটি নির্দিষ্ট উত্তর দিয়ে কোনও প্রশ্ন জিজ্ঞাসা করেননি, বরং আপনি আলোচনার বিষয়টি করেছেন।
অ্যালেক্স চেম্বারলাইন

@ অ্যালেক্সচ্যাম্বারলাইন আমি সম্মত - আমি এটি একটি প্রশ্নে সম্পাদনা করেছি। ফরহাদা - আমি আশা করি এটি ঠিক আছে, এটি বর্তমান অবস্থায় এটি বন্ধ থাকবে। আমার সম্পাদনা পর্যালোচনা এবং উন্নত করুন!
অ্যালেক্স এল

ঠিক আছে, সত্য, আমাকে এটি একটি প্রশ্ন করতে হবে, যেহেতু এটি একটি প্রশ্নোত্তর সাইট :)
ফরহাদ

উত্তর:


23

আমি রাস্পবেরি পাইতে খালি ধাতব প্রোগ্রামিংয়ের দিকে নজর রেখেছি এবং আপনি যা করতে চান তা মনে হচ্ছে। কিছু লোকের সাথে বেয়ার মেটাল প্রোগ্রামিং সম্পর্কে বেশ কয়েকটি ভাল ফোরামের বিষয় রয়েছে যাঁরা তাদের কোডটি কাজ করার জন্য প্রচুর প্রচেষ্টা করেছেন। শুরু করার জন্য এগুলি পরীক্ষা করে দেখুন:

রস্পিতে বেয়ার মেটাল শুরু করার জন্য গাইড

খালি ধাতব উপর আরপিআই প্রোগ্রামিং

বেসিক ইন বিয়ার মেটাল টিউটোরিয়াল 1 এ প্রোগ্রামিং

বা সাধারণভাবে আপনি রাস্পবেরি পাইয়ের বেয়ার মেটাল ফোরামে যেতে পারেন এবং কেবল ব্রাউজ করতে পারেন।

আমার বোধগম্যতা হল ব্রডকম চিপে অন্তর্ভুক্ত বুট সিকোয়েন্সের কারণে আপনাকে এসডি কার্ড থেকে বুট করতে হবে। আমি বুট সিকোয়েন্সের জন্য লিঙ্কটি সন্ধান করার চেষ্টা করছি তবে আমার গুগল ফু কাজ করছে না, আমি যদি এটি খুঁজে পাই তবে পরে সম্পাদনা করব।


3
এছাড়াও, আপনি এই টিউটোরিয়ালটি ব্যবহার করতে পারেন: cl.cam.ac.uk/freshers/raspberrypi/tutorials/os এটি একটি অপারেটিং সিস্টেম তৈরির বিষয়ে, তবে আপনি যদি কোনও অপারেটিং সিস্টেম সম্পর্কে আপনার ধারণা বাড়িয়ে দেন তবে এটি এম্বেডড সিস্টেমে প্রয়োগ করা যেতে পারে।
ohblahitsme

6

এটি বুট করার একমাত্র উপায় হ'ল ফ্যাট 32 ফর্ম্যাট করা এসডিকার্ড থেকে, পাওয়ারন থেকে জিপিইউ ফার্মওয়্যার লোডিংয়ে চলে যায় যা কার্নেল.আইএমগ নামের কোনও আর্ম বাইনারি ফাইল কার্যকর করে তাই আপনি যদি কোনও কাস্টম কার্নেল তৈরি করতে চান যা আপনি যা করতে চাইছেন তা করে এই মুহূর্তে


3
হ্যাঁ, তবে আমি যা করতে চাই তা নয়, আমি চিপের বুট কোডটি পরিবর্তন করা সম্ভব কিনা তা জানতে চাইলে এসডি কার্ডের পরিবর্তে বুট চিত্রটি সন্ধান করার পরিবর্তে এটি পরিবর্তন করা যেতে পারে পরিবর্তে সেখান থেকে একটি এসপিআই ফ্ল্যাশ স্মৃতি এবং বুট করুন। এইভাবে, বুট কোডটি এসপিআই ফ্ল্যাশ মেমরির মতো এটি 25250040 বা এটি 25 ডিএফ 641 বা অন্যান্য অনুরূপ ইউনিটগুলিতে থাকতে পারে। এম্বেড থাকা অ্যাপ্লিকেশনগুলির জন্য, এগুলি সমস্ত কোড সঞ্চয় করার জন্য যথেষ্ট এবং বুট হওয়ার পরে সেগুলি এসডিআরএমে লোড করা যায়। তবে বুট রম কোড পরিবর্তন করা বড় চ্যালেঞ্জ।
ফরহাদ

9
আপনি নিজের প্রশ্নে মোটেই যা চেয়েছিলেন তা নয়।
অ্যালিস্টায়ার বুকসটন

আমি জানি, তবে রাপি বুট ক্রম সম্পর্কে আমার জ্ঞান সীমাবদ্ধ, ভোট দেওয়া এবং এই বর্তমান ফর্ম্যাটে সম্পাদনা করার আগে আমার মূল প্রশ্নে আমার যথাযথ প্রশ্ন ছিল।
ফরহাদ

2
@ ফারহদা - আপনার এখানে প্রথম মন্তব্যটি আমার কাছে দেখে মনে হচ্ছে এটি নিজের মতো করে একটি বাস্তব, উত্তরযোগ্য প্রশ্ন হিসাবে দাঁড়াবে। এটি অবশ্যই এই প্রশ্নের মূল ফর্ম ভাল হবে।
মার্ক বুথ

ঠিক আছে, আমি যেমন বলেছিলাম রাসপি বুট ক্রম সম্পর্কে আমার জ্ঞান সীমাবদ্ধ। আমি এসডি কার্ডে একটি সাধারণ বুট ফাইল তৈরির দিকে ঝুঁকছি এবং আমার নিজের এক্সপেনশন বোর্ডে এসপিআই ভিত্তিক ফ্ল্যাশ থেকে অ্যাপ্লিকেশনটি লোড করছি। আমার সিস্টেমে এসডি কার্ড থাকা আমার পক্ষে সত্যিই পছন্দ নয় তবে এটি করার একমাত্র দ্রুত এবং নোংরা উপায় বলে মনে হয়। এখন আমাকে রাসপির জন্য কীভাবে একটি সহজ বুট কোড তৈরি করতে হবে তা শিখতে হবে :)
ফরহাদ

4

আমি সি # তে একটি আইবিএম এস / 390 এমুলেটর তৈরি করেছি যা তাত্ত্বিকভাবে মনো / লিনাক্সের অধীনে চলবে কারণ এটি সিআইএল কোডটি সংকলন করে এবং কোনও সমর্থনবিহীন। নেট সংস্থান ব্যবহার করে না। এটি একটি কাস্টম সীমাবদ্ধ রাষ্ট্রীয় মেশিন দোভাষী দিয়ে প্ল্যাটফর্মের স্বাধীন নিয়ন্ত্রণ টেবিলগুলি ব্যবহার করে এম্বেডযুক্ত সমাধানগুলিকে অনুমতি দেবে। যদিও এর পটভূমিতে এখনও প্রয়োজনীয় লিনাক্স ও / এস থাকতে পারে।


2

সম্পূর্ণ স্বয়ংক্রিয়ভাবে ন্যূনতম ধাতু ঝলক উদাহরণ

উবুন্টু 16.04 হোস্ট, রাস্পবেরি পাই 2 তে পরীক্ষিত ব্যবহার:

  1. হোস্টে এসডি কার্ড .োকান

  2. ছবিটি তৈরি করুন:

    ./make.sh /dev/mmblck0 p1
    

    কোথায়:

    • /dev/mmblck0 এসডি কার্ডের ডিভাইস
    • p1ডিভাইসের প্রথম পার্টিশন ( /dev/mmblck0p1)
  3. পিআই-তে ইনসেট এসডি কার্ড

  4. পাওয়ার বন্ধ এবং চালু করুন

এখানে চিত্র বর্ণনা লিখুন

গিটহাব আপস্ট্রিম: https://github.com/cirosantilli/raspberry-pi-bare-metal-blinker/tree/d20f0337189641824b3ad5e4a688aa91e13fd764

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"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.