This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

am335x uart驱动问题



要驱动六个uart,怎么在所给的内核源码的基础上进行修改,多谢各位帮忙。。。本人新手。。实在搞不懂了。。多谢

  • 理论上,这个在内核里面应该已经做好了,你可以在文件系统下查看一下ls /dev/ttyS0 - ttyS5或者ttyO0 - ttyO5

  • 您好!我用您说的命令查了一下,ttyS0-ttyS5是都存在的?然后呢?这样查看之后能说明什么?谢谢

  • 这个说明设备串口设备结点已经存在,内核可能已经支持了6个串口的驱动,所以串口驱动不需要做修改,应用程序中open()打开设备结点后,可以用write(),read()对串口进行操作了。

    不过不知道您还有没有其它的什么需求

  • 您好!这是运行命令后的截图:

    crw-------    1 root     tty      253,   0 Nov 20 06:34 ttyO0                   
    crw-rw----    1 root     dialout  253,   1 Jan  1  1970 ttyO1                   
    crw-rw----    1 root     dialout  253,   2 Jan  1  1970 ttyO2                   
    crw-rw----    1 root     dialout  253,   3 Jan  1  1970 ttyO3                   
    crw-rw----    1 root     dialout  253,   4 Jan  1  1970 ttyO4                   
    crw-rw----    1 root     dialout  253,   5 Jan  1  1970 ttyO5

    只有ttyO0在tty组,其他五个属于dialout组是什么意思?我们的板子硬件上只连了uart0,但是在board-am335x.c和serial.c中没有uart0的pinmux的设置

    board-am335x.c:

    /* Chipsee AM335x SOM */
    static struct evm_dev_cfg evm_chipsee_som_dev_cfg[] = {
        {mii1_init,    DEV_ON_BASEBOARD, PROFILE_ALL},
            {mmc0_init,     DEV_ON_BASEBOARD, PROFILE_ALL},
            {lcdc_init,     DEV_ON_BASEBOARD, PROFILE_ALL},
            {chipsee_backlight_init, DEV_ON_BASEBOARD, PROFILE_ALL},
            //{cap_tsc_init,     DEV_ON_BASEBOARD, PROFILE_ALL},
            {tsc_init,       DEV_ON_BASEBOARD, PROFILE_ALL},
            {gpio_led_init,  DEV_ON_BASEBOARD, PROFILE_ALL},
            {mcasp0_init,   DEV_ON_BASEBOARD, PROFILE_ALL},
            {chipsee_hmi_audio_init,   DEV_ON_BASEBOARD, PROFILE_ALL},
            {NULL, 0, 0},
    };

    serial.c:

    static void omap_serial_fill_default_pads(struct omap_board_data *bdata)
    {
        switch (bdata->id) {
        case 0:
            bdata->pads = default_uart1_pads;
            bdata->pads_cnt = ARRAY_SIZE(default_uart1_pads);
            break;
        case 1:
            bdata->pads = default_uart2_pads;
            bdata->pads_cnt = ARRAY_SIZE(default_uart2_pads);
            break;
        case 2:
            bdata->pads = default_uart3_pads;
            bdata->pads_cnt = ARRAY_SIZE(default_uart3_pads);
            break;
        case 3:
            if (cpu_is_omap44xx()) {
                bdata->pads = default_omap4_uart4_pads;
                bdata->pads_cnt =
                    ARRAY_SIZE(default_omap4_uart4_pads);
            } else if (cpu_is_omap3630()) {
                bdata->pads = default_omap36xx_uart4_pads;
                bdata->pads_cnt =
                    ARRAY_SIZE(default_omap36xx_uart4_pads);
            }
            break;
        default:
            break;
        }
    }

    这两个文件里都没有uart0的pin的设置。请问,它的pin在哪里设置的?多谢

  • 在arch\arm\mach-omap2\mux33xx.c的文件内,有

    static struct omap_mux am33xx_muxmodes

  • 打开楼上提到的文件,查找到你要设置的引脚,然后在board-am335xevm.c中设置pinmux,比如这个将gpio1_31设置为普通的gpio:

    static struct pinmux_config my_pin_mux[] = { {"gpmc_csn2.gpio1_31", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, {NULL, 0}, };

  • 你好,不知你的六个串口是否都能使用了,我现在也遇到这个问题?你解决了的话,能否告知是怎样解决的?