0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(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)階5 自定義實(shí)現(xiàn)insmod命令實(shí)驗(yàn)

北京迅為電子 ? 2024-02-20 14:10 ? 次閱讀

瑞芯微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、云終端、車載中控等行業(yè)。

迅為RK3568開發(fā)板:

wKgZomXUQe2AHEs6AAFHcI66r1k035.png

?

進(jìn)階5 自定義實(shí)現(xiàn)insmod命令實(shí)驗(yàn)

5.1 實(shí)驗(yàn)程序的編寫

在本章節(jié)將會(huì)實(shí)現(xiàn)第二種方法實(shí)現(xiàn)insmod命令。

5.1.1 驅(qū)動(dòng)程序編寫

本實(shí)驗(yàn)對(duì)應(yīng)的網(wǎng)盤路徑為:iTOP-RK3568開發(fā)板【底板V1.7版本】\03_【iTOP-RK3568開發(fā)板】指南教程\02_Linux驅(qū)動(dòng)配套資料\04_Linux驅(qū)動(dòng)例程\52_module02\01_module。

編寫完成的helloworld.c代碼如下所示。

#include

#include

static int __init helloworld_init(void) //驅(qū)動(dòng)入口函數(shù)

{

dump_stack();

return 0;

}

static void __exit helloworld_exit(void) //驅(qū)動(dòng)出口函數(shù)

{

printk(KERN_EMERG "helloworld_exit\r\n");

}

module_init(helloworld_init); //注冊(cè)入口函數(shù)

module_exit(helloworld_exit); //注冊(cè)出口函數(shù)

MODULE_LICENSE("GPL v2"); //同意 GPL 開源協(xié)議

MODULE_AUTHOR("topeet"); //作者信息

該驅(qū)動(dòng)程序就是最簡單的helloworld驅(qū)動(dòng)程序,只是在第6行添加了dump_stack()函數(shù),用來在內(nèi)核中輸出當(dāng)前調(diào)用堆棧信息,在這里使用該函數(shù)的目的是驗(yàn)證在app中的init_module系統(tǒng)調(diào)用是否生效。

5.1.2 編寫測(cè)試 APP

本應(yīng)用程序?qū)?yīng)的網(wǎng)盤路徑為:iTOP-RK3568開發(fā)板【底板V1.7版本】\03_【iTOP-RK3568開發(fā)板】指南教程\02_Linux驅(qū)動(dòng)配套資料\04_Linux驅(qū)動(dòng)例程\52_module02\02_app。

編寫完成的應(yīng)用程序app.c代碼如下所示:

#include

#include

#include

#include

#include

#include

#include

#define init_module(mod, len, opts) syscall(__NR_init_module, mod, len, opts)

int main(int argc, char **argv)

{

int fd; // 文件描述符

int ret; // 返回值

struct stat statbuf; // 存儲(chǔ)文件信息的結(jié)構(gòu)體

size_t image_size; // 文件大小

char *image; // 文件內(nèi)容緩沖區(qū)

fd = open(argv[1], O_RDONLY | __O_CLOEXEC); // 以只讀方式打開文件

if (fd < 0)

{

printf("open error \n"); // 打開文件失敗

return -1;

}

fstat(fd, &statbuf); // 獲取文件信息

image_size = statbuf.st_size; // 獲取文件大小

image = malloc(image_size); // 為文件內(nèi)容分配內(nèi)存空間

read(fd, image, image_size); // 讀取文件內(nèi)容到緩沖區(qū)

ret = init_module(image, image_size, ""); // 調(diào)用系統(tǒng)調(diào)用初始化內(nèi)核模塊

if (ret < 0)

{

printf("error \n"); // 內(nèi)核模塊初始化失敗

}

else

{

printf("ok \n"); // 內(nèi)核模塊初始化成功

}

free(image); // 釋放內(nèi)存空間

return ret; // 返回結(jié)果

}

該應(yīng)用程序的重點(diǎn)在30行,使用init_module系統(tǒng)調(diào)用加載模塊到內(nèi)核。

5.2運(yùn)行測(cè)試

5.2.1 編譯驅(qū)動(dòng)程序

在上一小節(jié)中的helloworld.c代碼同一目錄下創(chuàng)建 Makefile 文件,Makefile 文件內(nèi)容如下所示:

export ARCH=arm64#設(shè)置平臺(tái)架構(gòu)

