hi3531 添加uart3

来源:互联网 发布:豫广网络维修电话 编辑:程序博客网 时间:2024/06/06 12:33

基于设备总线驱动模型

在hi3531的linux内核中串口驱动和设备是挂在AMBA总线下的,其驱动程序文件为drivers/serial/amba-pl011.c,在linux内核配置中默认是使能该驱动的,如果没有则:make menuconfig -> Character devices ->Serial drives中使能,必须使能该驱动才能使用串口tty设备


上面介绍串口驱动的使能,下面添加amba总线上的串口设备

linux-3.0.y\arch\arm\mach-godnet\core.c文件下



这两个是添加uart0 1的amba总线设备数据结构体
HIL_AMBA_DEVICE(uart0, "uart:0",  UART0,    NULL);  
HIL_AMBA_DEVICE(uart1, "uart:1",  UART1,    NULL);

HIL_AMBA_DEVICE(uart2, "uart:2",  UART2,    NULL);

HIL_AMBA_DEVICE(uart3, "uart:3",  UART3,    NULL);



static void  uart_clk_init(unsigned long busclk)                                                  
{                                                                                                 
        uart_clk.rate = busclk/2;                                                                                                                                                           
       lookups[0].dev_id = "uart:0";                                                             
       lookups[0].clk = &uart_clk;                                                               
       lookups[1].dev_id = "uart:1";                                                             
        lookups[1].clk = &uart_clk;                                                               
        lookups[2].dev_id = "uart:2";                                                             
        lookups[2].clk = &uart_clk;                                                               
        lookups[3].dev_id = "uart:3";                                                             
        lookups[3].clk = &uart_clk;                                                               
 }   



下面看下宏定义:

其实就是amba设备数据结构体赋值

#define HIL_AMBA_DEVICE(name, busid, base, platdata)               \
static struct amba_device HIL_AMBADEV_NAME(name) =              \
{.dev            = {                                     \

.coherent_dma_mask = ~0,                        \

                                                /*用来设置设备在总线上的名字*/
.init_name = busid,                              \

                                               /*给平台总线设备赋值私有数据*/
.platform_data = platdata,                      \
},                                                      \
.res            = {                                     \

                                               /*设备资源的寄存器基础物理地址*/
.start  = base##_BASE,                      \

                                                  /*设备资源的寄存器结束理地址*/
.end    = base##_BASE + 0x10000 - 1,  \
.flags  = IORESOURCE_IO,                        \
},                                                      \
.dma_mask       = ~0,                                   \

                                /*设备的中断资源*/
.irq            = { base##_IRQ, NO_IRQ }              \
}

struct amba_device {
struct device dev;
struct resourceres;
struct clk *pclk;
struct regulator*vcore;
u64 dma_mask;
unsigned int periphid;
unsigned int irq[AMBA_NR_IRQS];
};


在上述宏定义中.irq            = { base##_IRQ, NO_IRQ }              \

其实就是 .irq={UART0_IRQ,NO_IRQ}


linux-3.0.y\arch\arm\mach-godnet\include\mach\irqs.h中

#define UART0_IRQ(GODNET_IRQ_START + 9)

#define UART2_IRQ(GODNET_IRQ_START + 11)



要想添加新的串口在上述位置添加新的UART即可

 

串口驱动没有在驱动中建立设备文件,因此在文件系统的启动脚本手动建立

在/etc/init.d/S00devs

mknod /dev/ttyAMA3 c 204 66

 

 


0 0
原创粉丝点击