sbc2440_leds.c
Makefile
make modules
make -C /home/fown/kernel/kernel-2.6.13 M=/home/fown/ldd/leds modules
make[1]: Entering directory `/home/fown/kernel/kernel-2.6.13'
WARNING: Symbol version dump /home/fown/kernel/kernel-2.6.13/Module.symvers
is missing; modules will have no dependencies and modversions.
CC [M] /home/fown/ldd/leds/sbc2440_leds.o
Building modules, stage 2.
MODPOST
CC /home/fown/ldd/leds/sbc2440_leds.mod.o
LD [M] /home/fown/ldd/leds/sbc2440_leds.ko
make[1]: Leaving directory `/home/fown/kernel/kernel-2.6.13'
ledctrl.c
arm-linux-gcc -o ledctrl ledctrl.c
---------------------------------------------------
2440
---------------------------------------------------
insmod sbc2440_leds.ko
./ledctrl 3
#include
<
linux
/
config.h
>
#include < linux / module.h >
#include < linux / kernel.h >
#include < linux / fs.h >
#include < linux / init.h >
#include < linux / devfs_fs_kernel.h >
#include < linux / miscdevice.h >
#include < linux / delay.h >
#include < asm / irq.h >
#include < asm / arch / regs - gpio.h >
#include < asm / hardware.h >
#define DEVICE_NAME "leds2"
#define LED_MAJOR 233
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 < 0) {
printk(DEVICE_NAME " can't register major number ");
return ret;
}
devfs_mk_cdev(MKDEV(LED_MAJOR, 0), S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP, DEVICE_NAME);
for (i = 0; i < 4; i++) {
s3c2410_gpio_cfgpin(led_table[i], led_cfg_table[i]);
s3c2410_gpio_setpin(led_table[i], 1);
}
printk(DEVICE_NAME " initialized ");
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);
#include < linux / module.h >
#include < linux / kernel.h >
#include < linux / fs.h >
#include < linux / init.h >
#include < linux / devfs_fs_kernel.h >
#include < linux / miscdevice.h >
#include < linux / delay.h >
#include < asm / irq.h >
#include < asm / arch / regs - gpio.h >
#include < asm / hardware.h >
#define DEVICE_NAME "leds2"
#define LED_MAJOR 233
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 < 0) {
printk(DEVICE_NAME " can't register major number ");
return ret;
}
devfs_mk_cdev(MKDEV(LED_MAJOR, 0), S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP, DEVICE_NAME);
for (i = 0; i < 4; i++) {
s3c2410_gpio_cfgpin(led_table[i], led_cfg_table[i]);
s3c2410_gpio_setpin(led_table[i], 1);
}
printk(DEVICE_NAME " initialized ");
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);
Makefile
KERNELDIR
=/
home
/
fown
/
kernel
/
kernel
-
2.6
.
13
PWD := $(shell pwd)
INSTALLDIR =/ lib
CC =/ usr / local / arm / 3.4 . 1 / bin / arm - linux - gcc
obj - m := sbc2440_leds . o
modules :
$(MAKE) - C $(KERNELDIR) M = $(PWD) modules
modules_install :
cp sbc2440_leds . ko $(INSTALLDIR)
clean :
rm - rf *. o *~ core . depend .*. cmd *. ko *. mod . c . tmp_versions
. PHONY : modules modules_install clean
PWD := $(shell pwd)
INSTALLDIR =/ lib
CC =/ usr / local / arm / 3.4 . 1 / bin / arm - linux - gcc
obj - m := sbc2440_leds . o
modules :
$(MAKE) - C $(KERNELDIR) M = $(PWD) modules
modules_install :
cp sbc2440_leds . ko $(INSTALLDIR)
clean :
rm - rf *. o *~ core . depend .*. cmd *. ko *. mod . c . tmp_versions
. PHONY : modules modules_install clean
make modules
make -C /home/fown/kernel/kernel-2.6.13 M=/home/fown/ldd/leds modules
make[1]: Entering directory `/home/fown/kernel/kernel-2.6.13'
WARNING: Symbol version dump /home/fown/kernel/kernel-2.6.13/Module.symvers
is missing; modules will have no dependencies and modversions.
CC [M] /home/fown/ldd/leds/sbc2440_leds.o
Building modules, stage 2.
MODPOST
CC /home/fown/ldd/leds/sbc2440_leds.mod.o
LD [M] /home/fown/ldd/leds/sbc2440_leds.ko
make[1]: Leaving directory `/home/fown/kernel/kernel-2.6.13'
ledctrl.c
#include
<
stdio.h
>
#include < fcntl.h >
#include < linux / delay.h >
#include < unistd.h >
int main( int argc, char ** argv)
{
int fd;
int led_no;
sscanf(argv[1], "%d", &led_no);
fd = open("/dev/leds2", O_RDWR);
if (fd < 0)
{
perror("can't open device leds");
exit(1);
}
while(1)
{
ioctl(fd, 1, led_no);
printf("led:%d on", led_no);
usleep(50000); //sleep 50 ms
ioctl(fd, 0, led_no);
usleep(50000);
}
close(fd);
return 0;
}
#include < fcntl.h >
#include < linux / delay.h >
#include < unistd.h >
int main( int argc, char ** argv)
{
int fd;
int led_no;
sscanf(argv[1], "%d", &led_no);
fd = open("/dev/leds2", O_RDWR);
if (fd < 0)
{
perror("can't open device leds");
exit(1);
}
while(1)
{
ioctl(fd, 1, led_no);
printf("led:%d on", led_no);
usleep(50000); //sleep 50 ms
ioctl(fd, 0, led_no);
usleep(50000);
}
close(fd);
return 0;
}
arm-linux-gcc -o ledctrl ledctrl.c
---------------------------------------------------
2440
---------------------------------------------------
insmod sbc2440_leds.ko
./ledctrl 3