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

    文章

    1309

    浏览量

    39846
  • 驱动
    +关注

    关注

    11

    文章

    1717

    浏览量

    84343
  • RK3568
    +关注

    关注

    4

    文章

    433

    浏览量

    4125
收藏 人收藏

    评论

    相关推荐

    《HELLO+FPGA》-项目进阶篇

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

    电源设计人员必看资料 开关电源基础知识进阶篇

    开关电源基础知识进阶篇资料来自网络
    发表于 06-19 20:02

    如何驱动RK3568 VCM?

    RK3568 VCM如何驱动
    发表于 03-02 06:12

    迅为RK3568开发板视频教程上新,ARM入门更简单

    驱动视频全新升级,并持续更新~更全,思路更科学,入门更简单。迅为基于iTOP-RK3568开发板进行讲解,【Android11系统移植】P1 总领-嵌入式Android要学哪些内容?P2
    发表于 09-21 17:00

    嵌入式工程师资料合集(软件进阶篇

    本期资料分享为嵌入式工程师资料合集(软件进阶篇),包括RTOS,上位机,android相关资料RTOS:uCOS,FreeRTOS,RT-Thread上位机:SDK,MFC,C#android:
    发表于 10-12 15:57

    迅为RK3568开发板保姆级3900页手册_415期视频_426G文档

    :向系统中添加一个系统调用... 28.进阶8:内核是如何运行KO文件的... 20.阶段性
    发表于 08-11 11:14

    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开发板原理图

    瑞芯微rk3568 开发板 原理图工程文件AD格式
    发表于 04-24 14:12 66次下载

    技术分享 | RK3568 buildroot文件系统下的三屏显示调试

    IAC-RK3568-KitIAC-RK3568-Kit开发板基于瑞芯微RK3568四核Cortex-A55处理器,支持HDMI、LVDS、MIPI、EDP四种显示接口,能够实现
    的头像 发表于 04-10 11:14 3931次阅读
    技术分享 | <b class='flag-5'>RK3568</b> buildroot<b class='flag-5'>文件</b>系统下的三屏显示调试

    瑞芯微RK3568主板开发板PET_RK3568_P01简述

    瑞芯微RK3568主板开发板PET_RK3568_P01简述
    的头像 发表于 08-08 11:41 1764次阅读
    瑞芯微<b class='flag-5'>RK3568</b>主板开发板PET_<b class='flag-5'>RK3568</b>_P01简述

    rk3568是什么架构的?

    设计之一,经过优化,可在提供高性能的同时实现低功耗。RK3568有四个Cortex-A55内核,能够以高达2GHz的时钟速度运行。 此外,RK3568还配备了ARM Mali-G52
    的头像 发表于 08-15 17:25 1622次阅读

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

    RK3568驱动指南驱动基础进阶篇-进阶5 自定义实现insmod命令实验
    的头像 发表于 02-20 14:10 179次阅读
    <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开发板驱动开发指南-输入子系统

    迅为RK3568开发板驱动开发指南-输入子系统
    的头像 发表于 02-23 15:11 200次阅读
    迅为<b class='flag-5'>RK3568</b>开发板<b class='flag-5'>驱动</b>开发<b class='flag-5'>指南</b>-输入子系统