linux驱动入口函数module_init详解_xinyuan510214的专栏-CSDN博客

__init和__exit宏的作用_zhenwenxian的专栏-CSDN博客

module_init:                        // kernel/include/linux/init.h#define     module_init(x)            __initcall(x)#define     __initcall(fn)            __device_initcall(fn)#define     __device_initcall         __define_initcall(fn, 6)#define     __define_initcall(fn, id)    \static initcall_t    __initcall_##fn##id  __used    \__arrtibute__((_section__(".initcall" #id ".init"))) = fn       
"section关键字会将被修饰的变量或函数编译到特定的一块位置,不是物理存储器上的特定位置,而是在可执行文件的特定段内"函数名就是函数的地址,该宏把函数地址放到.initcall段, 并用id分配了优先级, id值越小,优先级越高.可执行文件执行时,驱动init函数就依次被加载。

这种东西没有第二种理解,直接复制了:“内核的部分函数带有__init和__exit宏,负责“初始化”和“清理收尾”该函数。如果该模块被编译进内核,而不是动态加载。宏 __init的使用会在初始化完成后丢弃该函数并收回所占内存”------------------
白话说一遍:也就是说对于-y的驱动,也就是编进内核的:__init的作用是告诉系统,初始化之后,回收该驱动模块内存等资源;__exit可以理解为,如果该模块编进了内核,也就是不用卸载,忽略这个符号修饰的函数(所做的收尾工作)。对于-m的模块,也就是动态加载的:__init没作用,__exit处理del_driver的动作。

【Android驱动】module_init 和 module_exit相关推荐

  1. Android驱动(1)---Ubuntu中为Android系统上编写Linux内核驱动程序实现方法

    Ubuntu中为Android系统上编写Linux内核驱动程序实现方法 本文主要介绍在Ubuntu 上为Android系统编写Linux内核驱动程序, 这里对编写驱动程序做了详细的说明,对研究Andr ...

  2. android驱动之旅-在Ubuntu上为Android系统编写Linux内核驱动程序(3)

    Android的硬件抽象层,简单来说,就是对Linux内核驱动程序的封装,向上提供接口,屏蔽低层的实现细节.也就是说,把对硬件的支持分成了两层,一层放在用户空间(User Space),一层放在内核空 ...

  3. Android驱动入门系列(一)

    Android驱动入门系列(一)   -- Android驱动简介及编写第一个Android驱动 以下文章参考网上搜到的<Android驱动开发全过程(有图有真相)>一文,其中根据自己的实 ...

  4. 初入android驱动开发之字符设备(一)

    大学毕业,初入公司,招进去的是android驱动开发工程师的岗位,那时候刚进去,首先学到的就是如何搭建kernel.android的编译环境,然后就是了解如何刷设备以及一些最基本的工具.如adb.fa ...

  5. Android驱动开发读书笔记六

    第六章 Linux 驱动的工作和访问方式是 Linux 的亮点之一,Linux 系统将每一个驱动都映射成一个文件.这些文件称为设备文件或驱动文件,都保存在/dev目录中,由于大多数Linux驱动都有与 ...

  6. Android驱动开发之Hello实例(基于高通msm8909)

    点击打开链接 Android驱动开发之Hello实例: 驱动部分 modified:   kernel/arch/arm/configs/msm8909-1gb_w100_hd720p-perf_de ...

  7. Android驱动开发之Hello实例

    Android驱动开发之Hello实例: 驱动部分 modified:   kernel/arch/arm/configs/msm8909-1gb_w100_hd720p-perf_defconfig ...

  8. Android 驱动(3)---Android驱动开发知识储备

    Android驱动开发知识储备 Android软件层次结构 (1)操作系统层 显示驱动(Frame Buffer),Flash内存驱动,照相机驱动,音频驱动,WiFi驱动,键盘驱动,蓝牙驱动,Bind ...

  9. Android 驱动(2)---MTKAndroid添加驱动模块

    MTK Android添加驱动模块 1 [编写linux驱动程序] 1.1 一.编写驱动核心程序 1.2 二.配置Kconfig 1.3 三.配置Makefile 1.4 四.配置系统的autocon ...

  10. Android 驱动开发(1)---Hello 实例

    Android驱动开发之Hello实例 Android驱动开发之Hello实例: 驱动部分 modified:   kernel/arch/arm/configs/msm8909-1gb_w100_h ...

最新文章

  1. 数学无用论??我们欠孩子真正的数学阅读
  2. P7405-[JOI 2021 Final]雪玉【二分】
  3. 10个 Python 工程师,9个不合格!!
  4. 赞!清华大学发布首个自动图机器学习工具包AutoGL
  5. 控制抽象之简化客户代码
  6. 牛客网华为机试考试java_牛客网——华为机试(题17:坐标移动)(Java)
  7. OpenShift 4 - DevSecOps Workshop (1) - 安装 Workshop 环境
  8. Win32可执行文件的开发过程 - Win32汇编语言008
  9. 笔记《深入浅出数据分析》上
  10. Lwip的udp编程
  11. healthkit框架使用
  12. win10如何在不同窗口切换
  13. 面试官问我知道的分布式事务,我一口气说了六种
  14. SiT3373:220 -725MHz 低抖动压控差分振荡器VCXO
  15. 阿里云智能文字转语音源码
  16. 常用的校验注解之 @NotNull、@NotBlank、@NotEmpty 的区别
  17. 3ds Max 2014安装SupperMap 插件
  18. <3>【深度学习 × PyTorch】必会 线性代数 (含详细分析):点积 | 矩阵-向量积 | Hadamard积 | 矩阵乘法 | 范数/矩阵范数
  19. Python Turtle 小项目 6
  20. jz2440 linux4,JZ2440 u-boot-2016.11、linux-4.17和busybox-1.28.4移植笔记

热门文章

  1. Cocos2d-x 3.17.2 集成X5WebView内核方法,完美运行
  2. 九九乘法表的简单代码
  3. 数字孪生可视化开发技术(ThingJS)学习笔记
  4. 线性代数矩阵秩的8大性质、重要定理以及关系
  5. SAS入门 (二)--宏
  6. Fragstats计算景观格局指数——批量计算(二)
  7. Linux应急响应入侵排查思路
  8. Python爬虫入门教程24:下载某网站付费文档保存PDF
  9. MS17-010漏洞复现(带win7虚拟机安装,零基础)
  10. iOS AVPlayer播放模式的实现(随机播放 列表循环 单曲循环)