• 如何将内核静态库编译连接到驱动程序中去【转】


    2010-12-07 08:27 331人阅读 评论(1) 收藏 举报

    http://blog.chinaunix.net/u2/61663/showart_2404744.html

    刚上邮箱的时候发现一位网友向我询问这个问题,同时发送了一个链接给我了。

    上去一看,上面还留有我以前同样的提问,看看时间,都几年前在别人的帖子里面的提问了。貌似当时我遇到同样问题的时候也是到处发帖回帖询问来着的,问的地方有点多,要不是这位朋友给我链接,早不记得那个链接也有访问过,呵呵。

    不过再往下看了后才发现,这个问题依然没有给出明确的回答,很多朋友给出的都是应用层库的链接,这和期望的内核层的链接是不一样的。

    所以我把自己的一点理解写出来,给后面的朋友参考,期望对后来的朋友有所帮助。

    我觉得在驱动程序里面编译链接内核静态库需要从三个方面注意:

    1.       首先保证你正确生成了内核库文件,而非应用程序库文件;

    2.       其次是除去静态库之外的驱动文件的正确性,包括内核库函数的调用和头文件的申明;

    3.       正确修改驱动的Makefile

    这几个方面都正确之后,就能正确地将内核库编译进指定的驱动中去。

    下面详细给出个最简单的例子给大家参考,毕竟有代码参考才是大家快速编程的王道。

    代码目录结构如下: 

    DriverEntry.c

     

    Makefile

     

    lib

    myalib.c

    myalib.c

    Makefile

     
     

    1.         内核静态库文件的生成

    内核库包含一个myalib.c和myalib.h文件,代码如下:

    //myalib.c

    void test(void)

    {

        printk("A lib test./n");

    }

    //myalib.h

    void test(void);

    # This is the Makefile for parse.

    RM = rm -f

    CCFLAGS = -c

    ARFLAG  = -rc

    CC = gcc

    AR = ar

    lib_OBJECTS  =  myalib.o

    lib_SOURCE  =  myalib.c

    LIB = libtest.a

    libtest.a:$(lib_OBJECTS)

             $(AR) $(ARFLAG) -o $@ $^

            

    $(lib_OBJECTS):$(lib_SOURCE)

             $(CC) $(CCFLAGS) -o $@ $^

    clean:

             $(RM) $(lib_OBJECTS.o)

             $(RM) $(LIB)

    在输入终端下执行”make”命令即可生成正确的内核库文件。

  • 相关阅读:
    go.js:画布内容导出为图片
    go.js:拖拽创建流程图
    vue+go.js:实现流程图
    前端:go.js去水印
    screenfull错误
    VUE:axios接收后端文件流并下载文件
    CSS:unset 属性
    上传文件小工具
    个人技能总结2--MyBaties框架
    个人技能总结1:Shiro框架
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/5710135.html
Copyright © 2020-2023  润新知