0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RK3568驅(qū)動(dòng)指南|驅(qū)動(dòng)基礎(chǔ)進(jìn)階篇-進(jìn)階8 內(nèi)核運(yùn)行ko文件總結(jié)

北京迅為電子 ? 2024-01-31 14:58 ? 次閱讀

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工藝,搭載一顆四核Cortex-A55處理器和Mali G52 2EE 圖形處理器。RK3568 支持4K 解碼和 1080P 編碼,支持SATA/PCIE/USB3.0 外圍接口。RK3568內(nèi)置獨(dú)立NPU,可用于輕量級(jí)人工智能應(yīng)用。RK3568 支持安卓 11 和 linux 系統(tǒng),主要面向物聯(lián)網(wǎng)網(wǎng)關(guān)、NVR 存儲(chǔ)、工控平板、工業(yè)檢測(cè)、工控盒、卡拉 OK、云終端、車(chē)載中控等行業(yè)。

?
【公眾號(hào)】迅為電子

【粉絲群】824412014(加群獲取驅(qū)動(dòng)文檔+例程)

視頻觀看】嵌入式學(xué)習(xí)之Linux驅(qū)動(dòng)(驅(qū)動(dòng)基礎(chǔ)進(jìn)階篇_全新升級(jí))_基于RK3568

【購(gòu)買(mǎi)鏈接】迅為RK3568開(kāi)發(fā)板瑞芯微Linux安卓鴻蒙ARM核心板人工智能AI主板

進(jìn)階8 內(nèi)核運(yùn)行ko文件總結(jié)
8.1 內(nèi)核運(yùn)行ko流程分析
當(dāng)我們使用系統(tǒng)調(diào)用時(shí),內(nèi)核會(huì)執(zhí)行SYSCALL_DEFINE3宏定義的函數(shù),如

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)。這些函數(shù)最終都會(huì)調(diào)用load_module函數(shù),而在load_module函數(shù)中,會(huì)通過(guò)do_one_initcall(mod->init)來(lái)執(zhí)行驅(qū)動(dòng)程序的入口函數(shù)。

do_one_initcall函數(shù)的作用是執(zhí)行一個(gè)初始化調(diào)用函數(shù),并檢查執(zhí)行過(guò)程中是否存在搶占不平衡或中斷被禁用的情況。如果存在錯(cuò)誤信息,會(huì)打印警告信息。最后,返回初始化調(diào)用函數(shù)的返回值。這個(gè)函數(shù)通常在內(nèi)核初始化過(guò)程中使用,用于執(zhí)行各個(gè)模塊的初始化函數(shù)。

為什么mod->init就是驅(qū)動(dòng)的入口函數(shù)呢?

打開(kāi)include/linux/module.h文件,找到以下代碼,如下圖所示:

wKgZomW572qAVlQrAAFpYj0Mo2w481.png

圖8-1

上述代碼是用于定義模塊的初始化函數(shù)和清理函數(shù)的宏定義。通過(guò)使用module_init宏和module_exit宏,開(kāi)發(fā)人員可以指定模塊的入口函數(shù)和清理函數(shù)。這些宏定義了一些內(nèi)聯(lián)函數(shù)和與之關(guān)聯(lián)的特殊命名的函數(shù),以及一些屬性和別名,用于在編譯時(shí)進(jìn)行檢查并將用戶(hù)定義的函數(shù)與特定的模塊函數(shù)關(guān)聯(lián)起來(lái)。

