从哪里开始学习 Linux DMA/设备驱动/内存分配

2024-01-25

我正在移植/调试设备驱动程序(由另一个内核模块使用)并面临死胡同,因为 dma_sync_single_for_device() 因内核错误而失败。

我不知道这个函数应该做什么,而且谷歌搜索也没有什么帮助,所以我可能需要了解更多关于这个东西的知识。

问题是,从哪里开始呢?

哦,是的,如果相关的话,代码应该在 PowerPC 上运行(Linux 是 OpenWRT)

编辑: 最好有在线资源(书籍需要几天才能送达:)


On-line:

Linux slab 分配器剖析 http://www.ibm.com/developerworks/linux/library/l-linux-slab-allocator/

了解 Linux 虚拟内存管理器 http://www.phptr.com/content/images/0131453483/downloads/gorman_book.pdf

Linux 设备驱动程序,第三版 http://lwn.net/Kernel/LDD3/

Linux 内核模块编程指南 http://tldp.org/LDP/lkmpg/2.6/html/

在 Linux 中编写设备驱动程序:简要教程 http://www.freesoftwaremagazine.com/node/1238/

Books:

Linux 内核开发(第二版) https://rads.stackoverflow.com/amzn/click/com/0672327201

基本 Linux 设备驱动程序 https://rads.stackoverflow.com/amzn/click/com/0132396556(仅限前4-5章)

有用的资源:

Linux 交叉参考 http://lxr.linux.no/+trees(所有内核的可搜索内核源)

2.6内核系列中的API变化 http://lwn.net/Articles/2.6-kernel-api/


dma_sync_single_for_device http://lxr.linux.no/#linux+v2.6.33/arch/arm/include/asm/dma-mapping.h#L425 calls dma_sync_single_range_for_cpu在文件中再往上一点,这是源文档(我假设即使这是针对arm的,接口和行为是相同的):

