问题标签 [device-tree]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4120 浏览

c - BBB - 无法使用设备树获得第二个 SPI 芯片选择

我很难让第二个芯片选择在 Beaglebone Black 上工作。

我将 /lib/firmware 中给出的 .dts 用于我的发行版(Angstrom,内核 3.8.13):

我用 dtc 编译它并用 uEnv.txt 激活它:

(HDMI 和 HDMIN capes 都被禁用)

我有 /dev/ 中显示的两个 SPI 设备:

并且引脚由 spi 接口使用,如下所示:

而且模式很好:

我在 C 中成功使用了一个程序,它使用第一个 spidev(spidev2.0)和第一个芯片选择,但是当我使用 spidev2.1(MOSI、MISO 和 CLK 正在工作)时,引脚 42 上没有任何内容。

有任何想法吗 ?

提前致谢

0 投票
5 回答
9315 浏览

debian - 我的自定义 cape 的设备树在启动时无法加载,但可以手动加载

如果我从 shell 加载我自己的设备树覆盖,它加载正常,但如果我尝试在启动时加载它,它不会这样做。我错过了什么?

这是我使用 bone-debian-7.4-2014-04-23-2gb.img.xz
Linux beaglebone 3.8.13-bone47 #1 SMP Fri Apr 11 01:36:09 UTC 2014 armv7l GNU设置的 debian BeagleBone Black /Linux

这是我对 /boot/uboot/uEnv.txt 所做的更改:

optargs=capemgr.enable_partno=BB-FOO-GPIO

这是dmesg |的输出 grep 骨capemgr

底板:'A335BNLT,00A5,4049BBBK7400'
compatible-baseboard=ti,beaglebone-black
slot #0: No cape found
slot #1: No Cape found
slot #2: No Cape found
slot #3: No Cape found
slot #4:特定覆盖
骨骼:在插槽 4 处使用覆盖 eeprom 数据
插槽 #4:'Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G'
插槽 #5:特定覆盖
骨骼:在插槽 4 处使用覆盖 eeprom 数据插槽 5
插槽 #5:'Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI'
插槽 #6:特定覆盖
骨骼:在插槽 6 上使用覆盖 eeprom 数据
插槽 #6:'Bone-Black-HDMIN, 00A0,德州仪器,BB-BONELT-HDMIN'
enabled_pa​​rtno part_number 'BB-FOO-GPIO', version 'N/A', prio '0'
slot #7: generic override
bone: Using override eeprom data at slot 7
slot #7: 'Override Board Name,00A0,Override Manuf, BB-FOO-GPIO'
加载器:在 slot-4 之前 BB-BONE-EMMC-2G:00A0 (prio 1)
加载器:检查 slot-4 BB-BONE-EMMC-2G:00A0 (prio 1)
加载器:在 slot-5 之前BB-BONELT-HDMI:00A0 (prio 1)
loader: 检查 slot-5 BB-BONELT-HDMI:00A0 (prio 1)
loader: 在 slot-6 之前 BB-BONELT-HDMIN:00A0 (prio 2)
loader: 检查 slot- 6 BB-BONELT-HDMIN:00A0 (prio 2)
初始化正常。
加载程序:检查插槽 4 BB-BONE-EMMC-2G:00A0 (prio 1)
加载程序:检查插槽 5 BB-BONELT-HDMI:00A0 (prio 1)
加载程序:检查 slot-6 BB-BONELT-HDMIN:00A0 (prio 2)
加载程序:在 slot-7 之前 BB-FOO-GPIO:00A0 (prio 0)
加载程序:检查 slot-7 BB-FOO-GPIO:00A0 (prio 0 ) )
loader: 在 slot-7 BB-FOO-GPIO:00A0 (prio 0)
slot #7: Requesting part number/version based 'BB-FOO-GPIO-00A0.dtbo
slot #7: 请求固件 'BB-FOO-GPIO -00A0.dtbo' for board-name 'Override Board Name', version '00A0'
failed to load firmware 'BB-FOO-GPIO-00A0.dtbo'
loader: failed to load slot-7 BB-FOO-GPIO:00A0 ( prio 0)
loader: 检查 slot-6 BB-BONELT-HDMIN:00A0 (prio 2)
loader: 检查 slot-5 BB-BONELT-HDMI:00A0 (prio 1)
loader: 在 slot-5 BB-BONELT-HDMI:00A0 之后(优先 1)
插槽#5:为板名'Bone-Black-HDMI',版本'00A0'请求固件'cape-boneblack-hdmi-00A0.dtbo'
插槽#5:加载dtbo'cape-boneblack-hdmi-00A0.dtbo' ; 转换为活树
槽 #5:#4 覆盖
加载器:检查 slot-4 BB-BONE-EMMC-2G:00A0 (prio 1)
加载器:在 slot-4 BB-BONE-EMMC-2G:00A0 (prio 1)
槽之后#4:为板名“Bone-LT-eMMC-2G”、版本“00A0”
插槽请求固件“cape-bone-2g-emmc1.dtbo”#4:dtbo“cape-bone-2g-emmc1.dtbo”已加载;转换为活树
插槽#4:#2 覆盖
插槽#4:应用#2 覆盖。
加载器:完成 slot-4 BB-BONE-EMMC-2G:00A0 (prio 1)
加载器:检查 slot-6 BB-BONELT-HDMIN:

加载程序:完成 slot-5 BB-BONELT-HDMI:00A0 (prio 1)
加载程序:检查 slot-6 BB-BONELT-HDMIN:00A0 (prio 2)
加载程序:在 slot-6 之后 BB-BONELT-HDMIN:00A0 (prio 2 ) )
插槽 #6:请求固件 'cape-boneblack-hdmin-00A0.dtbo' 板名'Bone-Black-HDMIN',版本 '00A0'
插槽 #6: dtbo 'cape-boneblack-hdmin-00A0.dtbo'已加载;转换为 live tree
插槽 #6:BB-BONELT-HDMIN 冲突 P8.45 (#5:BB-BONELT-HDMI)
插槽 #6:验证
加载程序失败:无法加载 slot-6 BB-BONELT-HDMIN:00A0 (prio 2)

这是我的设备树覆盖的源文件:

~
(我是这样编译的:dtc -O dtb -o BB-FOO-GPIO-00A0.dtbo -b 0 -@ BB-FOO-GPIO-00A0.dts }

现在使用echo BB-FOO-GPIO > $SLOTS"手动加载它加载正常..
dmesg -c给我:

bone-capemgr bone_capemgr.9:part_number 'BB-FOO-GPIO',版本 'N/A'
bone-capemgr bone_capemgr.9:插槽 #8:通用覆盖
bone-capemgr bone_capemgr.9:骨骼:在插槽中使用覆盖 eeprom 数据8
bone-capemgr bone_capemgr.9:插槽 #8:'覆盖板名称,00A0,覆盖 Manuf,BB-FOO-GPIO'
bone-capemgr bone_capemgr.9:插槽 #8:请求基于部件号/版本的 'BB-FOO- GPIO-00A0.dtbo
bone-capemgr bone_capemgr.9:插槽 #8:请求固件“BB-FOO-GPIO-00A0.dtbo”以获取板名“覆盖板名”,版本“00A0”
bone-capemgr bone_capemgr.9:插槽#8:加载了 dtbo 'BB-FOO-GPIO-00A0.dtbo';转换为活树
bone-capemgr bone_capemgr.9: slot #8:

gpio-of-helper foo_gpio_helper.15:分配的 GPIO id=0
of_get_named_gpio_flags 以状态 115 退出
gpio-of-helper foo_gpio_helper.15:分配的 GPIO id=1
gpio-of-helper foo_gpio_helper.15:准备好
bone-capemgr bone_capemgr.9:插槽#8:应用#2 覆盖。

cat /sys/devices/bone_capemgr.9/slots给了我我想要的东西:

0: 54:PF---
1: 55:PF---
2: 56:PF---
3: 57:PF---
4: ff:POL Bone-LT-eMMC-2G,00A0,Texas Instrument, BB-BONE-EMMC-2G
5: ff:POL Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
8: ff:POL Override Board Name,00A0,Override Manuf,BB-FOO-GPIO

那么,我错过了什么?为什么它不会在启动时加载,但它会从 shell 加载?该问题似乎与未加载固件有关...我不明白。

0 投票
2 回答
4334 浏览

kernel - Beaglebone Black 的 SPIDEV、设备树和 .dtbo 名称出现问题

我对设备树有一些奇怪的问题。我发现更改 .dtbo 的名称改变了内核的行为!

我已经用 Angstrom 修改了 /lib/firmware 中给出的 BB-SPIDEV1-00A0.dts :

我将其编译为两个名称:BB-SPIDEV1-00A0.dtbo 和 BB-SPI1-01-00A0.dtbo

当我在 /sys/devices/bone_capemgr.9/slots 中加载其中一个时,spidev 的行为会有所不同!

使用 BB-SPIDEV1,spidev1.0 运行良好,没有任何问题。但是spidev1.1的片选不行!42管脚模式错误,管脚没有分配spi1

另一方面,对于 BB-SPI1-01(这个名字不重要,取另一个名字是一样的,只是必须与 BB-SPIDEV1 不同),引脚 42 分配得当:

并处于良好模式:

但是这次 spidev1.0 不能正常工作。MISO 线(所以 BBB 的输入)只看到 0,即使它是错误的(我用示波器检查过)。

那么可能是什么问题?

提前致谢

0 投票
1 回答
1580 浏览

linux-kernel - 如何通过设备树传递平台数据中存在的平台设备信息

在普通的板文件中,我的平台数据成员之一是平台设备,有没有什么办法可以在linux内核中使用设备树来传递?在普通的板文件中,我的平台数据中有 struct platform_device 作为成员。

0 投票
1 回答
287 浏览

linux - linux同时使用board init文件和设备树