在上圖的代碼中,int init_module(void) __copy(initfn) __attribute__((alias(#initfn)));:定義一個(gè)名為init_module的函數(shù),用于作為模塊的入口函數(shù)。__copy(initfn)表示復(fù)制用戶(hù)定義的初始化函數(shù),__attribute__((alias(#initfn)))表示將init_module函數(shù)與用戶(hù)定義的初始化函數(shù)initfn關(guān)聯(lián)起來(lái)。將init_module作為函數(shù)initfn的別名。init_module是驅(qū)動(dòng)加載函數(shù)的統(tǒng)一別名,當(dāng)我們編譯ko文件的時(shí)候,會(huì)生成一個(gè).mod.c 的文件。

8.2 內(nèi)核加載ko文件總結(jié)
本篇內(nèi)容講解的知識(shí)點(diǎn)比較零散,為了更好的總結(jié)學(xué)習(xí),我們畫(huà)了以下流程圖。

wKgZomW574aAO2qUAADkQYDiIxU250.png

圖 8-2

總結(jié)一下,要加載內(nèi)核模塊,通常需要使用insmod命令或類(lèi)似工具觸發(fā)系統(tǒng)調(diào)用,然后在內(nèi)核中執(zhí)行相應(yīng)的系統(tǒng)調(diào)用函數(shù)(如sys_finit_module或sys_init_module)來(lái)加載模塊。在加載過(guò)程中,會(huì)調(diào)用load_module函數(shù),進(jìn)而執(zhí)行模塊的初始化函數(shù)。這些過(guò)程構(gòu)成了加載內(nèi)核模塊的流程。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1360

    瀏覽量

    40185
  • 驅(qū)動(dòng)
    +關(guān)注

    關(guān)注

    12

    文章

    1818

    瀏覽量

    85106
  • RK3568
    +關(guān)注

    關(guān)注

    4

    文章

    489

    瀏覽量

    4887
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RT-Thread驅(qū)動(dòng)開(kāi)發(fā)指南進(jìn)階篇-動(dòng)手驅(qū)動(dòng)先楫未適配的外設(shè)LCD

    經(jīng)過(guò)上一的《《RT-Thread設(shè)備驅(qū)動(dòng)開(kāi)發(fā)指南》基礎(chǔ)--以先楫bsp的hwtimer設(shè)備為例》闡述,可以大致了解到RT-thread設(shè)備驅(qū)動(dòng)
    的頭像 發(fā)表于 02-25 11:04 ?2230次閱讀
    RT-Thread<b class='flag-5'>驅(qū)動(dòng)</b>開(kāi)發(fā)<b class='flag-5'>指南</b><b class='flag-5'>進(jìn)階篇</b>-動(dòng)手<b class='flag-5'>驅(qū)動(dòng)</b>先楫未適配的外設(shè)LCD

    文檔更新 |迅為 RK3568開(kāi)發(fā)板驅(qū)動(dòng)指南-第十五/十六

    測(cè)試 ? 驅(qū)動(dòng)基礎(chǔ)-進(jìn)階篇 進(jìn)階1 編譯進(jìn)內(nèi)核驅(qū)動(dòng)系統(tǒng)是如何運(yùn)行的?
    發(fā)表于 07-08 11:04

    文檔更新 | 迅為RK3568驅(qū)動(dòng)指南-第十七篇(串口)

    實(shí)驗(yàn) 進(jìn)階6 內(nèi)核運(yùn)行ko文件實(shí)驗(yàn)——系統(tǒng)調(diào)用 進(jìn)階7 向系統(tǒng)中添加一個(gè)系統(tǒng)調(diào)用
    發(fā)表于 09-24 10:42

    迅為iTOP-RK3568開(kāi)發(fā)板驅(qū)動(dòng)開(kāi)發(fā)指南-第十八 PWM

    測(cè)試 ? 驅(qū)動(dòng)基礎(chǔ)-進(jìn)階篇 進(jìn)階1 編譯進(jìn)內(nèi)核驅(qū)動(dòng)系統(tǒng)是如何運(yùn)行的?
    發(fā)表于 10-29 10:13

    《HELLO+FPGA》-項(xiàng)目進(jìn)階篇

    《HELLO+FPGA》-項(xiàng)目進(jìn)階篇
    發(fā)表于 09-27 10:13

    電源設(shè)計(jì)人員必看資料 開(kāi)關(guān)電源基礎(chǔ)知識(shí)進(jìn)階篇

    開(kāi)關(guān)電源基礎(chǔ)知識(shí)進(jìn)階篇資料來(lái)自網(wǎng)絡(luò)
    發(fā)表于 06-19 20:02

    如何驅(qū)動(dòng)RK3568 VCM?

    RK3568 VCM如何驅(qū)動(dòng)?
    發(fā)表于 03-02 06:12

    迅為RK3568開(kāi)發(fā)板保姆級(jí)3900頁(yè)手冊(cè)_415期視頻_426G文檔

    :向系統(tǒng)中添加一個(gè)系統(tǒng)調(diào)用... 28.進(jìn)階8:內(nèi)核是如何運(yùn)行KO文件的... 20.階段性
    發(fā)表于 08-11 11:14

    iTOP-RK3568開(kāi)發(fā)板驅(qū)動(dòng)指南第五-中斷

    _字符設(shè)備基礎(chǔ) 第三期_并發(fā)與競(jìng)爭(zhēng) 第四期_高級(jí)字符設(shè)備進(jìn)階 第五期_中斷 第六期_平臺(tái)總線 第七期_設(shè)備樹(shù) 第八期_設(shè)備樹(shù)插件 第九期_設(shè)備模型 第十期_熱插拔 第十一期_pinctrl子系統(tǒng) 未完待續(xù),持續(xù)更新中...嗶哩嗶哩搜索-迅為RK3568開(kāi)發(fā)板,更多教程內(nèi)容
    發(fā)表于 09-04 10:53

    更新 | 持續(xù)開(kāi)源 迅為RK3568驅(qū)動(dòng)指南第十一篇-pinctrl子系統(tǒng)

    《iTOP-RK3568開(kāi)發(fā)板驅(qū)動(dòng)開(kāi)發(fā)指南》更新,本次更新內(nèi)容對(duì)應(yīng)的是驅(qū)動(dòng)(第十一期_pinctrl子系統(tǒng)-全新升級(jí))視頻,后續(xù)資料會(huì)不斷更新,不斷完善,幫助用戶(hù)快速入門(mén),大大提升研發(fā)
    發(fā)表于 10-18 11:12

    USB HID設(shè)備應(yīng)用(進(jìn)階篇

    Freescale的USB HID設(shè)備應(yīng)用(進(jìn)階篇
    發(fā)表于 12-07 18:19 ?0次下載

    迅為基于RK3568開(kāi)發(fā)板的嵌入式學(xué)習(xí)之Linux驅(qū)動(dòng)視頻

    迅為基于RK3568開(kāi)發(fā)板的嵌入式學(xué)習(xí)之Linux驅(qū)動(dòng)視頻
    的頭像 發(fā)表于 05-19 16:30 ?915次閱讀
    迅為基于<b class='flag-5'>RK3568</b>開(kāi)發(fā)板的嵌入式學(xué)習(xí)之Linux<b class='flag-5'>驅(qū)動(dòng)</b>視頻

    rk3568是什么架構(gòu)的?

    設(shè)計(jì)之一,經(jīng)過(guò)優(yōu)化,可在提供高性能的同時(shí)實(shí)現(xiàn)低功耗。RK3568有四個(gè)Cortex-A55內(nèi)核,能夠以高達(dá)2GHz的時(shí)鐘速度運(yùn)行。 此外,RK3568還配備了ARM Mali-G52
    的頭像 發(fā)表于 08-15 17:25 ?2714次閱讀

    RK3568驅(qū)動(dòng)指南驅(qū)動(dòng)基礎(chǔ)進(jìn)階篇-進(jìn)階5 自定義實(shí)現(xiàn)insmod命令實(shí)驗(yàn)

    RK3568驅(qū)動(dòng)指南驅(qū)動(dòng)基礎(chǔ)進(jìn)階篇-進(jìn)階5 自定義實(shí)現(xiàn)insmod命令實(shí)驗(yàn)
    的頭像 發(fā)表于 02-20 14:10 ?605次閱讀
    <b class='flag-5'>RK3568</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>指南</b>|<b class='flag-5'>驅(qū)動(dòng)</b>基礎(chǔ)<b class='flag-5'>進(jìn)階篇</b>-<b class='flag-5'>進(jìn)階</b>5 自定義實(shí)現(xiàn)insmod命令實(shí)驗(yàn)

    迅為RK3568開(kāi)發(fā)板驅(qū)動(dòng)開(kāi)發(fā)指南-輸入子系統(tǒng)

    迅為RK3568開(kāi)發(fā)板驅(qū)動(dòng)開(kāi)發(fā)指南-輸入子系統(tǒng)
    的頭像 發(fā)表于 02-23 15:11 ?737次閱讀
    迅為<b class='flag-5'>RK3568</b>開(kāi)發(fā)板<b class='flag-5'>驅(qū)動(dòng)</b>開(kāi)發(fā)<b class='flag-5'>指南</b>-輸入子系統(tǒng)