基于tiny210v2的linux-3.9.6内核驱动移植1:led驱动
来源:互联网 发布:透明显示屏软件下载 编辑:程序博客网 时间:2024/05/21 17:06
#include <linux/kernel.h>#include <linux/module.h>#include <linux/miscdevice.h>#include <linux/fs.h>#include <linux/types.h>#include <linux/moduleparam.h>#include <linux/slab.h>#include <linux/ioctl.h>#include <linux/cdev.h>#include <linux/delay.h>#include <mach/gpio.h>#include <mach/regs-gpio.h>#include <plat/gpio-cfg.h>#define DEVICE_NAME "leds"static int led_gpios[] = { S5PV210_GPJ2(0), S5PV210_GPJ2(1), S5PV210_GPJ2(2), S5PV210_GPJ2(3),};#defineLED_NUM ARRAY_SIZE(led_gpios)static long smdkv210_leds_ioctl(struct file *filp, unsigned intcmd, unsignedlong arg){ switch(cmd){ case0: case1: 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; } return0;}static struct file_operations smdkv210_led_dev_fops = { .owner =THIS_MODULE, .unlocked_ioctl = smdkv210_leds_ioctl,};static struct miscdevice smdkv210_led_dev = { .minor =MISC_DYNAMIC_MINOR, .name =DEVICE_NAME, .fops =&smdkv210_led_dev_fops,};static int __init smdkv210_led_dev_init(void) { intret; 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); returnret; } s3c_gpio_cfgpin(led_gpios[i], S3C_GPIO_OUTPUT); gpio_set_value(led_gpios[i], 1); } ret =misc_register(&smdkv210_led_dev); printk(DEVICE_NAME"\tinitialized\n"); returnret;}static void __exit smdkv210_led_dev_exit(void) { int i; for (i = 0;i < LED_NUM; i++) { gpio_free(led_gpios[i]); } misc_deregister(&smdkv210_led_dev);}module_init(smdkv210_led_dev_init);module_exit(smdkv210_led_dev_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("FriendlyARM Inc.");
修改该目录下的Kconfig文件
添加:
config SMDKV210_LEDS
修改该目录下的Makefile文件
添加:
修改arch/arm/mach-s5pv210/include/mach/gpio.h
保存make,led驱动就编译到内核了。
友善的测试程序:
#include<stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/ioctl.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/leds0", 0);if (fd < 0) {fd = open("/dev/leds", 0);}if (fd < 0) {perror("open device leds");exit(1);}ioctl(fd, on, led_no);close(fd);return 0;}
- 基于tiny210v2的linux-3.9.6内核驱动移植1:led驱动
- 基于tiny210v2的linux-3.9.6内核驱动移植2:按键驱动
- 基于tiny210v2的linux-3.9.6内核驱动移植3:LCD移植
- 基于tiny210v2的linux-3.9.6内核驱动移植4:PWM移植
- linux内核驱动:TQ2440的LED驱动
- 基于S3C2440的linux-3.6.6移植——LED驱动
- 基于S3C2440的linux-3.6.6移植——LED驱动
- 移植linux-3.9内核到tiny210v2
- Linux-2.6.32.2内核在mini2440上的移植(十五)---移植LED驱动
- Linux-2.6.32.2内核在mini2440上的移植(十五)---移植LED驱动
- 【引用】Linux-2.6.32.2内核在mini2440上的移植(十五)---移植LED驱动
- Linux-4.9.2内核在mini2440上的移植(十二)——LED驱动移植
- 【Linux内核驱动】基于platform总线的miscdevice驱动(LED)
- S3C2410 LCD驱动的移植(基于linux-2.6.15.4内核)
- 基于Linux-2.6.35内核的wifi驱动移植
- fl2440内核linux-3.0移植-----添加led驱动
- 基于linux platform总线的LED驱动
- Linux系统移植实验---LED驱动的移植
- DeepLearning(深度学习)原理与实现(四)
- linux系统编程读书笔记 第八章
- 基于tiny210v2编译openwrt
- uva10891 - Game of Sum(动归)
- 移植linux-3.9内核到tiny210v2
- 基于tiny210v2的linux-3.9.6内核驱动移植1:led驱动
- uboot从SD卡烧写内核和文件系统
- 基于tiny210v2的linux-3.9.6内核驱动移植2:按键驱动
- JavaScript 概述
- 基于tiny210v2的linux-3.9.6内核驱动移植3:LCD移植
- 开源个安卓程序:蓝牙遥控智能车程序-单片机控制安卓上位机
- 移植opencv-2.4.6到tiny210v2
- Teradata 之top n与sample n
- JavaScript内置对象Date