一. 通用设备驱动Makefile模板

obj-m := mini210s_leds_test_zm.o
KERNELDIR :=/usr/local/mini210s/linux-2.6.35.7
default:  make -C $(KERNELDIR) M=$(shell pwd) modules  clean:  make -C $(KERNELDIR) M=$(shell pwd) clean   

其中,KERNELDIR 需指定内核所在目录;

二 编译LED驱动

1. 查看mini210s存在的led驱动

#define DEVICE_NAME "leds"static int led_gpios[] = {S5PV210_GPJ2(0),S5PV210_GPJ2(1),S5PV210_GPJ2(2),S5PV210_GPJ2(3),
};#define LED_NUM       ARRAY_SIZE(led_gpios)static long mini210_leds_ioctl(struct file *filp, unsigned int cmd,unsigned long arg)
{switch(cmd) {case 0:case 1:if (arg > LED_NUM) {return -EINVAL;}gpio_set_value(led_gpios[arg], !cmd);//printk(DEVICE_NAME": %d %d\n", arg, cmd);break;default:return -EINVAL;}return 0;
}static struct file_operations mini210_led_dev_fops = {.owner          = THIS_MODULE,.unlocked_ioctl  = mini210_leds_ioctl,
};static struct miscdevice mini210_led_dev = {.minor           = MISC_DYNAMIC_MINOR,.name         = DEVICE_NAME,.fops            = &mini210_led_dev_fops,
};static int __init mini210_led_dev_init(void) {int ret;int i;for (i = 0; i < LED_NUM; i++) {ret = gpio_request(led_gpios[i], "LED");if (ret) {printk("%s: request GPIO %d for LED failed, ret = %d\n", DEVICE_NAME,led_gpios[i], ret);return ret;}s3c_gpio_cfgpin(led_gpios[i], S3C_GPIO_OUTPUT);gpio_set_value(led_gpios[i], 1);}ret = misc_register(&mini210_led_dev);printk(DEVICE_NAME"\tinitialized\n");return ret;
}static void __exit mini210_led_dev_exit(void) {int i;for (i = 0; i < LED_NUM; i++) {gpio_free(led_gpios[i]);}misc_deregister(&mini210_led_dev);
}module_init(mini210_led_dev_init);
module_exit(mini210_led_dev_exit);MODULE_LICENSE("GPL");
MODULE_AUTHOR("FriendlyARM Inc.");

可以看到开发板自带的LED使用的是GPJ2口

S5PV210_GPJ2

查看mini210s用户手册,“GPIO 是通用输入输出口的简称,本开发板带有一个 30 Pin 2.0mm 间距的 GPIO 接口,标称
为 CON6”, 在CON6中GPH/EINT口可用。

在~/study/drive/目录下新建文件mini210s_leds_test.c 文件,将mini210s_leds.c文件中的

#define DEVICE_NAME "leds"static int led_gpios[] = {S5PV210_GPJ2(0),S5PV210_GPJ2(1),S5PV210_GPJ2(2),S5PV210_GPJ2(3),
};

替换为:

#define DEVICE_NAME "leds_zm"static int led_gpios[] = {S5PV210_GPH0(0),S5PV210_GPH0(1),S5PV210_GPH0(2),S5PV210_GPH0(3),
}

新建Makefile

obj-m := mini210s_leds_test_zm.o
KERNELDIR :=/usr/local/mini210s/linux-2.6.35.7
default:  make -C $(KERNELDIR) M=$(shell pwd) modules  clean:  make -C $(KERNELDIR) M=$(shell pwd) clean   

执行:

$makeWARNING: Symbol version dump /usr/local/mini210s/linux-2.6.35.7/Module.symversis missing; modules will have no dependencies and modversions.CC [M]  /home/zhangmin/study/driver/mini210s_leds_test.o
cc1: error: unrecognized command line option "-mlittle-endian"
cc1: error: unrecognized command line option "-mabi=apcs-gnu"
make[2]: *** [/home/zhangmin/study/driver/mini210s_leds_test.o] 错误 1
make[1]: *** [_module_/home/zhangmin/study/driver] 错误 2

网上查了下资料,应该是CROSS_COMPILE问题,查看内核MAKEFILE, MAKEFILE还是初始文件.根据用户手册,执行:

$cd /usr/local/mini210s/linux-2.6.35.7/
$cp mini210_linux_defconfig .config
$make

makefile文件被更新了,执行:

cd ~/study/drive/
make

成功执行!并生成mini210s_leds_test.ko文件

三. 执行

将mini210s_leds_test.ko文件移植到开发板中,执行

$insmod mini210s_leds_test.ko
$dmesg |grep leds_zm

显示:

[  131.139462] leds_zm  initialized

即leds_zm模块成功加到内核中。

$ls -l /dev/leds_zm
crw-rw----    1 root     root       10,  48 Apr 20 03:03 /dev/leds_zm

四.测试

参考mini210s自带的leds测试程序,修改为:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main(int argc, char **argv)
{int on;int led_no;int fd;if (argc != 3 || sscanf(argv[1], "%d", &led_no) != 1 || sscanf(argv[2],"%d", &on) != 1 ||on < 0 || on > 1 || led_no < 0 || led_no > 3) {fprintf(stderr, "Usage: leds led_no 0|1\n");exit(1);}fd = open("/dev/leds_zm", 0);if (fd < 0) {perror("open device leds");exit(1);}ioctl(fd, on, led_no);close(fd);return 0;
}

编译:

arm-linux-gcc led_zm.c  -o led_zm

将led_zm移植到开发板中,执行

./led_zm 1 0

用万用表接CON6的pin2 pin6,电压3.2V

