当前位置:  技术问答>linux和unix

Linux内核模块里的读写函数

    来源: 互联网  发布时间:2016-07-23

    本文导语:  我现在看一个软件GPS接收机的源代码,是用Linux内核模块写的。在其中的读函数里,程序直接用copy_to_user将数据从内核态拷贝到用户态,我想知道其具体是如何操作的呢?数据在内核态是什么意思,拷贝到用户态又是...

我现在看一个软件GPS接收机的源代码,是用Linux内核模块写的。在其中的读函数里,程序直接用copy_to_user将数据从内核态拷贝到用户态,我想知道其具体是如何操作的呢?数据在内核态是什么意思,拷贝到用户态又是什么意思?

另外,我注意到,在中断服务程序里有这样的代码:用inw_p直接从芯片的寄存器内读取数据,供中断服务程序使用。这样,就有两个读取的函数了,请问这二者有何区别,又有没有什么联系呢?我一直对数据如何从硬件(寄存器)上转移到用户上不太清楚,希望有朋友解惑!甚谢!

|
ls的说的 x86 cpu的特权级5 ,真是闻所未闻

linux内存模型可以很容易搜索到。32位的cpu可寻址4G地址空间。对于每个进程来说,都可以访问4G的地址空间。其中又分为用户空间和内存空间,配置内核时可以指定分配方式。一般采用3G用户空间,1G内核空间的分配方式。每个进程的3G的用户空间是私有的,1G的内核空间是所有进程共享的。分界地址就是0xc0000000
。用户空间不能访问高于0xc0000000的地址空间,会报段错误。


用户空间使用驱动程序,是通过读写设备文件实现的。用户态的read()最终会调用内核struct file_operations里注册的read函数。这个相信lz也不是完全不知道。用户态write()的第二个参数是缓冲区指针指向的用户态的内存空间,内核驱动里的write传入的第二个参数就是这个用户态的缓冲区地址。内核如果直接对这个用户态地址进行操作,不能保证进程在睡眠时属于它的内存空间不被置换出去,很可能造成读内存错误,所以要靠copy_from_user将其读入内核中的一段内存空间。内核也不能直接操作用户态的内存,所以对应用户程序的read,要使用copy_to_user将内核空间数据传递给用户空间内存。


第二个问题,关于中断中的读取和驱动原有的read,他们是不一样的
中断是由硬件触发的,驱动原有的read是用户自己写程序去读的
即中断读是响应硬件要求驱动去读,原来的read是响应用户编程去读。
一般是设备每准备好一次数据,就触发一次中断,驱动程序读取设备信息存储起来,等到用户程序读取的时候一次返回所有数据。

    
 
 

您可能感兴趣的文章:

  • unix/Linux下c++ boost thread库读写锁介绍
  • linux 下能否读写.dbf 或者.xls格式的文件,怎样读写?高手指点,拜谢!!!
  • unix/Linux下c/c++ pthread库读写锁函数介绍
  • 串口读写,双方同时读写控制问题(linux内核)。
  • linux多线程无法进行阻塞方式的读写操作
  • linux下读写硬件
  • 有谁知道,Linux下文件的读写原理是怎样的?急
  • 一台linux机子上的程序要读写另外一台linux机子上的文件,该怎么做呢?
  • 如何在内核模块中对linux字符驱动进行读写呢
  • linux环境下SD卡如何读写
  • linux下面configlib库的读写问题
  • 哪位大侠知道Linux里的有名管道传送数据快不快?有名管道操作的过程是否有读写硬盘的操作?
  • 在linux下有没有想windows下vc一样读写ini 配置文件的库或函数
  • 怎么使用 linux 下的 libxml2 库读写 xml 文件和设置属性
  • 有关linux下读写串口的问题,在线等待!
  • 怎样将linux系统底下一个文件夹的只读属性改为可读写的属性?
  • 急求 linux下串口同时进行读写问题解决方法
  • Linux 中对文件的读写的问题
  • Linux内核中文件进行读写操作的问题
  • linux下是通过什么方式读写硬盘的?
  • 在linux中,如何读写usb端口数据
  • Linux内核中影响tcp三次握手的一些协议配置
  • 我想学习linux桌面编程,那么有没有必要学习linux的内核以及内核的相关编程呢?
  • TCP协议四次断连过程介绍及Linux内核协议栈中相关设置项
  • 现有linux内核中共享内存机制如何移植到linux0.11内核中
  • Linux进程的内核栈和用户栈概念,相互关系及切换过程
  • 读懂 Linux 内核代码不难,难的是读懂 Linux 内核代码背后的哲学!
  • linux内核中的likely宏和unlikely宏介绍及用法
  • Linux中内核线程不访问内核态地址空间?
  • Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法
  • linux为什么要升级内核?升级内核有何作用?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux c++虚函数(virtual function)简单用法示例代码
  • 在dos下访问内存的MK_FP函数在linux下对应什么函数?int86()函数呢?
  • linux c下利用srand和rand函数生成随机字符串
  • 哪位大侠有unix/linux的函数和函数所在的文件
  • Linux下c基于openssl生成MD5的函数
  • linux中,动态库中的函数如何调用静态库中的函数
  • Linux Kernel 'sctp_v6_xmit()'函数信息泄露漏洞
  • linux0.11内核有些函数是封装的吗?比如timer_interrupt()函数。
  • Linux下gettimeofday()函数和clock()函数:精确到毫秒级的时间
  • linux下自带了soup函数库和XML处理函数库了吗?
  • linux c 生成随机数srand函数和rand函数介绍及代码示例
  • linux下类的成员函数不可以作为自定义的信号处理函数么?
  • Linux下c函数dlopen实现加载动态库so文件代码举例
  • Linux有定时器函数吗?是不是要自己实现?如果有的话是什么函数呢?谢谢
  • linux c malloc函数定义及用法详解
  • linux c入门问题,大家指教。system函数和exec函数的区别。
  • Windows和Linux下C++类成员方法作为线程函数方法介绍
  • linux 2.6.35.4 内核中已没有netif_rx_schedule()函数,那替代函数是啥?
  • Linux下C语言strstr()查找子字符串位置函数详细介绍(strstr原型、实现及用法)
  • wcslen 等函数能用在linux下面吗?文件路径搜索有没有跨平台的函数库?
  • Linux下GCC内置原子操作函数(多线程资源访问)介绍
  • Linux 下析构函数为什么不是虚函数?
  • Web服务器/前端 iis7站长之家
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3