Ports/aarch64/Raspberry Pi4: различия между версиями
Gremlin (обсуждение | вклад) (photo) |
Gremlin (обсуждение | вклад) (boot & firmware) |
||
Строка 1: | Строка 1: | ||
[[File:Raspberry_Pi4.jpg|thumbnail|240px|Собственно, сабж. Внизу - питание и microHDMI, справа - USB и Ethernet, к плате подключены последовательный порт (бело-красно-черный провод) и кнопка Reset (сине-белый провод)]] | [[File:Raspberry_Pi4.jpg|thumbnail|240px|Собственно, сабж. Внизу - питание и microHDMI, справа - USB и Ethernet, к плате подключены последовательный порт (бело-красно-черный провод) и кнопка Reset (сине-белый провод)]] | ||
[[Category:ARM]] [[Category:AArch64]] | |||
Данное описание относится в основном к Pi4, но в целом подходит и для других железок на основе Broadcom BCM2711 или даже BCM2710 (как, например, Pi3). | Данное описание относится в основном к Pi4, но в целом подходит и для других железок на основе Broadcom BCM2711 или даже BCM2710 (как, например, Pi3). | ||
Строка 39: | Строка 40: | ||
Вам понадобится двух- или трехконтактный разъем, аналогичный GPIO-гребенке - с расстоянием между контактами в одну линию (2.54 мм, 1/10 дюйма). Его место на плате малины можно легко опознать по надписям RUN и Global_EN. Так вот: если этот самый Global_EN (правый контакт) соединить с общим (центральный контакт) - это и будет нажатие кнопки Reset. | Вам понадобится двух- или трехконтактный разъем, аналогичный GPIO-гребенке - с расстоянием между контактами в одну линию (2.54 мм, 1/10 дюйма). Его место на плате малины можно легко опознать по надписям RUN и Global_EN. Так вот: если этот самый Global_EN (правый контакт) соединить с общим (центральный контакт) - это и будет нажатие кнопки Reset. | ||
== Загрузочный раздел и firmware == | |||
=== Процесс загрузки === | |||
Внутри ПЗУ малины находится примитивный начальный загрузчик, который выполняет следующие действия: | |||
* проверяет доступность SDHC-флешки (скорее всего, SDXC его тоже устроит, а вот просто SD не воспринимает) | |||
* проверяет наличие на ней корректной таблицы разделов MBR (если когда-то там делали GPT, нужно вычистить все ошметки) | |||
* проверяет существование первого раздела с типом FAT32 (/dev/sdx1 0x0C) | |||
* запускает основной загрузчик, находящийся в файле start4.elf (на старых малинах - start.elf) | |||
Основной загрузчик читает с того же раздела файл config.txt и в целом принимает его к сведению, но действует все же по собственному разумению. Выглядит этот файл примерно так: | |||
<pre> | |||
arm_64bit=1 | |||
device_tree=bcm2711-rpi-4-b.dtb | |||
enable_gic=1 | |||
dtoverlay=disable-bt | |||
enable_uart0=1 | |||
init_uart_baud=115200 | |||
dtoverlay=vc4-fkms-v3d | |||
gpu_mem=32 | |||
disable_overscan=1 | |||
ignore_lcd=1 | |||
display_default_lcd=0 | |||
hdmi_force_hotplug=1 | |||
max_frambuffers=2 | |||
framebuffer_priority=2 | |||
</pre> | |||
Нетрудно видеть, что именно здесь мы разрешаем процессору использовать 64-битный режим, загружаем параметры Device Tree, включаем ПКП (который, кстати, появился только на четвертой малине), отключаем bluetooth и освобождаем последовательный порт для консоли, устанавливаем скорость этого порта, а также настраиваем видеоподсистему. Когда все настроено, загрузчик запускает ядро из файла kernel8.img и передает ему параметры - как на свое усмотрение, так и из файла cmdline.txt | |||
=== Firmware === | |||
Распространяется в виде готовых бинарников, доступно по адресу https://github.com/raspberrypi/firmware | |||
К сожалению, репозитарий превращен в помойку - помимо собственно firmware туда зачем-то пихают ядра (собранные непонятно кем непонятно как) и какой-то дополнительный софт. Поэтому просто вытягиваем оттуда актуальную версию: | |||
git clone --depth=1 https://github.com/raspberrypi/firmware | |||
и копируем нужные файлы к себе: | |||
cp -a boot/bootcode.bin boot/fixup*dat boot/start*elf ~/packages/rpi4-firmware/ | |||
Все, копию репозитария можно удалять - больше от нее никакой пользы. | |||
=== Создание загрузочного раздела === |
Версия от 15:46, 10 сентября 2019
Данное описание относится в основном к Pi4, но в целом подходит и для других железок на основе Broadcom BCM2711 или даже BCM2710 (как, например, Pi3).
Аппаратная часть и отладка
Самая большая сложность - практически полное отсутствие документации. Это, конечно, Broadcom, но все равно фу такими быть. Тем не менее, три самых главных отладочных средства на малине есть и работают.
JTAG
Очень надеюсь, что в такие дебри вам лезть не потребуется, но на всякий случай...
Положите малину разъемами питания и видео к себе, а разъемами Ethernet и USB вправо. В левом дальнем углу окажется 40-контактная гребенка GPIO:
2 oooooooooooooooooooo 40 1 oooooooooooooooooooo 39
Соответствие сигналов JTAG (3.3V TTL) и контактов GPIO такое:
Name Pin Function TCLK 22 test clock TDI 37 test data in TDO 18 test data out TMS 13 test master-slave TRCK 16 test return clock TRST 15 test reset
Общий провод (GND) можно подключить к любому из контактов 6,9,14,20,25,30,34,39; рекомендую использовать одновременно 14, 20 и 39 ввиду их максимальной близости к сигнальным. Питание +3.3V можно взять с контактов 1 или 17; питание +5V присутствует на контактах 2 и 4.
Консоль
/dev/ttyAMA0 115200 8N1, 3.3V TTL. Подключать очень удобно - три контакта подряд:
Name Pin Function URXD 10 UART RX data UTXD 08 UART TX data
Разумеется, общий провод (GND) в этом случае удобнее всего подключить к 6 контакту. Главное, не промахнитесь: рядом +5V, которые уже могут быть опасными для USB-serial адаптера (рекомендую PL2303 и CH340, они более живучие).
Кнопка RESET
Увы, незаменимая вещь. Впрочем, здесь разработчики малины немного сэкономили: контактные площадки на плате есть, а разъем туда не впаян. Если вы уверены в своих руках и знаете, с какой стороны браться за паяльник - ничего сложного. Если есть сомнения - обратитесь к тому, кто умеет. Вам понадобится двух- или трехконтактный разъем, аналогичный GPIO-гребенке - с расстоянием между контактами в одну линию (2.54 мм, 1/10 дюйма). Его место на плате малины можно легко опознать по надписям RUN и Global_EN. Так вот: если этот самый Global_EN (правый контакт) соединить с общим (центральный контакт) - это и будет нажатие кнопки Reset.
Загрузочный раздел и firmware
Процесс загрузки
Внутри ПЗУ малины находится примитивный начальный загрузчик, который выполняет следующие действия:
- проверяет доступность SDHC-флешки (скорее всего, SDXC его тоже устроит, а вот просто SD не воспринимает)
- проверяет наличие на ней корректной таблицы разделов MBR (если когда-то там делали GPT, нужно вычистить все ошметки)
- проверяет существование первого раздела с типом FAT32 (/dev/sdx1 0x0C)
- запускает основной загрузчик, находящийся в файле start4.elf (на старых малинах - start.elf)
Основной загрузчик читает с того же раздела файл config.txt и в целом принимает его к сведению, но действует все же по собственному разумению. Выглядит этот файл примерно так:
arm_64bit=1 device_tree=bcm2711-rpi-4-b.dtb enable_gic=1 dtoverlay=disable-bt enable_uart0=1 init_uart_baud=115200 dtoverlay=vc4-fkms-v3d gpu_mem=32 disable_overscan=1 ignore_lcd=1 display_default_lcd=0 hdmi_force_hotplug=1 max_frambuffers=2 framebuffer_priority=2
Нетрудно видеть, что именно здесь мы разрешаем процессору использовать 64-битный режим, загружаем параметры Device Tree, включаем ПКП (который, кстати, появился только на четвертой малине), отключаем bluetooth и освобождаем последовательный порт для консоли, устанавливаем скорость этого порта, а также настраиваем видеоподсистему. Когда все настроено, загрузчик запускает ядро из файла kernel8.img и передает ему параметры - как на свое усмотрение, так и из файла cmdline.txt
Firmware
Распространяется в виде готовых бинарников, доступно по адресу https://github.com/raspberrypi/firmware К сожалению, репозитарий превращен в помойку - помимо собственно firmware туда зачем-то пихают ядра (собранные непонятно кем непонятно как) и какой-то дополнительный софт. Поэтому просто вытягиваем оттуда актуальную версию:
git clone --depth=1 https://github.com/raspberrypi/firmware
и копируем нужные файлы к себе:
cp -a boot/bootcode.bin boot/fixup*dat boot/start*elf ~/packages/rpi4-firmware/
Все, копию репозитария можно удалять - больше от нее никакой пользы.