这次我们点亮的是一个LED USER 1 也就是GPIO 1_22 , BBB中的GPIO 分4个group,每组有32个GPIO
所以我们用了一个宏定义 确认他的GPIO端口号,并且在我们的代码中使用了gpio.h 作为对GPIO的操作
#include <linux/module.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/device.h>
//#include <linux/leds.h>
#include <linux/gpio.h>
#include <linux/errno.h>
#include <linux/types.h>
#include <asm/uaccess.h>
#include <linux/miscdevice.h>
#include <linux/gpio.h>
#include <linux/poll.h>
#include <linux/cdev.h>
#include <linux/wait.h>
#include <linux/sched.h>
#include <linux/semaphore.h>
#include <linux/
timer.h>
#include <linux/j
IFfies.h>
#include <linux/kernel.h>
#include <linux/platform_device.h>
#define GPIO_TO_PIN(bank,gpio) bank*32+gpio
static const struct file_operations led_ops = {
.owner = THIS_MODULE,
};
static struct miscdevice led_dev = {
.name = "users_led",
.fops = &led_ops,
};
static int __init led_test_init(void)
{
misc_register(&led_dev);
if (gpio_request(GPIO_TO_PIN(1,22),"myled")){
printk("gpio is fail \n");
}
else{
gpio_direction_output(GPIO_TO_PIN(1,22),0);
printk("gpio is success \n");
}
gpio_set_value(GPIO_TO_PIN(1,22),1);
return 0;
}
static void __exit led_test_exit(void)
{
gpio_free(GPIO_TO_PIN(1,22));
misc_deregister(&led_dev);
}
module_init(led_test_init);
module_exit(led_test_exit);
MODULE_LICENSE("GPL");
这样就可以把LED 1给点亮了,是持续常亮。
当然这样只是在init中点亮很不符合我们的操作要求,一般我们会写一个应用程序去控制这个LED,如果去控制这个LED,下一节我们将去完善这个程序,并且将引入面向对象的思想