zoukankan      html  css  js  c++  java
  • u-boot移植(六)---代码修改---串口

    一、代码流程

    1.1 串口代码

      程序流程图如下;

      

      default_serial_console 执行的代码如下:

      

      

      在JZ2440.H中有如下定义:

      

       则执行结构体s3c24xx_serial0_device,从而执行INIT_S3C_SERIAL_STRUCTURE(0, "s3ser0"):

      

      _serial_setbrg 为串口时钟设置函数:

      

      其中,调用get_PCLK()进行串口时钟的设置:

      

      PCLK的计算涉及到 HCLK,在函数中调用了get_HCLK() 来获取HCLK的值。

      

      get HCLK的代码就HCLK的计算,这里对应着寄存器CLKDIVN:

      

      此时我们已经不需要在往下分析了。从我们的代码上看,设置与配置都没有问题,宏的定义已经存在了。也不需要配置了,但是u-boot启动后却无法打印CPU信息。

      那么就只能看看u-boot.dis文件了,看我们的代码流程执行的是否与我们所想的代码流程一样。

    二、串口打印

      首先我们定位到串口的初始化:

      

      在38a8这个地址执行了跳转,跳转到了 2e43c  serial_initalize 串口初始化函数,查找2e43c 进入串口初始化:

      

      这里再执行了跳转,跳转到了 serial_fin_console_or_panic 这个函数,这里就感觉优点不对了,我们分析的串口初始化的跳转应该是跳转到s3c24xx_serial_initialize() 这个函数中,去执行。Serial.c (driversserial) 

      这里跳转是跳转到serial_initialize()中,然手再跳转到serial_find_console_or_panic 去执行。这两个函数都在Serial-uclass.c (driversserial)中。

      代码执行的流程不对了,就要看看makefile中的配置是否正确了。

      在 drivers/serial/Makefile 中有如下定义:

      

      查一看 CONFIG_DM_SERIAL 在哪里有定义:

      

      

      在 include/configs/jz2440.h 的文件中,是没有定义CONFIG_DM_SERIAL 的,但是我们看到在 include/generated/autoconfig.h 中定义了CONFIG_DM_SERIAL 为1。

      同样 也看见生成的u-boot.cfg文件中,CONFIG_DM_SERIAL 有这一行。

      autoconfig.h文件是由.config文件自动生成的。因此我们可以直接修改我们的jz2440_defconfig文件来控制这个条件。但是不需要这么做,我们可以使用 make menuconfig 来控制:

      在u-boot 的根目录下执行命令: make menuconfig,然后按 “/” 搜索 CONFIG_DM_SERIAL 

      

      配置位置,看location 下面的,进入DEVICE Drivers->Serial drivers:

      

      这里默认配置了两项,上一张图的搜索中,Prompt 一栏说明了我们CONFIG_DM_SERIAL对应的是 Enable Driver Model for serial drivers,选择它,然后选择help 查看信息:

      

      意思是:使能串口驱动模型。这个模型是用串口 uclass 来替代 drivers/serial/serial.c ,uclass 实现 serial_putc() 等。uclass 接口被定义在 include/serial.h 中。

      我们不需要此配置,所以取消选中,保存退出。

      重新编译u-boot,然后生成dis文件。

      再看下串口初始化的位置:

      

      接着跳转到我们需要的文件中去了:

      

      执行烧写,查看结果,由于本人的是WIN10系统,运行DNW造成[ERROR:Can't create dnw.ini],因此直接用JTAG进行烧写,烧写完成后,显示结果为:

       

      DNW兼容性不好,电脑好还是有JTAG直接进行烧写进 nor flash。用DNW发送文件后,烧写进nor flash虽然成功,但是报错[ERROR:Can't create dnw.ini]造成uart无法显示结果。

  • 相关阅读:
    PAT顶级 1024 Currency Exchange Centers (35分)(最小生成树)
    Codeforces 1282B2 K for the Price of One (Hard Version)
    1023 Have Fun with Numbers (20)
    1005 Spell It Right (20)
    1092 To Buy or Not to Buy (20)
    1118 Birds in Forest (25)
    1130 Infix Expression (25)
    1085 Perfect Sequence (25)
    1109 Group Photo (25)
    1073 Scientific Notation (20)
  • 原文地址:https://www.cnblogs.com/kele-dad/p/6956738.html
Copyright © 2011-2022 走看看