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

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

HI3520D在内核中复用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口复用寄存器地址空间映射	*/
#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文件函数--加入初始化

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




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux-C实现GPRS模块发送短信

“GSM模块,是将GSM射频芯片、基带处理芯片、存储器、功放器件等集成在一块线路板上,具有独立的操作系统、GSM射频处理、基带处理并提供标准接口的功能模块。GSM模块根据其提供的数据传输速率又可以分为GPRS模块、EDGE模块和纯短信模块。短信模块只支持语…

【思科】GNS3模拟静态NAT/动态NAT

实验拓扑:实验目的:利用NAT技术,使C1,C2能与R2连通。实验步骤:如图配置好IP地址,为C1,C2指定网关192.168.1.1。2.在R1上配置静态NAT.假定为C1配置公网地址12.0.0.3,来实现与R2的连通。这样,静态…

Text模式和PDU模式的区别

发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信…

[家里蹲大学数学杂志]第041期中山大学数计学院 2008 级数学与应用数学专业《泛函分析》期末考试试题 A...

1 ( 10 分 ) 设 $\mathcal{X}$ 是 Banach 空间, $f$ 是 $\mathcal{X}$ 上的线性泛函. 求证: $f\in \mathcal{L}(\mathcal{X})$ 的充分必要条件是 \[ N(f)\{ x\in \mathcal{X};\ f(x)0 \} \] 是 $\mathcal{X}$ 的闭线性子空间. 证明: 必要性. 设 $N(f)\ni x_n\to x$, 则 $$\bex …

PUD编码规则

共有三种方式来发送和接收SMS信息:Block Mode, Text Mode和PDU Mode。其中PDU Mode被所有手机支持,可以使用任何字符集,这也是手机默认的编码方式。 发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式…

xml 解析

2019独角兽企业重金招聘Python工程师标准>>> 各大数据接口大全:http://blog.sina.com.cn/s/articlelist_2127818045_10_1.html package com.test.junit; import static org.junit.Assert.*; import java.io.ByteArrayInputStream;import java.io.InputSt…

3.1 采购管理规划

3.1.1 采购业务管理规划 通过企业采购业务管理规划,从而引入完全价值采购体系,建立企业的战略性采购或电子化采购流程,进行合同管理,收货管理和使用,采购结算,降低总体采购成本; 整合企业的采…

能吹是多么的重要

联合利华引进了一条香皂包装生产线,结果发现这条生产线有个缺陷:常常会有盒子里没装入香皂。总不能把空盒子卖给顾客啊,他们只得请了一个学自动化的博士后设计一个方案来分拣空的香皂盒。博士后拉起了一个十几人的科研攻关小组,综…

深入理解Linux守护进程

深入理解Linux守护进程Linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户。提供这些服务的程序是由运行在后台的守护进程(daemons)来执行的。守护进程是生存期长的…

【翻译】Ext JS 4——Ajax和Rest代理处理服务器端一场和消息的方法

原文:EXTJS4 - Handle Server-side exceptions and message from an Ajax or Rest proxy作者:Raja可能要处理的情况:success(成功)——Ext处理failure(失败),由于通讯问题——Ext处理…

Apache下PHP Loaded Configuration File None 解决方法

解决方法可在apache配置文件中增加 PHPIniDir “The path to your php.ini”, 比如:PHPIniDir "/usr/local/php/etc/php.ini"重启apache。 确保PHPIniDir在loadModule php5_module之前 转载于:https://blog.51cto.com/zrer90/1421464

理解Lucene/Solr的缓存

缓存对于提高搜索引擎的吞吐量,降低CPU占用率极为重要。Lucene/Solr在这块做了很多的工作。Lucene/Solr中默认提供了5种缓存,同时solr还提供扩展缓存接口,允许开发者自定义缓存。1 缓存的基本原理Solr实现了两种策略的缓存:LRU(Le…

深入了解tcmalloc(一):windows环境下无缝拦截技术初探

2019独角兽企业重金招聘Python工程师标准>>> 概述: 又到了一个总结提炼的阶段,这次想具体聊聊游戏引擎中使用的内存管理模块tcmalloc组件的使用心得。项目的前期曾经遇到过内存瓶颈,特别是windows系统下的客户端程序在经历长时间运…

删除数据库日志文件的方法

原文:删除数据库日志文件的方法你曾经有在执行SQL的时候,数据库报事务日志已满,然后执行报错。然后纠结于怎么删除数据库日志,捣鼓半天吗,现在就提供两种删除日志文件的方法,希望能够帮到你! 阅读目录 方法…

数据结构课程设计

20. 公交线路上优化路径的查询 问题描写叙述 最短路径问题是图论中的一个经典问题,当中的Dijkstra算法一直被觉得是图论中的好算法,但有的时候须要适当的调整Dijkstra算法才干完毕多种不同的优化路径的查询。 对于某城市的公交线路,乘坐公…

Android屏幕大小适配问题解决

一、一些基本概念 1、长度(真实长度):英寸、inch 2、分辨率:density 每英寸像素数 dpi(密度) 3、像素:px 4、dip的公式:px /dipdpi/160 所以 dip 类似于英寸、长度&am…

开源 免费 java CMS - FreeCMS1.9 会员组管理

2019独角兽企业重金招聘Python工程师标准>>> 项目地址:http://www.freeteam.cn/ 会员组管理 会员组分为两种,一级是经验会员组,一种是特殊会员组。 经验会员组的会员会根据经验自动变更,特殊会员组不会自动变更&…

C++期末复习总结继承

继承是软件复用的一种形式,他是在现有类的基础上建立新类,新类继承了现有类的属性和方法,并且还拥有了其特有的属性和方法,继承的过程称为派生,新建的类称为派生类(子类),原有的成为…

蓝桥杯历年预赛习题

标题:啤酒和饮料 啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。 我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。 注意:答案是一个整数。请通过浏览器提交答案。 不要书…

产品经理,你来自江湖

2019独角兽企业重金招聘Python工程师标准>>> 产品经理,你来自江湖 ----论产品经理的发展中的技能与技能图书 导读: 过去的15年中,在互联网行业,我认为没有一个职位比产品经理对行业的推动更大,这些年里&…