Here I have a Sitara AM335X with its latest SDK v05.05.00. I installed it and I'm able to compile my kernels.
However, I want to use the official RT patches from http://www.kernel.org/pub/linux/kernel/projects/rt/3.2/older/. Since kernel 3.2.0 is delivered with this SDK, I chose http://www.kernel.org/pub/linux/kernel/projects/rt/3.2/older/patch-3.2-rt10.patch.bz2 as the correct patch. With it, I patched my kernel sources - no errors here. After that, I checked if there are any problems by compiling this patched kernel. No problems, my board just boots fine.
Then I really wanted to use the new RT features, so I backed up ti-sdk-am335x-evm-05.05.00.00/board-support/linux-3.2.0-psp04.06.00.08.sdk/arch/arm/configs/tisdk_am335x-evm_defconfig and changed the option "CONFIG_PREEMPT_NONE=y" to "CONFIG_PREEMPT_RT_FULL=y".
If I now compile this, I get an error when compiling drivers/pwm/pwm.c:
...
CC drivers/pwm/pwm.o
drivers/pwm/pwm.c: In function 'pwm_set_frequency':
drivers/pwm/pwm.c:291:2: error: expected expression before 'do'
make[3]: *** [drivers/pwm/pwm.o] Error 1
make[2]: *** [drivers/pwm] Error 2
make[1]: *** [drivers] Error 2
make[1]: Leaving directory `/home/user/ti-sdk-am335x-evm-05.05.00.00/board-support/linux-3.2.0-psp04.06.00.08.sdk'
make: *** [linux] Error 2
This is the function near this line:
282 int pwm_set_frequency(struct pwm_device *p, unsigned long freq)
283 {
284 struct pwm_config c;
285
286 if (!freq)
287 return -EINVAL;
288
289 c.config_mask = BIT(PWM_CONFIG_PERIOD_TICKS),
290 c.period_ticks = pwm_ns_to_ticks(p, (NSEC_PER_SEC / freq)),
291 spin_lock(&p->pwm_lock);
292 p->period_ns = NSEC_PER_SEC / freq;
293 spin_unlock(&p->pwm_lock);
294 return pwm_config(p, &c);
295 }
296 EXPORT_SYMBOL(pwm_set_frequency);
So the error seems to be related with the call of spin_lock, which surely gets changed by the RT patch. Has anyone a hint for me? I'm quite new to this matter... :(
I appreciate any help!