linux设备驱动--内存和I/O访问

1、内存和I/O的硬件机制,主要涉及内存空间、I/O空间和MMU

1.1 I/O空间和内存空间

X86处理器中存在I/O空间的概念

ARM和Power PC并不提供I/O空间,I/O空间挂接在内存空间,通过访问内存空间可以访问I/O空间

1.2 内存管理单元MMU

TLB:转换旁缓存

TTW:即转换漫游表

 

2、linux的内存管理、内存区域的分布、常规内存和高端内存的区别

在3~4GB之间的内核空间中,从低地址到高地址依次为:

物理内存映射区——隔离带——vmalloc虚拟内存分配器——隔离带——高端内存映射区——专用页面映射区——保留区

(在物理内存和高端内存之间为虚内存分配区(VMALLOC_START~VMALLOC_END),用于vmalloc函数)

图示:

3、linux内存存取的方法,主要涉及内存动态申请,以及通过虚拟地址存取物理地址的方法

3.1 用户空间内存动态申请

malloc()和free()成对出现

3.2 内核空间内存动态申请

linux内核空间中申请内存的3个函数:

kmalloc() :申请的内存位于物理映射区,而且在物理上也是连续的,他们与真实的物理地址只有一个固定的偏移

_ _get_free_pages():和kmalloc函数一样

vmalloc():在虚拟的内存空间给出一块连续的内存空区,实质上,这这片连续的虚拟内存在物理内存中并不一定连续

(1)、kmalloc()申请、kfree()释放

(2)、_ _get_free_pages()

(3)、vmalloc()申请 、vfree()释放

(4)、slab 与内存池

!创建slab缓存:kmem_cache_create()用于创建一个slab缓存

!分配slab缓存:kmem_cache_alloc()

!释放slab缓存:kmem_cache_free()

!收回slab缓存:kmem_cache_destroy()

!!创建内存池:mempool_create()

!!分配和回收对象:mempool_alloc()和 mempool_free()

!!回收内存池:mempool_destroy()

3.3 虚拟地址与物理地址关系 

 

4、设备I/O内存和I/O端口的访问流程

5、设备驱动中的DMA与CACHE一致性问题 以及DMA的编程方法

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值