标签: device-tree

python中的嵌入式Linux设备树解析器?

我期待创建一个实用程序,它可以针对来自其他工具的XML配置文件验证嵌入式(PPC或ARM)Linux*.dts(设备树源)或*.dtb(二进制)文件.所以,我需要解析dts或dtb文件.我真的很想用Python做这件事.有谁知道那里解析dts或dtb文件的Python库或工具?设备树编译器(dtc)的Python实现将是完美的,但我还没有看到.

python linux embedded-linux device-tree

5
推荐指数
1
解决办法
2071
查看次数

配置引脚模式Beaglebone

beagleboard或beaglebone是不同的工作方式.使用以前的内核,它们位于/ sys/kernel/debug/omap_mux中.你知道最后一个内核那些文件在哪里?

beagleboard gpio device-tree

5
推荐指数
3
解决办法
3万
查看次数

在设备树覆盖的beaglebone黑色上改变了听力

我正在使用Debian wheezy文件系统和Robert Nelson的最新内核.我想禁用使用设备树覆盖的心跳.

我知道有更简单的方法可以做到这一点,但我只对使用叠加来禁用心跳导致的答案感兴趣.

我可以通过以下方式更改gpio-leds,led0 leaf in am335x-boneblack.dts:linux,default-trigger ="heartbeat"; 到linux,default-trigger ="none";

然后编译设备树并重新启动.

但是,如果我尝试使用以下叠加层实现相同的功能,则在使用echo> $ SLOTS成功应用叠加层后,心跳指示灯会继续闪烁.
我究竟做错了什么?

/dts-v1/;
/plugin/;
/
{
    compatible = "ti,beaglebone", "ti,beaglebone-black";
part-number = "pru";
version = "00A0";
fragment@0
 {
    target = <&ocp>;
    __overlay__
    {
         gpio-leds
        {
            compatible = "gpio-leds";
            pinctrl-names = "default";
            pinctrl-0 = <0x3>;
             led0
             {
                label = "beaglebone:green:usr0";
                gpios = <0x5 0x15 0x0>;
                linux,default-trigger = "none";
                default-state = "off";
            };
        };
    };
};
};
Run Code Online (Sandbox Code Playgroud)

overlay device-tree beagleboneblack

5
推荐指数
1
解决办法
3908
查看次数

linux内核如何从Device树中获取数据?

我是Linux内核的初学者.
据我所知,在旧版本的内核中有一个特定于板的文件,其中所有设备都已注册(通过使用某些API platform_get_register等).
在较新版本的内核中,设备所需的信息将通过设备树传递.
我的问题是内核如何从设备树中获取驱动程序的信息?设备如何通过设备树在内核中注册?

linux-device-driver linux-kernel device-tree

5
推荐指数
1
解决办法
2067
查看次数

在Linux设备树中为IO扩展器指定GPIO编号

我正在尝试将PCA9557 I / O扩展器添加到I2C总线上基于手臂的系统上。系统已经在不同的I2C总线上具有另一个I / O扩展器。我试图弄清楚如何指定新扩展器上的针脚获得的GPIO编号,以及如何使它们都能正常工作。

这是I2C总线2下现有扩展器的设备树部分:

        i2c2: i2c@e8007000 {
        status = "ok";

        pca9539: pca9539@74 {
            compatible = "nxp,pca9539";
            reg = <0x74>;
            interrupt-parent = <&gpio>;
            interrupts = <9 0x0>;
            gpio-controller;
            #gpio-cells = <2>;
            interrupt-controller;
            #interrupt-cells = <2>;
        };
        };
Run Code Online (Sandbox Code Playgroud)

使用上述方法,现有的I / O扩展器(带有16个GPIO)在Linux中显示为/ sys / class / gpio / gpiochip128,公开了GPIO编号128-143。GPIO 0-127内置于主机处理器中。

