瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工藝,搭載一顆四核Cortex-A55處理器和Mali G52 2EE 圖形處理器。RK3568 支持4K 解碼和 1080P 編碼,支持SATA/PCIE/USB3.0 外圍接口。RK3568內(nèi)置獨(dú)立NPU,可用于輕量級人工智能應(yīng)用。RK3568 支持安卓 11 和 linux 系統(tǒng),主要面向物聯(lián)網(wǎng)網(wǎng)關(guān)、NVR 存儲、工控平板、工業(yè)檢測、工控盒、卡拉 OK、云終端、車載中控等行業(yè)。
?
【公眾號】迅為電子
【粉絲群】824412014(加群獲取驅(qū)動文檔+例程)
【視頻觀看】嵌入式學(xué)習(xí)之Linux驅(qū)動(驅(qū)動基礎(chǔ)進(jìn)階篇_全新升級)_基于RK3568
【購買鏈接】迅為RK3568開發(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)用時,內(nèi)核會執(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ù)最終都會調(diào)用load_module函數(shù),而在load_module函數(shù)中,會通過do_one_initcall(mod->init)來執(zhí)行驅(qū)動程序的入口函數(shù)。
do_one_initcall函數(shù)的作用是執(zhí)行一個初始化調(diào)用函數(shù),并檢查執(zhí)行過程中是否存在搶占不平衡或中斷被禁用的情況。如果存在錯誤信息,會打印警告信息。最后,返回初始化調(diào)用函數(shù)的返回值。這個函數(shù)通常在內(nèi)核初始化過程中使用,用于執(zhí)行各個模塊的初始化函數(shù)。
為什么mod->init就是驅(qū)動的入口函數(shù)呢?
打開include/linux/module.h文件,找到以下代碼,如下圖所示:


圖8-1
上述代碼是用于定義模塊的初始化函數(shù)和清理函數(shù)的宏定義。通過使用module_init宏和module_exit宏,開發(fā)人員可以指定模塊的入口函數(shù)和清理函數(shù)。這些宏定義了一些內(nèi)聯(lián)函數(shù)和與之關(guān)聯(lián)的特殊命名的函數(shù),以及一些屬性和別名,用于在編譯時進(jìn)行檢查并將用戶定義的函數(shù)與特定的模塊函數(shù)關(guān)聯(lián)起來。
在上圖的代碼中,int init_module(void) __copy(initfn) __attribute__((alias(#initfn)));:定義一個名為init_module的函數(shù),用于作為模塊的入口函數(shù)。__copy(initfn)表示復(fù)制用戶定義的初始化函數(shù),__attribute__((alias(#initfn)))表示將init_module函數(shù)與用戶定義的初始化函數(shù)initfn關(guān)聯(lián)起來。將init_module作為函數(shù)initfn的別名。init_module是驅(qū)動加載函數(shù)的統(tǒng)一別名,當(dāng)我們編譯ko文件的時候,會生成一個.mod.c 的文件。
8.2 內(nèi)核加載ko文件總結(jié)
本篇內(nèi)容講解的知識點(diǎn)比較零散,為了更好的總結(jié)學(xué)習(xí),我們畫了以下流程圖。


圖 8-2
總結(jié)一下,要加載內(nèi)核模塊,通常需要使用insmod命令或類似工具觸發(fā)系統(tǒng)調(diào)用,然后在內(nèi)核中執(zhí)行相應(yīng)的系統(tǒng)調(diào)用函數(shù)(如sys_finit_module或sys_init_module)來加載模塊。在加載過程中,會調(diào)用load_module函數(shù),進(jìn)而執(zhí)行模塊的初始化函數(shù)。這些過程構(gòu)成了加載內(nèi)核模塊的流程。
-
內(nèi)核
+關(guān)注
關(guān)注
3文章
1416瀏覽量
41442 -
驅(qū)動
+關(guān)注
關(guān)注
12文章
1918瀏覽量
86940 -
RK3568
+關(guān)注
關(guān)注
5文章
584瀏覽量
6422
發(fā)布評論請先 登錄
RT-Thread驅(qū)動開發(fā)指南進(jìn)階篇-動手驅(qū)動先楫未適配的外設(shè)LCD

北京迅為RK3568開發(fā)板OpenHarmony系統(tǒng)南向驅(qū)動開發(fā)內(nèi)核HDF驅(qū)動框架架構(gòu)

文檔更新 |迅為 RK3568開發(fā)板驅(qū)動指南-第十五/十六篇
文檔更新 | 迅為RK3568驅(qū)動指南-第十七篇(串口)
迅為iTOP-RK3568開發(fā)板驅(qū)動開發(fā)指南-第十八篇 PWM
iTOP-RK3568開發(fā)板驅(qū)動指南第五篇-中斷
更新 | 持續(xù)開源 迅為RK3568驅(qū)動指南第十一篇-pinctrl子系統(tǒng)
USB HID設(shè)備應(yīng)用(進(jìn)階篇)
RK3568驅(qū)動指南|驅(qū)動基礎(chǔ)進(jìn)階篇-進(jìn)階5 自定義實(shí)現(xiàn)insmod命令實(shí)驗(yàn)

RK3568驅(qū)動指南|第三篇-并發(fā)與競爭-第19章 并發(fā)與競爭實(shí)驗(yàn)

RK3568驅(qū)動指南|驅(qū)動基礎(chǔ)進(jìn)階篇-進(jìn)階7 向系統(tǒng)中添加一個系統(tǒng)調(diào)用

RK3568驅(qū)動指南|第十二篇 GPIO子系統(tǒng)-第130章 GPIO的調(diào)試方法

評論