Linux-4.9.2内核在mini2440上的移植(十二)——LED驱动移植
2017-10-04 22:47
573 查看
本篇目的:移植LED驱动,并测试。
本篇参考:http://singleboy.blog.163.com/blog/static/54900194201152811472442/
root@ubuntu:~/linux-4.9.2# vim drivers/misc/mini2440_leds.c
加入如下源码,本源码已为linux4.9.2做了修改适配:
(2)修改Kconfig
root@ubuntu:~/linux-4.9.2# vim drivers/misc/Kconfig
在95行附近添加红色内容
config MINI2440_ADC
bool "ADC driver forFriendlyARM Mini2440 development boards"
depends on MACH_MINI2440
default y if MACH_MINI2440
help
this is ADC driver forFriendlyARM Mini2440 development boards
Notes: thetouch-screen-driver required this option
config LEDS_MINI2440
tristate"LED Support for Mini2440 GPIO LEDs"
depends onMACH_MINI2440
default yif MACH_MINI2440
help
Thisoption enables support for LEDs connected to GPIO lines
on Mini2440boards.
config DUMMY_IRQ
(3)修改Makefile
root@ubuntu:~/linux-4.9.2# vim drivers/misc/Makefile
在36行添加红色内容
obj-$(CONFIG_C2PORT) += c2port/
obj-$(CONFIG_MINI2440_ADC) += mini2440_adc.o
obj-$(CONFIG_LEDS_MINI2440) += mini2440_leds.o
obj-$(CONFIG_HMC6352) += hmc6352.o
obj-y += eeprom/
完成后,使用如下指令
root@ubuntu:~/linux-4.9.2# make menuconfig
查看一下
Device Drivers --->
[*] Misc devices --->
LED的配置,并保存退出
root@ubuntu:~/linux-4.9.2# make -j8
root@ubuntu:~/linux-4.9.2# ./mkuImage.sh
(2)测试
重启开发板,等LCD显示QT界面之后,可以看到LED在进行流水灯闪烁。在QT界面的“友善之臂”选项卡,打开LEDs应用,可以使用应用内的选项操作LED的亮与灭等。
本篇参考:http://singleboy.blog.163.com/blog/static/54900194201152811472442/
12.1 LED源码添加
(1)添加源码drivers/misc/mini2440_leds.croot@ubuntu:~/linux-4.9.2# vim drivers/misc/mini2440_leds.c
加入如下源码,本源码已为linux4.9.2做了修改适配:
#include <linux/miscdevice.h> #include <linux/delay.h> #include <asm/irq.h> #include <mach/regs-gpio.h> #include <mach/hardware.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> #include <linux/mm.h> #include <linux/fs.h> #include <linux/types.h> #include <linux/delay.h> #include <linux/moduleparam.h> #include <linux/slab.h> #include <linux/errno.h> #include <linux/ioctl.h> #include <linux/cdev.h> #include <linux/string.h> #include <linux/list.h> #include <linux/pci.h> #include <linux/gpio.h> #include <asm/uaccess.h> #include <asm/atomic.h> #include <asm/unistd.h> #include <mach/gpio-samsung.h> #include <mach/regs-gpio.h> #include <plat/gpio-cfg.h> #define DEVICE_NAME "leds" /*设备名(/dev/leds)*/ /*LED 对应的GPIO 端口列表*/ static unsigned long led_table [] = { S3C2410_GPB(5), S3C2410_GPB(6), S3C2410_GPB(7), S3C2410_GPB(8), }; /*LED 对应端口将要输出的状态列表*/ static unsigned int led_cfg_table [] = { S3C2410_GPIO_OUTPUT, S3C2410_GPIO_OUTPUT, S3C2410_GPIO_OUTPUT, S3C2410_GPIO_OUTPUT, }; /*ioctl 函数的实现 * 在应用/用户层将通过ioctl 函数向内核传递参数,以控制LED 的输出状态 */ static long leds_ioctl( struct file *file, unsigned int cmd, unsigned long arg) { switch(cmd) { case 0: case 1: if (arg > 4) { return-EINVAL; } /*根据应用/用户层传递来的参数(取反),通过s3c2410_gpio_setpin函数设置LED 对应的端口寄存器*/ gpio_set_value(led_table[arg],!cmd); return 0; default: return -EINVAL; } } /* * 设备函数操作集,在此只有ioctl 函数,通常还有read, write, open, close 等,因为本LED 驱动在下面已经 * 注册为misc 设备,因此也可以不用open/close */ static struct file_operations dev_fops = { .owner = THIS_MODULE, .unlocked_ioctl =leds_ioctl, }; /* * 把LED 驱动注册为MISC 设备 */ static struct miscdevice misc = { .minor =MISC_DYNAMIC_MINOR, /*动态设备号*/ .name = DEVICE_NAME, .fops = &dev_fops, }; /* * 设备初始化 */ static int __init dev_init(void) { int ret; int i; for (i = 0; i < 4;i++) { /*设置LED 对应的端口寄存器为输出(OUTPUT)*/ s3c_gpio_cfgpin(led_table[i],led_cfg_table[i]); /*设置LED 对应的端口寄存器为低电平输出,在模块加载结束后,四个LED 应该是全部都是发光状态*/ gpio_set_value(led_table[i],0); } ret = misc_register(&misc);/*注册设备*/ if(ret < 0) { printk(DEVICE_NAME"register falid!\n"); return ret; } printk (DEVICE_NAME"\tinitialized\n"); /*打印初始化信息*/ return 0; } static void __exit dev_exit(void) { misc_deregister(&misc); } /*模块初始化,仅当使用insmod/podprobe 命令加载时有用,如果设备不是通过模块方式加载,此处将不会被调用*/ module_init(dev_init); /*卸载模块,当该设备通过模块方式加载后,可以通过rmmod 命令卸载,将调用此函数*/ module_exit(dev_exit); MODULE_LICENSE("GPL"); /*版权信息*/ MODULE_AUTHOR("ubuntu."); /*开发者信息*/
(2)修改Kconfig
root@ubuntu:~/linux-4.9.2# vim drivers/misc/Kconfig
在95行附近添加红色内容
config MINI2440_ADC
bool "ADC driver forFriendlyARM Mini2440 development boards"
depends on MACH_MINI2440
default y if MACH_MINI2440
help
this is ADC driver forFriendlyARM Mini2440 development boards
Notes: thetouch-screen-driver required this option
config LEDS_MINI2440
tristate"LED Support for Mini2440 GPIO LEDs"
depends onMACH_MINI2440
default yif MACH_MINI2440
help
Thisoption enables support for LEDs connected to GPIO lines
on Mini2440boards.
config DUMMY_IRQ
(3)修改Makefile
root@ubuntu:~/linux-4.9.2# vim drivers/misc/Makefile
在36行添加红色内容
obj-$(CONFIG_C2PORT) += c2port/
obj-$(CONFIG_MINI2440_ADC) += mini2440_adc.o
obj-$(CONFIG_LEDS_MINI2440) += mini2440_leds.o
obj-$(CONFIG_HMC6352) += hmc6352.o
obj-y += eeprom/
完成后,使用如下指令
root@ubuntu:~/linux-4.9.2# make menuconfig
查看一下
Device Drivers --->
[*] Misc devices --->
LED的配置,并保存退出
12.2 编译、测试
(1)编译root@ubuntu:~/linux-4.9.2# make -j8
root@ubuntu:~/linux-4.9.2# ./mkuImage.sh
(2)测试
重启开发板,等LCD显示QT界面之后,可以看到LED在进行流水灯闪烁。在QT界面的“友善之臂”选项卡,打开LEDs应用,可以使用应用内的选项操作LED的亮与灭等。
相关文章推荐
- Linux-4.9.2内核在mini2440上的移植(十一)——触摸屏驱动移植
- Linux-4.9.2内核在mini2440上的移植(十四)——蜂鸣器驱动移植
- Linux-2.6.32.2内核在mini2440上的移植(十二)---移植I2C EEPROM驱动
- Linux-2.6.32.2内核在mini2440上的移植(十五)---移植LED驱动
- Linux-2.6.32.2内核在mini2440上的移植(十二)---移植I2C EEPROM驱动
- Linux-4.9.2内核在mini2440上的移植(六)——修改MD9000驱动
- Linux-4.9.2内核在mini2440上的移植(十)——ADC驱动移植
- Linux-2.6.32.2内核在mini2440上的移植(十五)---移植LED驱动
- Linux-2.6.32.2内核在mini2440上的移植(十二)---移植I2C EEPROM驱动
- 【引用】Linux-2.6.32.2内核在mini2440上的移植(十五)---移植LED驱动
- Linux-4.9.2内核在mini2440上的移植(十三)——按键驱动移植
- Linux-4.9.2内核在mini2440上的移植(八)——RTC驱动移植
- 【引用】Linux-2.6.32.2内核在mini2440上的移植(十二)---移植I2C EEPROM驱动
- Linux-4.9.2内核在mini2440上的移植(九)——LCD驱动移植
- Linux-2.6.32.2内核在mini2440上的移植(八)---添加ADC驱动
- .Linux-2.6.32.2内核在mini2440上的移植(五)---激活RTC驱动
- Linux-2.6.32.2内核在mini2440上的移植(九)---触摸屏驱动移植
- 移植Linux3.4.2版本内核到mini2440(二)--添加网卡、UVC摄像头、LCD驱动
- Linux-2.6.32.2内核在mini2440上的移植(十八)---将UART2更成普通串口驱动
- Linux-2.6.32.2内核在mini2440上的移植(十七)---移植PWM控制蜂鸣器驱动 .