./led_zm 1 1

用万用表接CON6的pin2 pin6,电压0V

成功!

四,将led_zm 加到内核

1. Kconfig add

 121 config MINI210_LEDS_ZM122     tristate "LED Support for FriendlyARM Mini210 GPIO LEDs by zm"123     depends on MACH_MINI210                                             124     default y125     help126       This option enables support for LEDs connected to GPIO lines127       on Mini210 boards.128 

2. Makefile add

120 obj-$(CONFIG_MINI210_LEDS_ZM)   += mini210_leds_zm.o

3. make menuconfig

4. make

												

小试mini210sGPIO驱动Led灯相关推荐

  1. led灯串怎么摆造型_如何驱动LED灯串小绝招

    也许有些人知道如何驱动LED灯串,可能就是采用大多数人都认同的一种大众化方法,但其实在这种大众化方法的背后其实还有许多人不知道的小绝招.今天小编就带你从其他地方入手更好的驱动led灯串. 在机械和电气 ...

  2. 嵌入式linux led驱动有几种写法,嵌入式Linux字符驱动LED灯设计

    一.任务要求 完成一个字符IO口驱动,在开发板上该IO口对应LED灯.该驱动程序通过控制IO口的高低电平来控制亮灭.同时要写一个应用层的测试程序,用来测试驱动程序.我的测试程序为myled_test. ...

  3. 控制led闪烁次数_单片机驱动LED灯的进阶之路

    对于大多数单片机的学习者或者是从事单片机行业的工程师来说,单片机驱动LED闪烁起来的时候,基本都是我们入坑的开始,同时当时的那种兴奋与喜悦都是难以忘怀的,从LED灯亮起,到闪烁,再到各种流水灯,能开心 ...

  4. 第八章 ESP32驱动LED灯

    关注嘉友创科技公众号 源码地址:https://github.com/HX-IoT/ESP32-Developer-Guide ESP32开发指南QQ群:824870185,内有pdf版,排版整洁. ...

  5. 学习用树莓派驱动LED灯闪烁

    学习用树莓派驱动LED灯闪烁 [前沿] ·认识GPIO编码 ·准备实验材料 ·实验电路连接 ·编写驱动程序 ·讲解其它的驱动方式(扩展篇) [实际操作] 一.认识GPIO编码 学习如何用树莓派驱动LE ...

  6. 【立创开源】RY3730 恒流驱动LED灯

    RY3730 恒流驱动LED灯,使用RY3730来实现恒流驱动,体积小,LED使用2835封装,单个60ma,一并6串. BOM已检查,可直接根据BOM采购 产品简介 使用RY3730方案实现的LED ...

  7. 驱动——LED灯循环闪烁

    使用结构体形式对寄存器地址进行映射,实现3盏LED灯的循环点亮 1.创建LED灯点亮所需要的GPIO寄存器的结构体,并对寄存器地址进行宏定义 2.①通过ioremap函数将物理地址映射为虚拟地址 vo ...

  8. 树莓派开发笔记(五):GPIO引脚介绍和GPIO的输入输出使用(驱动LED灯、检测按键)

    若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...

  9. 通过单片机定时器输出周期为1s的方波,驱动LED灯闪烁

    方波 方波的占空比固定是50%,即高电平和低电平的时间为1:1: 方波的周期:从一个上升沿(下降沿)到下一个上升沿(下降沿)的时间: 由此可得知周期为1s的方波就是高电平占0.5s,低电平占0.5s的 ...

最新文章

  1. CIO如何做到卓有成效?
  2. 渐统江湖的项目原型生成工具 -- Maven Archetype
  3. 24点游戏c语言源代码6,C语言解24点游戏程序
  4. 前端:uniapp封装组件用法笔记
  5. html加载js文件失败,firefox/chrome动态设置script加载js文件失败
  6. 一张图看懂阿里云智能媒体管理产品
  7. 在Android中使用自带API操作Json
  8. 网络安全与管理精讲视频笔记4-数字信封、数字签名、完整性验证、数据加解密及身份认证流程...
  9. 《JSP程序设计》手机销售网
  10. 自考计算机00051笔记,自考00051 管理系统中计算机应用自考资料笔记自考小抄.doc...
  11. 老毛桃u盘装系统linux,老毛桃U盘装系统教程详细步骤
  12. “2019/10/17创新创业工坊第六期第二课”心得体会
  13. 记 · 寒风依旧 · 虎跑路和人生路
  14. 纵向联邦线性模型在线推理过程中成员推断攻击的隐私保护研究
  15. 【泡泡图灵智库】基于优化的视觉惯性SLAM与GNSS紧耦合
  16. 【CANN训练营第三季】【进阶班笔记3】PyTorch安装与环境配置
  17. BX9054: 各浏览器对 document.execCommand 方法的首参数可选值范围存在差异
  18. CCS/TMS320F28377D: EMIF interface - CS2-CS4 start address configuration CS2-CS4起始地址
  19. 二叉树前、中、后序线索化及遍历
  20. html5图钉效果,新版图钉软件全方位升级

热门文章

  1. mysql 入库乱码,如何解决mysql中文入库乱码问题
  2. Auto.js Pro 替代品
  3. bugku 图穷匕见
  4. 实现对 2:3 或者3:2的图片进行1:1裁剪
  5. 什么是算命里说的三奇命,天上三奇,地下三奇,人中三奇
  6. android大漩涡旋转效果(极光星空)
  7. y=asin(wx+φ)的对称中心_函数y=Asin(wx+φ)的性质.ppt
  8. Algorithm1
  9. HTTP/HTTPS协议
  10. CAD制图系列之椭圆画法标注