Подтвердить что ты не робот

Горизонтальное программирование Beagleboard

Я только что получил свой BeagleBoard-Xm, и мне интересно, есть ли какие-то подробные пошаговые руководства о том, как получить очень простое программное обеспечение для голого металла, работающее на оборудовании?

Причина, по которой я спрашиваю, я хочу глубоко понять, как работает аппаратная архитектура, все, начиная с загрузчика, линкеров, прерываний, исключений, MMU и т.д. Я решил, что лучший способ - получить простую милую программу мира hello для выполнения на beagleboard xm без ОС. Ничего не продвинулось, просто запустите доску и получите "привет мир" на экране. это оно!

Следующим шагом будет запуск крошечной операционной системы, которая может планировать некоторые очень простые задачи. Не нужна файловая система, чтобы понять основы ОС.

Любая помощь ценится!

С наилучшими пожеланиями

Г-н Гигу

4b9b3361

Ответ 1

Абсолютно не проблема...

Прежде всего, подключитесь к серийному порту, у меня есть один из старых/ранних beagleboards и помните последовательный порт, и почти все о том, что ввод-вывод является болезненным, тем не менее, он получает последовательный порт, чтобы вы могли видеть он загружается.

Он загружает uboot, я думаю, и вы можете нажать клавишу или esc или что-то вроде этого, чтобы прервать обычную загрузку (в Linux). Из приглашения uboot легко загружать первые простые программы.

У меня есть код beagleboard, удобный в данный момент, но у меня нет собственного бигльпорта, чтобы попробовать их. Поэтому перейдите к http://sam7stuff.blogspot.com/, чтобы получить представление о том, как смешивать некоторые ассемблеры запуска и код C для встроенных программ без OS (для руки, у меня есть ряд примеров там для других платформ большого пальца/кортекса-m3, но эти загрузки немного по-другому).

Порт sam7 для вещей и адресное пространство памяти полностью отличаются от beagleboard/omap. Вышесказанное представляет собой структуру, которую вы можете изменить или заново изобрести.

Вам понадобится справочное руководство по OMAP 35x techincal от ti.com. Найдите часть omap на своем сайте OMAP3530.

Также документация beagleboard. Например, это утверждение:

Один порт RS232 предоставляется на BeagleBoard и обеспечивает доступ к TX и RX-линии UART3

Итак, в trm для поиска omap для UART3 показано, что он находится на базовом адресе 0x49020000. (часто очень сложно понять весь адрес для чего-то, поскольку в руководствах обычно есть часть карты памяти здесь, а другая часть там, и рядом с регистрами вызывается только младшие биты адреса.)

Глядя на регистры uart THR_REG - это то место, где вы пишете байты для отправки uart, обратите внимание, что это 16-разрядный регистр.

Зная это, мы можем сделать первую программу:

.globl _start
_start:
    ldr r0,=0x49020000
    mov r1,#0x55
    strh r1,[r0]
    strh r1,[r0]
    strh r1,[r0]
    strh r1,[r0]
    strh r1,[r0]
hang: b hang

Вот файл makefile для него:

ARMGNU = arm-none-linux-gnueabi

AOPS = --warn --fatal-warnings
COPS = -Wall -Werror -O2 -nostdlib -nostartfiles -ffreestanding 

uarttest.bin : uarttest.s
    $(ARMGNU)-as $(AOPS) uarttest.s -o uarttest.o
    $(ARMGNU)-ld -T rammap uarttest.o -o uarttest.elf
    $(ARMGNU)-objdump -D uarttest.elf > uarttest.list
    $(ARMGNU)-objcopy uarttest.elf -O srec uarttest.srec
    $(ARMGNU)-objcopy uarttest.elf -O binary uarttest.bin

И используется компоновщик script:

/* rammap */
MEMORY
{
    ram : ORIGIN = 0x80300000, LENGTH = 0x10000
}

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

Обратите внимание, что вызывается версия Linux из codeourcery, вам не нужна эта версия перекрестного компилятора gnu, на самом деле для этого кода asm нужен только ассемблер и компоновщик (binutils stuff). Перекрестный компилятор arm-none-eabi -... также будет работать (при условии, что вы получите инструменты Lite от codeourcery).

