我正在尝试为beaglebone black编译dts文件。我已经从此位置git://git.ti.com/ti-linux-kernel/ti-linux-kernel.git克隆了git存储库,并且出现以下错误:
对于beaglebone黑色:
$ dtc -I dts -O dtb -o am335x-boneblack.dtb am335x-boneblack.dts
Run Code Online (Sandbox Code Playgroud)
错误:am335x-boneblack.dts:10.1-9语法错误
致命错误:无法解析输入树
我尝试使用atmel sam9g20 ek-我收到相同的错误:
$ dtc -I dts -O dtb -o at91sam9g20ek_2mmc.dtb at91sam9g20ek_2mmc.dts
Run Code Online (Sandbox Code Playgroud)
错误:at91sam9g20ek_2mmc.dts:9.1-9语法错误
致命错误:无法解析输入树
但是,当我使用主线内核时,它们会进行编译。
我试过make ARCH=arm dtbs也是一个错误
有人可以指出我犯的错误吗?
我的自定义开发板基于x86,并且不使用供应商内核驱动程序就无法轻松控制与其连接的电子组件之一(主要是通过SPI)(如果我不使用它,供应商将无济于事) 。该模块需要一些从设备树中获取的配置参数。我相信该模块主要用于设备树很常见的ARM平台上。
在x86上,通常不需要设备树,因此在Linux内核编译过程中默认情况下将其禁用。我更改了配置以启用它,但是我找不到将设备树BLOB放入启动映像的方法。内核源代码中只有一个用于x86体系结构的DTS文件,但是似乎根本没有使用它,因此没有帮助。
从内核文档中,我知道我需要将其放在x86实模式内核标头的setup_data字段中,但我不知道如何以及何时执行此操作(在内核构建时?在构建Bootloader时?)。我应该直接破解文件吗?arch/x86/boot/header.S
现在,我已经用硬编码值替换了模块配置,但是使用设备树会更好。
.dtsfile和.dtsifile有什么区别?生成设备树Blob时有区别吗?什么时候使用其中一个?
linux linux-device-driver linux-kernel device-tree linux-development
根据我的理解,选择的节点用于将引导参数发送到内核。以下是现有设备代码(am335x-bone-common.dtsi)的选定节点。
chosen {
stdout-path = &uart0;
};
Run Code Online (Sandbox Code Playgroud)
因此,我修改了选择的节点以传递内核参数。
chosen {
bootargs = "console=ttyO0,115200 root=/dev/mmcblk0p2 rootfstype=ext3 rw rootwait";
stdout-path = &uart0;
};
Run Code Online (Sandbox Code Playgroud)
在提起董事会时,我遇到了KERNEL PANIC,这是日志{ https://pastebin.com/XHyrsmfG }
仅供参考:这些是在串行控制台(minicom)上发出的u-boot命令,以便使用SDcard移植内核和设备树。
fatload mmc 0:1 0x81000000 zImage
fatload mmc 0:1 0x82000000 am335x-boneblack.dtb
bootz 0x81000000 - 0x82000000
Run Code Online (Sandbox Code Playgroud) linux-device-driver embedded-linux u-boot device-tree beagleboneblack
如果我从shell加载我自己的设备树覆盖,它加载正常,但如果我尝试在启动时加载它,它将不会这样做.我错过了什么?
这是我用debian-debian-7.4-2014-04-23-2gb.img.xz设置的debian BeagleBone Black.使用
Linux beaglebone 3.8.13-bone47#1 SMP Fri Apr 11 01:36:09 UTC 2014 armv7l GNU/Linux的
这是我对/boot/uboot/uEnv.txt所做的更改:
optargs = capemgr.enable_partno = BB-FOO-GPIO
这是dmesg |的输出 grep bone-capemgr:
底板:'A335BNLT,00A5,4049BBBK7400'
兼容底板= ti,beaglebone-black
slot#0:没有斗篷发现
插槽#1:没有斗篷发现
插槽#2:没有斗篷发现
插槽#3:没有斗篷发现
插槽#4:特定覆盖
骨骼:在插槽4
插槽#4 处使用覆盖eeprom数据:'Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G'
插槽#5:特定覆盖
骨骼:使用覆盖eeprom数据插槽5
插槽#5:'Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI'
插槽#6:特定覆盖
骨:在插槽6
插槽#6 处使用覆盖eeprom数据:'Bone-Black-HDMIN, 00A0,德克萨斯仪器,BB-BONELT-HDMIN"
enabled_partno PART_NUMBER 'BB-FOO-GPIO',版本'N/A',PRIO '0'
时隙#7:通用覆盖
骨:在时隙7使用倍率EEPROM数据
时隙#7 : '覆盖电路板名称,00A0,覆盖MANUF,BB-FOO-GPIO'
装载机:前槽4 BB-BONE-EMMC-2G:00A0(PRIO 1)
装载机:检查槽4 BB-BONE-EMMC-2G: 00A0(prio 1)
装载机:插槽前5 BB-BONELT-HDMI:00A0(prio 1)
装载机:检查插槽-5 BB-BONELT-HDMI:00A0(prio 1)装载机:插槽
前 - 6 BB-BONELT-HDMIN:00A0(prio 2)
加载程序:检查slot-6 BB-BONELT-HDMIN:00A0(prio 2) …
考虑以下设备树覆盖示例。片段编号为 0、1、2。
数字重要吗?它们必须按升序排列吗?或者 0, 2, 1 也可以吗?哪里指定的?
/dts-v1/;
/plugin/;
/ {
fragment@0 {
target = <&foo>;
__overlay__ {
...
};
};
fragment@1 {
target = <&bar>;
__overlay__ {
...
};
};
fragment@2 {
target = <&baz>;
__overlay__ {
...
};
};
};
Run Code Online (Sandbox Code Playgroud) Linux设备驱动程序编程中的哪个GPIO API更可取,在什么条件下:gpio_set_value()或gpiod_set_value()?
一个采用GPIO desc作为对象,而另一个采用从设备树解析的GPIO.
我正在尝试在设备树中为am335设置引脚模式。我如下更改设备树中的pinmux节点。
pinctrl_test: pinctrl_test_pins {
pinctrl-single,pins = <
0x078 0x07 /* P9_12 OUTPUT | MODE7 | PULLDOWN */
0x048 0x07 /* P9_14 OUTPUT | MODE7 | PULLDOWN */
>;
}
Run Code Online (Sandbox Code Playgroud)
但我没有看到任何变化/sys/kernel/debug/pinctrl/44e10800.pinmux/pins。
我找到了有关GPIO -HOG的信息,但是找不到好的文档。
我正在使用的内核版本是4.8.13
我在演示中使用 sama5d27-wlsom1-ek 板,并尝试对设备树进行更改。
到目前为止,我已经编译了 core-image-minimal 并发现我的 dtb 文件是在
/tmp/work/sama5d27_wlsom1_ek_sd-poky-linux-gnueabi/linux-at91/5.4+gitAUTOINC+3dba8c9991-r0/build/arch/arm/boot/dts
Run Code Online (Sandbox Code Playgroud)
文件夹。
我还发现许多不同的 dts 文件
build/tmp/work-shared/sama5d27-wlsom1-ek-sd/kernel-source/arch/arm/boot/dts
Run Code Online (Sandbox Code Playgroud)
但是,如果我的机器在构建文件夹内生成设备树文件,那么它们从哪里获取?如果我使用自定义 dts 文件,如何更新它们?
我想使用我的 custom.dts 文件构建映像,在其中启用某些外围设备并禁用不需要的外围设备。(将来定制 dtb 的测试)。
我尝试了这里找到的不同方法 How to use an own device tree andmodified kernel config in Yocto? 以及 仅使用 Yocto/bitbake 快速重建设备树?
我创建了一个新meta-local层并将其添加到bblayer
后面的recipetool命令中,将我的 dts 文件添加到新层。添加KERNEL_DEVICETREE += "custom.dtb"到.bbappend元本地生成的文件中,然后运行bitbake构建映像命令到目前为止但是,当我尝试构建映像时,我似乎遇到了以下错误。
Loading cache: 100% |############################################| Time: 0:00:00
Loaded 3474 entries from dependency cache.
Parsing recipes: 100% |##########################################| Time: 0:00:00
Parsing of 2309 .bb files complete …Run Code Online (Sandbox Code Playgroud) 我是 Buildroot 系统的新手(我之前使用过 Yocto)。我需要修改我的主板的设备树,这是实现这一目标的最佳方法?
非常感谢,西蒙娜
device-tree ×10
linux-kernel ×5
linux ×3
bootloader ×1
buildroot ×1
debian ×1
openembedded ×1
u-boot ×1
x86 ×1
yocto ×1