linux内核中是否可以同时使用“板初始化文件”和“设备树”进行外围设备配置?例如,我有一组外围设备。其中一半是固定的,其他部分是可变的。我可以将固定外围设备保存在“板初始化文件”中,其余部分保存在“设备树”中吗?

0 投票
1 回答
3704 浏览

beagleboneblack - 编译 am335x-boneblack.dts 失败

我正在尝试为 beagle bone black (BBB) 编译一个 dtb,我可以从 uboot 传递它并按照我的需要配置所有外围设备。我需要这样做而不是应用覆盖,因为我们正在设计基于 BBB 的板,并且我们希望在启动时配置外围设备。

我用来编译 dtb 的命令如下。 dtc -I dts -@ -O dtb -o am335x-boneblack.dtb am335x-boneblack.dts

为了让 -@ 选项起作用,我按照这里的说明操作:http: //eewiki.net/display/linuxonarm/BeagleBone#BeagleBone-Upgradedistro%22device-tree-compiler%22package

我尝试从多个地方提取设备树源并对其进行编译。

http://git.ti.com/ti-linux-kernel/ti-linux-3-8-y-kernel/trees/master/arch/arm/boot/dts提取时,我可以编译它,但是一旦 uboot 说“正在启动内核...”没有进一步的反应

从 githubdotcom/beagleboard/devicetree-source 提取时,我无法编译。它在“#include”语句中返回语法错误。我试图将这些更改为 /include/ 但“”中的包含失败。如果我将它们修复为包含中断内的绝对内容。

我相信从 TI repo 构建是正确的路径,但我一直无法启动内核。我尝试添加一个“-b 0”选项(dtb 中没有二进制差异)并删除 -@,但文件明显更小(11k 到 -@ 15k 到默认为 29k)并且无法启动。

有什么建议么?

ps 很抱歉 github 链接损坏,我只允许发布 2 个链接

0 投票
1 回答
8799 浏览

linux - 无法编译 Linux dtb

我正在尝试为 beaglebone black 编译 dts 文件。我已经从这个位置 git://git.ti.com/ti-linux-kernel/ti-linux-kernel.git 克隆了 git 存储库,我收到以下错误:

  1. 对于比格骨黑:

    错误:am335x-boneblack.dts:10.1-9 语法错误
    致命错误:无法解析输入树

  2. 我尝试了 atmel sam9g20 ek- 我得到了同样的错误:

    错误:at91sam9g20ek_2mmc.dts:9.1-9 语法错误
    致命错误:无法解析输入树

但是当我使用主线内核时,它们会编译。

我试过make ARCH=arm dtbs也是错误

有人可以指出我犯的错误吗?

0 投票
1 回答
2283 浏览

memory-management - Linux 内核启动:当 DTB 和 initramfs 最初在内存中时,内存分配是如何完成的?

启动 Linux 内核时,可以在 RAM 中加载 initramfs 存档和 DTB 文件,并将这些物理地址指定给内核。例如,使用 U-Boot,您可以:

这意味着:引导内核映像位于内存地址 0x80008000,并指定内核 initramfs 存档位于 0x82000000,DTB 文件位于 0x81000000。在这个例子中,它是一个 ARM 系统,但我的问题适用于所有系统。

当这三个文件加载到 RAM 中时,RAM 可能如下所示:

其中k表示内核、iinitramfs、dDTB 和.未使用的空间。

initramfs 归档被提取到一个 ramfs 中,它需要分配内存页面才能存在。DTB 文件用于填充内部树,该树还为其数据结构分配页面。

内核在分配页面时如何避免覆盖内存中的 initramfs 和 DTB 文件?当不再需要原始数据时,这些文件所占用的物​​理页面是否在最终被释放之前被映射并标记为已使用?

0 投票
0 回答
376 浏览

linux - 为什么在 dts 文件中的 ocp 之外提到 pinmux?

在文件https://git.ti.com/ti-linux-kernel/ti-linux-kernel/blobs/master/arch/arm/boot/dts/am33xx.dtsi这是 am33xx 处理器的 dtsi 文件我发现控制模块寄存器的 pinmux 内存映射在 OCP 总线条目之外被提及,如下所示

当所有其他设备都在里面时,为什么在 OCP 之外准确地提到了这一点?

0 投票
1 回答
635 浏览

uart - 如何使用 DTB 配置 OLinuXino Lime UART

如何使用 DTB 文件在 OLinuXino Lime 中配置 UART?我正在使用来自http://eewiki.net/display/linuxonarm/A10-OLinuXino-LIME的图像。

UART 0 已配置。如果我理解正确,这是 DTS 文件中的相关部分:

http://linux-sunxi.org/Memory_map我可以获得其他 UART 的内存空间。但是,例如,我从哪里获得 pinctrl-0 字段的语法?

我们可以只用 DTB 文件配置硬件而不需要 Allwinner 的 FEX 文件吗?

在“理想”情况下,DTB 文件应该由硬件制造商配置还是由开发人员配置(是否有手册)?