Necesitaba el puerto UART de mi ODROID-N2 para trabajar con una tasa de baudios no estándar y así poder usar MIDI. Edité el código del driver UART para fijar la velocidad de baudios en 31250 cuando configuré la tasa de baudios en 38400, luego escribí el código de prueba usando wiringPi y medí la tasa de baudios.
Driver UART después de editarlo
linux/drivers/amlogic/uart/meson_uart.c static void meson_uart_change_speed(struct uart_port *port, unsigned long baud) { u32 val; struct meson_uart_port *mup = to_meson_port(port); struct platform_device *pdev = to_platform_device(port->dev); while (!(readl(port->membase + AML_UART_STATUS) & AML_UART_TX_EMPTY)) cpu_relax(); #ifdef UART_TEST_DEBUG if (port->line != 0) baud = 115200; #endif // this part is added. // trace_printk() is not neccesarry, it is just for debugging. trace_printk("Your baudrate: %ld\n", baud); if(baud == 38400) { baud = 31250; trace_printk("Change to %ld\n", baud); }Ref. de compilación del kernel de Linux: https://wiki.odroid.com/odroid-n2/softw ... ing_kernel
Cambios de la sección de instalación
- arch/arm64/boot/Image -> arch/arm64/boot/Image.gz
- arch/arm64/boot/dts/meson64_odroidn2.dtb -> arch/arm64/boot/dts/amlogic/meson64_odroidn2.dtb
Codigó de Prueba
#include #include int main(void) { int fd1, fd2; fd1 = serialOpen("/dev/ttyS1", 38400); fd2 = serialOpen("/dev/ttyS2", 38400); serialPutchar(fd1, 0xAA); // 10101010 serialPutchar(fd1, 0xAA); int count = 0; while(1) { if(serialDataAvail(fd2)) { printf("%c", serialGetchar(fd2)); count++; if(count == 2) { break; } } } serialClose(fd1); serialClose(fd2); }
Depuración con ftrace
root@odroid:/home/odroid# stty -F /dev/ttyS0 38400 root@odroid:/home/odroid# cat /sys/kernel/debug/tracing/trace # tracer: function_graph # # CPU DURATION FUNCTION CALLS # | | | | | | | ... 0) | uart_set_termios() { 0) | uart_change_speed.isra.2() { 0) | meson_uart_set_termios() { 0) 0.875 us | uart_get_baud_rate(); 0) | /* Your baudrate: 38400 */ 0) | /* Change to 31250 */ 0) 0.250 us | uart_update_timeout();Si tienes pensado realizar una compilación cruzada, la secuencia es la siguiente:
- Instalar paquetes requeridos
- Toolchain (6.3.1)
- Checkout(Linux tab)
- <- edit driver
- Compile(Basic tab)
- Installation(Linux tab)
Para comentarios, preguntas y sugerencias, visita el post original de los foros ODROID en https://forum.odroid.com/viewtopic.php?f=180&t=36540.
Be the first to comment