我编写了一个Linux内核模块,作为基于Freescale P2020RDB的定制板的FPGA驱动程序。驱动程序包含多个#defines来指定各种地址,大小,总线宽度等。我想从驱动程序中访问板的扁平化设备树(FDT)来配置这些地址,因此可以使用驱动程序对于其他电路板,FPGA具有不同的尺寸或位于不同的地址。

我在模块的初始化函数中添加了以下简单代码,这是我在浏览Linux内核源代码树时找到的代码:

...

#include

#include

static int __init fpga_init(void) {

struct device_node *dt_node;

const u8 *property;

int len;

printk(KERN_INFO "(I) FPGA module loaded at 0x%p\n", fpga_init);

dt_node = of_find_node_by_path("/fpga_dt@c0000000");

if (!dt_node) {

printk(KERN_ERR "(E) Failed to find device-tree node: /fpga_dt@c0000000\n");

return -ENODEV;

}

printk(KERN_INFO "(I) Found device-tree node. Now retrieving property.\n");

property = of_get_property(dt_node, "reg", &len);

printk(KERN_INFO "(I) reg=0x%08lX\n", (unsigned long) property[0]);

...

return 0;

}

不幸的是,插入模块会在尝试查找设备节点时产生分段错误。

# insmod fpga_drv.ko

(I) FPGA module loaded at 0xe112d000

Unable to handle kernel paging request for data at address 0x00000000

Faulting instruction address: 0xe112d07c

