【发布时间】:2021-03-02 16:40:33
【问题描述】:
当我的内核 4.2 armv7l(和硬件 OMAP35xSOM-LV,一个 LogicPD 板)启动时,我在启动日志中收到错误消息。
[ 14.893432] omap_ssi 48058000.ssi-controller: ssi controller 0 initialized (2 ports)!
[ 14.959777] omap_ssi_port 4805a000.ssi-port: couldn't get cawake gpio (err=-2)!
[ 15.034698] omap_ssi_port: probe of 4805a000.ssi-port failed with error -2
[ 15.130096] omap_ssi_port 4805b000.ssi-port: couldn't get cawake gpio (err=-2)!
我可以在其中一个设备树文件 (omap3.dtsi) 中看到此 ssi 端口控制器已禁用,但在内核启动时仍会显示此错误。如何抑制这个错误?我是设备树概念的新手。为更清楚起见,omap3.dtsi 中引用讨论中的端口的相关代码如下:
ssi: ssi-controller@48058000 {
compatible = "ti,omap3-ssi";
ti,hwmods = "ssi";
status = "disabled";
reg = <0x48058000 0x1000>, <0x48059000 0x1000>;
reg-names = "sys", "gdd";
interrupts = <71>;
interrupt-names = "gdd_mpu";
#address-cells = <1>;
#size-cells = <1>;
ranges;
ssi_port1: ssi-port@4805a000 {
compatible = "ti,omap3-ssi-port";
reg = <0x4805a000 0x800>, <0x4805a800 0x800>;
reg-names = "tx", "rx";
interrupts = <67>, <68>;
};
ssi_port2: ssi-port@4805b000 {
compatible = "ti,omap3-ssi-port";
reg = <0x4805b000 0x800>, <0x4805b800 0x800>;
reg-names = "tx", "rx";
interrupts = <69>, <70>;
};
};
【问题讨论】:
-
.dtsi 文件可以包含在其他 .dtsi 文件或主 .dts 文件中。因此,即使 ssi 端口控制器在 omap3.dtsi 中被禁用,它也可能在其他一些 .dtsi 或 .dts 文件中被启用。
-
除了 omap3.dtsi 文件之外,其他 dtsi 文件中不存在对 ssi port@48058000 的引用(如日志中所示)。该文件包含在我的板特定 dts 文件中,因此我不确定对 ssi-port@4805a000 文件的引用是如何显示的,即使它被禁用(参见图)。更新了问题以在讨论中包含代码 sn-p。
-
如果主板 dts 文件(或其他包含的 .dtsi 文件)中没有
&ssi {}块启用它,我唯一能想到的另一件事是一个 .dtbo 文件正在由您的开发板的引导加载程序或 Linux 系统本身加载(如果内核已修补以允许从用户空间加载 DTB 覆盖)。 -
当
ti,ssi-cawake-gpio属性缺失(来自"ti,omap3-ssi-port"兼容设备节点)时,实际上应该会发生错误。 cat /proc/device-tree/ocp@68000000/ssi-controller@48058000/status 是否指示 SSI 控制器“正常”或“已禁用”? /proc/device-tree/ocp@68000000/ssi-controller@48058000/ssi-port@4805a000/ti,ssi-cawake-gpio是否存在? -
OMAP SSI 控制器的“必需端口子节点属性”下的docs 列表
ti,ssi-cawake-gpio,但将属性描述为:“定义哪个 GPIO 引脚用于表示 CAWAKE 事件端口。这是一个可选的特定于板的属性。如果缺少该端口,将不会启用。该语言令人困惑,因为它既是必需的又是可选的(?!),但也许这是正常行为。如果正常,那么“ERROR”的日志严重级别似乎有点过分了。
标签: linux-kernel embedded-linux udev device-tree android-firmware