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();
}
Hi3520D UART2和UART3是如何加载到内核的相关推荐
- 嵌入式linux加载引导内核和根文件系统的方法
总体来说,嵌入式Linux内核和根文件的引导与PC机差不多. 嵌入式linux内核和根文件系统可以存放在各种可能的存储设备中,一般情况下我 们将内核和根文件系统直接烧入到Flash中(包括NOR和NA ...
- uboot加载linux内核加载那些内容,几个地址参数及uboot加载启动内核过程的理解
关于uBoot和Linux内核中几个地址参数及uboot加载启动内核过程的理解 uboot一般使用mkimage工具先制作一个启动映象文件来引导识别内核的,uboot源代码的tools/目录下有mki ...
- 嵌入式(iMX6Q)TFTP加载 Linux 内核与设备树NFS挂载根文件系统
配置实现过程: 嵌入式(iMX6Q)TFTP加载 Linux 内核与设备树 注:bootm对应启动uImage,bootz对应启动zImage setenv bootcmd "tftp 0x ...
- 在Ubuntu下使用QEMU搭建arm开发环境(三)使用u-boot加载Linux内核
嵌入式启动概述 嵌入式boot loader 功能类似于PC的BIOS.硬件检测是否正常 加载操作系统镜像到RAM 设置不同的启动方式 常见的启动方式 NOR/NAND flash启动 从SD卡启动 ...
- 集成TBS预览文档及Android P加载X5内核失败的问题的解决办法
TBS(腾讯浏览服务)的优势: 速度快:相比系统webview的网页打开速度有30+%的提升: 省流量:使用云端优化技术使流量节省20+%: 更安全:安全问题可以在24小时内修复: 更稳定:经过亿级用 ...
- uboot加载linux内核加载那些内容,uBoot和Linux内核中涉及到的几个地址参数的理解...
uBoot和Linux内核中涉及到的几个地址参数的理解 ************************************************* arch/arm/Makefile //内核 ...
- ELF文件的加载和动态链接过程
本文的目的:大家对于Hello World程序应该非常熟悉,随便使用哪一种语言,即使还不熟悉的语言,写出一个Hello World程序应该毫不费力,但是如果让大家详细的说明这个程序加载和链接的过程,以 ...
- 【Linux 内核】宏内核与微内核架构 ( 操作系统需要满足的要素 | 宏内核 | 微内核 | Linux 内核动态加载机制 )
文章目录 一.操作系统需要满足的要素 二.宏内核 三.微内核 四.Linux 内核动态加载机制 一.操作系统需要满足的要素 电脑上运行的 操作系统 , 是一个 软件 ; 设备管理 : 操作系统需要 为 ...
- linux设备和驱动加载的先后顺序
点击打开链接 Linux驱动先注册总线,总线上可以先挂device,也可以先挂driver,那么究竟怎么控制先后的顺序呢. Linux系统使用两种方式去加载系统中的模块:动态和静态. 静态加载:将所有 ...
最新文章
- 离职后竟半夜偷溜回办公室写代码?一个为自由软件而战斗的程序员
- MySQL数据库Keepalived双主
- java重载_Java的重载与覆盖,傻傻分不清!
- android生成png图片,Android 中将 base64图片 解码为.png图片
- HDU 2602.Bone Collector-动态规划0-1背包
- Sublime Text3使用Package Control 报错There Are No Packages Available For Installation
- 1_python基础—变量
- android---gettag()与settag()的妙用
- linux安装离线docker包教程,Centos7离线安装Docker环境
- 基于微信小程序开发——音乐播放器
- mumu模拟器Android版本才6,mumu模拟器老版本
- sqlserver 提示“用户sa 登录失败 18456”问题解决过程
- 三种计算机控制系统是,计算机控制系统3
- vaspkit使用_Vaspkit做电荷密度差图
- 智能安全帽-4G记录仪等移动视频图传系统里面的RTSP流输出的实现机制
- android tablayout放图片,Android TabLayout的Indicator如何设置为图片
- 网站微信支付时出现支付二维码不显示的解决方法
- “梵高。向日葵”为什么值3亿
- 计算机工程与科学北京,高强铝合金加速腐蚀方法的研究-计算机工程与科学-北京航空航天大学.PDF...
- 第五十五讲 插件设备树
热门文章
- Xtreme TaskPanel
- Web安全开发注意事项
- 5911. 模拟行走机器人 II
- leetcode 765. 情侣牵手(并查集)
- react钩子_迷上了钩子:如何使用React的useReducer()
- gt爵士变形步骤_代码广播简介:您可以编码为24/7的爵士节拍
- 梯度反传_反事实政策梯度解释
- 多重插补 均值插补_Feature Engineering Part-1均值/中位数插补。
- (摘录)sockaddr与sockaddr_in,sockaddr_un结构体详细讲解
- 关于VCP(Virtual Com Port)拓展的调试经历(一)