|
文件私有數(shù)據(jù)的概念在Linux驅(qū)動(dòng)中有著非常廣泛的應(yīng)用,文件私有數(shù)據(jù)就是將私有數(shù)據(jù)private_data指向設(shè)備結(jié)構(gòu)體。通過(guò)它可以將私有數(shù)據(jù)一路從open函數(shù)帶到read, write函數(shù)層層傳入。一般是在open 的時(shí)候賦值,read、write時(shí)使用。open函數(shù)中私有數(shù)據(jù)的使用如下所示:
在上述代碼中,定義了一個(gè)設(shè)備結(jié)構(gòu)體dev1,然后在open函數(shù)中,將私有數(shù)據(jù)private_data指向了設(shè)備結(jié)構(gòu)體dev1。
我們可以在read write函數(shù)中通過(guò)private_data訪問(wèn)設(shè)備結(jié)構(gòu)體,如下所示:
15.2 實(shí)驗(yàn)程序編寫
15.2.1 驅(qū)動(dòng)程序編寫
本驅(qū)動(dò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)例程\10\module。
本章實(shí)驗(yàn)將編寫Linux下的使用文件私有數(shù)據(jù)實(shí)例代碼,在open函數(shù)中對(duì)私有數(shù)據(jù)結(jié)構(gòu)體賦值,在write函數(shù)中使用。編寫完成的代碼如下所示:
15.2.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)例程\10\app。
編寫測(cè)試APP其實(shí)是在編寫Linux應(yīng)用,在應(yīng)用程序中向設(shè)備文件寫入數(shù)據(jù),編寫完成的應(yīng)用程序app.c代碼如下所示:
15.3 運(yùn)行測(cè)試對(duì)于Makefile的內(nèi)容注釋已在上圖添加,保存退出之后,來(lái)到存放file.c和Makefile文件目錄下,如下圖(圖15-1)所示:
然后使用命令“make”進(jìn)行驅(qū)動(dòng)的編譯,編譯完成如下圖(圖15-2)所示:
編譯完生成 file.ko目標(biāo)文件,如下圖(圖15-3)所示:
至此我們的驅(qū)動(dòng)模塊就編譯成功了,下面進(jìn)行應(yīng)用程序編譯,
15.3.2 編譯應(yīng)用程序
因?yàn)闇y(cè)試APP是要在開發(fā)板上運(yùn)行的,所以需要aarch64-linux-gnu-gcc來(lái)編譯,輸入以下命令,編譯完成以后會(huì)生成一個(gè)app的可執(zhí)行程序,如下圖(圖15-4)所示:
aarch64-linux-gnu-gcc app.c -o app
下面進(jìn)行驅(qū)動(dòng)程序的測(cè)試。
驅(qū)動(dòng)加載成功之后會(huì)生成/dev/test設(shè)備驅(qū)動(dòng)文件,輸入以下命令查看雜項(xiàng)設(shè)備的主次設(shè)備號(hào)。
ls /dev/test -al
結(jié)果如下圖(圖15-6)所示:
運(yùn)行應(yīng)用程序,如下(圖 15-6)所示:
在此實(shí)驗(yàn)中,將硬件屬性的信息全部放在一個(gè)結(jié)構(gòu)體private_data,依然可以實(shí)現(xiàn)字符設(shè)備的操作。
更多內(nèi)容可以B站搜索:迅為RK3568開發(fā)板