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

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

3天内不再提示

RK3568驱动指南|驱动基础进阶篇-进阶8 内核运行ko文件总结

北京迅为电子 ? 2024-01-31 14:58 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568 支持安卓 11 和 linux 系统,主要面向物联网网关、NVR 存储、工控平板、工业检测、工控盒、卡拉 OK、云终端、车载中控等行业。

?
【公众号】迅为电子

【粉丝群】824412014(加群获取驱动文档+例程)

视频观看】嵌入式学习之Linux驱动(驱动基础进阶篇_全新升级)_基于RK3568

【购买链接】迅为RK3568开发板瑞芯微Linux安卓鸿蒙ARM核心板人工智能AI主板

进阶8 内核运行ko文件总结
8.1 内核运行ko流程分析
当我们使用系统调用时,内核会执行SYSCALL_DEFINE3宏定义的函数,如

SYSCALL_DEFINE3(finit_module, int, fd, const char __user *, uargs, int, flags)或SYSCALL_DEFINE3(init_module, void __user *, umod, unsigned long, len, const char __user *, uargs)。这些函数最终都会调用load_module函数,而在load_module函数中,会通过do_one_initcall(mod->init)来执行驱动程序的入口函数。

do_one_initcall函数的作用是执行一个初始化调用函数,并检查执行过程中是否存在抢占不平衡或中断被禁用的情况。如果存在错误信息,会打印警告信息。最后,返回初始化调用函数的返回值。这个函数通常在内核初始化过程中使用,用于执行各个模块的初始化函数。

为什么mod->init就是驱动的入口函数呢?

打开include/linux/module.h文件,找到以下代码,如下图所示:

wKgZomW572qAVlQrAAFpYj0Mo2w481.png

图8-1

上述代码是用于定义模块的初始化函数和清理函数的宏定义。通过使用module_init宏和module_exit宏,开发人员可以指定模块的入口函数和清理函数。这些宏定义了一些内联函数和与之关联的特殊命名的函数,以及一些属性和别名,用于在编译时进行检查并将用户定义的函数与特定的模块函数关联起来。

