日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Hi3520D UART2和UART3是如何加载到内核的

發(fā)布時(shí)間:2023/12/9 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hi3520D UART2和UART3是如何加载到内核的 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Hi3520D的UART驅(qū)動(dòng)位于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兩個(gè)文件;

首先修改 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) 這個(gè)樣文件就修改完成了;重新編譯內(nèi)核應(yīng)該就能在dev底下出現(xiàn)ttyAMA2和ttyAMA3了;

HI3520D在內(nèi)核中復(fù)用UART2,UART3管腳

在linux-3.0.y/arch/arm/mach-hi3520d/core.c文件中合適的位置添加

#define GK_HW_WEG(gkval,gkaddr) writel(gkval,gkaddr)#define GK_IOCFG_BASE_ADDR 0x200F0000 /* IO口復(fù)用寄存器地址空間映射 */ #define GK_GPIO0_BASE_ADDR 0x20150000 /* GPIO0的地址空間映射 */ #define GK_GPIO1_BASE_ADDR 0x20160000 /* GPIO1的地址空間映射 */ #define GK_GPIO2_BASE_ADDR 0x20170000 /* GPIO2的地址空間映射 */ #define GK_GPIO3_BASE_ADDR 0x20180000 /* GPIO3的地址空間映射 */ #define GK_GPIO4_BASE_ADDR 0x20190000 /* GPIO4的地址空間映射 */ #define GK_GPIO5_BASE_ADDR 0x201A0000 /* GPIO5的地址空間映射 */ #define GK_GPIO6_BASE_ADDR 0x201B0000 /* GPIO6的地址空間映射 */ #define GK_GPIO7_BASE_ADDR 0x201C0000 /* GPIO7的地址空間映射 */ #define GK_GPIO8_BASE_ADDR 0x201D0000 /* GPIO7的地址空間映射 */#define GK_REG_UART1RXD_OFFSET IO_ADDRESS(GK_IOCFG_BASE_ADDR + 0x050) /* UART1_RXD偏移寄存器 */ #define GK_REG_UART1TXD_OFFSET IO_ADDRESS(GK_IOCFG_BASE_ADDR + 0x058) /* UART1_TXD偏移寄存器 */ #define GK_REG_UART2RXD_OFFSET IO_ADDRESS(GK_IOCFG_BASE_ADDR + 0x05C) /* UART2_RXD偏移寄存器 */ #define GK_REG_UART2TXD_OFFSET IO_ADDRESS(GK_IOCFG_BASE_ADDR + 0x060) /* UART2_TXD偏移寄存器 */ #define GK_REG_UART3RXD_OFFSET IO_ADDRESS(GK_IOCFG_BASE_ADDR + 0x0BC) /* UART3_RXD偏移寄存器 */ #define GK_REG_UART3TXD_OFFSET IO_ADDRESS(GK_IOCFG_BASE_ADDR + 0x0B8) /* UART3_TXD偏移寄存器 */#define gk_cfg_uart_pin()({\GK_HW_WEG(0x01,GK_REG_UART1RXD_OFFSET);\GK_HW_WEG(0x01,GK_REG_UART1TXD_OFFSET);\GK_HW_WEG(0x01,GK_REG_UART2RXD_OFFSET);\GK_HW_WEG(0x01,GK_REG_UART2TXD_OFFSET);\GK_HW_WEG(0x01,GK_REG_UART3RXD_OFFSET);\GK_HW_WEG(0x01,GK_REG_UART3TXD_OFFSET);\}) 修改 core.c文件函數(shù)--加入初始化

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;gk_cfg_uart_pin(); }



總結(jié)

以上是生活随笔為你收集整理的Hi3520D UART2和UART3是如何加载到内核的的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。