驱动开发之 LED(for mini2440)

2020-06-28来源: eefocus关键字:驱动开发  LED  mini2440

开发环境:ubuntu16.04 64bit

Linux内核版本:linux-2.6.32.2


1、编写mini2440_leds.c

在/linux-2.6.32.2/drivers/char目录下,编写mini2440_leds.c,代码如下:


#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include



#define DEVICE_NAME "leds"


static unsigned long led_table [] = {

S3C2410_GPB(5),

S3C2410_GPB(6),

S3C2410_GPB(7),

S3C2410_GPB(8),

};


static unsigned int led_cfg_table [] = {

S3C2410_GPIO_OUTPUT,

S3C2410_GPIO_OUTPUT,

S3C2410_GPIO_OUTPUT,

S3C2410_GPIO_OUTPUT,

};


static int sbc2440_leds_ioctl(

struct inode *inode, 

struct file *file, 

unsigned int cmd, 

unsigned long arg)

{

switch(cmd) {

case 0:

case 1:

if (arg > 4) {

return -EINVAL;

}

s3c2410_gpio_setpin(led_table[arg], !cmd);

return 0;

default:

return -EINVAL;

}

}


static struct file_operations dev_fops = {

.owner = THIS_MODULE,

.ioctl = sbc2440_leds_ioctl,

};


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++) {

s3c2410_gpio_cfgpin(led_table[i], led_cfg_table[i]);

s3c2410_gpio_setpin(led_table[i], 0);

}


ret = misc_register(&misc);


printk (DEVICE_NAME"tinitializedn");


return ret;

}


static void __exit dev_exit(void)

{

misc_deregister(&misc);

}


module_init(dev_init);

module_exit(dev_exit);

MODULE_LICENSE("GPL");

MODULE_AUTHOR("FriendlyARM Inc.");


2、修改Kconfig文件

编辑/linux-2.6.32.2/drivers/char目录下的Kconfig文件(在内核代码树里增加该项),加入如下内容:


config MINI2440_LEDS

tristate "Mini2440 leds support"

depends on MACH_MINI2440

default m if MACH_MINI2440

help

  Mini2440 module sample.


3、修改Makefile文件

编辑/linux-2.6.32.2/drivers/char目录下的Makefile文件,加入如下内容:


obj-$(CONFIG_MINI2440_LEDS) += mini2440_leds.o


4、配置内核

在 linux-2.6.32.2 目录位置运行一下 make menuconfig在 DeviceDrivers -> Character devices 菜单中看到刚才所添加的选项了,我们选择选项意为把该驱动编译成模块。


5、编译模块

到 linux-2.6.32.2 源代码根目录位置,执行 make modules。

编译成功在mini2440_leds.c同一目录下可以看到mini2440_leds.ko文件,此文件即是我们需要的模块。


6、安装模块

U盘安装:

Linux内核配置对U盘的支持及挂载

将mini2440_leds.ko模块拷贝到U盘,插入开发板。


挂载驱动:


#cd /mnt/udisk

#insmod  /mnt/udisk/mini2440_leds.ko

在这里插入图片描述

卸载驱动:


#rmmod  mini2440_leds


7、编写应用测试LED驱动

led_kz.c源码:


#include

#include

#include

#include


int main(int argc, char **argv)

{

int on;

int led_no;

int fd;

/* 检查 led 控制的两个参数,如果没有参数输入则退出。*/

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|1n");

exit(1);

}

/*打开/dev/leds 设备文件*/

fd = open("/dev/leds0", 0);

if (fd < 0) {

fd = open("/dev/leds", 0);

}

if (fd < 0) {

perror("open device leds");

exit(1);

}

/*通过系统调用 ioctl 和输入的参数控制 led*/

ioctl(fd, on, led_no);   //通过调用ioctl把参数传送给驱动

/*关闭设备句柄*/

close(fd);

return 0;

}


编译成可执行文件:


在led_kz.c目录下执行下面命令

#arm-linux-gcc -o led_kz led_kz.c


把程序拷贝到开发板运行:


关闭LED4   3指定led,0关闭led

[root@H3-Studio=W]#./led_kz 3 0

打开LED4   3指定led,1打开led

[root@H3-Studio=W]#./led_kz 3 1

在这里插入图片描述

观察开发板,LED可以正常控制。

关键字:驱动开发  LED  mini2440 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic501352.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:led裸机程序分析一(头文件2440addr.ini)
下一篇:驱动开发之 HelloWorld (for mini2440)

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

