【Android驱动】module_init 和 module_exit
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相关推荐
- Android驱动(1)---Ubuntu中为Android系统上编写Linux内核驱动程序实现方法
Ubuntu中为Android系统上编写Linux内核驱动程序实现方法 本文主要介绍在Ubuntu 上为Android系统编写Linux内核驱动程序, 这里对编写驱动程序做了详细的说明,对研究Andr ...
- android驱动之旅-在Ubuntu上为Android系统编写Linux内核驱动程序(3)
Android的硬件抽象层,简单来说,就是对Linux内核驱动程序的封装,向上提供接口,屏蔽低层的实现细节.也就是说,把对硬件的支持分成了两层,一层放在用户空间(User Space),一层放在内核空 ...
- Android驱动入门系列(一)
Android驱动入门系列(一) -- Android驱动简介及编写第一个Android驱动 以下文章参考网上搜到的<Android驱动开发全过程(有图有真相)>一文,其中根据自己的实 ...
- 初入android驱动开发之字符设备(一)
大学毕业,初入公司,招进去的是android驱动开发工程师的岗位,那时候刚进去,首先学到的就是如何搭建kernel.android的编译环境,然后就是了解如何刷设备以及一些最基本的工具.如adb.fa ...
- Android驱动开发读书笔记六
第六章 Linux 驱动的工作和访问方式是 Linux 的亮点之一,Linux 系统将每一个驱动都映射成一个文件.这些文件称为设备文件或驱动文件,都保存在/dev目录中,由于大多数Linux驱动都有与 ...
- Android驱动开发之Hello实例(基于高通msm8909)
点击打开链接 Android驱动开发之Hello实例: 驱动部分 modified: kernel/arch/arm/configs/msm8909-1gb_w100_hd720p-perf_de ...
- Android驱动开发之Hello实例
Android驱动开发之Hello实例: 驱动部分 modified: kernel/arch/arm/configs/msm8909-1gb_w100_hd720p-perf_defconfig ...
- Android 驱动(3)---Android驱动开发知识储备
Android驱动开发知识储备 Android软件层次结构 (1)操作系统层 显示驱动(Frame Buffer),Flash内存驱动,照相机驱动,音频驱动,WiFi驱动,键盘驱动,蓝牙驱动,Bind ...
- Android 驱动(2)---MTKAndroid添加驱动模块
MTK Android添加驱动模块 1 [编写linux驱动程序] 1.1 一.编写驱动核心程序 1.2 二.配置Kconfig 1.3 三.配置Makefile 1.4 四.配置系统的autocon ...
- Android 驱动开发(1)---Hello 实例
Android驱动开发之Hello实例 Android驱动开发之Hello实例: 驱动部分 modified: kernel/arch/arm/configs/msm8909-1gb_w100_h ...
最新文章
- 数学无用论??我们欠孩子真正的数学阅读
- P7405-[JOI 2021 Final]雪玉【二分】
- 10个 Python 工程师,9个不合格!!
- 赞!清华大学发布首个自动图机器学习工具包AutoGL
- 控制抽象之简化客户代码
- 牛客网华为机试考试java_牛客网——华为机试(题17:坐标移动)(Java)
- OpenShift 4 - DevSecOps Workshop (1) - 安装 Workshop 环境
- Win32可执行文件的开发过程 - Win32汇编语言008
- 笔记《深入浅出数据分析》上
- Lwip的udp编程
- healthkit框架使用
- win10如何在不同窗口切换
- 面试官问我知道的分布式事务,我一口气说了六种
- SiT3373:220 -725MHz 低抖动压控差分振荡器VCXO
- 阿里云智能文字转语音源码
- 常用的校验注解之 @NotNull、@NotBlank、@NotEmpty 的区别
- 3ds Max 2014安装SupperMap 插件
- <3>【深度学习 × PyTorch】必会 线性代数 (含详细分析):点积 | 矩阵-向量积 | Hadamard积 | 矩阵乘法 | 范数/矩阵范数
- Python Turtle 小项目 6
- jz2440 linux4,JZ2440 u-boot-2016.11、linux-4.17和busybox-1.28.4移植笔记