Как только у вас есть .bin файл, посмотрите на справку на uboot, я не помню точную команду, но это, вероятно, l 0x80300000 или load_xmodem или что-то подобное. В основном вы хотите, чтобы x, или y или z модем .bin файл через последовательный порт в пространство памяти для процессора, а затем с помощью go или что-то, что команда сообщает uboot для перехода в вашу программу.

Вы должны увидеть несколько символов U (0x55 - "U" ) выходят из последовательного порта при запуске.

Ваша главная цель - получить простую процедуру последовательного порта, чтобы вы могли распечатать материал для отладки и в противном случае посмотреть, что делают ваши программы. Позже вы можете попасть в графику и т.д., Но сначала используйте последовательный порт.

Произошло какое-то мошенничество. Поскольку uboot подошел и инициализировал серийный порт, который нам не нужно, просто запихните байты в thr. но быстро вы переполняете хранилище thr и теряете байты, поэтому вам нужно прочитать trm для omap и найти какой-то бит, который указывает, что передатчик пуст, он передал все, а затем создал функцию типа uart_send, которая опроса для передатчик пуст, а затем отправляет один байт.

также забываем о printf(), вам нужно создать свой собственный номер печати (восьмеричный или шестнадцатеричный - самый простой) и, возможно, печатать строку. Я делаю эту работу весь день и всю ночь, и в 99% случаев все, что я использую, - это небольшая процедура, которая печатает 32-битные шестнадцатеричные числа из uart. из числа, которое я могу отлаживать и видеть состояние программ.

Итак, возьмите модель sam7 или что-то в этом роде (обратите внимание, что параметры командной строки компилятора и компоновщика важны, как и порядок файлов в командной строке ссылки, первый файл должен быть вашей точкой входа, если вы хотите, чтобы первая инструкция/слово в .bin файле будет вашей точкой входа, что обычно является хорошей идеей, поскольку по дороге вы хотите знать, как управлять этим при загрузке с rom).

Вы, вероятно, можете сделать совсем немного, не удаляя или не заменяя uboot, если вы начнете смотреть на загрузочные команды linux для uboot, вы увидите, что он копирует то, что в значительной степени является .bin файлом со вспышки или где-то в пятно в баране, а затем ветвление на него. Теперь, разветвляясь на linux, esp arm linux включает в себя некоторые таблицы рук и возможность настройки некоторых регистров, где ваши программы не хотят или не нуждаются в этом. в основном, какую бы команду вы ни использовали, после того, как вы скопировали свою программу на ram, это то, что вы будете script в boot script для uboot, если вы решите, что плата будет загружаться и запускаться, как в Linux.

Говоря, что вы можете использовать jtag и не полагаться на uboot для работы, когда вы идете по этому пути, хотя, вероятно, есть определенное количество вещей, которые вы должны сделать при загрузке, чтобы получить чип и запустить его, в частности, настройку uart скорее всего, несколько делителей часов где-то, часы позволяют, I/O позволяет, различные вещи, как это. Вот почему пример sam7 начинается с мигания ведомой вещи вместо вещи uart. Amotek jtag-tiny - хороший jtag wiggler, я был очень доволен, использую их весь день каждый день на работе. Биглетон, вероятно, использует разводки TI, а не стандартную разводку ARM, поэтому вам, вероятно, придется менять кабели. И я не знаю, дает ли OMAP прямой доступ к контроллеру крана или если вам нужно что-то сделать. Тебе лучше идти по пути uboot.

Как только у вас есть инфраструктура, в которой у вас есть небольшое количество asm для установки стека и перехода к коду C исходной точки, вы можете начать превращать этот код C в ОС или делать все, что хотите. Если вы посмотрите на chibios или prex или другие подобные вам, вы обнаружите, что у них есть небольшой загрузочный код asm, который вводит их в свою систему. Кроме того, в нем предусмотрены процедуры отладки и отладки uart. Многие rtoses захотят использовать прерывания и не опросить, чтобы th был пустым.

Если это сообщение не запустится с вашим миром приветствия (позволяя вам выполнить часть работы), сообщите мне, и я выкопаю свой beagleboard и создаю полный пример. Моя доска точно не соответствует вашим требованиям, но, поскольку мир приветствует, он должен быть достаточно близко.