Скорость консоли в Raspberry Pi 2 во FreeBSD
При подключении к последовательному порту Raspberri Pi 2 на скоростях, отличных от 115200, обязательно столкнётесь с проблемами, будь то приёмник GPS или просто консоль. Мой интерес - подключить GPS-приёмник NEO-6m... Да-да, тот самый, с Aliexpress с закопчённым чипом, но реально работающий и по замечательной цене. Почему-то разработчики "Малинки" решили, что пора приучать себя и покупателей к "скоростям", и зашили 115200 как скорость консоли в DTB (Device Tree Blob). По некоторым причинам, менять скорость передачи на GPS-приёмнике, мне не подходит, значит надо изменить скорость консоли на "Малине".
Анализ DTS (исходника DTB) выявил блок chosen, в котором указаны рекомендации системе по параметрам консоли:
Отсутствие чётности и длина символа 8 бит нас устраивает, а вот скорость требует коррекции. Чтобы не вносить изменения в глобальное дерево устройств, воспользуемся оверлеями, для чего создадим файл chosen.dts:
и выполним команду:
Полученный файл chosen.dtbo и есть оверлей.
Как его использовать?
Я использую файл /boot/msdos/config.txt, добавляя в него строчку:
и предварительно скопировав оверлей в папку /boot/msdos/overlays/. Но такой способ сработает, только если у вас подключение дерева устройств происходит через /boot/msdos/config.txt строчками:
и файл rpi2.dtb лежит здесь же, в /boot/msdos/.
Если же дерево устройств определяется автоматически из папки /boot/dtb/, то оверлей следует скопировать в папку /boot/dtb/overlays/ и подключать в файле /boot/loader.conf строчкой:
Но этот способ я не проверял. Мне он пока не нравится, так как не могу понять как передать параметры оверлею, если это понадобится.
Как результат, сразу после загрузки:
И последнее...
Я не указал об этом тексте, но, возможно, вы, как и я, пожелаете отключить консоль на порту ttyu0 в файле /etc/ttys, поменяв для соответствующего порта параметр с on или onifconsole на off.
Спасибо за внимание.
CODE:
chosen {
stdout-path = "serial0:115200n8";
};
Отсутствие чётности и длина символа 8 бит нас устраивает, а вот скорость требует коррекции. Чтобы не вносить изменения в глобальное дерево устройств, воспользуемся оверлеями, для чего создадим файл chosen.dts:
CODE:
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2836";
fragment@0 {
target-path = "/";
__overlay__ {
chosen {
stdout-path = "serial0:9600n8";
};
};
};
};
и выполним команду:
CODE:
dtc -@ -I dts -O dtb -o chosen.dtbo chosen.dts
Полученный файл chosen.dtbo и есть оверлей.
Как его использовать?
Я использую файл /boot/msdos/config.txt, добавляя в него строчку:
CODE:
dtoverlay=chosen.dtbo
и предварительно скопировав оверлей в папку /boot/msdos/overlays/. Но такой способ сработает, только если у вас подключение дерева устройств происходит через /boot/msdos/config.txt строчками:
CODE:
device_tree_address=0x100
device_tree=rpi2.dtb
и файл rpi2.dtb лежит здесь же, в /boot/msdos/.
Если же дерево устройств определяется автоматически из папки /boot/dtb/, то оверлей следует скопировать в папку /boot/dtb/overlays/ и подключать в файле /boot/loader.conf строчкой:
CODE:
fdt_overlays=chosen.dtbo
Но этот способ я не проверял. Мне он пока не нравится, так как не могу понять как передать параметры оверлею, если это понадобится.
Как результат, сразу после загрузки:
CODE:
# stty -f /dev/ttyu0
speed 9600 baud;
lflags: -isig -iexten -echo
iflags: -ixon -ixany -imaxbel ignbrk -brkint ignpar
oflags: -opost -onlcr tab0
cflags: cs8 -parenb -hupcl clocal
discard dsusp eof eol eol2 erase erase2 intr kill
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
lnext min quit reprint start status stop susp werase
^@ 0 ^@ ^@ ^@ ^@ ^@ ^@ ^@
И последнее...
Я не указал об этом тексте, но, возможно, вы, как и я, пожелаете отключить консоль на порту ttyu0 в файле /etc/ttys, поменяв для соответствующего порта параметр с on или onifconsole на off.
Спасибо за внимание.
Комментарии
Показывать комментарии Как список | Древовидной структурой