在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RK3568驅動指南|驅動基礎進階篇-進階5 自定義實現insmod命令實驗

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

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

迅為RK3568開發板:

wKgZomXUQe2AHEs6AAFHcI66r1k035.png

?

進階5 自定義實現insmod命令實驗

5.1 實驗程序的編寫

在本章節將會實現第二種方法實現insmod命令。

5.1.1 驅動程序編寫

本實驗對應的網盤路徑為:iTOP-RK3568開發板【底板V1.7版本】\03_【iTOP-RK3568開發板】指南教程\02_Linux驅動配套資料\04_Linux驅動例程\52_module02\01_module。

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

#include

#include

static int __init helloworld_init(void) //驅動入口函數

{

dump_stack();

return 0;

}

static void __exit helloworld_exit(void) //驅動出口函數

{

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

}

module_init(helloworld_init); //注冊入口函數

module_exit(helloworld_exit); //注冊出口函數

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

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

該驅動程序就是最簡單的helloworld驅動程序,只是在第6行添加了dump_stack()函數,用來在內核中輸出當前調用堆棧信息,在這里使用該函數的目的是驗證在app中的init_module系統調用是否生效。

5.1.2 編寫測試 APP

本應用程序對應的網盤路徑為:iTOP-RK3568開發板【底板V1.7版本】\03_【iTOP-RK3568開發板】指南教程\02_Linux驅動配套資料\04_Linux驅動例程\52_module02\02_app。

編寫完成的應用程序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; // 存儲文件信息的結構體

size_t image_size; // 文件大小

char *image; // 文件內容緩沖區

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); // 為文件內容分配內存空間

read(fd, image, image_size); // 讀取文件內容到緩沖區

ret = init_module(image, image_size, ""); // 調用系統調用初始化內核模塊

if (ret < 0)

{

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

}

else

{

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

}

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

return ret; // 返回結果

}

該應用程序的重點在30行,使用init_module系統調用加載模塊到內核。

5.2運行測試

5.2.1 編譯驅動程序

在上一小節中的helloworld.c代碼同一目錄下創建 Makefile 文件,Makefile 文件內容如下所示:

export ARCH=arm64#設置平臺架構

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

obj-m += helloworld.o #此處要和你的驅動源文件同名

KDIR :=/home/topeet/Linux/linux_sdk/kernel #這里是你的內核目錄

PWD ?= $(shell pwd)

all:

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

clean:

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

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

wKgZomXUQfuARt71AACYCaDbMd0958.png

然后使用命令“make”進行驅動的編譯,編譯完成:

編譯完生成platform_led.ko目標文件:

wKgZomXUQg-ADe7sAACyJt9ZejA322.png

至此驅動模塊就編譯成功了。

5.2.2 編譯應用程序

下面進行應用程序編譯,因為測試APP是要在開發板上運行的,所以需要aarch64-linux-gnu-gcc來編譯,輸入以下命令,編譯完成以后會生成一個app的可執行程序,如下圖(圖141-4)所示:

aarch64-linux-gnu-gcc myinsmod.c

下面進行驅動程序的測試。

5.2.3運行測試

本次測試要使用上面編譯的helloworld.ko驅動文件和a.out可執行文件,所以需要先將兩個要用到的文件拷貝到開發板上。

開發板啟動之后,使用以下命令加載helloworld.ko驅動,如下圖所示:

./a.out helloworld.ko

dump_stack函數會打印調用的一系列函數,這些函數的具體調用已經在進階第一章講解過了,這里的重點為紅色框中的倒數第二行,調用了init_module函數加載了helloworld驅動。

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

lsmod

可以看到helloworld驅動成功加載上了,最后可以使用以下命令進行驅動的卸載,

rmmod

wKgZomXUQheAEDEIAAAc4QBhlQw571.png

至此,內核是如何運行KO文件的_insmod實驗就完成了。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19436

    瀏覽量

    231306
  • 芯片
    +關注

    關注

    456

    文章

    51263

    瀏覽量

    427749
  • 驅動
    +關注

    關注

    12

    文章

    1852

    瀏覽量

    85685
  • RK3568
    +關注

    關注

    4

    文章

    526

    瀏覽量

    5258