在上图的代码中,int init_module(void) __copy(initfn) __attribute__((alias(#initfn)));:定义一个名为init_module的函数,用于作为模块的入口函数。__copy(initfn)表示复制用户定义的初始化函数,__attribute__((alias(#initfn)))表示将init_module函数与用户定义的初始化函数initfn关联起来。将init_module作为函数initfn的别名。init_module是驱动加载函数的统一别名,当我们编译ko文件的时候,会生成一个.mod.c 的文件。

8.2 内核加载ko文件总结
本篇内容讲解的知识点比较零散,为了更好的总结学习,我们画了以下流程图。

wKgZomW574aAO2qUAADkQYDiIxU250.png

图 8-2

总结一下,要加载内核模块,通常需要使用insmod命令或类似工具触发系统调用,然后在内核中执行相应的系统调用函数(如sys_finit_module或sys_init_module)来加载模块。在加载过程中,会调用load_module函数,进而执行模块的初始化函数。这些过程构成了加载内核模块的流程。

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

    关注

    3

    文章

    1417

    浏览量

    41558
  • 驱动
    +关注

    关注

    12

    文章

    1921

    浏览量

    87113
  • RK3568
    +关注

    关注

    5

    文章

    591

    浏览量

    6547
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RT-Thread驱动开发指南进阶篇-动手驱动先楫未适配的外设LCD

    经过上一的《《RT-Thread设备驱动开发指南》基础--以先楫bsp的hwtimer设备为例》阐述,可以大致了解到RT-thread设备驱动
    的头像 发表于 02-25 11:04 ?4087次阅读
    RT-Thread<b class='flag-5'>驱动</b>开发<b class='flag-5'>指南</b><b class='flag-5'>进阶篇</b>-动手<b class='flag-5'>驱动</b>先楫未适配的外设LCD

    迅为RK3568开发板驱动指南Linux中通用SPI设备驱动

    迅为RK3568开发板驱动指南Linux中通用SPI设备驱动
    的头像 发表于 01-23 11:02 ?2931次阅读
    迅为<b class='flag-5'>RK3568</b>开发板<b class='flag-5'>驱动</b><b class='flag-5'>指南</b>Linux中通用SPI设备<b class='flag-5'>驱动</b>

    北京迅为RK3568开发板OpenHarmony系统南向驱动开发内核HDF驱动框架架构

    北京迅为RK3568开发板OpenHarmony系统南向驱动开发内核HDF驱动框架架构
    的头像 发表于 03-11 14:13 ?1168次阅读
    北京迅为<b class='flag-5'>RK3568</b>开发板OpenHarmony系统南向<b class='flag-5'>驱动</b>开发<b class='flag-5'>内核</b>HDF<b class='flag-5'>驱动</b>框架架构

    文档更新 |迅为 RK3568开发板驱动指南-第十五/十六

    测试 ? 驱动基础-进阶篇 进阶1 编译进内核驱动系统是如何运行的?
    发表于 07-08 11:04

    文档更新 | 迅为RK3568驱动指南-第十七篇(串口)

    实验 进阶6 内核运行ko文件实验——系统调用 进阶7 向系统中添加一个系统调用
    发表于 09-24 10:42

    迅为iTOP-RK3568开发板驱动开发指南-第十八 PWM

    测试 ? 驱动基础-进阶篇 进阶1 编译进内核驱动系统是如何运行的?
    发表于 10-29 10:13

    《HELLO+FPGA》-项目进阶篇

    《HELLO+FPGA》-项目进阶篇
    发表于 09-27 10:13

    iTOP-RK3568开发板驱动指南第五-中断

    _字符设备基础 第三期_并发与竞争 第四期_高级字符设备进阶 第五期_中断 第六期_平台总线 第七期_设备树 第八期_设备树插件 第九期_设备模型 第十期_热插拔 第十一期_pinctrl子系统 未完待续,持续更新中...哔哩哔哩搜索-迅为RK3568开发板,更多教程内容
    发表于 09-04 10:53

    更新 | 持续开源 迅为RK3568驱动指南第十一篇-pinctrl子系统

    《iTOP-RK3568开发板驱动开发指南》更新,本次更新内容对应的是驱动(第十一期_pinctrl子系统-全新升级)视频,后续资料会不断更新,不断完善,帮助用户快速入门,大大提升研发
    发表于 10-18 11:12

    USB HID设备应用(进阶篇

    Freescale的USB HID设备应用(进阶篇
    发表于 12-07 18:19 ?0次下载

    RK3568驱动指南驱动基础进阶篇-进阶5 自定义实现insmod命令实验

    RK3568驱动指南驱动基础进阶篇-进阶5 自定义实现insmod命令实验
    的头像 发表于 02-20 14:10 ?1207次阅读
    <b class='flag-5'>RK3568</b><b class='flag-5'>驱动</b><b class='flag-5'>指南</b>|<b class='flag-5'>驱动</b>基础<b class='flag-5'>进阶篇</b>-<b class='flag-5'>进阶</b>5 自定义实现insmod命令实验

    RK3568驱动指南|第三-并发与竞争-第19章 并发与竞争实验

    RK3568驱动指南|第三-并发与竞争-第19章 并发与竞争实验
    的头像 发表于 02-24 16:26 ?603次阅读
    <b class='flag-5'>RK3568</b><b class='flag-5'>驱动</b><b class='flag-5'>指南</b>|第三<b class='flag-5'>篇</b>-并发与竞争-第19章 并发与竞争实验

    RK3568驱动指南驱动基础进阶篇-进阶7 向系统中添加一个系统调用

    RK3568驱动指南驱动基础进阶篇-进阶7 向系统中添加一个系统调用
    的头像 发表于 05-21 14:15 ?319次阅读
    <b class='flag-5'>RK3568</b><b class='flag-5'>驱动</b><b class='flag-5'>指南</b>|<b class='flag-5'>驱动</b>基础<b class='flag-5'>进阶篇</b>-<b class='flag-5'>进阶</b>7 向系统中添加一个系统调用

    RK3568驱动指南|第十二 GPIO子系统-第130章 GPIO的调试方法

    RK3568驱动指南|第十二 GPIO子系统-第130章 GPIO的调试方法
    的头像 发表于 06-03 11:32 ?594次阅读
    <b class='flag-5'>RK3568</b><b class='flag-5'>驱动</b><b class='flag-5'>指南</b>|第十二<b class='flag-5'>篇</b> GPIO子系统-第130章 GPIO的调试方法

    迅为RK3568?重制版RK3568驱动指南全面升级

    迅为RK3568 重制版RK3568驱动指南全面升级
    的头像 发表于 07-28 15:25 ?474次阅读
    迅为<b class='flag-5'>RK3568</b>?重制版<b class='flag-5'>RK3568</b><b class='flag-5'>驱动</b><b class='flag-5'>指南</b>全面升级