0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

内核模块知识:多个源文件编译生成一个内核模块

麦辣鸡腿堡 来源:嵌入式Linux充电站 作者:Vincent 2023-09-26 16:58 次阅读

多个源文件编译生成一个内核模块

例如,将hello.c和world.c两个c文件编译生成一个叫hello_world.o的目标文件,则在Makefile中添加以下两句:

obj-m:=hello_world.o

hello_world-objs=hello.cworld.c

内核污染

insmod ko模块时,可能出现如下提示:

loadingout-of-tree

module

taintskernel

几个可能原因:

  • 模块没有声明GPL协议
  • 当前linux内核版本和编译模块使用的内核版本不一致
  • 使用内核源代码未包含的树外模块

printk和printf

在内核中的打印函数是printkprintkprintf的行为非常相似,但是通常printk不支持浮点数,例如要打印一个浮点变量,在编译时通常会出现如下警告,并且模块也不会加载成功:

WARNING:

"__extendsfdf2"

[/home/ubuntu/driver/user.ko]undefined!

WARNING:

"__truncdfsf2"

[/home/ubuntu/driver/user.ko]undefined!

WARNING:

"__divdf32"

[/home/ubuntu/driver/user.ko]undefined!

WARNING:

"__floatsidf"

[/home/ubuntu/driver/user.ko]undefined!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2486

    浏览量

    46552
  • 内核
    +关注

    关注

    3

    文章

    1309

    浏览量

    39862
  • Linux
    +关注

    关注

    87

    文章

    10993

    浏览量

    206747
  • 源文件
    +关注

    关注

    0

    文章

    30

    浏览量

    4521
收藏 人收藏

    评论

    相关推荐

    linux 了解内核模块的原理 《Rice linux 学习开发》

    内核模块是一种没有经过链接,不能独立运行的目标文件,是在内核空间中运行的程序。
    的头像 发表于 07-16 10:08 4412次阅读
    linux 了解<b class='flag-5'>内核模块</b>的原理 《Rice linux 学习开发》

    Linux 内核模块工作原理及内核模块编译案例

    一个内核模块至少包含两个函数,模块被加载时执行的初始化函数init_module()和模块被卸载时执行的结束函数cleanup_module()。
    发表于 09-23 09:39 2298次阅读
    Linux <b class='flag-5'>内核模块</b>工作原理及<b class='flag-5'>内核模块</b><b class='flag-5'>编译</b>案例

    让ChatGPT写一个内核模块

    笔者最近看到这样一篇文章 ,原作者让 ChatGPT 写一个内核模块,要求实现的功能是:每 5 秒向控制台打印一句 "Hello world",并且把编译需要的 Makefile 也一起写出来。
    发表于 08-17 09:30 312次阅读

    linux内核配置过程中的"编译好的内核模块"是哪个

    在linux内核配置的时候,将内核编译,内核模块编译,安装内核模块以后,有
    发表于 04-09 10:22

    高效学习Linux内核——内核模块编译

    ,又要重新编译,非常麻烦,因此linux提供了模块(Modele)的机制。可以把内核比喻成很长的火车,每个车厢就是
    发表于 09-24 09:11

    在Linux 2.6内核编译可以加载的内核模块解析

    在旧的版本下(如linux 2.4)linux内核模块编译只需要有内核的头文件就行了,就可以通过和编译其他程序一样的方法
    发表于 11-07 11:45 0次下载

    内核模块的原理以及其模块编写

    内核模块是具有独立功能的程序。它可以被单独编译,但是不能单独运行,它的运行必须被链接到内核作为内核的一部分在内核空间中运行。
    的头像 发表于 01-02 11:11 4174次阅读
    <b class='flag-5'>内核模块</b>的原理以及其<b class='flag-5'>模块</b>编写

    什么是内核模块?如何编写一个简单的模块

    内核模块是Linux内核向外部提供的一个插口,其全称为动态可加载内核模块(Loadable Kernel Module,LKM),我们简称为模块。Linux
    发表于 08-24 17:15 20次下载

    什么是 Linux 内核模块?

    lsmod 命令能够告诉你当前系统上加载了哪些内核模块,以及关于使用它们的一些有趣的细节。
    的头像 发表于 08-09 17:01 2988次阅读

    嵌入式LINUX系统内核内核模块调试教程

    本文档的主要内容详细介绍的是嵌入式LINUX系统内核内核模块调试教程。
    发表于 11-06 17:32 21次下载
    嵌入式LINUX系统<b class='flag-5'>内核</b>和<b class='flag-5'>内核模块</b>调试教程

    如何在Petalinux创建Linux内核模块

    --enable”,能创建Linux内核模块,包括c源代码文件,Makefile,Yocto的bb文件。相关文件放在目录“ project-spec / meta-user / re
    的头像 发表于 03-02 11:10 3925次阅读

    Asterisk内核模块介绍

    主要阐述Asterisk内核模块的基础知识
    发表于 03-17 13:47 7次下载

    嵌入式LINUX系统内核内核模块调试

    嵌入式LINUX系统内核内核模块调试(嵌入式开发和硬件开发)-嵌入式LINUX系统内核内核模块调试                 
    发表于 07-30 13:55 9次下载
    嵌入式LINUX系统<b class='flag-5'>内核</b>和<b class='flag-5'>内核模块</b>调试

    什么是内核模块签名?内核如何开启模块签名

    驱动可以直接编译内核镜像,也可以单独编译成ko文件(内核模块),然后再进行加载。内核从3.7后
    发表于 08-08 16:14 854次阅读

    深入分析Linux kernel安全特性: 内核模块签名

    顾名思义,在开启该功能之后,内核在加载内核模块时,会对内核模块的签名进行检查。
    的头像 发表于 10-18 12:32 1795次阅读