驱动开发之 DM9000 (for mini2440)
;       = { .platform_data = &mini2440_dm9000_platdata, },};38最后需要将dm9000这个平台设备添加到mini2440_devices这个平台设备数组里面,这样才能完成平台设备的注册。static struct platform_device *mini2440_devices[] __initdata = {        /* ... */        &mini2440_device_eth,};2. dm9000驱动修改drivers
发表于 2020-06-28
<font color='red'>驱动</font><font color='red'>开发</font>之 DM9000 (for mini2440)
驱动开发之 HelloWorld (for mini2440)
_module.o4、配置内核在 linux-2.6.32.2 目录位置运行一下 make menuconfig在 DeviceDrivers -> Character devices 菜单中看到刚才所添加的选项了,我们选择选项意为把该驱动编译成模块。5、编译模块到 linux-2.6.32.2 源代码根目录位置,执行 make modules。编译成功在mini2440_hello_module.c同一目录下可以看到mini2440_hello_module.ko文件,此文件即是我们需要的模块。6、安装模块U盘安装:Linux内核配置对U盘的支持及挂载将mini2440_hello_module.ko模块拷贝到U盘,插入开发
发表于 2020-06-28
<font color='red'>驱动</font><font color='red'>开发</font>之 HelloWorld (for mini2440)
罗姆与汽车零部件制造商Vitesco合作开发SiC电动汽车驱动
罗姆已与Vitesco Technologies签订了开发碳化硅电动汽车驱动器的协议。Vitesco副总裁Thomas Stierle说:“能源效率在电动汽车中至关重要,由于电池是车辆中唯一的能源,因此必须把因功率转换引起的任何损失降至最低。因此,我们正在模块化电力电子系统中开发SiC组件,为了从电力电子设备和电动机中获得最大效率,我们将使用合作伙伴提供的SiC功率器件,所以我们选择罗姆。”Vitesco已经在开发和测试800V SiC逆变器,旨在同时优化逆变器开关策略和电动机,通过更高的频率和更陡的开关斜率提供更高的开关效率,并减少电动机的谐波损耗。此外,公司还正在研究800V SiC车载电池充电器。 Vitesco表示
发表于 2020-06-09
内核裁剪,arm_mini2440开发板中增删自己写的驱动
1、把编译通过的buttons1711.c文件放入/home/mini2440/linux-2.6.32.2/drivers/char/2、修改Makefile在同一个目录下(第1步中放入.c文件的目录/home/mini2440/linux-2.6.32.2/drivers/char/)打开Makefile:(法1)(不推荐):在obj-y       += 后面加上buttons1711.o然后重新在/home/mini2440/linux-2.6.32.2/中make zImage,再把生成的zImage烧写进开发板就可以用了。(法2)在底下添加(可找原来类似的位置)obj
发表于 2020-05-22
linux-2.6.32在mini2440开发板上移植(17)之按键驱动程序移植
"},{IRQ_EINT19, S3C2410_GPG(11), S3C2410_GPG11_EINT19, 5, "KEY5"},};/*开发板上按键的状态变量,注意这里是’0’,对应的ASCII 码为30*/static volatile char key_values [] = {'0', '0', '0', '0', '0', '0'};/*因为本驱动是基于中断方式的,在此创建一个等待队列,以配合中断函数使用;当有按键按下并读取到键值时,将会唤醒此队列,并设置中断标志,以便能通过 read 函数判断和读取键值
发表于 2020-05-17
linux-2.6.32在mini2440<font color='red'>开发</font>板上移植(17)之按键<font color='red'>驱动</font>程序移植
AT90S8515单片机对LED数码显示管的控制设计
一、电路附图是AT90S8515控制数码显示的电路略图(图中只画出了与数码管接口的电路,其余接线略)。单片机的PBO~PB7接LED共阴数码管的a~h脚,控制段码;单片机的PDO—PD5分别接六只LED数码管DO~D5的共阴极,控制位码。其中PDO~PD5是通过SL-AVR开发实验器上的LED数码管短路块DLED接至数码管DO—D5的。二、字符8右循环移位显示程序在SL-AVR开发实验器LED上实现字符8右循环移位显示的源程序清单如下:第1行表示程序中包含定义AT90S8515特殊功能寄存器的头文件8515def.inc,指明所用器件为AT90S85150接着定义寄存器r16、r22分别为暂存器temp、scndp。在程序前面
发表于 2020-06-07
AT90S8515单片机对LED数码显示管的控制设计
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved