在Linux PCI驱动程序上工作,现在我正在尝试使用scatter / gather为DMA编写代码.

目前,我已经了解到要直接从用户空间访问DMA数据,我们需要将用户空间页面固定到内核空间.

要做到这一点,我们有get_user_pages,其完整定义如下:

int get_user_pages(struct task_struct * tsk,

struct mm_struct * mm,

unsigned long start,

int nr_pages,

int write,

int force,

struct page ** pages,

struct vm_area_struct ** vmas);

我的第一个问题是关于struct page **页面.在调用get_user_pages之前,我们需要为页面分配内存(使用kcalloc,例如).

我的第二个问题是关于无符号长启动,在手册页上,它说“启动用户地址”,这是否意味着,如果我在用户空间中声明一个指针,如int * p,那么“起始用户地址”我应该通过到内核​​空间是p?

我的第三个问题也是关于unsigned long start,如果我在第二个问题中理解正确,那么我们如何确保这个地址正好在页面的开头?

所以有三个问题,谢谢你的进步.

解决方法:

My first question is about the struct page ** pages. Here do we need to allocate memory(using kcalloc for ex.) for the pages before calling the get_user_pages?

你可以,但这不是强制性的,数组就足够了(它的大小取决于nr_pages)

如果你想固定4页,结构页面*页面[4];足够.

My second question is about the unsigned long start, on the man page, it says “starting user address”, does it mean that, if I declare a pointer like int *p, the “starting user address” I should pass to kernel space is p?

此参数应指向用户进程拥有的内存(如malloc之后).

My third question is also about the unsigned long start, if I understand correctly in the second question, then how can we make sure that this address begins exactly at the beginning of a page?

我认为你可以用getpagesize功能来做到这一点.

标签:c-3,linux,linux-kernel,linux-device-driver,kernel-module

来源: https://codeday.me/bug/20190628/1312070.html

linux关于程序的user,c – “get_user_pages”如何工作(对于linux驱动程序)相关推荐

  1. linux应用程序固件升级,一种多设备同步烧录Linux固件及应用程序的方法与流程...

    本发明涉及Linux系统技术领域,具体的说全自动化烧写Linux系统及其应用程序,主要是一种多设备同步烧录Linux固件及应用程序的方法. 背景技术: 随着计算机技术.互联网技术和单片机技术的深入发展 ...

  2. zynq+linux固化程序,如何在 Zynq UltraScale+ MPSoC 上实现 Linux UIO 设计

    原标题:如何在 Zynq UltraScale+ MPSoC 上实现 Linux UIO 设计 简介 作者: Alex He (何晔), 赛灵思高级嵌入式应用工程师 这里的 UIO 即 Userspa ...

  3. linux应用程序的编写实验原理,操作系统实验 1.在linux下编写一个应用程序 联合开发网 - pudn.com...

    操作系统实验 所属分类:Linux/Unix编程 开发工具:C/C++ 文件大小:1KB 下载次数:3 上传日期:2019-05-01 20:34:21 上 传 者:烟雨南风起 说明:  1.在lin ...

  4. 嵌入式linux通过程序设置系统时间,嵌入式新手如何设定Linux的时间函数

    一.时间相关说明 格林威治时间表示0时区的标准时间.其他时区的时间和此标准时间均有时间差.UTC(UniversalTime Coordinated)是世界协调时间,是格林威治时间在互联网中的表示方法 ...

  5. linux应用程序安装与管理

    一.Linux应用程序与命令的关系 1.基本命令是Linux系统中不可缺少的组成部分 <?xml:namespace prefix = o ns = "urn:schemas-micr ...

  6. Linux init程序分析

    http://blog.csdn.net/zhoudaxia/article/details/6666872 1.init程序剖析     init进程是内核引导过程完成时创建的第一个进程.Linux ...

  7. Linux下程序崩溃dump时的 core文件的使用方法

    Linux下程序崩溃dump时的 core文件的使用方法 1.在启动程序前执行 ulimit -c unlimited unlimited 表示生成文件的大小限制,也可以修改为自定义的大小,例如: u ...

  8. visual studio asmx 调试_通过Windows Visual Studio远程调试WSL2中的.NET Core Linux应用程序...

    最近两天在Linux中调试.NET Core应用程序,同时我发现在Linux中调试.NET Core应用程序并不容易.一直习惯在Visual Studio中进行编码和调试.现在我想的是可以简单快速的测 ...

  9. linux独立应用程序开发,Linux应用程序开发(一)

    Linux应用程序开发(一)---移植thttpd+Sqlite3+PHP5到arm linux(4) 移植环境(红色粗字体字为修改后内容,蓝色粗体字为特别注意内容) 1,主机环境:VMare下Cen ...

最新文章

  1. git多人协作冲突解决方法
  2. 28和lba48命令格式区别_编译Sass(命令行)
  3. arp病毒利用的Javascript技术
  4. T-SQL备忘(2):聚合函数运算和NULL
  5. 第十二章——SQLServer统计信息(3)——发现过期统计信息并处理
  6. 洛谷P3111 [USACO14DEC]牛慢跑Cow Jog_Sliver
  7. Fiddler抓包没有网!
  8. Android开关按键(左右复选)
  9. ThoughtWorks史凯: 数字化转型不是技术变革,而是企业灵魂深处的自我革命
  10. 3分钟教你如何用代码向心爱的女生表白
  11. Waves 10 win10 如何卸载干净 / 安装 / 如何处理waves mixer application installation failed / 改变默认安装路径
  12. 一种网格去噪算法(基于平均面法向的均值滤波)
  13. Android平台下的图片/视频转Ascii码图片/视频 (一)
  14. android+手机+用短信发pdf文件,iPhone如何将PDF通过短信邮件发给别人【仅限iPhone6/6s】...
  15. 卡片式轮播图 效果 实现
  16. 华师大 OJ 2897
  17. 谷歌相机android4,谷歌相机10.0版本 7.4.200.316937482 安卓版
  18. linux管道举例理解
  19. 作业 二十七 三国志
  20. HTML怎么设艺术字体,ps海报艺术字体怎么弄(快速设计制作教程)

热门文章

  1. python 第三方包自动导入_7行代码,彻底告别python第三方包import导入问题!
  2. TCP协议、算法和原理
  3. mysql 逻辑架构
  4. ethereumjs/ethereumjs-vm-4-tests
  5. 马王堆汉墓帛书‧老子甲本——道经
  6. 基本的try-cathc-finally异常处理
  7. 附加没有日志文件的数据库方法
  8. sql的使用详解(针对oeacle)之select(上)
  9. 大型网站系统架构分析--转
  10. 云计算-从基础到应用架构系列-云计算的概念