export CROSS_COMPILE=aarch64-linux-gnu-#交叉編譯器前綴

obj-m += helloworld.o #此處要和你的驅(qū)動(dòng)源文件同名

KDIR :=/home/topeet/Linux/linux_sdk/kernel #這里是你的內(nèi)核目錄

PWD ?= $(shell pwd)

all:

make -C $(KDIR) M=$(PWD) modules #make操作

clean:

make -C $(KDIR) M=$(PWD) clean #make clean操作

對(duì)于Makefile的內(nèi)容注釋已在上圖添加,保存退出之后,來到存放helloworld.c和Makefile文件目錄下,如下圖(圖5-1)所示:

wKgZomXUQfuARt71AACYCaDbMd0958.png

然后使用命令“make”進(jìn)行驅(qū)動(dòng)的編譯,編譯完成:

編譯完生成platform_led.ko目標(biāo)文件:

wKgZomXUQg-ADe7sAACyJt9ZejA322.png

至此驅(qū)動(dòng)模塊就編譯成功了。

5.2.2 編譯應(yīng)用程序

下面進(jìn)行應(yīng)用程序編譯,因?yàn)闇y(cè)試APP是要在開發(fā)板上運(yùn)行的,所以需要aarch64-linux-gnu-gcc來編譯,輸入以下命令,編譯完成以后會(huì)生成一個(gè)app的可執(zhí)行程序,如下圖(圖141-4)所示:

aarch64-linux-gnu-gcc myinsmod.c

下面進(jìn)行驅(qū)動(dòng)程序的測(cè)試。

5.2.3運(yùn)行測(cè)試

本次測(cè)試要使用上面編譯的helloworld.ko驅(qū)動(dòng)文件和a.out可執(zhí)行文件,所以需要先將兩個(gè)要用到的文件拷貝到開發(fā)板上。

開發(fā)板啟動(dòng)之后,使用以下命令加載helloworld.ko驅(qū)動(dòng),如下圖所示:

./a.out helloworld.ko

dump_stack函數(shù)會(huì)打印調(diào)用的一系列函數(shù),這些函數(shù)的具體調(diào)用已經(jīng)在進(jìn)階第一章講解過了,這里的重點(diǎn)為紅色框中的倒數(shù)第二行,調(diào)用了init_module函數(shù)加載了helloworld驅(qū)動(dòng)。

然后繼續(xù)使用以下命令查看驅(qū)動(dòng)的加載情況,打印如下圖(141-6)所示:

lsmod

可以看到helloworld驅(qū)動(dòng)成功加載上了,最后可以使用以下命令進(jìn)行驅(qū)動(dòng)的卸載,

rmmod

wKgZomXUQheAEDEIAAAc4QBhlQw571.png

