码农知识堂 - 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部分,虽然内核可以访问不同的对象部分

  • 相关阅读:
    k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)HPA详细解释与案例应用
    【Linux】(五)GateWay远程开发方式-实验室服务器使用GateWay远程开发
    CentOs虚拟机下openGauss的配置使用
    STM32学习笔记:USART
    安防初识命令【学习笔记】
    springboot+vue乡镇村委会日程办公管理系统
    设备不锈钢二维码标签定制
    电脑提示ISDone.dll错误怎么办?
    【UI设计】Figma_“全面”快捷键
    HarmonyOS 应用开发之@Concurrent装饰器:@Sendable装饰器:声明并校验Sendable类
  • 原文地址:https://blog.csdn.net/weixin_43604927/article/details/126695618
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号