linux 硬件变化记录,[记录]ARM,linux开发控制硬件之还是那个LED

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include <..>

#define DEVICE_NAME     "led"   /* 加载模式后,执行”cat /proc/devices”命令看到的设备名称 */

#define LED_GPIO        MXS_PIN_TO_GPIO(PINID_LCD_D23)  //硬件引脚

static struct class *led_class;

static struct class_device        *led_class_devs;

static int led_open(struct inode *inode, struct file *file)

{

printk("led open ok\n");

gpio_request(LED_GPIO, "led");

return 0;

}

static int  led_release(struct inode *inode, struct file *filp)

{

gpio_free(LED_GPIO);

return 0;

}

ssize_t led_write(struct file *filp, const char __user *buf, size_t count,

loff_t *f_pos)

{

char data[2];

copy_from_user(data, buf, count);

gpio_direction_output(LED_GPIO, data[0]);

printk("write data:%d \n",data[0]);

return count;

}

static struct file_operations led_fops = {

.owner   =   THIS_MODULE,    /* 这是一个宏,推向编译模块时自动创建的__this_module变量 */

.open    =   led_open,

.write         =         led_write,

.release =          led_release,

};

int major;

static int __init led_init(void)

{

major = register_chrdev(0, DEVICE_NAME, &led_fops); //主设备号为0 就自动分配

if (major < 0) {

printk(" can't register major number\n");

return major;

}

printk("register sucess /dev/led OK!\n");

led_class = class_create(THIS_MODULE, DEVICE_NAME);

if (IS_ERR(led_class))

return PTR_ERR(led_class);

led_class_devs = device_create(led_class, NULL, MKDEV(major, 0), NULL, "led");

if (unlikely(IS_ERR(led_class_devs)))

return PTR_ERR(led_class_devs);

printk(DEVICE_NAME " initialized\n");

return 0;

}

static void __exit led_exit(void)

{

unregister_chrdev(major, DEVICE_NAME);

device_unregister(led_class_devs);

class_destroy(led_class);

printk(" led rmmod OK!\n");

}

module_init(led_init);

module_exit(led_exit);

MODULE_LICENSE("GPL");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值