Использование Raspberry Pi без ОС Linux?

Я заинтересован в использовании Raspberry Pi в качестве чистого встроенного процессора, для разработки встроенных приложений. Поскольку у Raspberry Pi есть мощный процессор с довольно небольшой памятью, он делает отличную встроенную плату.

Можно ли использовать Raspberry Pi без ОС Linux? Как я могу это сделать?

30 голосов | спросил FarhadA 20 J0000006Europe/Moscow 2012, 10:53:01

4 ответа


22

Я посмотрел на голые метапрограммы на малине Pi, и это звучит так, как вы хотите. Есть несколько хороших тем форума о голых программировании с некоторыми людьми, которые приложили много усилий, чтобы заставить их работать. Проверьте их для начала:

Руководство по началу работы с Bare Metal на Raspi

Программирование RPi на голом металле

Программирование в основном на учебнике Bare Metal 1

или вообще вы можете зайти на форум Bare Metal от малины Pi и просто просматривать.

Я понимаю, что вам придется загрузиться с SD-карты из-за последовательности загрузки, встроенной в чип Broadcom. Я пытаюсь найти ссылку для последовательности загрузки, но мой google fu не работает, я отредактирую позже, если найду его.

ответил Dan B 24 J000000Tuesday12 2012, 22:59:37
6

единственный способ, которым он будет загружаться, - это отформатированная SD-карта fat32, идет от загрузки прошивки poweron к gpu, которая выполняет любой двоичный файл arm с именем kernel.img, поэтому, если вы хотите создать собственное ядро, которое делает то, что вы ищете сделать это в этот момент

ответил joe 20 J0000006Europe/Moscow 2012, 14:30:57
3

Я создал эмулятор IBM S /390 на C #, который теоретически будет работать под Mono /Linux, когда он компилируется в код CIL и не использует какие-либо не поддерживаемые ресурсы .NET. Это позволит встроенным решениям использовать платформенные независимые таблицы управления с помощью специального интерпретатора конечных автоматов. Тем не менее, в фоновом режиме он все еще будет иметь существенный Linux O /S.

ответил Kenneth Dakin 18 J000000Wednesday12 2012, 17:56:16
2

Полностью автоматизированный пример минимального голого металлического бликера

Протестировано на Ubuntu 16.04 хост, малина Pi 2. Использование:

  1. Вставьте SD-карту на хост

  2. Сделайте изображение:

    ./make.sh /dev/mmblck0 p1
    

    Где:

    • /dev/mmblck0 - это устройство SD-карты.
    • p1 - это первый раздел устройства (/dev/mmblck0p1)
  3. Вставить SD-карту в PI

  4. Выключите и включите питание

 введите описание изображения здесь>> </a> </p>

<p> GitHub вверх по течению: <a href= https://github.com/cirosantilli /малиновый-пи-голый металл-блинкер /дерево /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"
ответил Ciro Santilli 新疆改造中心 六四事件 法轮功 15 +03002016-10-15T22:02:10+03:00312016bEurope/MoscowSat, 15 Oct 2016 22:02:10 +0300 2016, 22:02:10

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132