Oops: Kernel access of bad area, sig: 11 [#1]

SMP NR_CPUS=2 P2020 RDB

Modules linked in: fpga_drv(P+)

NIP: e112d07c LR: e112d078 CTR: c03ed6a4

REGS: df043e10 TRAP: 0300 Tainted: P (2.6.32.13)

MSR: 00029000 CR: 24000222 XER: 20000000

DEAR: 00000000, ESR: 00000000

TASK = dfb85300[1167] 'insmod' THREAD: df042000 CPU: 1

GPR00: e112d078 df043ec0 dfb85300 00000000 e11761f4 c05838c4 00000000 dfffc650

GPR08: 00000020 00000000 00000012 c03ed6a4 24000282 10098374 1ff92100 10081fc8

GPR16: 1007a3e0 1007a434 00000000 00000002 00000000 00000000 bfbe6364 4801f468

GPR24: 10094009 1007ca88 c064d07c 00000000 e112d000 c0690000 e1170000 e1170000

NIP [e112d07c] fpga_init+0x7c/0x460 [fpga_drv]

LR [e112d078] fpga_init+0x78/0x460 [fpga_drv]

Call Trace:

[df043ec0] [e112d078] fpga_init+0x78/0x460 [fpga_drv] (unreliable)

[df043ef0] [c0001d94] do_one_initcall+0x3c/0x1e8

[df043f20] [c0077720] sys_init_module+0xf8/0x220

[df043f40] [c0010644] ret_from_syscall+0x0/0x3c

Instruction dump:

3860ffed 80010034 bb410018 38210030 7c0803a6 4e800020 3c80e117 38a10008

388461f4 3fe0e117 4800038d 3fc0e117 <80830000> 3c60e117 386361f8 4cc63182

---[ end trace 40317dd8a9588d98 ]---

Segmentation fault

这表明了什么?有没有办法验证设备树blob是否正确加载和可用?我是否需要更多“设置”代码来准备这样的查询?或者,我是否想用螺丝刀作为锤子?

谢谢!

BTW,这是我的FDT(DTS)来源:

/dts-v1/;

/ {

model = "fsl,P2020";

compatible = "fsl,P2020RDB";

#address-cells = <2>;

#size-cells = <2>;

...

fpga_dt@c0000000 {

#address-cells = <1>;

#size-cells = <1>;

compatible = "xilinx,xc6vlx240t", "virtex6";

model = "xilinx,XC6VLX240T";

reg = <0xc0000000 1 0xc8000000 0x08000000>;

label = "Xilinx FPGA XC6VLX240T for My Custom Board";

};

};

linux扁平化设备树,如何从Linux驱动程序访问和调试FDT / DTS设备树(seg-fault)相关推荐

  1. linux图像化界面读取u盘,Linux上用的4种USB image程序:Etcher,Unetbootin,DD,MultiWriter

    本文介绍Linux上使用的4种最佳USB image应用程序,它们是:Etcher.Unetbootin.DD.GNOME MultiWriter. 1.Etcher Etcher是一款适用于Mac. ...

  2. i.MX6ULL终结者Linux设备树DTS设备树语法结构

    文章目录 1 dtsi头文件 2 设备节点信息 3 设备节点及label的命名 4 标准属性 5 根节点compatible属性 6 在设备节点中添加或修改内容 一般情况下,我们不会从头编写一个完整的 ...

  3. 树形json扁平化,一维数组树状化,对象深拷贝,元素后插入新元素,格式或动态路由等常用js合集

    索引 一.在元素后面插入一个新的元素. 二.对象或者数组的深拷贝. 三.从服务器端获取到动态路由表的格式化. 四.json树形数据扁平化处理(变成一维数组) 五.一维数组转化为树状结构对象. 六.防抖 ...

  4. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之LED模板驱动程序的改造:设备树

    文章目录 前言 1.驱动的三种编写方法 2.怎么使用设备树写驱动程序 2.1.设备树节点要与platform_driver能匹配 2.2.修改platform_driver的源码 3.实验和调试技巧 ...

  5. 高通平台msm8953 Linux DTS(Device Tree Source)设备树详解之二(DTS设备树匹配过程)

    本系列导航: 高通平台8953  Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇) 高通平台8953 Linux DTS(Device Tree Source ...

  6. 韦东山 IMX6ULL和正点原子_「正点原子Linux连载」第四十三章Linux设备树(一)

    1)实验平台:正点原子Linux开发板 2)摘自<正点原子I.MX6U嵌入式Linux驱动开发指南> 关注官方微信号公众号,获取更多资料:正点原子 前面章节中我们多次提到"设备树 ...

  7. 【正点原子Linux连载】第四十三章 Linux设备树 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  8. linux mint 图标主题_给小白的Linux Mint Xfce扁平化美化攻略

    提起轻量级桌面环境,不知大家回想起哪些?LXDE/LXQT.xfce4.mate亦或是其他小众软件呢?在这些桌面中,我对xfce情有独钟.这里面还确实是有过一段渊源,当初家中台式机(速龙240+英伟达 ...

  9. Linux dts设备树和platform驱动详解

    概念 小麦大叔 2019-05-06 22:56:31 12603 收藏 135 什么是设备树 dts(device tree)? 设备树(Device Tree)是描述计算机的特定硬件设备信息的数据 ...

最新文章

  1. 系统程序员成长计划-组合的威力
  2. 8.1-CPU结构(学习笔记)
  3. 远程桌面--------ms12-020 漏洞复现 (死亡蓝屏)
  4. docker学习总结二
  5. java 根号_没见过的 Java 入门教程之三!例程使用中文标识符代码:各种变量
  6. 攻克难题最忌讳的就是投机取巧自作聪明
  7. java获取properties属性_java工具类中获取properties文件的属性
  8. [Win系统][临时方案]系统任务管理器不能使用临时性解决方案
  9. Python-Matplotlib可视化(8)——图形的输出与保存
  10. 数组的最长递减子序列java_求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}...
  11. UVa 10400 记忆化搜索
  12. SVN源码服务器搭建-详细教程(我的收藏)
  13. docker-hub改版之后死活无法生成删除镜像的解决方法
  14. 留言板 HTML5代码
  15. CentOS 7.6镜像下载
  16. 分享:查重软件(免费)
  17. android 添加意图,c# - Xamarin.Android:如何为每个通知添加唯一的意图 - 堆栈内存溢出...
  18. 蓝桥幼儿园(蓝桥杯)
  19. 好看的微信忧心文案小程序源码 文案+头像+背景图
  20. kso经验积累 -- c#发送邮件

热门文章

  1. 【考研复习】“概率密度”一词的理解
  2. with grant option与with admin option区别
  3. 怎么删除服务器存储虚拟磁盘,创建/修改/调整/连接/分离/删除虚拟磁盘(一)
  4. 基于量子遗传算法的函数寻优算法—MATLAB实现
  5. 案例挑战——MVVM框架理解和实践
  6. 计算机中的公式概念与运用,机器学习概念,公式总结
  7. 廊坊师范学院吧网络舆情分析报告
  8. 由内而外全面造就自己(四)
  9. 计算机专业开日语选修课,大学最“值钱”的四门选修课,选上了真幸运,上课别“摸鱼”...
  10. Limitations of the Lipschitz constant as a defense against adversarial examples