标签: device-tree

是否可以使用正在运行的内核的 /sys 获取设备树的信息?

通常对于 arm 系统,设备树向内核 (Linux) 提供硬件信息。这些设备树作为编译并加载到内核的 dts(设备树源)文件存在。问题是我无权访问这样的dts文件,甚至无法访问dtb文件。

我可以访问/sys/proc在机器上,我想问一下这是否允许我“猜测正确的值”以在 dts 中使用?

如果这个问题的答案还取决于是否首先使用了设备树接口(即 adtb被创建并提供给内核),而不是一些更多的黑客攻击,那么潜在的答案也可以突出另一个方面“我们只是从 vanilla 转移并修补内核以解决我们内核的设备信息问题“-解决方案?

linux arm linux-kernel device-tree reverse-engineering

37
推荐指数
2
解决办法
6万
查看次数

如何列出内核设备树

我正在使用带有 Debian 构建的嵌入式 Arm。如何从设备树中列出已编译的设备?我想看看是否已经支持某个设备。

对于阅读本文的人来说,“设备树”是将设备添加到(嵌入式)Linux 内核的规范/标准。

linux embedded linux-kernel device-tree

21
推荐指数
2
解决办法
7万
查看次数

为什么嵌入式系统需要设备树而个人电脑不需要?

在嵌入式设备中引导内核时,您需要向 Linux 内核提供设备树,而在常规 x86 pc 上引导内核不需要设备树——为什么?

据我了解,在 x86 pc 上,内核“探测”硬件(如果我错了,请纠正我),那么为什么内核不能探测嵌入式系统中的硬件?

embedded boot-loader linux-kernel device-tree

20
推荐指数
2
解决办法
6434
查看次数

设备树中与号前缀的含义

我正在查看一个尝试指定不同节点的 DTS 文件,但有趣的是我发现一些节点具有不同的命名方式。

/ {
    model = "TI AM335x BeagleBone Black";
    compatible = "ti,am335x-bone-black", "ti,am335x-bone", "ti,am33xx";
};

&ldo3_reg {
    regulator-min-microvolt = <1800000>;
    regulator-max-microvolt = <1800000>;
    regulator-always-on;
};

&mmc1 {
    vmmc-supply = <&vmmcsd_fixed>;
};

&mmc2 {
    vmmc-supply = <&vmmcsd_fixed>;
    pinctrl-names = "default";
    pinctrl-0 = <&emmc_pins>;
    bus-width = <8>;
    status = "okay";
};

/ {
    hdmi {
        compatible = "ti,tilcdc,slave";
        i2c = <&i2c0>;
        pinctrl-names = "default", "off";
        pinctrl-0 = <&nxp_hdmi_bonelt_pins>;
        pinctrl-1 = <&nxp_hdmi_bonelt_off_pins>;
        status = "okay";
    };
};
Run Code Online (Sandbox Code Playgroud)

如果一个节点有&它的前缀,它表达了什么?将它们与根节点分开的必要性是什么,而它们可以存在于根节点本身中?有趣的是,上面的例子也有两个根节点,这怎么可能?

drivers boot-loader arm linux-kernel device-tree

11
推荐指数
1
解决办法
2988
查看次数

如何判断我使用的是哪个设备树 blob(dtb 文件)?

我正在使用 TS-4900,这是一个插入基板的嵌入式“计算机模块”,运行 Yocto Linux。它使用 U-Boot 启动,据说它会根据底板的型号选择正确的 dtb 文件来启动,如果它无法找到正确的文件,它可能会回退到我的模块的“通用”文件。

但是它如何/在哪里确定正确的?我如何知道使用了哪个 .dtb,或者设置应该使用哪个?

下面是 U-Boot 的启动信息。

U-Boot 2014.10-g3ac6ec3 (Jan 29 2015 - 17:20:15)

CPU:   Freescale i.MX6SOLO rev1.1 at 792 MHz
Reset cause: POR
Board: TS-4900
Revision: C
       Watchdog enabled
I2C:   ready
DRAM:  1 GiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
SF: Detected N25Q64 with page size 256 Bytes, erase size 4 KiB, total 8 MiB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   using phy at 7 …
Run Code Online (Sandbox Code Playgroud)

u-boot yocto device-tree

11
推荐指数
2
解决办法
4万
查看次数

如何调试无法绑定到 Linux 上的设备的驱动程序?

我想弄清楚为什么以下设备未在我的Creator CI20上设置为其驱动程序。作为参考,我使用的是 Linux 内核 v4.13.0 并在本地进行编译:

make ARCH=mips ci20_defconfig
make -j8 ARCH=mips CROSS_COMPILE=mipsel-linux-gnu- uImage
Run Code Online (Sandbox Code Playgroud)

从正在运行的系统中,我可以看到:

ci20@ci20:~# find /sys | grep rng
/sys/firmware/devicetree/base/jz4780-cgu@10000000/rng@d8
/sys/firmware/devicetree/base/jz4780-cgu@10000000/rng@d8/compatible
/sys/firmware/devicetree/base/jz4780-cgu@10000000/rng@d8/name
/sys/bus/platform/drivers/jz4780-rng
/sys/bus/platform/drivers/jz4780-rng/bind
/sys/bus/platform/drivers/jz4780-rng/unbind
/sys/bus/platform/drivers/jz4780-rng/uevent
Run Code Online (Sandbox Code Playgroud)

