1.makefile:2: * 遗漏分隔符 。 停止
2.make: 没有什么可以做的为 `modules’。
text.c文件
#include<linux/kernel.h>
#include<linux/module.h>
#include<linux/init.h>
#include <linux/miscdevice.h>
#include <linux/types.h>
#include <linux/ioctl.h>
#include <linux/cdev.h>
#include <linux/delay.h>
#include <linux/gpio.h>
#include <linux/errno.h>
#include <linux/fs.h>
#include <linux/init.h>
#define CORE_LED (1*32 + 7) //硬件上的一个led灯为goip1_7
#define DEVICE "led_core"
#define MAGIC_NUM 0xDB
#define MAGIC_SET_LOW _IO(MAGIC_NUM,0)
#define MAGIC_SET_HIGH _IO(MAGIC_NUM,1)
int led_open(struct inode *inode, struct file *file)
{
int ret;
ret = gpio_request_one(CORE_LED,
(GPIOF_DIR_OUT|GPIOF_OUT_INIT_HIGH),"core_led");
if(ret)
{
printk("Error: cannot request gpio CORE_LED. \n");
printk("Error ret = %d but still can be manipulated. \n", ret);
}
gpio_set_value(CORE_LED,1);
return 0;
}
int led_release(struct inode *inode, struct file *filp)
{
gpio_free(CORE_LED);
printk("GPIO LED dev release. \n");
return 0;
}
long led_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
switch(cmd)
{
case MAGIC_SET_LOW:
printk("GPIO LED set low.\n");
gpio_set_value(CORE_LED,0);
break;
case MAGIC_SET_HIGH:
printk("GPIO LED set high.\n");
gpio_set_value(CORE_LED,1);
break;
default:
printk("ERROR unvalid cmd.\n");
break;
}
return 0;
}
struct file_operations led_fops ={
.owner = THIS_MODULE,
.open = led_open,
.release = led_release,
.unlocked_ioctl = led_ioctl,
};
struct miscdevice led_dev ={
.minor = MISC_DYNAMIC_MINOR,
.name = DEVICE,
.fops = &led_fops,
};
static int led_init(void)
{
int ret;
ret = misc_register(&led_dev);
if (ret)
{
printk("Error: cannot register misc. \n");
return ret;
}
printk("misc-register %s\n",DEVICE);
return 0;
}
static void led_exit(void)
{
misc_deregister(&led_dev);
printk("misc-deregister %s\n",DEVICE);
}
module_init(led_init);
module_exit(led_exit);
MODULE_LICENSE("GPL");
在该目录下建立Makefile文件
ifneq ($(KERNELRELEASE),)
obj-m := zyr-hello.o
else
KDIR :=/home/zyr/Source_code/linux-3.14.65/
all:
make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers *.order
endif
出现上面的两个原因是因为复制makefile的时候格式出现错误,把有空格的地方需要tab键进行空格!
参考:http://blog.163.com/liuxin_arm/blog/static/18329142320138275217364/
https://www.cnblogs.com/BigOBlue/p/7071476.html