zoukankan      html  css  js  c++  java
  • 内存管理-4---分配内存常用函数(用到DMA机制时的分配方法:返回虚拟地址和物理地址)

    makefile

      1 LINUX_SRC :=/home/liuye/tiny4412/FriendlyARM_kernel/linux-3.5
      2 #obj-m  += module.o            #生成module.ko   但我们写module.o就可以
      3 #module-objs=param.o     #这里写要编译文件
      4 obj-m +=mmc_v_p.o       #这是单文件的编译:上面两行是多文件的编译,更加方便
      5 
      6 all:
      7         make -C $(LINUX_SRC) M=`pwd` modules
      8 clean:
      9         make -C $(LINUX_SRC) M=`pwd` modules clean
     10         

    mmc_v_p.c

      1 #include <linux/init.h>
      2 #include <linux/sched.h>
      3 #include <linux/module.h>
      4 #include <linux/mm.h>
      5 #include <linux/highmem.h>
      6 #include <linux/vmalloc.h>
      7 #include <linux/dma-mapping.h>
      8 #include <linux/slab.h>
      9 //查找
     10 //内核代码工作在两种环境下:
     11 //      1/中断上下文  不允许睡眠
     12 //      2/进程上下文    允许睡眠
     13 
     14 /*
     15 内核中存放很多个page结构体都是连续的:page+1就是下一个page的地址
     16 page
     17 page
     18 page
     19 page
     20 page
     21 page
     22 */
     23 //在内核程序中,申请的内存一定不能有内存泄漏,用完要是放,不然内核就崩溃了.
     24 //在应用程序中,如果申请的内存没有使放,越来越多,内核就会把这个进程杀掉,但是内核里面由内存泄漏是没有人可以把内核干掉的.
     25 static __init int test_init(void)
     26 {
     27         char *v;//虚拟地址
     28         dma_addr_t paddr;//物理地址
     29         //curent:指针:指向这个进程的task_struct结构体:用来描述进程信息:comm进程名字
     30         printk("process:%s
    ",current->comm);
     31         //申请dma所要访问的内存:NULL:这里应该填写设备类型,后面讲解
     32         //一般声卡驱动,framebuffer等需要dma硬件支持的驱动都需要用到这个函数
     33         v = dma_alloc_coherent(NULL,480*800*4,&paddr,GFP_KERNEL);
     34 
     35 
     36         //释放:
     37         dma_free_coherent(NULL,480*800*4,v,paddr);
     38 
     39 
     40 
     41         return 0;
     42 }
     43 static __exit void test_exit(void)
     44 {
     45         printk("mmc exit!
    ");
     46 }
     47 
     48 module_init(test_init);
     49 module_exit(test_exit);
     50 MODULE_LICENSE("GPL");
     51 
    有时候,不小心知道了一些事,才发现自己所在乎的事是那么可笑。
  • 相关阅读:
    ngnix 配置反向代理
    tomcat nio
    spring boot 1
    mongodb 总结
    spring profile 多环境配置管理
    分布式锁实现
    2020真难
    NSRunLoopCommonModes和NSDefaultRunLoopMode区别(Timer)
    数据统计---埋点
    【问题汇总】iOS数据持久化
  • 原文地址:https://www.cnblogs.com/axjlxy/p/8976181.html
Copyright © 2011-2022 走看看