所以设备在运行时被内核看到,现在缺少的部分是为什么驱动程序从未绑定?我会期待这样的事情:

/sys/bus/platform/drivers/jz4780-rng/100000d8.rng
Run Code Online (Sandbox Code Playgroud)

我确实找到了其他一些解释如何调试正在运行的系统的帖子,例如:

虽然这些帖子上的信息是准确的,但对我来说并不是很有帮助。由于我在本地构建我的内核(我printkjz4780-rng驱动程序的探测功能中添加了),我的问题是:

  • 我应该在编译时打开什么选项,以便内核打印有关其未能为jz4780-rng驱动程序调用探测函数的准确信息?
  • 特别是如何打印已测试总线/驱动程序的完整列表driver_probe_device

printk可以在代码中的任何地方添加来调试它。问题是:哪个函数正在遍历设备树并调用probe/init 函数?

以供参考:

$ dtc -I fs -O dts /sys/firmware/devicetree/base | grep -A 1 rng
              rng@d8 {
                      compatible = "ingenic,jz4780-rng";
              };
Run Code Online (Sandbox Code Playgroud)

兼容字符串声明为:

cgu: jz4780-cgu@10000000 {
    compatible = …
Run Code Online (Sandbox Code Playgroud)

linux drivers devices mips device-tree

10
推荐指数
1
解决办法
5175
查看次数

什么是设备树和设备树 blob?

设备树和设备树 blob 究竟是什么?我在哪里可以获得特定 linux 版本的源代码?我在 xilinx 芯片(具有 ARM 9)上运行 linux 时发现了这样的名称,例如:here

linux devices device-tree

7
推荐指数
2
解决办法
9455
查看次数

应用设备树覆盖

我有一个基于 imx233-Olinuxino-Nano 的设备。

Arch Linux Arm 发行版启动并运行。

但是,我的板上有一个从设备连接到 CPU 的 SPI。内核支持它,但很明显,Olinuxino 的通用设备树不包含它的描述。

如何让它显示在 /dev 目录中?我知道我可以在 Linux 内核中更改设备树并重新编译该设备树,但我听说可以提供设备树覆盖文件来在启动时更改设备树。我怎么做?到目前为止,我发现的信息是稀缺和模糊的。

embedded u-boot device-tree arch-arm

7
推荐指数
1
解决办法
921
查看次数

内核如何知道要加载哪个设备树?

设备树在 ARM 设备上运行时用于识别和加载正确的驱动程序及其配置。但是当我在/proc/device-tree手机上查看加载的 DT 时,有很多与实际平台无关的配置。例如,大约 15 种不同的显示配置,该特定设备从未使用过,也永远不会使用。到目前为止,我认为只有相关的 DT 被包含在内核中并加载,但似乎相关/arch源文件夹中的所有 DTS都已加载。内核如何为平台选择合适的?这不是有点多余吗?

kernel device-tree

7
推荐指数
1
解决办法
4340
查看次数

当前问题:如何反编译 arm 固件文件,以获取设备树文件?

我正在尝试在 android 电视盒上闪烁 libreelec,但没有可以放入 libreelec 烤面包机的图像。在 RPi 上它很简单,在这里我想我必须编译东西,我真的没有答案。有一个基于 S802 的前一个 Box 的图像(只找到了一个 lakka 版本(?)),但即使有 S812 的 libreelec,我也不知道谁将它从 zip/tar 中“编译”为实际usb-sd-creator 的图像。也许它比看起来容易,请给我一个提示!

开始问题:有人知道如何在基于 S812 的板上闪存/编译 Libreelec 吗?

当前问题:如何反编译 arm 固件文件,以获取在我的板上安装不同操作系统显然需要的设备树文件?

看:

烤面包机:https : //libreelec.tv/2016/08/usb-sd-creator/

lakka/libreelec build (.img) 用于之前的盒子:http ://le.builds.lakka.tv/S802.M8.arm/

libreelec 从 amlinux.ru 构建,例如基于 S812 的盒子:https ://mega.nz/#F!W0Qk2JIQ!P1iyw7dFFHvubkIUZ-i1lA!3ohmxIaJ


1. 如何从基于 S812 的主板的 libreelec 构建为烤面包机创建图像文件?

可能的解决方案:

以下页面包含许多用于 Amlogic 板的 Linux 版本(S805 S905 S905X S912(SD 和 USB):

见:http : //freaktab.com/forum/tv-player-support/amlogic-based-tv-players/606133-linux-images-for-s805-s905-s905x-s912-sd-and-usb


2. 那么我怎样才能写一个可启动的sd卡,它适合amlogic板的需求(我猜我不能使用imagetoaster)?

可能的解决方案:

这个页面有点帮助,显然我只需要通过 dd 在 SD 卡上复制提取的图像(.xz -> .img),因为较新的版本已经包含了启用多重启动以并行使用 android 和 …

bootable homebrew openelec device-tree multiboot

6
推荐指数
1
解决办法
2624
查看次数