RPi3 与 SenseHat 和 Yocto
RPi3 with SenseHat and Yocto
我目前正在为安装了 SenseHat 的 RPi3 构建 Yocto Image。
Yocto 图像由以下层组成:
- 元
- meta-poky
- 元-oe
- 元网络
- 元python
- 元树莓派
- 元java
- 特定于应用程序的层。
应用程序特定层主要负责加载以下内核模块:
- i2c-dev
- fb_sys_fops
- syscopyarea
- sysfillrect
- sysimgblt
- rpisense_core
- rpisense_js
- rpisense_fb
它还包含 openssh、psplash、gcc、make、libiio、rtimulib 和其他一些杂项。包。
我的映像在没有安装 SenseHat 的情况下可以很好地启动,但是在安装时启动过程在到达 UART shell 之前停止。它会一直冻结,直到系统被看门狗重置。
以下是系统冻结前UART输出的最后一部分。
{...}
Populating dev cache
ALSA: Restoring mixer settings...
/usr/sbin/alsactl: load_state:1735: No soundcards found...
Tue Nov 1 10:01:54 UTC 2016
INIT: Entering runlevel: 5
Configuring network interfaces... [ 5.130327] smsc95xx 1-1.1:1.0 eth0: hardware isn't capable of remote wakeup
udhcpc (v1.24.1) started
Sending discover...
[ 6.662428] smsc95xx 1-1.1:1.0 eth0: link up, 100Mbps, full-duplex, lpa 0x4DE1
[ 6.688217] cfg80211: Calling CRDA to update world regulatory domain
Sending discover...
Sending select for 192.168.0.106...
Lease of 192.168.0.106 obtained, lease time 3600
/etc/udhcpc.d/50default: Adding DNS 192.168.0.20
/etc/udhcpc.d/50default: Adding DNS 192.168.0.40
done.
Starting system message bus: dbus.
Starting OpenBSD Secure Shell server: sshd
[ 9.034713] NET: Registered protocol family 10
done.
Starting rpcbind daemon...done.
Starting advanced power management daemon: No APM support in kernel
(failed.)
Starting bluetooth
bluetoothd
Starting syslogd/klogd: done
* Starting Avahi mDNS/DNS-SD Daemon: avahi-daemon
[ 9.401783] Bluetooth: Core ver 2.20
[ 9.405528] NET: Registered protocol family 31
[ 9.410088] Bluetooth: HCI device and connection manager initialized
[ 9.416576] Bluetooth: HCI socket layer initialized
[ 9.421576] Bluetooth: L2CAP socket layer initialized
[ 9.426747] Bluetooth: SCO socket layer initialized
...done.
Starting Telephony daemon
[ 9.507315] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[ 9.512765] Bluetooth: BNEP filters: protocol multicast
[ 9.518098] Bluetooth: BNEP socket layer initialized
Starting Linux NFC daemon
[ 9.624816] nfc: nfc_init: NFC Core ver 0.1
[ 9.629241] NET: Registered protocol family 39
我应该注意到我已经将三根电线焊接到 UART 引脚上:
当系统卡死时,我仍然可以ping通设备,但是SSH不起作用。
知道是什么导致了这种行为吗?
事实证明,问题出在 yocto local.conf 文件中。设置了以下行:
ENABLE_I2C = "1"
这创建了第二个 i2c 驱动程序,导致其中一个在启动时崩溃。
致所有 google 员工:无需设置此标志。相反,请确保 i2c-dev 内核驱动程序在启动时加载。
我没用过蓝牙,不过好像系统没有死机,就是蓝牙连接的时候UART数据丢失了。
来自 here:
在 rpi3 上,这是正常的,因为 Raspberry Pi3 上的 BCM2837 有 2 个 UART(和它的前辈一样),但是为了支持蓝牙功能,功能齐全的 PL011 UART 从插头引脚移到了蓝牙芯片,迷你 UART 制作可用于收割台引脚 8 和 10。
这对串行接口的用户有很多影响。
以前用来访问UART的/dev/ttyAMA0现在连接到蓝牙。
我建议您再试一次 config.txt
dtoverlay=pi3-disable-bt
enable_uart=1
如果您确实需要蓝牙,请使用
dtoverlay=pi3-miniuart-bt
对于 ssh,在您的图像配方中添加 "openssh",并添加依赖项以像 wpa-supplicant 一样连接(不要忘记配置它)
我目前正在为安装了 SenseHat 的 RPi3 构建 Yocto Image。
Yocto 图像由以下层组成:
- 元
- meta-poky
- 元-oe
- 元网络
- 元python
- 元树莓派
- 元java
- 特定于应用程序的层。
应用程序特定层主要负责加载以下内核模块:
- i2c-dev
- fb_sys_fops
- syscopyarea
- sysfillrect
- sysimgblt
- rpisense_core
- rpisense_js
- rpisense_fb
它还包含 openssh、psplash、gcc、make、libiio、rtimulib 和其他一些杂项。包。
我的映像在没有安装 SenseHat 的情况下可以很好地启动,但是在安装时启动过程在到达 UART shell 之前停止。它会一直冻结,直到系统被看门狗重置。
以下是系统冻结前UART输出的最后一部分。
{...}
Populating dev cache
ALSA: Restoring mixer settings...
/usr/sbin/alsactl: load_state:1735: No soundcards found...
Tue Nov 1 10:01:54 UTC 2016
INIT: Entering runlevel: 5
Configuring network interfaces... [ 5.130327] smsc95xx 1-1.1:1.0 eth0: hardware isn't capable of remote wakeup
udhcpc (v1.24.1) started
Sending discover...
[ 6.662428] smsc95xx 1-1.1:1.0 eth0: link up, 100Mbps, full-duplex, lpa 0x4DE1
[ 6.688217] cfg80211: Calling CRDA to update world regulatory domain
Sending discover...
Sending select for 192.168.0.106...
Lease of 192.168.0.106 obtained, lease time 3600
/etc/udhcpc.d/50default: Adding DNS 192.168.0.20
/etc/udhcpc.d/50default: Adding DNS 192.168.0.40
done.
Starting system message bus: dbus.
Starting OpenBSD Secure Shell server: sshd
[ 9.034713] NET: Registered protocol family 10
done.
Starting rpcbind daemon...done.
Starting advanced power management daemon: No APM support in kernel
(failed.)
Starting bluetooth
bluetoothd
Starting syslogd/klogd: done
* Starting Avahi mDNS/DNS-SD Daemon: avahi-daemon
[ 9.401783] Bluetooth: Core ver 2.20
[ 9.405528] NET: Registered protocol family 31
[ 9.410088] Bluetooth: HCI device and connection manager initialized
[ 9.416576] Bluetooth: HCI socket layer initialized
[ 9.421576] Bluetooth: L2CAP socket layer initialized
[ 9.426747] Bluetooth: SCO socket layer initialized
...done.
Starting Telephony daemon
[ 9.507315] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[ 9.512765] Bluetooth: BNEP filters: protocol multicast
[ 9.518098] Bluetooth: BNEP socket layer initialized
Starting Linux NFC daemon
[ 9.624816] nfc: nfc_init: NFC Core ver 0.1
[ 9.629241] NET: Registered protocol family 39
我应该注意到我已经将三根电线焊接到 UART 引脚上:
当系统卡死时,我仍然可以ping通设备,但是SSH不起作用。
知道是什么导致了这种行为吗?
事实证明,问题出在 yocto local.conf 文件中。设置了以下行:
ENABLE_I2C = "1"
这创建了第二个 i2c 驱动程序,导致其中一个在启动时崩溃。
致所有 google 员工:无需设置此标志。相反,请确保 i2c-dev 内核驱动程序在启动时加载。
我没用过蓝牙,不过好像系统没有死机,就是蓝牙连接的时候UART数据丢失了。 来自 here: 在 rpi3 上,这是正常的,因为 Raspberry Pi3 上的 BCM2837 有 2 个 UART(和它的前辈一样),但是为了支持蓝牙功能,功能齐全的 PL011 UART 从插头引脚移到了蓝牙芯片,迷你 UART 制作可用于收割台引脚 8 和 10。
这对串行接口的用户有很多影响。
以前用来访问UART的/dev/ttyAMA0现在连接到蓝牙。
我建议您再试一次 config.txt
dtoverlay=pi3-disable-bt
enable_uart=1
如果您确实需要蓝牙,请使用
dtoverlay=pi3-miniuart-bt
对于 ssh,在您的图像配方中添加 "openssh",并添加依赖项以像 wpa-supplicant 一样连接(不要忘记配置它)