[Armadeus-commitlog] armadeus branch, master, updated. latestrelease-8-g6b6d324
Brought to you by:
sszy
|
From: Julien B a. A. <ar...@us...> - 2009-07-01 20:46:02
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "armadeus".
The branch, master has been updated
via 6b6d3241294db5cc462b2e54185508bff4d7b0d9 (commit)
from 59f0fd78578b431e960b339af119195dc0f0e833 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 6b6d3241294db5cc462b2e54185508bff4d7b0d9
Author: Julien Boibessot <jul...@ar...>
Date: Wed Jul 1 22:43:51 2009 +0200
[DEMOS] xenomai examples: cleanup + indent checking + allows non RT kernel examples to be compiled for APF27
-----------------------------------------------------------------------
Summary of changes:
target/demos/real_time/Makefile.in | 6 ++-
target/demos/real_time/README | 8 ++++
target/demos/real_time/common.h | 5 +-
target/demos/real_time/common_kernel.h | 15 +++++++-
.../linux/kernel/interrupt_linux_kernel.c | 12 ++++--
.../linux/user_space/interrupt_linux_us.c | 41 +++++++++++---------
.../xenomai/kernel/interrupt_xeno_kernel.c | 22 ++++++----
.../kernel/sleep_kernel/pulse_linux_kernel_sleep.c | 20 +++++++---
.../kernel/timer_kernel/pulse_linux_kernel_timer.c | 13 ++++--
.../kernel/rt_timer/pulse_xeno_kernel_rt_timer.c | 23 +++++++----
.../kernel/timer_kernel/pulse_xeno_kernel_timer.c | 23 +++++++----
11 files changed, 123 insertions(+), 65 deletions(-)
create mode 100644 target/demos/real_time/README
diff --git a/target/demos/real_time/Makefile.in b/target/demos/real_time/Makefile.in
index d64de71..3728d35 100644
--- a/target/demos/real_time/Makefile.in
+++ b/target/demos/real_time/Makefile.in
@@ -52,7 +52,9 @@ CLEANMOD := ${patsubst %, .%*, $(MODULES)}
PWD := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)
obj-m := $(OBJ)
-CLEAN_MOD= modules.order *.ko *.mod.c *.mod.o *.symvers $(CLEANMOD) .tmp_versions
+CLEAN_MOD= modules.order *.ko *.mod.c *.mod.o *.symvers $(CLEANMOD)
+CLEAN_MOD+= .tmp_versions Module.markers
+
$(EXEC): $(MODULES).c
$(MAKE) -C $(KSRC) SUBDIRS=$(PWD) modules
@@ -60,8 +62,10 @@ $(EXEC): $(MODULES).c
install: $(EXEC)
cp $(EXEC) $(DEST_DIR)/$(EXEC)
endif
+
.PHONY: all
all: $(EXEC)
+
.PHONY: clean
clean:
rm -rf $(OBJ) $(CLEAN_MOD)
diff --git a/target/demos/real_time/README b/target/demos/real_time/README
new file mode 100644
index 0000000..545e5da
--- /dev/null
+++ b/target/demos/real_time/README
@@ -0,0 +1,8 @@
+
+fractal/: Linux application to put the system under heavy load
+
+pulse/: example which generates a square signal on an i.MX GPIO with
+ different means (timer, sleep)
+
+interrupt:/ example which toggles an i.MX GPIO when it receives an interrupt
+ on an other GPIO
diff --git a/target/demos/real_time/common.h b/target/demos/real_time/common.h
index 517567d..dc537f9 100644
--- a/target/demos/real_time/common.h
+++ b/target/demos/real_time/common.h
@@ -1,13 +1,12 @@
#ifndef COMMON_H
#define COMMON_H
-#define INTERRUPT_OUTPUT_PORT 9
-#define INTERRUPT_INPUT_PORT 6
+/* Common defines used in userspace applications */
+
#define INTERRUPT_OUTPUT_DEV "/dev/gpio/PA9"
#define INTERRUPT_INPUT_DEV "/dev/gpio/PA6"
#define PULSE_OUTPUT_DEV "/dev/gpio/PA4"
-#define PULSE_OUTPUT_PORT 4
#define TIMESLEEP 10000
#define TASK_PRIO 99 /* Highest RT priority */
diff --git a/target/demos/real_time/common_kernel.h b/target/demos/real_time/common_kernel.h
index 8459827..b3fa34b 100644
--- a/target/demos/real_time/common_kernel.h
+++ b/target/demos/real_time/common_kernel.h
@@ -1,8 +1,21 @@
#ifndef COMMON_KERNEL_H
#define COMMON_KERNEL_H
+
+/* Common defines used in kernel drivers */
+
#include <asm/gpio.h>
+#ifdef CONFIG_ARCH_MX2
+#include <mach/iomux-mx1-mx2.h>
+#endif
+
#include "common.h"
-#define INTERRUPT_INPUT_NB IRQ_GPIOA(INTERRUPT_INPUT_PORT)
+
+#define INTERRUPT_OUTPUT_GPIO (GPIO_PORTA | 9)
+
+#define INTERRUPT_INPUT_GPIO (GPIO_PORTA | 6)
+#define INTERRUPT_INPUT_NB IRQ_GPIOA(6)
+
+#define PULSE_OUTPUT_GPIO (GPIO_PORTA | 4)
#endif /* COMMON_KERNEL_H */
diff --git a/target/demos/real_time/interrupt/linux/kernel/interrupt_linux_kernel.c b/target/demos/real_time/interrupt/linux/kernel/interrupt_linux_kernel.c
index f529183..d6cc992 100644
--- a/target/demos/real_time/interrupt/linux/kernel/interrupt_linux_kernel.c
+++ b/target/demos/real_time/interrupt/linux/kernel/interrupt_linux_kernel.c
@@ -1,8 +1,9 @@
/*
-* Small linux kernel driver for handling interrupt
+* Small Linux driver for handling interrupt from a GPIO and toggling
+* an other one at each occurancy.
*
-* Copyright (C) 2009 <gwe...@ar...>
-* Armadeus Project / Armadeus Systems
+* Copyright (C) 2009 Armadeus Systems / Armadeus Project
+* Author: Gwenhael GOAVEC-MEROU <gwe...@ar...>
*
*
* This program is free software; you can redistribute it and/or modify
@@ -26,8 +27,10 @@
#include <linux/init.h>
#include <linux/interrupt.h>
#include <asm/gpio.h>
+
#include "../../../common_kernel.h"
+
MODULE_AUTHOR("Gwenhael GOAVEC MEROU");
MODULE_DESCRIPTION("irq kernel test");
MODULE_SUPPORTED_DEVICE("none");
@@ -38,8 +41,9 @@ static int iomask = 0x00;
/* irq handler */
static irqreturn_t test_interrupt_handler(int irqn, void *dev)
{
- imx_gpio_set_value(INTERRUPT_OUTPUT_PORT, iomask);
+ gpio_set_value(INTERRUPT_OUTPUT_GPIO, iomask);
iomask^=1;
+
return IRQ_HANDLED;
}
diff --git a/target/demos/real_time/interrupt/linux/user_space/interrupt_linux_us.c b/target/demos/real_time/interrupt/linux/user_space/interrupt_linux_us.c
index 1e77b11..1df2516 100644
--- a/target/demos/real_time/interrupt/linux/user_space/interrupt_linux_us.c
+++ b/target/demos/real_time/interrupt/linux/user_space/interrupt_linux_us.c
@@ -1,8 +1,9 @@
/*
-* linux userspace apps for handling interrupts
+* Linux userspace app for handling "interrupts" on a GPIO device descriptor
+* (with blocking read) and toggling an other GPIO at each occurancy.
*
-* Copyright (C) 2009 <gwe...@ar...>
-* Armadeus Project / Armadeus Systems
+* Copyright (C) 2009 Armadeus Systems / Armadeus Project
+* Author: <gwe...@ar...>
*
*
* This program is free software; you can redistribute it and/or modify
@@ -28,42 +29,46 @@
#include <fcntl.h>
#include <signal.h>
#include <unistd.h>
+
#include "../../../common.h"
-int main (int argc, char **argv)
+
+int main(void)
{
- int fd_input,fd_output, retval = 0, iomask=0x00;
+ int fd_input, fd_output, retval = 0, iomask=0x00;
+ char c;
- // Open gpio file device for communication;
+ /* Open GPIO device for communication */
fd_input = open (INTERRUPT_INPUT_DEV, O_RDONLY);
if (fd_input < 0) {
- printf ("Open Failed : %s\n",INTERRUPT_INPUT_DEV);
+ printf ("Open Failed : %s\n", INTERRUPT_INPUT_DEV);
exit (EXIT_FAILURE);
}
fd_output = open(INTERRUPT_OUTPUT_DEV, O_RDWR);
if (fd_output < 0) {
- printf("Open Failed : %s\n",INTERRUPT_OUTPUT_DEV);
+ printf("Open Failed : %s\n", INTERRUPT_OUTPUT_DEV);
exit (EXIT_FAILURE);
}
- // set this process as owner of device file
- retval = fcntl (fd_input, F_SETOWN, getpid ());
+ /* Set this process as owner of device file */
+ retval = fcntl(fd_input, F_SETOWN, getpid());
if (retval < 0) {
- printf ("F_SETOWN fails \n");
+ printf ("F_SETOWN fails for%s\n", INTERRUPT_INPUT_DEV);
return EXIT_FAILURE;
}
retval = fcntl(fd_output, F_SETOWN, getpid());
if (retval < 0) {
- printf("F_SETOWN fails for %s\n",INTERRUPT_OUTPUT_DEV);
+ printf("F_SETOWN fails for %s\n", INTERRUPT_OUTPUT_DEV);
return EXIT_FAILURE;
}
- char c;
- while (1) {
+
+ while(1) {
read (fd_input, &c, 1);
- write(fd_output, &iomask,sizeof(iomask));
- iomask ^=1;// (iomask == 0x00)?0x01:0x00;
+ write(fd_output, &iomask, sizeof(iomask));
+ iomask ^=1;/* (iomask == 0x00)?0x01:0x00; */
}
- close (fd_input);
- close (fd_output);
+ close(fd_input);
+ close(fd_output);
+
exit (EXIT_SUCCESS);
}
diff --git a/target/demos/real_time/interrupt/xenomai/kernel/interrupt_xeno_kernel.c b/target/demos/real_time/interrupt/xenomai/kernel/interrupt_xeno_kernel.c
index 8cc4edd..368d6ae 100644
--- a/target/demos/real_time/interrupt/xenomai/kernel/interrupt_xeno_kernel.c
+++ b/target/demos/real_time/interrupt/xenomai/kernel/interrupt_xeno_kernel.c
@@ -1,8 +1,9 @@
/*
-* Small xenomai kernel driver for handling interrupt
+* Small xenomai kernel driver for handling interrupt from a GPIO and toggling
+* an other GPIO at each occurancy
*
-* Copyright (C) 2009 <gwe...@ar...>
-* Armadeus Project / Armadeus Systems
+* Copyright (C) 2009 Armadeus Systems / Armadeus Project
+* Author: <gwe...@ar...>
*
*
* This program is free software; you can redistribute it and/or modify
@@ -37,24 +38,27 @@ static int iomask;
static int irq_server (xnintr_t *intr)
{
- imx_gpio_set_value(INTERRUPT_OUTPUT_PORT, iomask);
+ gpio_set_value(INTERRUPT_OUTPUT_GPIO, iomask);
iomask^=1;
+
return RT_INTR_HANDLED;
}
-static int __init irq_init(void)
+static int __init irq_init(void)
{
int err;
+
iomask = 0x00;
/* Version With 6 param only on kernel space */
- err = rt_intr_create(&intr_desc,"MyIrq", INTERRUPT_INPUT_NB, irq_server, NULL, 0);
- if (err !=0){
+ err = rt_intr_create(&intr_desc, "MyIrq", INTERRUPT_INPUT_NB, irq_server, NULL, 0);
+ if (err != 0) {
printk("rt_intr_create : error\n");
return err;
}
- err = rt_intr_enable(&intr_desc);
+ err = rt_intr_enable(&intr_desc);
if (err == 0)
- printk("rt_intr_create : ok\n");
+ printk("rt_intr_create : ok\n";
+
return err;
}
diff --git a/target/demos/real_time/pulse/linux/kernel/sleep_kernel/pulse_linux_kernel_sleep.c b/target/demos/real_time/pulse/linux/kernel/sleep_kernel/pulse_linux_kernel_sleep.c
index 6b95ecc..1f6439b 100644
--- a/target/demos/real_time/pulse/linux/kernel/sleep_kernel/pulse_linux_kernel_sleep.c
+++ b/target/demos/real_time/pulse/linux/kernel/sleep_kernel/pulse_linux_kernel_sleep.c
@@ -28,6 +28,7 @@
#include <linux/delay.h>
#include <linux/timer.h>
#include <asm/gpio.h>
+
#include "../../../../common_kernel.h"
MODULE_AUTHOR("Gwenhael GOAVEC MEROU");
@@ -38,27 +39,33 @@ MODULE_LICENSE("GPL");
struct task_struct *th;
/* thread fonction */
-int fct_thread_sleep(void *data) {
+int fct_thread_sleep(void *data)
+{
int iomask=1;
int timesleep = TIMESLEEP/1000;
+
do {
- imx_gpio_set_value(PULSE_OUTPUT_PORT, iomask);
+ gpio_set_value(PULSE_OUTPUT_GPIO, iomask);
iomask^=1;
msleep(timesleep);
- }while (!kthread_should_stop());
+ } while (!kthread_should_stop());
+
return 0;
}
/* loading (insmod) */
-static int __init blink_init(void) {
- th = kthread_create(fct_thread_sleep,NULL,"pulse_linux_kernel_thread_sleep");
+static int __init blink_init(void)
+{
+ th = kthread_create(fct_thread_sleep, NULL, "pulse_linux_kernel_thread_sleep");
wake_up_process(th);
+
return 0;
}
/* unloading (rmmod) */
-static void __exit blink_exit(void) {
+static void __exit blink_exit(void)
+{
printk(KERN_INFO "blink_exit\n");
kthread_stop(th);
}
@@ -66,3 +73,4 @@ static void __exit blink_exit(void) {
/* API Linux devices */
module_init(blink_init);
module_exit(blink_exit);
+
diff --git a/target/demos/real_time/pulse/linux/kernel/timer_kernel/pulse_linux_kernel_timer.c b/target/demos/real_time/pulse/linux/kernel/timer_kernel/pulse_linux_kernel_timer.c
index ad4ebe1..d75562d 100644
--- a/target/demos/real_time/pulse/linux/kernel/timer_kernel/pulse_linux_kernel_timer.c
+++ b/target/demos/real_time/pulse/linux/kernel/timer_kernel/pulse_linux_kernel_timer.c
@@ -1,5 +1,5 @@
/*
-* linux kernel driver for generation signal with timer
+* Linux kernel driver for generating a signal with timer (GPIO toggling)
*
* Copyright (C) 2009 <gwe...@ar...>
* Armadeus Project / Armadeus Systems
@@ -40,15 +40,17 @@ static int iomask = 0x00;
static struct timer_list mt;
#define TS HZ/100
/* timer callback*/
-void fonctionTimer(unsigned long arg) {
- imx_gpio_set_value(PULSE_OUTPUT_PORT, iomask);
+void fonctionTimer(unsigned long arg)
+{
+ gpio_set_value(PULSE_OUTPUT_GPIO, iomask);
iomask^=1;
mt.expires = jiffies+TS;
add_timer(&mt);
}
/* loading (insmod) */
-static int __init blink_init(void) {
+static int __init blink_init(void)
+{
current->state = TASK_INTERRUPTIBLE;
init_timer(&mt);
mt.expires = jiffies + TS;
@@ -61,7 +63,8 @@ static int __init blink_init(void) {
}
/* unloading (rmmod) */
-static void __exit blink_exit(void) {
+static void __exit blink_exit(void)
+{
printk(KERN_INFO "blink_exit\n");
del_timer(&mt);
}
diff --git a/target/demos/real_time/pulse/xenomai/kernel/rt_timer/pulse_xeno_kernel_rt_timer.c b/target/demos/real_time/pulse/xenomai/kernel/rt_timer/pulse_xeno_kernel_rt_timer.c
index edf0020..ea91d19 100644
--- a/target/demos/real_time/pulse/xenomai/kernel/rt_timer/pulse_xeno_kernel_rt_timer.c
+++ b/target/demos/real_time/pulse/xenomai/kernel/rt_timer/pulse_xeno_kernel_rt_timer.c
@@ -35,17 +35,19 @@ MODULE_LICENSE("GPL");
RT_TASK blink_task;
static int end = 0;
-void blink(void *arg){
+void blink(void *arg)
+{
int err, iomask;
+
printk(KERN_INFO "entering blink\n");
- if (imx_gpio_request(PULSE_OUTPUT_PORT, "blink") < 0) {
- gpio_free(PULSE_OUTPUT_PORT);
+ if (gpio_request(PULSE_OUTPUT_GPIO, "blink") < 0) {
+ gpio_free(PULSE_OUTPUT_GPIO);
return ;
}
- imx_gpio_direction_output(PULSE_OUTPUT_PORT,1);
+ gpio_direction_output(PULSE_OUTPUT_GPIO, 1);
- if ((err = rt_task_set_periodic(NULL, TM_NOW,rt_timer_ns2ticks(TIMESLEEP*1000)))){
+ if ((err = rt_task_set_periodic(NULL, TM_NOW, rt_timer_ns2ticks(TIMESLEEP*1000)))) {
printk("rt task set periodic failed \n");
return;
}
@@ -53,14 +55,15 @@ void blink(void *arg){
while(!end){
rt_task_wait_period(NULL);
- imx_gpio_set_value(PULSE_OUTPUT_PORT, iomask);
+ gpio_set_value(PULSE_OUTPUT_GPIO, iomask);
iomask^=1;
}
printk("end\n");
}
/* loading (insmod) */
-static int __init blink_init(void) {
+static int __init blink_init(void)
+{
printk(KERN_INFO "blink_init\n");
if (rt_task_create(&blink_task, "blink", 0, 99, 0)) {
printk("task create error\n");
@@ -70,16 +73,18 @@ static int __init blink_init(void) {
printk("task start error\n");
return -EBUSY;
}
+
return 0;
}
/* unloading (rmmod) */
-static void __exit blink_exit(void) {
+static void __exit blink_exit(void)
+{
end = 1;
printk(KERN_INFO "blink_exit\n");
rt_task_delete(&blink_task);
rt_timer_stop();
- gpio_free(PULSE_OUTPUT_PORT);
+ gpio_free(PULSE_OUTPUT_GPIO);
}
/* API kernel driver */
diff --git a/target/demos/real_time/pulse/xenomai/kernel/timer_kernel/pulse_xeno_kernel_timer.c b/target/demos/real_time/pulse/xenomai/kernel/timer_kernel/pulse_xeno_kernel_timer.c
index 7739dbc..9e718b3 100644
--- a/target/demos/real_time/pulse/xenomai/kernel/timer_kernel/pulse_xeno_kernel_timer.c
+++ b/target/demos/real_time/pulse/xenomai/kernel/timer_kernel/pulse_xeno_kernel_timer.c
@@ -35,36 +35,41 @@ MODULE_LICENSE("GPL");
static rtdm_task_t blink_task;
static int volatile end = 0;
-void blink(void *arg){
+void blink(void *arg)
+{
int iomask;
+
printk(KERN_INFO "entering blink\n");
iomask=0;
- while(!end){
+ while(!end) {
rtdm_task_wait_period();
- gpio_set_value(PULSE_OUTPUT_PORT, iomask);
+ gpio_set_value(PULSE_OUTPUT_GPIO, iomask);
iomask^=1;
}
printk("end\n");
}
/* module load (insmod) */
-static int __init blink_init(void) {
+static int __init blink_init(void)
+{
printk(KERN_INFO "blink_init\n");
- if (gpio_request(PULSE_OUTPUT_PORT, "blink") < 0) {
- gpio_free(PULSE_OUTPUT_PORT);
+ if (gpio_request(PULSE_OUTPUT_GPIO, "blink") < 0) {
+ gpio_free(PULSE_OUTPUT_GPIO);
return -EBUSY;
}
- gpio_direction_output(PULSE_OUTPUT_PORT,1);
+ gpio_direction_output(PULSE_OUTPUT_GPIO, 1);
+
return rtdm_task_init(&blink_task, "blink", blink, NULL,
99, TIMESLEEP*1000);
}
/* module unload (rmmod) */
-static void __exit blink_exit(void) {
+static void __exit blink_exit(void)
+{
end = 1;
printk(KERN_INFO "blink_exit\n");
rtdm_task_join_nrt(&blink_task,1000);
- gpio_free(PULSE_OUTPUT_PORT);
+ gpio_free(PULSE_OUTPUT_GPIO);
}
/* API kernel driver */
hooks/post-receive
--
armadeus
|