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是如何加载到内核的相关推荐

  1. 嵌入式linux加载引导内核和根文件系统的方法

    总体来说,嵌入式Linux内核和根文件的引导与PC机差不多. 嵌入式linux内核和根文件系统可以存放在各种可能的存储设备中,一般情况下我 们将内核和根文件系统直接烧入到Flash中(包括NOR和NA ...

  2. uboot加载linux内核加载那些内容,几个地址参数及uboot加载启动内核过程的理解

    关于uBoot和Linux内核中几个地址参数及uboot加载启动内核过程的理解 uboot一般使用mkimage工具先制作一个启动映象文件来引导识别内核的,uboot源代码的tools/目录下有mki ...

  3. 嵌入式(iMX6Q)TFTP加载 Linux 内核与设备树NFS挂载根文件系统

    配置实现过程: 嵌入式(iMX6Q)TFTP加载 Linux 内核与设备树 注:bootm对应启动uImage,bootz对应启动zImage setenv bootcmd "tftp 0x ...

  4. 在Ubuntu下使用QEMU搭建arm开发环境(三)使用u-boot加载Linux内核

    嵌入式启动概述 嵌入式boot loader 功能类似于PC的BIOS.硬件检测是否正常 加载操作系统镜像到RAM 设置不同的启动方式 常见的启动方式 NOR/NAND flash启动 从SD卡启动 ...

  5. 集成TBS预览文档及Android P加载X5内核失败的问题的解决办法

    TBS(腾讯浏览服务)的优势: 速度快:相比系统webview的网页打开速度有30+%的提升: 省流量:使用云端优化技术使流量节省20+%: 更安全:安全问题可以在24小时内修复: 更稳定:经过亿级用 ...

  6. uboot加载linux内核加载那些内容,uBoot和Linux内核中涉及到的几个地址参数的理解...

    uBoot和Linux内核中涉及到的几个地址参数的理解 ************************************************* arch/arm/Makefile //内核 ...

  7. ELF文件的加载和动态链接过程

    本文的目的:大家对于Hello World程序应该非常熟悉,随便使用哪一种语言,即使还不熟悉的语言,写出一个Hello World程序应该毫不费力,但是如果让大家详细的说明这个程序加载和链接的过程,以 ...

  8. 【Linux 内核】宏内核与微内核架构 ( 操作系统需要满足的要素 | 宏内核 | 微内核 | Linux 内核动态加载机制 )

    文章目录 一.操作系统需要满足的要素 二.宏内核 三.微内核 四.Linux 内核动态加载机制 一.操作系统需要满足的要素 电脑上运行的 操作系统 , 是一个 软件 ; 设备管理 : 操作系统需要 为 ...

  9. linux设备和驱动加载的先后顺序

    点击打开链接 Linux驱动先注册总线,总线上可以先挂device,也可以先挂driver,那么究竟怎么控制先后的顺序呢. Linux系统使用两种方式去加载系统中的模块:动态和静态. 静态加载:将所有 ...

最新文章

  1. 离职后竟半夜偷溜回办公室写代码?一个为自由软件而战斗的程序员
  2. MySQL数据库Keepalived双主
  3. java重载_Java的重载与覆盖,傻傻分不清!
  4. android生成png图片,Android 中将 base64图片 解码为.png图片
  5. HDU 2602.Bone Collector-动态规划0-1背包
  6. Sublime Text3使用Package Control 报错There Are No Packages Available For Installation
  7. 1_python基础—变量
  8. android---gettag()与settag()的妙用
  9. linux安装离线docker包教程,Centos7离线安装Docker环境
  10. 基于微信小程序开发——音乐播放器
  11. mumu模拟器Android版本才6,mumu模拟器老版本
  12. sqlserver 提示“用户sa 登录失败 18456”问题解决过程
  13. 三种计算机控制系统是,计算机控制系统3
  14. vaspkit使用_Vaspkit做电荷密度差图
  15. 智能安全帽-4G记录仪等移动视频图传系统里面的RTSP流输出的实现机制
  16. android tablayout放图片,Android TabLayout的Indicator如何设置为图片
  17. 网站微信支付时出现支付二维码不显示的解决方法
  18. “梵高。向日葵”为什么值3亿
  19. 计算机工程与科学北京,高强铝合金加速腐蚀方法的研究-计算机工程与科学-北京航空航天大学.PDF...
  20. 第五十五讲 插件设备树

热门文章

  1. Xtreme TaskPanel
  2. Web安全开发注意事项
  3. 5911. 模拟行走机器人 II
  4. leetcode 765. 情侣牵手(并查集)
  5. react钩子_迷上了钩子:如何使用React的useReducer()
  6. gt爵士变形步骤_代码广播简介:您可以编码为24/7的爵士节拍
  7. 梯度反传_反事实政策梯度解释
  8. 多重插补 均值插补_Feature Engineering Part-1均值/中位数插补。
  9. (摘录)sockaddr与sockaddr_in,sockaddr_un结构体详细讲解
  10. 关于VCP(Virtual Com Port)拓展的调试经历(一)