iTOP-4412全能版采用四核Cortex-A9,主频为1.4GHz-1.6GHz,配备S5M8767 电源管理,集成USB HUB,选用高品质板对板连接器稳定可靠,大厂生产,做工精良。接口一应俱全,开发更简单,搭载全网通4G、支持WIFI、蓝牙、陀螺仪、CAN总线、RS485总线、500万摄像头等模块,稳定运行Android 4.0.3/Android 4.4操作,系统通用Linux-3.0.15+Qt操作系统(QT支持5.7版本),Ubuntu版本:12.04,接口智能分配 方便好用。
第四十八章 LEDS驱动二
考虑到用户在实际开发中可能需要更多的 GPIO,本实验给用户提供 32 个 GPIO,需要注意的是有一部分是复用的 GPIO,需要首先对内核进行配置和编译之后才能使用。例如 WIFI 模块和摄像头接口用到的 GPIO,如果当做 GPIO 使用,那么就无法使用 WIFI 模块和摄像头模块。
配套视频:
“视频 15_LEDS 驱动二”
48.1 去掉占用引脚的模块
因为前面关于 GPIO 的使用都已经介绍的差不多了,现在直接给大家介绍操作过程。如下图所示,提供了 32 个 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 烧写到开发板。
48.2 驱动程序
接着将前一个实验的 leds.c 改为 gpios.c。修改一下 Makefile 文件,如下图所示。
然后将这些 GPIO 打包为一个数组,数组如下图所示,然后定义一下数组长度LED_NUM。
将设备节点的名称修改为 hello_gpio,如下图所示。
如下图所示,先在 probe 函数中初始化。
如下图所示,然后是 ioctl 函数中写一个简单的 switch 语句。
如下图所示,最后是在 remove 函数中添加 gpio_free 释放 GPIO。
接着简单的修改一下应用。
在 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 被占用了。