/**
 380 * dma_sync_single_range_for_cpu
 381 * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
 382 * @handle: DMA address of buffer
 383 * @offset: offset of region to start sync
 384 * @size: size of region to sync
 385 * @dir: DMA transfer direction (same as passed to dma_map_single)
 386 *
 387 * Make physical memory consistent for a single streaming mode DMA
 388 * translation after a transfer.
 389 *
 390 * If you perform a dma_map_single() but wish to interrogate the
 391 * buffer using the cpu, yet do not wish to teardown the PCI dma
 392 * mapping, you must call this function before doing so.  At the
 393 * next point you give the PCI dma address back to the card, you
 394 * must first the perform a dma_sync_for_device, and then the
 395 * device again owns the buffer.
 396 */
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从哪里开始学习 Linux DMA/设备驱动/内存分配 的相关文章

  • 使用 shell 脚本发送 HTML 邮件

    如何使用 shell 脚本发送 HTML 电子邮件 首先 您需要撰写消息 最低限度由这两个标头组成 MIME Version 1 0 Content Type text html 以及适当的消息正文 p Hello world p 获得后
  • 如何在C(Linux utf8终端)中打印“盒子抽屉”Unicode字符?

    我正在尝试显示 方框图范围 2500 257F 中的 Unicode 字符 它应该是标准 utf8 Unicode 标准 版本 6 2 我根本做不到 我首先尝试使用旧的 ASCII 字符 但 Linux 终端以 utf8 显示 并且没有显示
  • 使用脚本检查 git 分支是否领先于另一个分支

    I have branch1 and branch2我想要某种 git branch1 isahead branch2 这将显示如果branch1已承诺branch2没有 也可能指定这些提交 我无法检查差异原因branch2 is在之前br
  • 使用 ioctl 在 C++ 中以编程方式添加路由

    我编写了简单的 C 函数 添加了新路线 void addRoute int fd socket PF INET SOCK DGRAM IPPROTO IP struct rtentry route memset route 0 sizeof
  • bash 将输出重定向到文件,但结果不完整

    重定向命令输出的问题已经被问过很多次了 但是我有一个奇怪的行为 我使用的是 bash shell debian 版本 4 3 30 1 release 并尝试将输出重定向到文件 但并非所有内容都记录在文件中 我尝试运行的 bin 文件是 l
  • 更新Linux中的包含路径

    我的 my path to file 文件夹中有几个头文件 我知道如何将这些文件包含在新的 C 程序中 但每次我都需要在包含它之前输入头文件的完整路径 我可以在linux中设置一些路径变量 以便它自动查找头文件吗 您可以创建一个 makef
  • bash while 循环的布尔表达式中的 -lt 意味着什么?

    我猜测它代表小于基于输出 但是我在哪里可以找到有关此语法的文档 bin bash COUNTER 0 while COUNTER lt 10 do echo The counter is COUNTER let COUNTER COUNTE
  • Crontab 每 5 分钟一次 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我如何告诉 crontab 每 5 分钟运行一次 但从每小时的第二分钟开始 换句话说 我想在以下时间执行我的脚本minute 5 2 例如 我的脚本应
  • 在 x86 汇编语言中获取文件大小的简单方法

    假设我已经在汇编中打开了一个文件 并且在寄存器 eax 中有该文件的文件句柄 我将如何获取文件的大小 以便为其分配足够的缓冲区空间 我在这里研究了另一个讨论 建议使用sys fstat 28 系统调用来获取文件统计信息但无法实现它 My a
  • 在汇编中使用 printf 会导致管道传输时输出为空,但可以在终端上使用

    无输出 https stackoverflow com questions 54507957 printf call from assembly do not print to stdout即使在终端上 当输出不包含换行符时也有相同的原因
  • ssh 连接超时

    我无法在 git 中 ssh 到 github bitbucket 或 gitlab 我通常会收到以下错误消息 如何避免它 输出 ssh T email protected cdn cgi l email protection i ssh
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • python tracemalloc 模块分配统计信息何时会与 ps 或 pmap 中显示的内容不匹配?

    我正在尝试查找内存泄漏 所以我已经完成了 import tracemalloc tracemalloc start
  • 在内核代码中查找函数的最佳方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我开始浏览内核代码 遇到的一件事是如何跟踪函数调用 结构定义等 有没有一种好的方法可以快速跳转到函数定义并退出 我尝试过 Source N
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • linux下无法创建僵尸进程

    嗯 我有一个奇怪的问题 我无法在我的项目中创建僵尸进程 但我可以在其他文件中创建僵尸进程 有简单的说明 int main if fork 0 printf Some instructions n else sleep 10 wait 0 r
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下

