我們在前面的devicenode_linux_module.c文件上添加代碼,首先將文件名devicenode_linux_module.c改為leds.c。 先處理一下編譯文件Makefile,如下圖所示,將devicenode_linux_module改為leds。
/**
****************************************************************************** * @author 暴走的小哥哥 * @version V1.0.0 * @date 2016-02-19 ****************************************************************************** * < Beijing university of posts and telecommunications > ******************************************************************************* ****************************************************************************** * platform exynos4412 ******************************************************************************* **/ 1工具1.1硬體工具
1)iTOP4412開發板
2)U盤或者TF卡
3)PC機
4)串口
1.2軟體工具
1)虛擬機Vmware
2)Ubuntu12.04.2
3)超級終端(串口助手)
2驅動MakeFile文件的編寫
我們在前面的devicenode_linux_module.c文件上添加代碼,首先將文件名devicenode_linux_module.c改為leds.c。
先處理一下編譯文件Makefile,如下圖所示,將devicenode_linux_module改為leds。
3編寫驅動調用LED管腳
接著修改leds.c文件。
首先添加需要的頭文件,如下圖所示,分別是申請GPIO、配置函數、配置參數、GPIO巨集定義等的頭文件。然後將設備節點名稱由hello_ctl123修改為hello_ctl
然後需要修改的就是probe函數,一般說來GPIO的初始化都是在probe中。如下圖所示,調用配置函數以及配置函數。
然後就是修改一下ioctl函數,在Linux中對GPIO的控制一般是使用ioctl,雖然write函數也可以實現類似的功能,但是ioctl函數的效率高一些。如下圖所示,根據應用傳入的參數給GPIO賦值。
如上圖所示,先對於參數做一個簡單的判斷,然後給led賦值。
34編寫應用調用LED管腳
接著再來看一下應用,如下圖所示,應用比較簡單,調用延時函數,首先將Led點亮三秒,然後再滅掉三秒,再點亮。
在Ubuntu系統下新建leds文件夾,將寫好的leds和編譯腳本拷貝到leds文件夾下,使用Makefile命令編譯驅動,使用
“arm-none-linux-gnueabi-gcc -o invoke_leds invoke_leds.c -static”命令編譯應用。如下圖所示。
將上圖中的文件invoke_leds和leds.ko拷貝到U盤。
啟動開發板,將U盤插入開發板,使用命令“ mount /dev/sda1 /mnt/udisk/”載入U盤符,
使用命令“ insmod /mnt/udisk/leds.ko ”載入驅動leds.ko,
使用命令“./mnt/udisk/invoke_leds”運行小應用invoke_leds,如下圖所示。
經過上面的操作可觀察到led小燈會一亮一滅一亮,中間大概間隔三秒鐘。
本人文字水平有限,所以就一步一步的寫和截圖,希望這種形式對大家有所幫助!
本文只對系統預設的led進行控制,如果想要調用復用的leds,例如和wifi,camera復用
請參考本人博客:調試exynos4412—ARM嵌入式Linux—LEDS/GPIO驅動之三