LINUX.ORG.RU

Как включить BTклавиатуру до логина при boot-е openSuSE на RPi3

 , ,


1

1

Сообществу моё почтение…

С ’17 пользуюсь я RPi3 под Raspbian-ом и решил посмотреть есть ли жизнь в aarch64, ибо 4 ядра Cortex-A53 это оно самое. В конце-концов остановился на образе openSUSE-Leap-15.2-ARM-XFCE-raspberrypi3.aarch64-2020.05.12-Build1.54.raw: грузится нормально, но… управлять bluetooth-ом «по-человечески» невозможно (в Raspbian-е управление BT висит в панели в трее: вкл\выкл, видимость, добавить\удалить устройство), до этого, всё время с RPi3 используется BT-клавиатура BKB50 (запаривается без проблем).

В книжках у мну про openSuSE (не самых свежих, честно говоря, v12) за BT речи нет вообще. Нашёл в SLES12SP3-rpiquick_color_en.pdf («Introduction to SLES for ARM on the RPi») «заветные» команды, но пришлось победить:

  • ttyAMA0 - нет: «гении» организовали ttyAMA1 (в отсутствие AMA0 - зачем, чтоб документацией «веселее» пользовалось?);
  • «Patch not found for BCM43430A1, continue anyway»: нашёл и положил куда следует BCM43430A1.hcd, BDAddress стал совпадать с адресом в Raspbian-е;
  • hcitool scan не находил клавиатуру: bluetoothctl - решение: BKB50 запарилась нормально.

НО! Вопрос\задача: как включать BT (для клавиатуры) на этапе загрузки до login-экрана? Тут моего соображения не хватает, прошу совета-помощи, куда-что прописать?

Ответ на: комментарий от Genoantroposs

«пересобрать образ ядра» (initramfs) и «пересобрать ядро» — разные вещи.

https://unix.stackexchange.com/questions/29453/how-to-create-an-initrd-image-on-opensuse-linux

With OpenSUSE, you can use

yast2 sysconfig

fill in ‘INITRD_MODULES’ with module you need and apply.

https://forums.opensuse.org/showthread.php/500207-Need-the-bluetooth-activated-at-boot-before-login

greenman ★★★★★ ()
Последнее исправление: greenman (всего исправлений: 3)

Ну что, любезное сообщество, хрень какая-то получается с «подъёмом» набортного блютуса до логина на RPi3 под openSuSE Leap 15.2.

Просто так, двумя командами hciattach и hciconfig заранее «запаренная» BKB50 подхватывается без проблем:

localhost:~ # systemctl status --no-pager -l BT_cntrllr
● BT_cntrllr.service - OnBoardBT_ControllerUP_Unit
   Loaded: loaded (/etc/systemd/system/BT_cntrllr.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
localhost:~ # systemctl status --no-pager -l bluetooth
● bluetooth.service - Bluetooth service
   Loaded: loaded (/usr/lib/systemd/system/bluetooth.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:bluetoothd(8)
localhost:~ # hciattach /dev/ttyAMA1 bcm43xx 921600
bcm43xx_init
Flash firmware /lib/firmware/brcm/BCM43430A1.hcd
Set Controller UART speed to 921600 bit/s
Device setup complete
localhost:~ # hciconfig -a
hci0:	Type: Primary  Bus: UART
	BD Address: B8:27:EB:F0:33:F5  ACL MTU: 1021:8  SCO MTU: 64:1
	DOWN 
	RX bytes:654 acl:0 sco:0 events:33 errors:0
	TX bytes:419 acl:0 sco:0 commands:33 errors:0
	Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
	Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
	Link policy: RSWITCH SNIFF 
	Link mode: SLAVE ACCEPT 

localhost:~ # hciconfig hci0 up
localhost:~ # hciconfig -a
hci0:	Type: Primary  Bus: UART
	BD Address: B8:27:EB:F0:33:F5  ACL MTU: 1021:8  SCO MTU: 64:1
	UP RUNNING 
	RX bytes:3312 acl:87 sco:0 events:108 errors:0
	TX bytes:1900 acl:46 sco:0 commands:80 errors:0
	Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
	Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
	Link policy: RSWITCH SNIFF 
	Link mode: SLAVE ACCEPT 
	Name: 'BlueZ 5.48'
	Class: 0x000104
	Service Classes: Unspecified
	Device Class: Computer, Desktop workstation
	HCI Version: 4.1 (0x7)  Revision: 0x1ed
	LMP Version: 4.1 (0x7)  Subversion: 0x2209
	Manufacturer: Broadcom Corporation (15)

localhost:~ # systemctl status --no-pager -l bluetooth
● bluetooth.service - Bluetooth service
   Loaded: loaded (/usr/lib/systemd/system/bluetooth.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2020-07-07 19:42:19 MSK; 4min 7s ago
     Docs: man:bluetoothd(8)
 Main PID: 1659 (bluetoothd)
   Status: "Running"
    Tasks: 1
   CGroup: /system.slice/bluetooth.service
           └─1659 /usr/lib/bluetooth/bluetoothd

Jul 07 19:42:18 localhost systemd[1]: Starting Bluetooth service...
Jul 07 19:42:19 localhost bluetoothd[1659]: Bluetooth daemon 5.48
Jul 07 19:42:19 localhost bluetoothd[1659]: Starting SDP server
Jul 07 19:42:19 localhost systemd[1]: Started Bluetooth service.
Jul 07 19:42:19 localhost bluetoothd[1659]: Bluetooth management interface 1.14 initialized
localhost:~ # 
И в /sys/class появляется ./bluetooth/ с кучей служебного файлА и демон блютусовский взлетает - всё типа нормально.

А вот во время boot-а выполнить заветные две команды не получается; про systemd (service и unit) сколько смог почитал; файлик службы сочинил:

[Unit]
Description=OnBoardBT_ControllerUP_Unit
Documentation=
ConditionPathExists=/usr/bin/hciattach
ConditionPathExists=/usr/bin/hciconfig
ConditionPathExists=/etc/BKB50.conf
Before=bluetooth.target

[Service]
Type=oneshot
EnvironmentFile=/etc/BKB50.conf
ExecStart=/usr/bin/hciattach /dev/ttyAMA1 bcm43xx 921600 ; /usr/bin/hciconfig hci0 up 

[Install]
WantedBy=multi-user.target
«enable» сделал; при boot-е всегда почему-то перед OnBoardBT_ControllerUP_Unit стартует служба Bluetooth, после сразу выключается. BKB50 не заработала ни разу, хоть и всё «SUCCESS». Состояние после логина:
# systemctl status --no-pager -l BT_cntrllr
● BT_cntrllr.service - OnBoardBT_ControllerUP_Unit
   Loaded: loaded (/etc/systemd/system/BT_cntrllr.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Fri 2020-04-17 16:12:51 MSK; 2 months 20 days ago
  Process: 833 ExecStart=/usr/bin/hciconfig hci0 up (code=exited, status=0/SUCCESS)
  Process: 497 ExecStart=/usr/bin/hciattach /dev/ttyAMA1 bcm43xx 921600 (code=exited, status=0/SUCCESS)
 Main PID: 833 (code=exited, status=0/SUCCESS)

Apr 17 16:12:44 localhost systemd[1]: Starting OnBoardBT_ControllerUP_Unit...
Apr 17 16:12:49 localhost hciattach[497]: bcm43xx_init
Apr 17 16:12:49 localhost hciattach[497]: Flash firmware /lib/firmware/brcm/BCM43430A1.hcd
Apr 17 16:12:49 localhost hciattach[497]: Set Controller UART speed to 921600 bit/s
Apr 17 16:12:49 localhost hciattach[497]: Device setup complete
Apr 17 16:12:51 localhost systemd[1]: Started OnBoardBT_ControllerUP_Unit.
localhost:~ # systemctl status --no-pager -l bluetooth
● bluetooth.service - Bluetooth service
   Loaded: loaded (/usr/lib/systemd/system/bluetooth.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2020-04-17 16:12:49 MSK; 2 months 20 days ago
     Docs: man:bluetoothd(8)
 Main PID: 836 (bluetoothd)
   Status: "Running"
    Tasks: 1
   CGroup: /system.slice/bluetooth.service
           └─836 /usr/lib/bluetooth/bluetoothd

Apr 17 16:12:49 localhost systemd[1]: Starting Bluetooth service...
Apr 17 16:12:49 localhost bluetoothd[836]: Bluetooth daemon 5.48
Apr 17 16:12:49 localhost bluetoothd[836]: Starting SDP server
Apr 17 16:12:49 localhost bluetoothd[836]: Bluetooth management interface 1.14 initialized
Apr 17 16:12:49 localhost systemd[1]: Started Bluetooth service.
Apr 17 16:12:51 localhost bluetoothd[836]: Ignoring index removal for a non-existent adapter
localhost:~ # hciconfig -a
localhost:~ #
т.е. блютус-контроллера нет (/sys/class/bluetooth пустой), а демон работает Ж8-(

Ключ Before (поздняя добавка) не влияет ни на что.

В общем херь какая-то, что пнуть не ясно.

Genoantroposs ()
/etc/bluetooth/main.conf  

[General]
DiscoverableTimeout = 0
Discoverable=true

[Policy]
AutoEnable=true

Перезагружаешься и проверяешь.
Должно заработать.
Сам так делал для мыши и клавы.
Но у меня PC,а не RPi и синька по USB свистку работает.

TomBOY ★★ ()
Ответ на: комментарий от TomBOY

Не, хиромантия это всё.

/etc/bluetooth относится к BlueZ, глянул я http://www.linuxfromscratch.org/blfs/view/systemd/general/bluez.html - явного криминала нет, а

 Note

Systemd will start the Bluetooth daemon only when a bluetooth device is detected on the system. 
всё по местам расставляет. wireless-чипсет в части «синьки» теми двумя командами поднимается, а они при boot-е почему-то как положено не исполняются.

Попробовал blueman-2.1.2-25.13.aarch64 поставить для визуальносити:

#### YaST2 conflicts list - generated 2020-07-08 19:46:37 ####

nothing provides notification-daemon needed by blueman-2.1.2-25.13.aarch64

    [ ] break blueman-2.1.2-25.13.aarch64 by ignoring some of its dependencies

    [ ] do not install blueman-2.1.2-25.13.aarch64




#### YaST2 conflicts list END ###

Вообще, похоже Сусям на конкретное «железо» с прибором: глянул в ясте - пакет фирмвари для wifi-bt установлен и, типа, нужный .hcd есть, вот только его на самом деле не было ни где яст сообщал, ни где hciattach собирался брать )-8Ж

Genoantroposs ()
Ответ на: комментарий от Genoantroposs

Если после загрузки, когда всё как бы сработало, но BT не работает, вручную запускать ваш юнит, то взлетает или в юните нужные команды не отрабатывают?

Может быть нужно убрать ″;″, написав две дерективы ″ExecStart″. Может вам нужно отредактировать «Bluetooth service», засунув ″hciattach″ в ExecStartPre.

mky ★★★★★ ()

#НашиПобедили!!!

Yesss! «Блюпуп»-клавиатура теперь доступна при логине на RPi3 под openSuSE Leap15.2.

Заранее запариваем клавиатуру; в /etc/systemd/system создаём файлик с содержимым:

[Unit]
Description=>>>>>   OnBoardBT_ControllerUP_Unit   <<<<<
Documentation=
ConditionPathExists=/usr/bin/hciattach
ConditionPathExists=/usr/bin/hciconfig
ConditionPathExists=/etc/BKB50.conf
After=syslog.target
Before=bluetooth.service

[Service]
Type=oneshot
RemainAfterExit=true
#EnvironmentFile=/etc/BKB50.conf
ExecStart=/usr/bin/hciattach /dev/ttyAMA1 bcm43xx 921600 
ExecStartPost=/usr/bin/hciconfig hci0 up 

[Install]
WantedBy=graphical.target multi-user.target

называем его BT_cntrllrUP.service (я назвал вот так); регистрируем эту службу (ну мало-ли):

systemctl enable BT_cntrllrUP.service
перезагружаем «малину»... и логин\пароль с «блюпуп-клавы» (-;

PS: НО! Джентльмены, «„стоило ли так напрягаться, чтобы узнать так мало?“, - как сказал дошкольник, дойдя до конца азбуки». Это я к тому, что мутность документации (пока дошёл до RemainAfterExit, да чтоб ещё и true) запредельная \-8Ж

Genoantroposs ()
Ответ на: комментарий от Genoantroposs

мутность документации запредельная

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

TomBOY ★★ ()