本文轉(zhuǎn)自迅為4412精英版群: 本期實(shí)驗(yàn)比較簡(jiǎn)單,就是寫一個(gè)簡(jiǎn)單的應(yīng)用程序調(diào)用前面寫的驅(qū)動(dòng)。 硬件工具 1)iTOP4412 開發(fā)板 2)U 盤或者 TF 卡 3)PC 機(jī) 4)串口 9.1.1.2軟件工具 1)虛擬機(jī) Vmware 3)超級(jí)終端(串口助手) 4)實(shí)驗(yàn)配套源碼文件夾“invoke_hello” 視頻資源 本節(jié)配套視頻為“視頻 09-編寫簡(jiǎn)單應(yīng)用調(diào)用驅(qū)動(dòng)” 學(xué)習(xí)目標(biāo) 本章需要學(xué)習(xí)以下內(nèi)容: 學(xué)會(huì)調(diào)用設(shè)備節(jié)點(diǎn) 實(shí)驗(yàn)操作 本期實(shí)驗(yàn)很簡(jiǎn)單,在前面 Linux 應(yīng)用中就已經(jīng)學(xué)習(xí)過設(shè)備節(jié)點(diǎn)的調(diào)用。需要用到函數(shù) extern void printf(const char *format,...);定義在標(biāo)準(zhǔn) C 語言頭文件 stdio.h 中。 下面幾個(gè)頭文件在應(yīng)用中一般一起調(diào)用。 頭文件 #include 包含基本系統(tǒng)數(shù)據(jù)類型。系統(tǒng)的基本數(shù)據(jù)類型在 32 編 譯環(huán)境中保持為 32 位值,并會(huì)在 64 編譯環(huán)境中增長(zhǎng)為 64 位值。 頭文件包含系統(tǒng)調(diào)用文件的函數(shù)。可以調(diào)用普通文件、目錄、管道、socket、 字符、塊的屬性。 定義了 open 函數(shù) 定義了 close 函數(shù) 定義了 ioctl 函數(shù) 另外提醒一下,這些頭文件是和編譯器在一起。 這里使用,如下圖所示,進(jìn)入目錄“/usr/local/arm/arm-2009q3”。 使用查找命令“find ./ -name stat.h”,如下圖所示,使用的頭文件是目錄 “/arm-none-linux-gnueabi/libc/usr/include/sys/stat.h”中的. 其它幾個(gè)頭文件可以采用類似的方法查找,這里給大家提醒這一點(diǎn),因?yàn)橛袝r(shí)候拿到源碼 之后,可能編譯器版本和源碼不完全對(duì)應(yīng),這個(gè)時(shí)候就有可能需要修改和處理一下頭文件。不過這種問題一般都可以通過網(wǎng)絡(luò)查找錯(cuò)誤提示的方法一個(gè)一個(gè)解決。 如下圖所示,是一個(gè)簡(jiǎn)單的調(diào)用程序。 新建“invoke_hello”文件夾,將上圖的中的文件拷貝進(jìn)入,進(jìn)入新建的“invoke_hello” 目錄,使用編譯命令 “arm-none-linux-gnueabi-gcc -o invoke_hello invoke_hello.c -static” 編譯,如下圖所示。 將 “invoke_hello” 拷貝到 U 盤, 啟動(dòng)開發(fā)板, 加載前一期的 “devicenode_linux_module” 驅(qū)動(dòng),如下圖所示,使用 invoke_hello 調(diào)用設(shè)備節(jié)點(diǎn)“/dev/hello_ctl123”。 先使用命令“mount /dev/sda1 /mnt/udisk/”加載 U 盤; 使用命令“insmod /mnt/udisk/devicenode_linux_module.ko”加載驅(qū)動(dòng); 使用命令“./mnt/udisk/invoke_hello”,運(yùn)行 invoke_hello。 如上圖所示,運(yùn)行“invoke_hello”之后,會(huì)打印以下內(nèi)容” hello open cmd is 1,arg is 6 hello release 如下圖所示,設(shè)備節(jié)點(diǎn) open、close、ioctl 分別對(duì)應(yīng)打印信息 printk(KERN_EMERG "hello open\n"); printk(KERN_EMERG "hello release\n"); printk("cmd is %d,arg is %d\n",cmd,arg);ioctl 會(huì)打印第二個(gè)和第三個(gè)參數(shù)。 通過前面的分析,可以看到上層應(yīng)用對(duì)設(shè)備節(jié)點(diǎn) open、close、ioctl 分別對(duì)應(yīng)驅(qū)動(dòng)層的 open、release、unlocked_ioctl。
|