我正在开发 Altera 的 Cyclone V SOC FPGA,带有双 Cortex-A9 处理器。嵌入式系统(linux 4.15.7)是使用Buildroot-2018.02创建的。 U-boot 用于加载系统,即 FPGA.rbf 文件、设备树 blob 和 zImage,一切正常。
我现在想将 RBF 文件集成到我的 Linux 中并从 Linux 对 FPGA 进行编程。我发现了几种方法,据我了解最常见的一种是将 CONFIGFS 与设备树覆盖一起使用。
因此,我更改了设备树以集成覆盖层、用于禁用 FPGA 加载的 u-boot 启动脚本以及 Linux“.config”文件中的以下选项:
make linux-xconfig
:
+CONFIG_OF_OVERLAY=y
+CONFIG_ALTERA_STAPL=y
+CONFIG_CONFIGFS_FS=y
+CONFIG_SAMPLES=y
+CONFIG_SAMPLE_CONFIGFS=m
这些选项是我经过多次尝试后的状态。
make 并重新启动后,加载内核后,我在控制台中输入以下命令:
mkdir /config
mount -t configfs none /config
在这种状态下,我希望在 /config 文件夹中看到一些设备树文件,但没有任何文件,只有一个 rdma_cm 文件夹:
# ls /config
rdma_cm
我继续阅读这个主题,发现我必须在我的 Linux 内核中启用 CONFIG_OF_CONFIGFS 选项。
问题:此选项在我的 Linux 内核中不可用。另外,文件
drivers/of/configfs.c
也不在这里。我徒劳地搜索如何为我的内核版本启用设备树覆盖。
如何配置内核以使设备树在 configfs 中可用?
我也遇到了和你一样的问题。所以我必须自己制作一个设备驱动程序。
此设备驱动程序是暂定的,我预计 Linux 主线将正式支持设备树覆盖 ConfigFS。
我制作的设备驱动程序可以在以下网址获得。
如果您使用的是 Debian,您可以使用以下 URL 构建设备驱动程序的 Debian 软件包。
如果您想使用此设备驱动程序尝试Device Tree Overlay,请参考以下URL。
游戏迟到了,但对于任何在这个线程上绊倒的人:我已经应用了一个补丁[1]来添加内置支持。在 Linux 5.15 中开箱即用。
应用补丁后,您需要这些 kconfig:
CONFIG_CONFIGFS_FS=y
CONFIG_OF_OVERLAY=y
在我的(截断的)设备树下方。编译 dto 时不要忘记
-@
选项。
/dts-v1/;
/plugin/;
/ {
compatible = "some-string";
fragment@0 {
target-path = "/";
__overlay__ {
node@0 {
/* you data here. */
};
};
};
};
最后,在系统上加载 dto:
mount -t configfs none /sys/kernel/config/
mkdir /sys/kernel/config/device-tree/overlays/node
cat /path/to/node.dto > /sys/kernel/config/device-tree/overlays/node/dtbo