收藏 人收藏

    評論

    相關推薦

    迅為RK3568開發板驅動指南Linux中通用SPI設備驅動

    迅為RK3568開發板驅動指南Linux中通用SPI設備驅動
    的頭像 發表于 01-23 11:02 ?1855次閱讀
    迅為<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驅動控制LED-添加內核編譯

    編譯內核時將該 HDF 驅動編譯到鏡像中,接下來編寫驅動編譯腳本 Makefile,代碼如下所示: 加入編譯體系,填加模塊目錄到 drivers/hdf_core/adapter/khdf/linux/Makefile 文件 更多內容可以關注:迅為
    發表于 01-22 10:35

    迅為RK3568開發板SPI驅動指南-mcp2515驅動編寫:讀寄存器函數

    迅為RK3568開發板SPI驅動指南-mcp2515驅動編寫:讀寄存器函數
    的頭像 發表于 01-20 14:43 ?359次閱讀
    迅為<b class='flag-5'>RK3568</b>開發板SPI<b class='flag-5'>驅動</b><b class='flag-5'>指南</b>-mcp2515<b class='flag-5'>驅動</b>編寫:讀寄存器函數

    迅為RK3568開發板OpenHarmony實操HDF驅動控制LED-接口函數

    (LED)的高低電平,從而控制 LED 燈的開關。 參數:gpio(GPIO 號),mode(LED 模式,開或關)。 流程:設置 GPIO 為輸出方向,根據 mode 設置 GPIO 的電平,最后記錄日志。 更多內容可以關注:迅為RK3568開發板OpenHarmon
    發表于 01-20 10:36

    迅為RK3568開發板OpenHarmony實操HDF驅動控制LED-編寫內核 LED HDF 驅動程序

    接下來編譯 LED 驅動,該驅動用于在基于華為設備框架(HDF)的系統中控制 LED 燈的開關,完整代碼如下所示: 更多內容可以關注:迅為RK3568開發板OpenHarmony
    發表于 01-17 15:13

    瑞芯微RK3568 USB驅動

    瑞芯微RK3568 USB驅動程序
    發表于 11-11 14:18 ?2次下載

    RK3568燒錄工具

    RK3568 燒錄工具
    發表于 11-11 14:16 ?5次下載

    迅為iTOP-RK3568開發板驅動開發指南-第十八 PWM

    自定義實現insmod命令實驗 進階6 內核運行ko文件
    發表于 10-29 10:13

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

    進階1 編譯進內核的驅動系統是如何運行的? 進階2 讓驅動快一點被加載實驗 進階3
    發表于 09-24 10:42

    北京迅為RK3568開發板嵌入式學習之Linux驅動全新更新-CAN+

    北京迅為RK3568開發板嵌入式學習之Linux驅動全新更新-CAN+
    的頭像 發表于 09-04 15:29 ?633次閱讀
    北京迅為<b class='flag-5'>RK3568</b>開發板嵌入式學習之Linux<b class='flag-5'>驅動</b>全新更新-CAN+

    迅為RK3568驅動指南|如何在Linux中使用模擬SPI

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

    RK3568驅動指南|第十六 SPI-第195章 實踐:移植官方mcp2515驅動

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

    文檔更新 |迅為 RK3568開發板驅動指南-第十五/十六

    自定義實現insmod命令實驗 進階6 內核運行ko文件
    發表于 07-08 11:04

    RT-Thread驅動開發指南進階篇-動手驅動先楫未適配的外設LCD

    經過上一的《《RT-Thread設備驅動開發指南》基礎--以先楫bsp的hwtimer設備為例》闡述,可以大致了解到RT-thread設備驅動
    的頭像 發表于 02-25 11:04 ?2836次閱讀
    RT-Thread<b class='flag-5'>驅動</b>開發<b class='flag-5'>指南</b><b class='flag-5'>進階篇</b>-動手<b class='flag-5'>驅動</b>先楫未適配的外設LCD

    迅為RK3568開發板驅動開發指南-輸入子系統

    迅為RK3568開發板驅動開發指南-輸入子系統
    的頭像 發表于 02-23 15:11 ?1007次閱讀
    迅為<b class='flag-5'>RK3568</b>開發板<b class='flag-5'>驅動</b>開發<b class='flag-5'>指南</b>-輸入子系統
    主站蜘蛛池模板: 国产精品久久久久久免费播放 | 猛操在线 | 久久精品国产精品亚洲红杏 | 1024免费看片 | 色天使在线观看 | 国产人成精品香港三级古代 | 天天色综合色 | 在线看片国产 | 激情九月| 久久男女 | 国产视频三级 | www成人在线观看 | 久久亚洲视频 | 在线观看视频色 | 久草免费色站 | 欧美日本不卡 | 男男h啪肉np文总受 男男h全肉耽污 | 久久亚洲国产成人精品性色 | 资源种子在线观看 | 在线91精品亚洲网站精品成人 | 国产做a爰片久久毛片 | 91大神在线精品网址 | 欧美日韩高清一区 | 亚洲国产欧美在线人成aaa | 国产网站免费 | 人人澡人人草 | 国内精品一级毛片免费看 | 国产网站黄 | 成年1314在线观看 | 黑人黄色大片 | 一级毛片看真人在线视频 | 国产精品视频久久久久 | 一区二区三区在线播放 | 亚洲日本中文字幕天天更新 | 美女无遮挡拍拍拍免费视频 | 91无毒不卡 | 欧美三级色图 | 五月婷在线观看 | 欧美人与动性行为网站免费 | 五月婷婷六月丁香综合 | 色网视频 |