国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

就是塔塔的個人空間 http://www.qingdxww.cn/space-uid-136863.html [收藏] [復(fù)制] [RSS]

博客

RK3568驅(qū)動指南|第二篇 字符設(shè)備基礎(chǔ)-第14章 內(nèi)核空間與用戶空間數(shù)據(jù)交互實驗

已有 522 次閱讀2024-4-7 14:27 |個人分類:RK3568

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


第14章 內(nèi)核空間與用戶空間數(shù)據(jù)交互實驗

在“第12章 字符設(shè)備驅(qū)動框架實驗”中,已經(jīng)對file_operations結(jié)構(gòu)體的進行了填充,該結(jié)構(gòu)體的每一個成員都對應(yīng)著一個系統(tǒng)調(diào)用,例如read、write等,在對應(yīng)的實驗中,只是對調(diào)用函數(shù)進行了標(biāo)志打印,并沒有真正實現(xiàn)設(shè)備的讀寫功能,而在本章節(jié)將對內(nèi)核空間與用戶空間的數(shù)據(jù)交換功能進行實現(xiàn)。

14.1 內(nèi)核空間與用戶空間

Linux系統(tǒng)將可訪問的內(nèi)存空間分為了兩個部分,一部分是內(nèi)核空間,一部分是用戶空間。操作系統(tǒng)和驅(qū)動程序運行在內(nèi)核空間(內(nèi)核態(tài)),應(yīng)用程序運行在用戶空間(用戶態(tài))。

那么為什么要區(qū)分用戶空間和內(nèi)核空間呢?

(1)內(nèi)核空間中的代碼控制了硬件資源,用戶空間中的代碼只能通過內(nèi)核暴露的系統(tǒng)調(diào)用接口來使用系統(tǒng)中的硬件資源,這樣的設(shè)計可以保證操作系統(tǒng)自身的安全性和穩(wěn)定性。

(2)從另一方面來說,內(nèi)核空間的代碼更偏向于系統(tǒng)管理,而用戶空間中的代碼更偏重業(yè)務(wù)邏輯實現(xiàn),倆者的分工不同。

硬件資源管理都是在內(nèi)核空間完成的,應(yīng)用程序無法直接對硬件進行操作,只能通過調(diào)用相應(yīng)的內(nèi)核接口來完成相應(yīng)的操作。比如應(yīng)用程序要對磁盤上的一個文件進行讀取,應(yīng)用程序可以向內(nèi)核發(fā)起一個“系統(tǒng)調(diào)用”申請——我要讀取磁盤上的文件。這個過程其實是通過一個特殊的指令讓進程從用戶態(tài)進入到了內(nèi)核態(tài)。在內(nèi)核空間中,CPU可以執(zhí)行任何命令,包括從磁盤上讀取數(shù)據(jù),具體過程是先把數(shù)據(jù)讀取到內(nèi)核空間中,然后再把數(shù)據(jù)拷貝到用戶空間并從內(nèi)核態(tài)切換到用戶態(tài)。此時應(yīng)用程序已經(jīng)從系統(tǒng)調(diào)用中返回并拿到了想要的數(shù)據(jù),可以繼續(xù)往下執(zhí)行了。

進程只有從用戶空間切換到內(nèi)核空間才可以使用系統(tǒng)的硬件資源,切換的方式有三種:系統(tǒng)調(diào)用,軟中斷,硬中斷,如下圖(圖 14-1)所示:

14.2 用戶空間和內(nèi)核空間數(shù)據(jù)交換

內(nèi)核空間和用戶空間的內(nèi)存是不能互相訪問的。但是很多應(yīng)用程序都需要和內(nèi)核進行數(shù)據(jù)的交換,例如應(yīng)用程序使用read函數(shù)從驅(qū)動中讀取數(shù)據(jù),使用write函數(shù)向驅(qū)動中寫數(shù)據(jù),上述功能就需要使用copy_from_user和copy_to_user倆個函數(shù)來完成。copy_from_user函數(shù)是將用戶空間的數(shù)據(jù)拷貝到內(nèi)核空間。copy_to_user函數(shù)是將內(nèi)核空間的數(shù)據(jù)拷貝到用戶空間。

這倆個函數(shù)定義在了kernel/include/linux/uaccess.h文件下,如下所示:

copy_to_user


函數(shù)原型:

​ unsigned long copy_to_user_inatomic(void __user *to, const void

*from, unsigned long n);


函數(shù)作用:

​ 把內(nèi)核空間的數(shù)據(jù)復(fù)制到用戶空間。


參數(shù)含義:

​ *to是用戶空間的指針

​ *from是內(nèi)核空間的指針

​ n是從內(nèi)核空間向用戶空間拷貝的字節(jié)數(shù)

copy_from_user


函數(shù)原型:

​ unsigned long copy_from_user(void *to, const void __user *from,

unsigned long n)


函數(shù)作用:

​ 把用戶空間的數(shù)據(jù)復(fù)制到內(nèi)核空間。


參數(shù)含義:

​ *to是內(nèi)核空間的指針

​ *from是用戶空間的指針

​ n是從用戶空間向內(nèi)核空間拷貝的字節(jié)數(shù)


14.3 實驗程序編寫

14.3.1 驅(qū)動程序編寫

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

在該實驗中將實現(xiàn)內(nèi)核空間和用戶空間進行數(shù)據(jù)交換的功能。以12章編寫的字符設(shè)備驅(qū)動框架實驗為基礎(chǔ)編寫驅(qū)動程序,程序使用copy_to_user函數(shù)和copy_from_user函數(shù)來實現(xiàn)內(nèi)核空間和用戶空間互傳數(shù)據(jù)的功能,編寫完成的file.c代碼如下所示:

以上代碼在cdev_test_read函數(shù)中使用copy_to_user函數(shù)將內(nèi)核數(shù)據(jù)拷貝到用戶空間,在cdev_test_write函數(shù)中使用copy_from_user函數(shù)將用戶空間數(shù)據(jù)拷貝到內(nèi)核空間。

14.3.2 編寫測試 APP

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

編寫測試APP其實是在編寫Linux應(yīng)用,編譯完成的應(yīng)用程序app.c代碼如下所示:

14.4 運行測試

14.4.1 編譯驅(qū)動程序

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

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

然后使用命令“make”進行驅(qū)動的編譯,編譯完成如下圖(圖14-3)所示:

編譯完生成 file.ko目標(biāo)文件,如下圖(圖 14-4)所示:

至此我們的驅(qū)動模塊就編譯成功了,下面進行應(yīng)用程序編譯.

下面進行驅(qū)動程序的測試。

輸入以下命令運行應(yīng)用程序,如下圖(圖 14-7)所示

由上圖可知,打印“This is cdev_test_open”信息說明成功打開了字符設(shè)備驅(qū)動。

打印“ This is cdev_test_read”和“buf1 is This is cdev_test_read!”說明應(yīng)用程序成功讀取到內(nèi)核的數(shù)據(jù)。

打印“This is cdev_test_write”和“kbuf is nihao”說明應(yīng)用程序向內(nèi)核寫數(shù)據(jù)成功。

最后打印“This is cdev_test_release”說明卸載字符設(shè)備。

更多內(nèi)容可以了解迅為RK3568開發(fā)板


路過

雞蛋

鮮花

握手

雷人

評論 (0 個評論)

facelist

您需要登錄后才可以評論 登錄 | 立即注冊

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
返回頂部
主站蜘蛛池模板: 影视精品网站入口 | 国产在线日韩在线 | 日韩一区二区在线免费观看 | 日本福利片国产午夜久久 | 亚洲韩国欧美一区二区三区 | 天美丶麻豆丶果冻传煤 | 日本精品久久久 | 精品视频久久 | 欧美在线观看视频 | 四虎影院入口 | 黄视频网址 | 香蕉国产综合久久猫咪 | 亚洲国产欧美目韩成人综合 | 日本欧美黄色 | 日本人亚洲人jizz | a在线观看免费网址大全 | 六月婷婷在线视频 | 肉视频在线观看 | 毛片韩国| 国产精品999在线 | 国产高清区 | 欧美三级网站在线观看 | 一级毛片aaaaaa视频免费看 | 日本色站 | 99视频久久 | 色婷婷亚洲综合五月 | 欧美色成人tv在线播放 | 青青青青在线成人视99 | 亚洲高清国产一区二区三区 | 二区三区不卡不卡视频 | 精品久久久久久久九九九精品 | 色天天综合久久久久综合片 | 国产网站麻豆精品视频 | 麻豆精品永久免费视频 | 在线视频观看亚洲 | 九九九九九九精品免费 | 天堂色| 欧美国产在线一区 | 九九视频在线观看视频 | 1000部又爽又黄无遮挡的视频 | 青青操原|