至此,內(nèi)核是如何運(yùn)行KO文件的_insmod實(shí)驗(yàn)就完成了。

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

    關(guān)注

    68

    文章

    18924

    瀏覽量

    227204
  • 芯片
    +關(guān)注

    關(guān)注

    450

    文章

    49631

    瀏覽量

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

    關(guān)注

    12

    文章

    1788

    瀏覽量

    84896
  • RK3568
    +關(guān)注

    關(guān)注

    4

    文章

    479

    瀏覽量

    4716
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Openharmony軟件評(píng)估指南-米爾瑞芯微RK3568開發(fā)板

    使用。本文檔使用于米爾電子的MYD-LR3568系列板卡,該板卡是米爾電子的嵌入式開發(fā)平臺(tái)基于瑞芯微公司的高性能的嵌入式ARM處理器開發(fā)的,其中該系列使用的核心芯片為RK3568X。圖1-1. 米爾
    發(fā)表于 09-06 20:06

    北京迅為RK3568開發(fā)板嵌入式學(xué)習(xí)之Linux驅(qū)動(dòng)全新更新-CAN+

    北京迅為RK3568開發(fā)板嵌入式學(xué)習(xí)之Linux驅(qū)動(dòng)全新更新-CAN+
    的頭像 發(fā)表于 09-04 15:29 ?178次閱讀
    北京迅為<b class='flag-5'>RK3568</b>開發(fā)板嵌入式學(xué)習(xí)之Linux<b class='flag-5'>驅(qū)動(dòng)</b>全新更新-CAN+

    【國產(chǎn)之星】米爾瑞芯微RK3568工控機(jī)適應(yīng)更多應(yīng)用場(chǎng)景

    國產(chǎn)之星-瑞芯微RK3568一直備受關(guān)注,米爾電子推廣的RK3568核心板采用創(chuàng)新LGA設(shè)計(jì),核心板質(zhì)量更可靠,成本更優(yōu)。除米粉派RK3568(MYD-LR3568開發(fā)板)之外,米爾加
    發(fā)表于 08-02 16:57

    迅為RK3568驅(qū)動(dòng)指南|如何在Linux中使用模擬SPI

    瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工藝,搭載一顆四核Cortex-A55處理器和MaliG522EE圖形處理器。RK3568支持4K解碼和1080P編碼,支持
    的頭像 發(fā)表于 08-01 13:37 ?1172次閱讀
    迅為<b class='flag-5'>RK3568</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>指南</b>|如何在Linux中使用模擬SPI

    RK3568驅(qū)動(dòng)指南|第十六 SPI-第195章 實(shí)踐:移植官方mcp2515驅(qū)動(dòng)

    瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工藝,搭載一顆四核Cortex-A55處理器和MaliG522EE圖形處理器。RK3568支持4K解碼和1080P編碼,支持
    的頭像 發(fā)表于 07-31 16:17 ?1104次閱讀
    <b class='flag-5'>RK3568</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>指南</b>|第十六<b class='flag-5'>篇</b> SPI-第195章 實(shí)踐:移植官方mcp2515<b class='flag-5'>驅(qū)動(dòng)</b>

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

    自定義實(shí)現(xiàn)insmod命令實(shí)驗(yàn) 進(jìn)階6 內(nèi)核運(yùn)行ko文件實(shí)
    發(fā)表于 07-08 11:04

    基于HD-RK3568-CORE設(shè)計(jì)的HD-RK3568-OPS主板上新!

    HD-RK3568-OPS主板基于HD-RK3568-CORE 工業(yè)級(jí)核心板設(shè)計(jì),支持標(biāo)準(zhǔn)OPS接口,具有即插即用、操作簡單的特點(diǎn),適用于數(shù)字標(biāo)牌、自助終端、教育一體機(jī)等應(yīng)用場(chǎng)景。
    的頭像 發(fā)表于 04-19 18:08 ?861次閱讀
    基于HD-<b class='flag-5'>RK3568</b>-CORE設(shè)計(jì)的HD-<b class='flag-5'>RK3568</b>-OPS主板上新!

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

    經(jīng)過上一的《《RT-Thread設(shè)備驅(qū)動(dòng)開發(fā)指南》基礎(chǔ)--以先楫bsp的hwtimer設(shè)備為例》闡述,可以大致了解到RT-thread設(shè)備驅(qū)動(dòng)
    的頭像 發(fā)表于 02-25 11:04 ?1858次閱讀
    RT-Thread<b class='flag-5'>驅(qū)動(dòng)</b>開發(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開發(fā)板驅(qū)動(dòng)開發(fā)指南-輸入子系統(tǒng)

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

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

    RK3568驅(qū)動(dòng)指南驅(qū)動(dòng)基礎(chǔ)進(jìn)階篇-進(jìn)階8 內(nèi)核運(yùn)行ko文件總結(jié)
    的頭像 發(fā)表于 01-31 14:58 ?951次閱讀
    <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>8 內(nèi)核運(yùn)行ko文件總結(jié)

    RK3568-MQTT通信協(xié)議案例

    RK3568-MQTT通信協(xié)議案例
    的頭像 發(fā)表于 01-19 15:31 ?1552次閱讀
    <b class='flag-5'>RK3568</b>-MQTT通信協(xié)議案例

    RK3568---NPU開發(fā)案例

    RK3568---NPU開發(fā)案例
    的頭像 發(fā)表于 01-19 13:50 ?667次閱讀
    <b class='flag-5'>RK3568</b>---NPU開發(fā)案例

    RK3568-ISP圖像處理開發(fā)案例

    RK3568-ISP圖像處理開發(fā)案例
    的頭像 發(fā)表于 01-19 11:46 ?737次閱讀
    <b class='flag-5'>RK3568</b>-ISP圖像處理開發(fā)案例

    RK3568-視頻開發(fā)案例

    RK3568-視頻開發(fā)案例
    的頭像 發(fā)表于 01-18 15:51 ?609次閱讀
    <b class='flag-5'>RK3568</b>-視頻開發(fā)案例

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

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