我为I2C总线0上的新扩展器添加了以下内容:

   i2c0: i2c@e8003000 {
        status = "ok";

        pca9557: pca9557@18 {
            compatible = "nxp,pca9557";
            reg = <0x18>;
            gpio-controller;
            #gpio-cells = <2>;
        };
Run Code Online (Sandbox Code Playgroud)

我还修改了内核配置,以构建GPIO_PCA953X驱动程序,该驱动程序应支持PCA9557。

当我将以上内容添加到设备树中进行编译和引导时,我现在看到映射为/ sys / class …

linux i2c gpio device-tree

5
推荐指数
0
解决办法
3946
查看次数

用于从用户空间读取设备树的API

是否有API从用户空间读取Open-Firmware设备树?

例如,读取/ sys/firmware/fdt(flattened device tree)?

如果没有,是否发布了文件格式,以便用户空间应用程序可以读取fdt中的条目?

linux device-tree

5
推荐指数
1
解决办法
2181
查看次数

设备树和平台驱动程序中的设备如何连接

我读了一些关于这个主题的文章.但他们都没有描述细节.

我所知道的是:

在设备树中声明"compatible"属性:

gpio0: gpio@44e07000 {
    compatible = "ti,omap4-gpio";
    ...
};
Run Code Online (Sandbox Code Playgroud)

并通过.建立与平台驱动程序的连接

static const struct of_device_id omap_gpio_match[] = {
    {
        .compatible = "ti,omap4-gpio",
    },
    { },
};
...
static struct platform_driver omap_gpio_driver = {
    .probe      = omap_gpio_probe,
    .driver     = {
        .name   = "omap_gpio",
        .pm = &gpio_pm_ops,
        .of_match_table = of_match_ptr(omap_gpio_match),
    },
};
Run Code Online (Sandbox Code Playgroud)

因此,of_match_table将用于匹配设备树中声明的兼容属性.

以及在platform_match(drivers/base/platform.c)函数中执行的匹配操作.我怀疑这因为I greped的参考of_match_table,并且在唯一的可能的结果of_device_get_match_data(drivers/of/device.c)函数.

~/wk/linux$ find . -name '*.c'  | xargs grep  '\<of_match_table\>' | …
Run Code Online (Sandbox Code Playgroud)

linux platform driver device-tree

5
推荐指数
2
解决办法
8964
查看次数

提取供应商 blob 并制作设备树

我多次尝试为我的设备获取 CM(现为 Lineageos)13/14.1 版本,该设备是带有 EMUI 3.0(Kit Kat 4.4.4)的华为 Mediapad T1-A21W(代号:hwt1a21l),但我由于以下原因受到限制:

  • 没有可以使用的设备树。
  • 没有可以使用的供应商 blob。

基本上,从一开始就绝对是零开发或基础,所以我必须制作设备树并提取供应商 blob 才能实现我想要的。幸运的是我从华为网站下载了内核源代码。


好吧,关于设备树:

经过大量搜索和设置后,我创建了一个设备树,但我不明白的是,当我将我的(这个)与另一个我知道它功能齐全的设备进行比较时,例如我的 OnePlus One 中的这个,第二个一个(OnePlus One)它有大量我的没有的文件和目录,所以我不明白它们来自哪里。另外我不太明白一些参数来自哪里,例如,OnePlus One 的 BoardConfig.mk 有大量我的没有的目标(不确定是否是这样调用的,target=parameters)。

也许将 OnePlus 与华为进行比较不是最好的主意,因为它们来自不同的品牌,但无论如何,我之前解释的内容都可以应用于与我的类似设备(荣耀 4X 代号:cherry),这与我的设备几乎相同设备在硬件方面,它们具有相同的CPU和主板。(由于缺乏声誉而无法链接)。


关于供应商 blob:

我尝试遵循许多解释如何获取供应商 blob 的指南。虽然其中 90% 基于现有的供应商 blob,但我发现的其他文件基于名为extract-files.sh的脚本,该脚本应该位于device_vendor_codename中,并根据以下内容自动提取供应商文件另一个名为propietary-files.txt的文件。问题是我的设备路径(device_huawei_hwt1a21l)中没有 extract-files.sh 和 propietary-files.txt 文件,我不知道如何获取它们。该脚本不是问题,因为我可以下载一个脚本并轻松地将其适应我的设备,但最大的问题是要提取的特定供应商文件(propietary-files.txt),这是我无法控制的。

android blob android-source cyanogenmod device-tree

5
推荐指数
1
解决办法
1万
查看次数

configfs 不挂载设备树/覆盖

我正在使用 Altera 的带有双 Cortex-A9 处理器的 Cyclone V SOC FPGA。嵌入式系统(linux 4.15.7)是用 Buildroot-2018.02 创建的。U-boot 用于加载系统,即 FPGA.rbf 文件、设备树 blob 和 zImage,一切正常。

我现在想将 RBF 文件集成到我的 linux 并从 Linux 对 FPGA 进行编程。我找到了几种方法,我理解的一种最常见的是将 CONFIGFS 与设备树覆盖一起使用。

因此,我更改了我的设备树以集成覆盖、u-boot 引导脚本以禁用 FPGA 加载以及 linux“.config”文件中的以下选项make linux-xconfig

+CONFIG_OF_OVERLAY=y
+CONFIG_ALTERA_STAPL=y
+CONFIG_CONFIGFS_FS=y
+CONFIG_SAMPLES=y
+CONFIG_SAMPLE_CONFIGFS=m
Run Code Online (Sandbox Code Playgroud)

这些选项是我经过多次尝试后的状态。

在 make 和重新启动后,一旦加载了内核,我就会在控制台中输入以下命令:

mkdir /config
mount -t configfs none /config
Run Code Online (Sandbox Code Playgroud)

在这种状态下,我希望在 /config 文件夹中看到一些设备树文件,但没有,只有一个 rdma_cm 文件夹:

# ls /config
rdma_cm
Run Code Online (Sandbox Code Playgroud)

我继续阅读这个主题,发现我必须在我的 linux 内核中启用 CONFIG_OF_CONFIGFS 选项。

问题:此选项在我的 linux 内核中不可用。此外,文件drivers/of/configfs.c也不在这里。我徒劳地搜索了如何为我的内核版本启用设备树覆盖。

如何配置我的内核以使设备树在 configfs 中可用?

linux-kernel intel-fpga device-tree

5
推荐指数
1
解决办法
2079
查看次数

什么是设备树中的 reg 属性?

设备树中的address-cellsize-cells是什么?难道reg是与address-cellsize-cell?如果是,那么如何?

例如:

memory: memory@20000000 { 
            #address-cells = <1>;
            #size-cells = <1>;
            device_type = "memory";
            reg = <0x20000000 0x80000000>;
    };
Run Code Online (Sandbox Code Playgroud)

什么是 0x20000000 ?我们从哪里可以得到这个?

linux-device-driver linux-kernel device-tree

5
推荐指数
1
解决办法
2061
查看次数