码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 单独编译某个驱动模块


    CROSS_COMPILE:指定编译器的前缀

    ARCH:指定平台

    export:用于设置或显示环境变量

    -C: 指定Linux内核源代码的根目录

    M:指定单独编译的模块所在的目录

     参考:编译模块命令make -C M=与make -C SUBDIRS=_VClol的博客-CSDN博客_make subdirs

     make -C /usr/src/linux-2.6.15.5/ M=/driver_study/ modules编译结果:

    1. make -C /usr/src/linux-2.6.15.5/ M=/driver_study/ modules
    2. make: Entering directory `/usr/src/linux-2.6.15.5'
    3. CC [M] /driver_study/hello.o
    4. Building modules, stage 2.
    5. MODPOST
    6. CC /driver_study/hello.mod.o
    7. LD [M] /driver_study/hello.ko
    8. make: Leaving directory `/usr/src/linux-2.6.15.5'

    从中可以看出,编译过程中,经历了这样的步骤:先进入Linux内核所在的目录,并编译出hello.o文件,运行MODPOST会生成临时的hello.mod.c文件,而后根据此文件编译出hello.mod.o,之后连接hello.o和hello.mod.o文件得到模块目标文件hello.ko,最后离开Linux内核所在的目录。

    参考:linux指令 make -C ..... M =.... - dos_hello_world - 博客园

    2.6内核中,模块的编译需要配置过的内核源码;编译、连接后生成的内核模块后缀为.ko;编译过程首先会到内核源码目录下,读取顶层的Makefile文件,然后再返回模块源码所在目录。 

    Makefile资料,参考makefile详解 - 一叶飘落尽知秋 - 博客园

    1、wifi驱动中的Makefile:

    1. all: modules
    2. modules:
    3. $(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(KSRC) M=$(shell pwd) modules

    当执行make -j32时,因为没有指定目标,默认执行all目标,all指定的modules目标,执行modules目标;注意,此时的modules目标是当前Makefile文件中自己定义的目标,而在自定义的modules目标实现中出现的'make modules'的执行路径只能是内核源码顶层目录,执行结果是:读取内核源码顶层目录(根目录)中的 Makefile 文件,找到里面定义的 modules 目标。

    参考:linux make modules 命令详解_滨边美波她男友的博客-CSDN博客_make modules

    2、最终单独只编译某个驱动的完整命令

    make ARCH=arm CROSS_COMPILE=~/.../gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi- -C ~/.../kernel M=~/.../kernel/drivers/wifi/rtl8821CS  modules

    补充 :

    $(ARCH) 、$(CROSS_COMPILE) 、$(KSRC)中的ARCH、CROSS_COMPILE、KSRC都是变量,需要定义变量值,这里给出一个例子:

    1. ARCH := arm
    2. CROSS_COMPILE := ~/xxx/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-
    3. KSRC := ~/xxx/kernel
    4. obj-y += neon_reverse.o
    5. all: modules
    6. modules:
    7. $(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(KSRC) M=$(shell pwd)

  • 相关阅读:
    Linux基础内容(13)—— 进程控制
    计算机毕设(附源码)JAVA-SSM健身房管理系统
    斐波那契数列和斐波那契数
    android13(T) 网络比分机制
    TCP/IP网络江湖——江湖导航(网络层上篇)
    如何解决DNS解析错误
    Django(10)-项目实战-对发布会管理系统进行测试并获取测试覆盖率
    11后端开发就是CRUD?没那么简单!
    pip和conda的环境管理,二者到底应该如何使用
    京东滑块验证逆向分析与算法还原
  • 原文地址:https://blog.csdn.net/shp1234/article/details/127549192
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号