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

这个区就没有高手了吗?怎么我的2.6的内核缺这2个API,驱动无法编译了~~

    来源: 互联网  发布时间:2016-01-29

    本文导语:  谁知道2.6内核里没有remap_page_range和tq_struct这2个函数怎么编译通过啊~ 例如:内存映射不能用了啊,我改用remap_vmalloc_range,但是不知道怎么改搞还是映射不了~~ /****************************************************************************** ...

谁知道2.6内核里没有remap_page_range和tq_struct这2个函数怎么编译通过啊~
例如:内存映射不能用了啊,我改用remap_vmalloc_range,但是不知道怎么改搞还是映射不了~~

/******************************************************************************
 *
 * Function   :  PlxPciPhysicalMemoryMap
 *
 * Description:  Maps physical memory to User virtual address space
 *
 ******************************************************************************/
RETURN_CODE
PlxPciPhysicalMemoryMap(
    DEVICE_EXTENSION *pdx,
    PCI_MEMORY       *pPciMem,
    BOOLEAN           bDeviceMem,
    VOID             *pOwner
    )
{
    int                rc;
    struct list_head  *pList;
    MAP_PARAMS_OBJECT *pMapObject;


    // Verify physical address
    if (pPciMem->PhysicalAddr == (U32)NULL)
    {
        DebugPrintf((
            "ERROR - Invalid physical address (0x%08x), cannot map to user spacen",
            pPciMem->PhysicalAddr
            ));

        return ApiInvalidAddress;
    }

    spin_lock(
        &(pdx->Lock_MapParamsList)
        );

    // Find the mapping parameters from the call to mmap
    pList = pdx->List_MapParams.next;

    // Find the object and remove it
    while (pList != &(pdx->List_MapParams))
    {
        // Get the object
        pMapObject =
            list_entry(
                pList,
                MAP_PARAMS_OBJECT,
                list
                );

        if ((pMapObject->pOwner       == pOwner) &&
            (pMapObject->vma.vm_start == pPciMem->UserAddr))
        {
            // Remove the object from the list
            list_del(
                pList
                );

            spin_unlock(
                &(pdx->Lock_MapParamsList)
                );

            DebugPrintf((
                "Found and removed map object (0x%08x) from listn",
                (U32)pMapObject
                ));

            // Set flags for I/O resource mapping
            if (bDeviceMem)
                pMapObject->vma.vm_flags |= VM_IO;

            // Set the region as page-locked
            pMapObject->vma.vm_flags |= VM_RESERVED;

            /***********************************************************
             * Attempt to map the region
             *
             * Note:
             *
             * The remap_page_range() function prototype was modified
             * to add a parameter in kernel version 2.5.3.  The new
             * parameter is a pointer to the VMA structure.  The kernel
             * source in RedHat 9.0 (v2.4.20-8), however, also uses the
             * new parameter.  As a result, another #define is added if
             * RedHat 9.0 kernel source is used.
             **********************************************************/

#if ( (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,3)) || 
     ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20)) && defined(RED_HAT_LINUX_KERNEL)) )
            rc =
                remap_page_range(
                    &pMapObject->vma,
                    pMapObject->vma.vm_start,
                    pPciMem->PhysicalAddr,
                    pMapObject->vma.vm_end - pMapObject->vma.vm_start,
                    pMapObject->vma.vm_page_prot
                    );
#else
            rc =
                remap_page_range(
                    pMapObject->vma.vm_start,
                    pPciMem->PhysicalAddr,
                    pMapObject->vma.vm_end - pMapObject->vma.vm_start,
                    pMapObject->vma.vm_page_prot
                    );
#endif

            if (rc != 0)
            {
                DebugPrintf((
                    "ERROR - Unable to map Physical address (0x%08x) ==> User spacen",
                    pPciMem->PhysicalAddr
                    ));

                rc = (int)ApiInsufficientResources;
            }
            else
            {
                DebugPrintf((
                    "Mapped Physical address (0x%08x) ==> User space (0x%08x)n",
                    pPciMem->PhysicalAddr, (U32)pMapObject->vma.vm_start
                    ));

                rc = (int)ApiSuccess;
            }

            // Release the object
            kfree(
                pMapObject
                );

            return (RETURN_CODE)rc;
        }

        // Jump to next item in the list
        pList = pList->next;
    }

    spin_unlock(
        &(pdx->Lock_MapParamsList)
        );

    DebugPrintf((
        "ERROR - Map parameters object not found in listn"
        ));

    return ApiInvalidData;
}

|
1.用remap_pfn_range替代
2.下半部的处理方式发生了大的变化,早期的某些机制被去除了,你用2.6中的任务队列机制来做,这就不仅仅是换一个函数名这么简单了,具体详见第三版

    
 
 

