ok6410 led 驱动 +自编测试程序 通过喽
#include <linux/miscdevice.h>#include <linux/delay.h>#include <asm/irq.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 <asm/uaccess.h>#include <asm/atomic.h>#include <asm/unistd.h>#include <mach/map.h>#include <mach/regs-clock.h>#include <mach/regs-gpio.h>#include <plat/gpio-cfg.h>#include <mach/gpio-bank-e.h>#include <mach/gpio-bank-m.h>#define DEVICE_NAME "leds"/*cmd : 0 :open 1: closearg : 0-3 led1 -led4*/static long s3c6410_leds_ioctl(struct file *filp, unsigned int cmd, unsigned long arg){ switch(cmd) { unsigned tmp; case 0: case 1: if (arg > 3) { return -EINVAL; } tmp = readl(S3C64XX_GPMDAT); if(cmd==0) //open led { tmp &= (~(1<<arg)); } else//close led { tmp |= (1<<arg); } writel(tmp,S3C64XX_GPMDAT); return 0; default: return -EINVAL; }}static struct file_operations dev_fops = { .owner = THIS_MODULE, .unlocked_ioctl = s3c6410_leds_ioctl,};static struct miscdevice misc = { .minor = MISC_DYNAMIC_MINOR, .name = DEVICE_NAME, .fops = &dev_fops,};static int __init dev_init(void){ int ret; unsigned tmp; //gpm0-3 pull up tmp = readl(S3C64XX_GPMPUD); tmp &= (~0xFF); tmp |= 0xaa; writel(tmp,S3C64XX_GPMPUD); //gpm0-3 output mode tmp =readl(S3C64XX_GPMCON); tmp &= (~0xFFFF); tmp |= 0x1111; writel(tmp,S3C64XX_GPMCON); //gpm0-3 output 0why not open the led?? tmp = __raw_readl(S3C64XX_GPMDAT); tmp |= 0x10; //low 4bit =0000; writel(tmp,S3C64XX_GPMDAT); ret = misc_register(&misc); return ret;}static void __exit dev_exit(void){ misc_deregister(&misc);}module_init(dev_init);module_exit(dev_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("jack sun");#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <sys/ioctl.h>#include <time.h>#include <sys/time.h>#define LED_OPEN 0#define LED_CLOSE 1int main(){int fd; fd = open("/dev/leds", 0);if (fd < 0) { perror("open device leds error"); exit(1); }while(1){ ioctl(fd,LED_OPEN,0);//led1 open ioctl(fd,LED_CLOSE,1);//led2 close ioctl(fd,LED_OPEN,2);//led3 open ioctl(fd,LED_CLOSE,3);//led4 close usleep(1000000); ioctl(fd,LED_CLOSE,0);//led1 open ioctl(fd,LED_OPEN,1);//led2 close ioctl(fd,LED_CLOSE,2);//led3 open ioctl(fd,LED_OPEN,3);//led4 close usleep(1000000);} close(fd); return 0;}
后台运行:./led_text2 qws&
楼主,没有makefile,也可以运行?初学提问
页:
[1]