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

在内核里如何访问这段内存?

    来源: 互联网  发布时间:2015-12-14

    本文导语:  内存为64M,数据放在内存0x03DE4000处 在VIVI里面,把这些数据映射到了地址为 VIVI_RAM_BASE + 0x03DE4000的内存中 VIVI_RAM_BASE为0x30000000 内核起动后,我要在内核里面访问这段内存,我是这样用的 unsigned long *map_table = (unsigned lo...

内存为64M,数据放在内存0x03DE4000处
在VIVI里面,把这些数据映射到了地址为 VIVI_RAM_BASE + 0x03DE4000的内存中
VIVI_RAM_BASE为0x30000000

内核起动后,我要在内核里面访问这段内存,我是这样用的
unsigned long *map_table = (unsigned long *)(VIVI_RAM_BASE + 0x03DE4000);
data = *(map_table+i)
可是却提示:
Unable to handle kernel paging request at virtual address 0x33de4000

换成
unsigned long *map_table = (unsigned long *)(0x03DE4000);
也提示提示:
Unable to handle kernel paging request at virtual address 0x03de4000

为什么在VIVI里面可以那样用,而内核就不行呢
内核起动后,我要在内核里面访问这段内存请问该怎麽访问呢?

|
内核启动后会进行地址映射,会建立自己的地址保护机制,你当然不能这么用了,需要先建立物理地址到虚拟地址的关系才能访问

|
看你给定的地址数是 虚拟地址还是实地址,
同样data = *(map_table+i)中对地址访问,在进程中是对虚拟地址的访问,这中间还需要一个映射的。
不知道我说的对不对!!

|
访问内核地址至少需要进入内核态,否则访问的都是虚拟地址,如果虚拟地址还没有映射物理内存的话,都会导致访问失败

|
应该是要用到ioremap,还有copyfromkernal之类的吧?

|
你需要在页表中加入一个0x33de4000到0x3de4000的映射,然后才能访问那段内存。ioremap是用来映射mmio空间的函数,在不同的结构上,具体map的方式不一样,但是都被ioremap封装了起来。ioremap会申请一段虚拟地址空间,建立页表,再将地址返回给调用者

    
 
 

您可能感兴趣的文章:

  • 现有linux内核中共享内存机制如何移植到linux0.11内核中
  • 内核不能使用虚拟内存?
  • 内核最大可用内存是多少,怎样扩大可用内存?
  • 请问重新编译LINUX内核是否能将没有用的外设的驱动程序删除并减少内核占有内存的资源?请好心人仕指教!
  • 内核内存泄露检测
  • [求助]如何设置uclinux内核中的内存
  • linux内核分配内存,及管理?
  • 请问高手们,有没有一款工具可以测试内核内存泄露的?
  • 内核启动内存问题
  • 内核操作用户空间内存
  • 内核里内存拷贝用什么函数?
  • linux下如何实现内核态和用户空间进程共享内存?
  • linux内核 怎么能增加虚拟内存?
  • 如何在内核中分配一个带有VM_EXEC权限的内存页面?
  • 编译新内核后怎么进入原来内核 iis7站长之家
  • 如何在内核中获取当前进程的内存使用及CPU占用率
  • 如何写个吃内存的demo,让内核直接分配大块物理页面?
  • 有人做过内核空间和用户空间的内存映射吗 内核空间和用户空间交换数据用内存映射的方法,结果做的驱动可以工作,但经常会引起死机
  • linux内核加载到哪个内存区间了?
  • Linux内核中怎样给DMA分配没有进行Cache映射的内存?
  • Linux中内核线程不访问内核态地址空间?
  • 内核访问用户空间
  • 用户空间如何访问内核变量。
  • 用户空间如何访问内核变量
  • 如何从内核访问 /proc/net/arp 文件????
  • linux 内核态能访问 用户态的 tty 终端吗?
  • 如何访问内核模块的导出符号?
  • [给今天还在奋斗的大虾散分]用户空间的代码能否直接访问内核空间的数据????
  • 读过内核进来~~访问虚拟内存的方法!
  • DEFINE_WAIT(__wait)这宏把__wait变量定义在了进程的内核堆栈中,则另一进程使用wake_up时,是如何访问到__wait变量的呢?
  • 【新手求助】关于2.6内核下S3C2410寄存器的访问方法(串口寄存器)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux内核中影响tcp三次握手的一些协议配置
  • Fedora Core 2自带的内核升级程序下载下来内核后,要不要再编译一遍内核?
  • TCP协议四次断连过程介绍及Linux内核协议栈中相关设置项
  • 进程内核栈和操作系统内核栈的关系
  • CentOS 6内核升级:下载编译启用新内核版本详细过程
  • 2.6内核下编译2.4内核
  • Linux进程的内核栈和用户栈概念,相互关系及切换过程
  • 谁能提供kgdb内核补丁内核模块的下载
  • linux内核中的likely宏和unlikely宏介绍及用法
  • 编译新内核后怎么进入原来内核
  • CentOS 6.5 下载地址及如何升级内核(kernel)版本到 3.10.28
  • 请问linux中如何判断内核是否已经启动。(在内核中写程序)
  • Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法
  • 内核模块跟内核版本不匹配????????
  • docker使用的技术之Container内核原理介绍
  • 请教:如何安装新内核(rpm包)而不同原来得内核冲突?? 在线等待!!
  • linux为什么要升级内核?升级内核有何作用?
  • 内核升级后,如何在新的内核中加载显卡驱动?
  • 内核源码和结果make过的内核源码有什么区别
  • 不重新编译内核能修改内核函数吗?
  • 如何学好内核?学了内核能应用于哪方面?


  • 站内导航:


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

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

    浙ICP备11055608号-3