調試exynos4412—ARM嵌入式Linux—LEDS/GPIO驅動之三

 /**linux

******************************************************************************
* @author    暴走的小哥哥
* @version   V1.0.0
* @date       2016-02-23
******************************************************************************
* <  Beijing university of posts and telecommunications >
*******************************************************************************
******************************************************************************
* platform exynos4412 iTOP-4412
*******************************************************************************

目標:實現對多個GPIO或者複用GPIO的控制

1工具

1.1硬件工具

1)iTOP4412開發板ios

2)U盤或者TF卡數組

3)PC機ide

4)串口函數

1.2軟件工具

1)虛擬機Vmware工具

2)Ubuntu12.04.2post

3)超級終端(串口助手)測試

4)源碼文件夾「gpios」3d

操做步驟調試

2.1簡要說明

由於前面關於GPIO的使用都已經介紹的差很少了,如今直接給你們介紹操做過程。

以下圖所示,針對32提供的32個GPIO在驅動代碼中進行代碼註釋,簡要說明。

2.2menuconfig中去掉其它驅動對GPIO的調用

先須要去掉調用了這些GPIO的相關驅動。

1)去掉攝像頭驅動VIDEO_OV5640

Device Drivers  --->  

Multimedia support(MEDIA_SUPPORT [=y])  --->  

Video capture adapters(VIDEO_CAPTURE_DRIVERS [=y])(去掉)  ---> 

2)去掉WIFI驅動MTK_COMBO_CHIP_MT662

Device Drivers  --->  

MediaTek Connectivity Combo Chip Config  --->  

MediaTek Connectivity Combo Chip Support (MTK_COMBO [=y])(去掉)  --->  

Select Chip (<choice> [=y])  --->  

3)去掉leds的驅動

Device Drivers  ---> 

Character devices  ---> 

Enable LEDS config  ---> 

4)去掉Buzzer的驅動

Device Drivers  ---> 

Character devices  ---> 

Enable BUZZER config  ---> 

修改完以後從新編譯內核,將新生成的內核二進制文件zImage燒寫到開發板。

由於我這裏使用的是以模塊的形式編譯驅動程序,因此能夠在這裏直接編譯內核zImage文件,燒寫到板子中

2.3Makefile文件的修改

接着將前一個實驗的leds.c改成gpios.c。

修改一下Makefile文件,以下圖所示。

2.4將GPIO定義爲數組統一進行初始化,操做

將這些GPIO打包爲一個數組,數組以下圖所示,而後定義一下數組長度LED_NUM。

將設備節點的名稱修改成hello_gpio,以下圖所示。

以下圖所示,先在probe函數中初始化。

以下圖所示,而後是ioctl函數中寫一個簡單的switch語句,提供給上層調用測試。

以下圖所示,最後是在remove函數中添加gpio_free釋放GPIO。

2.5編寫簡單應用進行操做

簡單的修改一下前面的應用程序。

3 編譯測試

在Ubuntu系統下新建gpios文件夾,將寫好的gpios、編譯腳本以及應用拷貝到gpios文件夾下,以下圖所示。

使用Makefile命令編譯驅動,而後使用

「arm-none-linux-gnueabi-gcc -o invoke_gpios invoke_gpios.c -static」命令編譯應用,以下圖所示。

 

將上圖中的文件invoke_gpios和gpios.ko拷貝到U盤。

啓動開發板,將U盤插入開發板,使用命令「mount /dev/sda1 /mnt/udisk/」加載U盤符。

使用命令「insmod /mnt/udisk/gpios.ko」加載驅動gpios.ko,

使用命令「./mnt/udisk/invoke_gpios 0」或者「./mnt/udisk/invoke_gpios 1」運行小應用invoke_gpios,以下圖所示。

如上圖所示,使用命令「./mnt/udisk/invoke_gpios 0」以後燈會滅,而後其它的GPIO也會都成爲低電平。

使用命令「./mnt/udisk/invoke_gpios 0」以後燈會亮,而後其它的GPIO也會都成爲高電平。

也能夠檢查一下運行應用以後有沒有錯誤,若是有錯誤,多半是由於沒有將調用對應GPIO的驅動去除,致使GPIO被佔用了。

 

本人文字水平有限,因此就一步一步的寫和截圖,但願這種形式對你們有所幫助!

若是有覺得能夠先參考本人博客另外的文章:

調試exynos4412—ARM嵌入式Linux—LEDS/GPIO驅動之一

調試exynos4412—ARM嵌入式Linux—LEDS/GPIO驅動之二

相關文章
相關標籤/搜索