RPi3 与 SenseHat 和 Yocto

RPi3 with SenseHat and Yocto

我目前正在为安装了 SenseHat 的 RPi3 构建 Yocto Image。

Yocto 图像由以下层组成:

应用程序特定层主要负责加载以下内核模块:

它还包含 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 引脚上:

RPi3 UART pins http://www.embeddedforu.com/wp-content/uploads/2015/06/Raspberry-pi-UART-connections_thumb.png

当系统卡死时,我仍然可以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 一样连接(不要忘记配置它)