- 论坛徽章:
- 0
|
//myled.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define DEVICE_NAME "leds"
#define LED_MAJOR 251
static unsigned long led_table [] = {
S3C2410_GPB5,
S3C2410_GPB6,
S3C2410_GPB7,
S3C2410_GPB8,
};
static unsigned int led_cfg_table [] = {
S3C2410_GPB5_OUTP,
S3C2410_GPB6_OUTP,
S3C2410_GPB7_OUTP,
S3C2410_GPB8_OUTP,
};
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 sbc2440_leds_fops = {
.owner = THIS_MODULE,
.ioctl = sbc2440_leds_ioctl,
};
static int __init sbc2440_leds_init(void)
{
int ret;
int i;
ret = register_chrdev(LED_MAJOR, DEVICE_NAME, &sbc2440_leds_fops);
if (ret
devfs_mk_cdev(MKDEV(LED_MAJOR, 0), S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP, DEVICE_NAME);
for (i = 0; i
printk(DEVICE_NAME " initialized\n");
return 0;
}
static void __exit sbc2440_leds_exit(void)
{
devfs_remove(DEVICE_NAME);
unregister_chrdev(LED_MAJOR, DEVICE_NAME);
}
module_init(sbc2440_leds_init);
module_exit(sbc2440_leds_exit);
///创建节点
//mknod myled c 251 0
ifneq ($(KERNELRELEASE),)
obj-m :=myled.o
else
KERNELDIR = /opt/FriendlyARM/QQ2440/kernel-2.6.13
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *.o
endif
#include
#include
#include
#include
int main(int argc, char **argv)
{
int on;
int led_no;
int fd;
if (argc != 3 || sscanf(argv[1], "%d", &led_no) != 1 || sscanf(argv[2],"%d", &on) != 1 ||
on 1 || led_no 3) {
fprintf(stderr, "Usage: leds led_no 0|1\n");
exit(1);
}
fd = open("/dev/myled", 0);
if (fd
CROSS=arm-linux-
all: led
led:
$(CROSS)gcc -o led main.c
clean:
@rm -vf led *.o *~
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/68521/showart_680772.html |
|