-
Notifications
You must be signed in to change notification settings - Fork 14
KernelPwmModule
En esta página se explica el procedimiento a seguir para generar un kernel que soporte el módulo de PWM:
Las secciones sobre como instalar OpenEmbedded & Bitbake y como compilar el kernel se pueden reemplazar por descargar este archivo:
Kernel Para Beagleboard con PWM
-
A la partición /boot deben ir (cambiar nombres de archivos para matchear los siguientes):
-
MLO
-
u-boot.bin
-
uImage
-
A la otra partición va el root file system.
sudo tar -C /media/Narcissus-rootfs/ -xvf ~/Angstrom-console-image-beagleboard.rootfs.tar.bz2
Una vez que tenemos todo el software listo, hay que editar la configuración del kernel que vamos a compilar para que soporte el módulo PWM.
- Editar
${OE_BASE}/sources/openembedded/recipes/linux/linux-omap-psp-2.6.32/beagleboard/defconfig
para que verifique:
# CONFIG_OMAP_RESET_CLOCKS is not set
CONFIG_OMAP_MCBSP=y
CONFIG_OMAP_MBOX_FWK=m
NOTA: Yo no tuve que cambiar el MCBSP, ya estaba como lo necesitaba.
- Generar uImage, u-boot.bin, MLO y el root filesystem:
cd ${OE_BASE}/build
bitbake console-image
Los archivos de interés deberían estar en ${OE_BASE}/build/tmp/deploy/glibc/images/beagleboard/
.
- Proceder como en BeagleSDBoot pero usando los nuevos uImage, u-boot.bin y MLO. (En realidad no tiene sentido hacer esto ahora, mejor después de completar la próxima etapa).
A esta altura ya se dispone de un kernel capaz de correr el módulo para PWM. Falta tener el módulo. Los archivos necesarios para compilar el módulo deberían haber sido generados al ejecutar bitbake console-image
y deberían encontrarse en ${OE_BASE}/build/tmp/sysroots/beagleboard-angstrom-linux-gnueabi/kernel
-
Descargar el repositorio con el PWM:
$ git clone git://github.com/scottellis/omap3-pwm $ cd omap3-pwm
-
El branch que tiene la versión para 4 canales:
$ git checkout -b four-channel origin/four-channel
-
Editar el archivo que le indica al Makefile donde debe buscar las cosas. Yo solamente tuve que setear OETMP:
OETMP=${OE_BASE}/build/tmp-angstrom_2008_1
En el oe nuevo sería ${OE_BASE}/build/tmp-angstrom_2010_x-eglibc
, creo.
-
Incorporar los cambios a beagleboard-source-me.txt:
$ source beagleboard-source-me.txt
-
Compilar el módulo:
$ make
-
Copiar el módulo al beagleboard. Dos métodos:
- Conectar la tarjeta SD a la pc y copiar el archivo a /home/root/ (o a cualquier otro lugar dentro de la partición ext3 (la que no es boot)).
- Conectar mediante ssh al beagleboard y ejecutar:
scp tu_usuario_en_tu_pc@192.168.0.200:~/\/pwm.ko .
NOTA: El '.' al final va, es para indicar que querés copiar el archivo a la carpeta actual.
-
Asumiendo que el módulo se encuentra en
/home/root/pwm.ko
, levantar el módulo:insmod /home/root/pwm.ko
-
Usar el módulo:
NOTA: Un pulso de 1500us se genera escribiendo 15000, uno pulso de 1500.1us escribiendo 15001 (super trivial...). Para cambiar la frecuencia hay que sacar el módulo y ponerlo de nuevo:root@beagleboard:
# cat /dev/pwm11 PWM11 Frequency 50 Hz Duty Cycle 99% root@beagleboard:# echo 1500 > /dev/pwm11 root@beagleboard:# cat /dev/pwm10 PWM10 Frequency 50 Hz Duty Cycle 7% root@beagleboard:# echo 320001 > /dev/pwm11 root@beagleboard:# cat /dev/pwm11 PWM10 Frequency 50 Hz Duty Cycle 11%NOTA: Es probable que haya que iniciar en una frecuencia mayor a la que usa por defecto, ya que al escribir valores muy grandes creo que hay un problema de overflow, entonces no es posible generar ciclos de trabajo de más de 20% a 50Hz (la frecuencia por defecto).root@beagleboard:# rmmod /home/root/pwm.ko root@beagleboard:
# insmod /home/root/pwm.ko frequency=2048 root@beagleboard:# cat /dev/pwm10 PWM10 Frequency 2048 Hz Stopped
Para verificar que el pwm está funcionando se puede usar un osciloscopio.
Se escribe a /dev/pwm#
el valor en micro segundos que se desea para la parte activa del ciclo.
El mapeo es el siguiente:
- pwm8 - falta implementar el mux (si se puede...)
- pwm9 - pin 4
- pwm10 - pin 10
- pwm11 - pin 6