Hi3520D UART2和UART3是如何載入到核心的
阿新 • • 發佈:2019-01-31
參考資料:
海思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 載入進核心編譯;