您可能感兴趣的文章:

  • 请问在2.6的内核环境下编译2.4的内核有没有什么特殊的要求
  • 内核进程间发送信号用哪个函数,如果没有这东西,那内核里异步通知用哪个东西
  • 想去掉内核的swap部分,得到一个小内核,有没有好的方法?
  • 但是内核源码中(相关c文件)明明EXPORT了 函数,为什么查看内核符号/proc/kallsys却没有该函数
  • 我想学习linux桌面编程,那么有没有必要学习linux的内核以及内核的相关编程呢?
  • 问一个小白问题,在交叉编译时,系统内核和开发板的内核有没有相关性?
  • 请问:编译内核时,make bzimage命令后,提示没有这个规则,这有没有影响呀?
  • 有没有大牛能谈一下UNIX和Windnt哪个是强内核,哪个是微内核,以及他们的优劣,多谢
  • 内核中的timer是不是可以理解为多线程,我想对一段代码加锁,如何实现,有没有可用的内核函数?
  • 请问:redhat有没有2.6内核呀,一定要升级才行吗?
  • 内核编译出现:没有编译规则/driver/pci/devlist.h。
  • 有没有看linux 0.11内核的
  • 内核线程没有用户空间具体指的是哪个结构体?
  • 有没有linux内核学习的QQ群呢?
  • 有没有使用最新内核的占用空间较小的linux操作系统
  • linux内核里面的所有头文件,有没有整理过的,请高手指点!谢谢!!!
  • 请问高手们,有没有一款工具可以测试内核内存泄露的?
  • 编译内核出错,有没有人帮忙阿
  • 编译linux0.01内核时出错,没有权限?
  • 用户进程有自己独立的地址空间,内核线程没有自己的地址空间 该怎样理解: ?
  • linux下有没有能编译出16bit代码的C语言编译器?
  • 用JCreator写了一个小程序,有十几个class,当修改某个文件重新编译,javac并没有编译修改的文件,请问要如何做javac才会重新编译所有的
  • 下载As86的一个压缩包,解开后没有rpm看样子的自己编译,请问如何编译。
  • 在linux redhat6.0中,进入x_window,请问系统有没有自带的c编译器,比如gcc;如果没有,那里可以下载并安装?
  • 共享库如何在编译的时候确定哪些函数没有实现?
  • 为什么apache编译后 ,没有rewrite模块?
  • 请教:有没有把java编译好的.java和.class文件编译成各个平台下的可执行文件??.exe?着急着急
  • 针对GCC,有没有反编译器的啊?
  • 如何安装GCC?没有任何编译器,
  • 我用的是atmel一个成熟的开发板。有一个触摸屏驱动程序,以<M>的方式编译为模块,编译时提示某个外部函数没有定义,但如果以<*>的方式编译进内核,则不会出错。请教下可能是什么原因?
  • 编译前的java文件没有,只有class文件
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • GDM无法写入您的认证文件。这可能意味着您的硬盘没有空间,或者您的主目录无法以写方式打开
  • 小试牛刀结果一头雾水!关于gcc编译后的a.out居然无法执行,系统说:我没有找到!:-(
  • PG5为什么无法进行Linux Swap的分区,根本就没有这一个选项,难受!
  • XR11是什么东西,是不是没有它有些程序无法编译成功!
  • 操作系统无法登陆,输入用户名回车之后就没有反应了.
  • 请问:我发现端口一旦被绑定后就无法释放出来,除非服务器端退出,有没有主动释放端口的办法啊?
  • 程序毁灭性无法启动,提示没有libgcc_s.so.1
  • "partitioning failed 无法将这些分区拨为主分区"求助,已经搜索,没有找到解决方法!
  • 有没有办法让一个进程无法通过ssh杀死
  • 为什么我进入linux7.2以后,无法看到底部的菜单(包括开始菜单),总之什么都没有,怎么解决?
  • tomcat 4.0.1 安装运行后在conf目录没有 .conf 文件,只有server.xml,可是 Apache 1.3.23无法理解server.xml,请问该如何配置?
  • 求助 我的firefox 上装了chm插件后无法打开chm文件,一点反应都没有 !
  • window无法访问samba.可以看见共享文件没有权限....
  • 文件无法打开,用ls -l 文件名,提示没有找到路径
  • 此数据库没有有效所有者,因此无法安装数据库关系图支持对象
  • 没有sa密码无法集成windows身份验证登录的解决方法
  • linux command无法撤消mv命令,在linux下没有undo.刚google下,看到老外说的一句比较经典的话。
  • jquery无法设置checkbox选中即没有变成选中状态
  • 程序产生core文件,但是无法跟踪到函数堆栈信息,不知大虾有没有遇到过
  • oracle 9i Linux 下安装时出现 无法建立inventory目录,你可能没有相应权限,请高手帮忙,100分,在线等!
  • C++ Bitsets 成员 none():如果没有位被设置则返回true
  • linux没有lilo命令阿,是不是表示没有 相关套件?我的下载吗,也没有RPM这个 命令,我该如何搞定他们出来
  • C++ I/O 成员 good():如果没有出现过错误则返回true
  • 请问:我发现我的系统里什么都没有啊,gcc没有,rpm也没有,这怎么办啊
  • 我重装了winme,却进不了Linux了,而我现在又没有Linux光盘,也没有Linux启动盘,还有没有办法?
  • linux 下 没有aptitude,也没有 apt-get。
  • 有没有哪位知道linux下有没有什么可视聊天的工具
  • 求救!!安装redhat后,提示重启,但是没有没有redhat的启动选项
  • 有没有搞错,JSP精华版数据全部没有了。
  • 我想在VMware上装FreeBSD,有没有人这样做过?有什么问题没有?
  • 我没有软驱,也没有LINUX的光盘,如何安装LINUX?


  • 站内导航:


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

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

    浙ICP备11055608号-3