1. 程式人生 > >Hi3520D UART2和UART3是如何載入到核心的

Hi3520D UART2和UART3是如何載入到核心的

參考資料:

海思Hi3515的UART2和UART3是如何被載入到核心中的

http://blog.163.com/softtwo_2/blog/static/27007702201272364522572/

Hi3520D和Hi3515有些不一樣的地方;

Hi3520D的UART驅動位於linux-3.0.y/drivers/tty/serial/amba-pl011.c

新增UART2和UART3需要修改的檔案為:linux-3.0.y/arch/arm/mach-hi3520d/core.c和linux-3.0.y/arch/arm/mach-hi3520d/include/mach/irqs.h兩個檔案;

首先修改 core.c檔案,在309行左右的位置修改成如下:

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 struct amba_device *amba_devs[] __initdata = {
	&HIL_AMBADEV_NAME(uart0),
	&HIL_AMBADEV_NAME(uart1),
	&HIL_AMBADEV_NAME(uart2),
	&HIL_AMBADEV_NAME(uart3),
};

static struct clk uart_clk;
static struct clk_lookup lookups[4];

static void  uart_clk_init(unsigned long clk)
{
	uart_clk.rate = clk;

	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;
}

然後修改irqs.h檔案,修改為如下

#define UART0_IRQ		(HI3520D_IRQ_START + 8)
#define UART1_IRQ		(HI3520D_IRQ_START + 9)
#define UART2_IRQ		(HI3520D_IRQ_START + 10)
#define UART3_IRQ		(HI3520D_IRQ_START + 11)

這個樣檔案就修改完成了;重新編譯核心應該就能在dev底下出現ttyAMA2和ttyAMA3了;

備註:還有就是編寫串列埠程式時,需要把GPIO口複用為串列埠;

HI_MPI_SYS_SetReg(IOCFG_BASE_ADDR+0x050,0x01);			/*	設定GPIO5_1為UART1_RXD					*/
HI_MPI_SYS_SetReg(IOCFG_BASE_ADDR+0x058,0x01);			/*	設定GPIO5_3為UART1_TXD					*/

HI_MPI_SYS_SetReg(IOCFG_BASE_ADDR+0x05C,0x01);			/*	設定GPIO5_4為UART2_RXD					*/
HI_MPI_SYS_SetReg(IOCFG_BASE_ADDR+0x060,0x01);			/*	設定GPIO5_5為UART2_TXD					*/

HI_MPI_SYS_SetReg(IOCFG_BASE_ADDR+0x0B8,0x01);			/*	設定GPIO1_0為UART3_TXD					*/
HI_MPI_SYS_SetReg(IOCFG_BASE_ADDR+0x0BC,0x01);			/*	設定GPIO1_1為UART3_RXD					*/


ARM AMBA PL011 的那個原始碼在 linux-3.0.y/drivers/tty/serial/amba-pl011.c
進入到核心根目錄執行makemenuconfig命令 跳出
選擇Device Drivers -> Character devices-> Serial drives 
進入後檢視需要將ARM AMBA PL011 載入進核心編譯;