hi3531 添加uart3

基於設備總線驅動模型

在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

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章