问题标签 [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.
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 上没有任何内容。
有任何想法吗 ?
提前致谢
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_partno 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 加载?该问题似乎与未加载固件有关...我不明白。
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,即使它是错误的(我用示波器检查过)。
那么可能是什么问题?
提前致谢
linux-kernel - 如何通过设备树传递平台数据中存在的平台设备信息
在普通的板文件中,我的平台数据成员之一是平台设备,有没有什么办法可以在linux内核中使用设备树来传递?在普通的板文件中,我的平台数据中有 struct platform_device 作为成员。
linux - linux同时使用board init文件和设备树
linux内核中是否可以同时使用“板初始化文件”和“设备树”进行外围设备配置?例如,我有一组外围设备。其中一半是固定的,其他部分是可变的。我可以将固定外围设备保存在“板初始化文件”中,其余部分保存在“设备树”中吗?
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 个链接
linux - 无法编译 Linux dtb
我正在尝试为 beaglebone black 编译 dts 文件。我已经从这个位置 git://git.ti.com/ti-linux-kernel/ti-linux-kernel.git 克隆了 git 存储库,我收到以下错误:
对于比格骨黑:
错误:am335x-boneblack.dts:10.1-9 语法错误
致命错误:无法解析输入树我尝试了 atmel sam9g20 ek- 我得到了同样的错误:
错误:at91sam9g20ek_2mmc.dts:9.1-9 语法错误
致命错误:无法解析输入树
但是当我使用主线内核时,它们会编译。
我试过make ARCH=arm dtbs
也是错误
有人可以指出我犯的错误吗?
memory-management - Linux 内核启动:当 DTB 和 initramfs 最初在内存中时,内存分配是如何完成的?
启动 Linux 内核时,可以在 RAM 中加载 initramfs 存档和 DTB 文件,并将这些物理地址指定给内核。例如,使用 U-Boot,您可以:
这意味着:引导内核映像位于内存地址 0x80008000,并指定内核 initramfs 存档位于 0x82000000,DTB 文件位于 0x81000000。在这个例子中,它是一个 ARM 系统,但我的问题适用于所有系统。
当这三个文件加载到 RAM 中时,RAM 可能如下所示:
其中k
表示内核、i
initramfs、d
DTB 和.
未使用的空间。
initramfs 归档被提取到一个 ramfs 中,它需要分配内存页面才能存在。DTB 文件用于填充内部树,该树还为其数据结构分配页面。
内核在分配页面时如何避免覆盖内存中的 initramfs 和 DTB 文件?当不再需要原始数据时,这些文件所占用的物理页面是否在最终被释放之前被映射并标记为已使用?
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 之外准确地提到了这一点?
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 文件应该由硬件制造商配置还是由开发人员配置(是否有手册)?