随机推荐

  • 在 TypeScript 中扩展与实现纯抽象类

    假设我有一个纯抽象类 即没有任何实现的抽象类 abstract class A abstract m void 就像在 C 和 Java 中一样 我可以extend抽象类 class B extends A m void But unlik
  • 在 JavaScript 中将所选项目置于数字选择器小部件内的中心

    前提 我很难弄清楚如何制作数字选择器小部件行为类似于移动选择器组件 https developer android com guide topics ui controls pickers 如果用户默认分配一个号码 则selected页面加
  • get_by_id() 将不会返回模型实例

    我有一个名为 Version 的模型 如下所示 from google appengine ext import db import piece class Version db Model A particular version of
  • 了解 Thrust (CUDA) 内存使用情况

    我正在使用 cuda thrust 库进行一些蒙特卡罗模拟 这在一定数量的模拟中效果很好 在模拟中我得到了 bad alloc 异常 这看起来没问题 因为我的代码中越来越多的模拟意味着要处理越来越大的 device vectors 所以我预
  • 如何检查我正在使用哪个版本的 Angular?

    如何知道我正在使用哪个版本的 Angular 我努力了 angular version angular v angular version angular v but get bash angular command not found 我
  • 现在如何安装Visual Studio 2015 PlatformSDK?

    当我运行某些东西时 例如pip install scrapy 使用 python 3 7 我遇到了麻烦error WinError 3 The system cannot find the path specified C Program
  • GCC 发出 ARM idiv 指令(续)

    我想知道这对于 Krait 400 CPU 是否可行 我遵循了一些建议here https stackoverflow com questions 15782089 gcc to emit arm idiv instructions 当我使
  • Azure PHP SDK:在单个 zip 文件中下载容器的所有 blob

    我想将指定容器中的所有 blob 下载为 zip 文件 有没有办法直接从 Azure 下载 zip 文件 而不需要在我的服务器上处理它 目前我的想法如下 file put contents file name get file conten
  • 以 Zend Repo 作为源,从 master 制作本地 Git 存储库

    我想在测试服务器上克隆主分支 在该服务器上运行主分支和测试站点 此存储库是 Zend PHP 框架应用程序 在配置文件中 home me public html domain com ZendSkeletonApplication git
  • 突出显示根目录的父路径

    我尝试通过更改节点和链接的填充来突出显示从鼠标所在的节点到根节点的路径 我正在使用 Mike s 的 Radial Tidy TreeBlock https bl ocks org mbostock 4063550 我尝试过node anc
  • 使用 Spring MVC 流式传输可关闭资源

    读完后本文 https www airpair com java posts spring streams memory efficiency 我希望使用 Spring 将数据库查询结果直接流式传输到 JSON 响应 以确保恒定的内存使用量
  • 禁用 mod_deflate 和 mod_gzip 压缩 HTML、CSS 和 JS 的最佳方法

    我在运行 Apache 2 的共享主机上有几个站点 我想压缩传送到浏览器的 HTML CSS 和 Javascript 主机已禁用 mod deflate 和 mod gzip 因此这些选项无效 不过 我确实有 PHP 5 所以我可以使用它
  • 通过累积串联将嵌套列表转换为非嵌套列表

    我想像这样转换嵌套列表 l lt list A list a list 1 b list 2 B list cd list c list 3 4 5 d list 6 7 8 e list c 9 10 进入列表 o lt list A c
  • 通过 ODBC“十进制值缩放导致数据截断”

    当我尝试在 MS Access 中查看 ODBC 表时 收到错误 十进制值缩放导致数据截断 我知道返回错误的字段 并且 Access 在查询时能够识别该字段 但我无法查看结果 Error记录 并且错误不断出现 我试过了CDbl 没有运气 A
  • 停止 IntentService 的正确方法

    我正在使用 IntentService 将图像上传到服务器 我的问题是我不知道如何 何时停止服务 当我在 onHandleIntent Intent 中调用 stopself 时 所有在 IntentService 队列中等待的 Inten
  • Typescript 模块创建 AMD 与 Common JS

    任何 Typescript 专家都可以澄清一下在使用 Typescript 时何时以及为何选择 AMD 与 Common JS 来创建模块吗 AMD 用于浏览器 例如 RequireJS 原因是它允许并行下载文件 因为网络延迟是主要瓶颈 C
  • 创建 HTML(PHP 或 Jquery)的最佳实践?

    我有一个 JavaScript 对象 其中包含一些信息 我可以想到两个选项来从这个对象创建 HTML 我想知道哪一种是正确的做事方式 这只是所有偏好吗 1 使用 JavaScript 循环遍历这个数组并使用 Jquery 创建 HTML 2
  • 生成 10000 位随机序列

    有没有比在循环中附加 0 和 1 更有效的方法来在 Python 中生成 10 kBit 10 000 位 随机二进制序列 如果您想要一个随机二进制序列 那么生成适当范围内的随机整数可能是最快的 import random s random
  • 实时卡中的 OpenGL?

    我一直在研究 glass GDK 和 glass 原生 Java 开发 我有一个在 Glass 上运行良好的开放 GL 应用程序 使用标准 Android 约定 我希望将其移植到 GDK 以利用语音触发器等功能 虽然我当然可以轻松地将它用作
  • 从哪里开始学习 Linux DMA/设备驱动/内存分配

    我正在移植 调试设备驱动程序 由另一个内核模块使用 并面临死胡同 因为 dma sync single for device 因内核错误而失败 我不知道这个函数应该做什么 而且谷歌搜索也没有什么帮助 所以我可能需要了解更多关于这个东西的知识