摘要: 1、 在Hi3520平台下,增加UART加载到内核 2、 修改内核文件,制作内核镜像。 3、 增加UART3方法
第一节 修改内核文件,增加UART加载到内核 一、内核配置初始化,拷贝固定内核配置替换现有的配置 //清内核 make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- clean //进入内核根目录下 cd /home/vmuser/sdk/Hi3520D_SDK_V1.0.5.0/osdrv/kernel/linux-3.0.y/ //拷贝.config 文件 cp arch/arm/configs/hi3520d_full_defconfig .config 二、修改内核相关文件 //修改内核相关文件 cd /home/vmuser/sdk/Hi3520D_SDK_V1.0.5.0/osdrv/kernel/linux-3.0.y/arch/arm/mach-hi3520d //编辑core.c 文件 vi core.c (1)管脚复用配置:(a)管脚复用宏定义
/* 复用寄存器基地址 */ /* 复用寄存器基地址 */ #define REG_UART_BASE_ADDR 0x200F0000 /* UART1_RXD偏移寄存器 */ #define REG_UART1RXD_OFFSET IO_ADDRESS(REG_UART_BASE_ADDR + 0x050) /* UART1_TXD偏移寄存器 */ #define REG_UART1TXD_OFFSET IO_ADDRESS(REG_UART_BASE_ADDR + 0x058) /* UART2_RXD偏移寄存器 */ #define REG_UART2RXD_OFFSET IO_ADDRESS(REG_UART_BASE_ADDR + 0x05C) /* UART2_TXD偏移寄存器 */ #define REG_UART2TXD_OFFSET IO_ADDRESS(REG_UART_BASE_ADDR + 0x060) /* UART端口复用配置 */ #define uart_reuse()({\ writel(0x01,REG_UART1RXD_OFFSET);\ writel(0x01,REG_UART1TXD_OFFSET);\ writel(0x01,REG_UART2RXD_OFFSET);\ writel(0x01,REG_UART2TXD_OFFSET);\ })(b)《Hi3520D/Hi3515A/Hi3515C H.264 编解码处理器用户指南》(P70)
复用寄存器基地址:
UART 偏移地址:
(2)串口初始化配置(a)增加uart1、uart2配置信息:
//修改core.c 文件 在第310行uart0配置信息下增加 HIL_AMBA_DEVICE(uart0, “uart:0”, UART0, NULL); HIL_AMBA_DEVICE(uart1, “uart:1”, UART1, NULL); HIL_AMBA_DEVICE(uart2, “uart:2”, UART2, NULL); static struct amba_device *amba_devs[] __initdata = { &HIL_AMBADEV_NAME(uart0), &HIL_AMBADEV_NAME(uart1), &HIL_AMBADEV_NAME(uart2), };(b)修改串口amba_device 结构体,配置串口初始化:(AMBA:片上总线协议)
//修改core.c 文件 在第323行配置信息下增加 static struct clk_lookup lookups[3]; 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; uart_reuse(); } (3)增加串口中断配置信息(a)切换目录,增加irqs.h配置信息
cd /home/vmuser/sdk/Hi3520D_SDK_V1.0.5.0/osdrv/kernel/linux-3.0.y/arch/arm/mach-hi3520d/include/mach //修改irqs.h 文件 第10行 #define UART0_IRQ (HI3520D_IRQ_START + 8) #define UART1_IRQ (HI3520D_IRQ_START + 9) #define UART2_IRQ (HI3520D_IRQ_START + 10) 第二节 配置内核文件,制作内核镜像 三、配置内核(1)海思加载的串口驱动是PL011,make menuconfig 配置Device Drivers > Character devices > Serial drivers中的ARM AMBA PL011 serial port support 和 Support for console on AMBA serial port
//进入内核配置界面 make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig(2)修改后的结果
(3)重新编译内核烧入
//编译内核 make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- uImage //拷贝编译好的内核到指定目录下 cp arch/arm/boot/uImage /mnt/ ping 192.168.100.128 setenv serverip 192.168.100.128 sa(4)修改tftp服务器和客户端ip地址,通过tftp烧写内核镜像
(5)烧写内核
mw.b 82000000 ff 400000 tftp 82000000 uImage sf probe 0 sf erase 100000 400000 sf write 82000000 100000 400000 reset # 重启进入新系统。(6)烧写结果
四、验证串口并应用在/dev 下可以查看是否有串口设备ttyAMA0~2。
第三节 增加UART3方法由于之前没有增加UART3 ,后在项目中UART1 UART2 都被占用,贴出增加UART3方法。 UART3和上述UART1 UART2相同。主要是在《Hi3520D/Hi3515A/Hi3515C H.264编解码处理器用户指南.pdf》P98 手册中查找到复用引脚。
muxctrl_reg46 GPIO1_0 管脚复用控制寄存器 UART3_TXD 对应普通GPIO1_0 Offset Address 0x0B8
muxctrl_reg47 GPIO1_1 管脚复用控制寄存器 UART3_RXD 对应普通GPIO1_1 Offset Address 0x0BC
除此配置与UART1 UART2不同之外,其他都按照UART1 UART2添加即可。
附件:《Hi3520D/Hi3515A/Hi3515C H.264编解码处理器用户指南.pdf》
免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:【海思HI3520之QT开发】-串口通讯实战(一):UART加载到内核 https://www.yhzz.com.cn/a/15145.html