码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Linux驱动开发 --- 模块加载和ELF文件


    __init和__exit属性

    实际上是存在于include/linux/init.h文件中的宏定义

    #define __init __section(.init.text) 
    #define __exit __section(.exit.text)
    
    • 1
    • 2

    __init关键字是与链接器相关的,它可以告诉链接器如linux下的ld,将代码放在内核对象文件中的专用部分(事先约定好的部分)。它在模块加载和init函数执行后被释放。(当然这个例子只是用于模块编译进内核的情况)

    ELF

    可执行可链接格式的目标文件,由不同的命名部分组成,其中一些部分是必须的,它们成为ELF标准的基础。
    但也可以根据自己的需要构建任意一部分,用来给程序使用,内核就是利用了这一点。
    使用objdump打印出内核模块module.ko的不同组成部分:
    .text:包含程序代码,也称为代码
    .data:包含初始化数据,也称为数据段
    .rodata:用于只读数据
    .comment:存储注释
    .bss:由符号开始的块,未初始化的数据段, block started by symbol
    在这里插入图片描述
    这里比较重要的是:
    .modeinfo:存储有关模块的信息
    .init.text:存储以__init宏为前缀的代码

    链接器负责将符号(包括了代码和数据等)放到生成的二进制文件中的适当的部分,程序执行时会被加载器处理。
    二进制文件中的这些部分可以自定义,更改他们的默认位置。
    链接器还有一种机制,你可以向他提供链接器脚本(链接器定义文件LDF或者链接器定义脚本LDS),来添加其他部分。

    Linux内核提供了一个自定义LDS文件,它位于arch/ /kernel/vmlinux.lds.S中。对于要放置在内核LDS文件所映射的专用部分中的符号,使用__init和__exit进行标记。

    总之,__init和__exit是Linux指令(实际上是宏),它们使用C编译器属性指定符号的位置。这些指令指示编译器将以它们为前缀的代码分别放在.init.text和.exit.text部分,虽然内核可以访问不同的对象部分

  • 相关阅读:
    总结1062
    iTOP2K1000开发板Makefile文件
    使用Stable Diffusion生成艺术二维码
    第三章 组合逻辑电路
    含文档+PPT+源码等]精品基于SSM企业人力资源管理系统的设计与实现包运行成功]计算机Java毕业设计SSM项目源码
    【Linux】Ubuntu 20.04 深度学习 GPU 环境配置(CUDA Toolkit 11.7 + cuDNN v8.4.1)
    链表-0405合并有序链表
    深度学习——线性神经网络二
    py20_(终于第 21 天)初识 Python 3 GUI 编程 tk 窗口之文本图像控件及面向对象 GUI 编程!
    SQL Server教程 - SQL Server 代理(Agent)
  • 原文地址:https://blog.csdn.net/weixin_43604927/article/details/126695618
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号