2440开发板将串口2的修改为普通串口


开发环境:

主机环境:VMare下CentOS 5.5

linux版本:linux-3.0-rc4


1.背景

Linux内核默认把UART2的功能设置为红外通讯(Irda),没有作为正常串口使用,如果我们想要将UART2作为串口,此时,串口2是无法收发数据的,因此需要做相应的修改。
其寄存器部分寄存器的说明如下:

2.修改平台配置文件

2.1 修改mach-smdk2440.c

打开arch/arm/mach-s3c2440/mach-smdk2440.c(注意不同的平台mach-smdk2440.c文件有可能有略微的区别)
修改代码如下:

static struct s3c2410_uartcfg smdk2440_uartcfgs[] __initdata = {
[0] = {
    .hwport      = 0,
    .flags       = 0,
    .ucon        = 0x3c5,
    .ulcon       = 0x03,
    .ufcon       = 0x51,
},
[1] = {
    .hwport      = 1,
    .flags       = 0,
    .ucon        = 0x3c5,
    .ulcon       = 0x03,
    .ufcon       = 0x51,
},
/* IR port */
[2] = {
    .hwport      = 2,
    .flags       = 0,
    .ucon        = 0x3c5,
//  .ulcon       = 0x43,
    .ulcon       = 0x03,
    .ufcon       = 0x51,
}
};

2.2 修改samsung.c

打开drivers/tty/serial/samsung.c文件(不同内核版本可能文件位置略有不同)。
加上如下代码:

if (port->line == 2) {
    s3c2410_gpio_cfgpin(S3C2410_GPH(6), S3C2410_GPH6_TXD2);
    s3c2410_gpio_pullup(S3C2410_GPH(6), 1);
    s3c2410_gpio_cfgpin(S3C2410_GPH(7), S3C2410_GPH7_RXD2);
    s3c2410_gpio_pullup(S3C2410_GPH(7), 1);
}

S3C2410_GPH(6),S3C2410_GPH(7)等宏定义在mach/regs-gpio.h。需要包含该文件。有的内核版本是S3C2410_GPH6,S3C2410_GPH7,应根据具体情况修改。
加上头文件:

#include<linux/gpio.h>
#include<mach/regs-gpio.h>

3.修改配置文件

确认相应驱动被被编译进内核makemenuconfig

DivicesDrivers->Characterdevices->SerialDrivers->选中

<*>SansungSoC serial support

<*>Samsungs3c2410 serial port support

<*>SamsungS3C2440/S3C2442/S3c2416 serial port support

保存退出,重新编译内核,下载到开发板。

4.测试

运行测试程序后,有以下警告。好像是回溯信息,折腾了好久,没有去掉,就放着了。


参考文献:

https://wenku.baidu.com/view/1b26fc0eba1aa8114431d9f3.html
http://blog.csdn.net/fyyy4030/article/details/7243998
http://www.linuxidc.com/Linux/2011-09/43690.htm


原文地址:https://www.cnblogs.com/boyiliushui/p/6681887.html