上节操作完成后,虽然uboot中有了我们自己的板卡,但并未进行移植,所以现在是还不能烧录的,本节将带领大家根据自己的板卡进行uboot移植。

2.4.1 图形界面下配置

命令行执行 make menuconfig,出现如下界面

方括号[ ]中的“*”代表编译链接时添加该模块,为空则不参加编译链接,这就是uboot的裁剪功能。

因为我们的启动介质是SPIFLASH,在SPL阶段我们应该将SPI设备和驱动添加进编译链接,将SPL / TPL=>[*]Support SPI flash drivers和SPL / TPL=> [*] Support SPI drivers添加进来。

注:虽然我们将SPI驱动添加进来了,但是SPIFlash型号多种多样,包括容量、扇区大小等等,市场上大多数SPIFlash型号uboot都支持,查看spi_flash_ids.c文件,里面有各种型号的SPIFlash的描述,如果我们使用的SPIFlash型号不在其中,我们需要手动添加我们的SPIFlash信息至表中即可。如果uboot支持我们的SPIFlash,则至> Device Drivers > SPI Flash Support下去选择Flash厂家。

我们需要在uboot控制台下能够使用命令访问操作SPIFlash,所以也要把这项功能添加进来,图形界面Command line interface > Device access commands,将[*]sf添加进来。

2.4.2 修改omapl138_639.h

目前omapl138_639.h文件的内容和TI omapl138_lcdk.h的内容是一样的,我们需要进行一些修改才适用于我们的板卡,omapl138_lcdk.h内容略长,这里仅挑重要的从前往后进行讲解。

2.4.2.1 启动介质

639A板卡的启动介质选择的是SPIFlash,而TI板卡选择的是NandFlash,因此需要进行如下修改。

#define CONFIG_DRIVER_TI_EMAC

#undef      CONFIG_SYS_USE_NOR

#undef      CONFIG_USE_NAND

#define CONFIG_USE_SPIFLASH

2.4.2.2 系统时钟

TI开发板选用的是24M晶振,我们的板卡使用的是20M晶振,因此需要按照我们的需求修改系统时钟,24倍频。

#define CONFIG_SYS_OSCIN_FREQ       20000000

#define CONFIG_SYS_DA850_PLL0_PLLM     23

#define CONFIG_SYS_DA850_PLL1_PLLM     23

2.4.2.3 串口控制台

TI开发板选择Uart2作为串口控制台,我们的板卡只有Uart0是对外串口,另外以后我们需要在控制台下使用串口向DDR加载内核镜像,为了提高传输效率,我将串口波特率设为460800,(以后也可以在uboot命令行通过修改环境变量“baudrate”的方式切换串口波特率)。

/*

* Serial Driver info

*/

#define CONFIG_SYS_NS16550_SERIAL

#define CONFIG_SYS_NS16550_REG_SIZE      -4      /* NS16550 register size */

#define CONFIG_SYS_NS16550_COM1   DAVINCI_UART0_BASE

#define CONFIG_SYS_NS16550_CLK        clk_get(DAVINCI_UART2_CLKID)

#define CONFIG_CONS_INDEX        1                /* use UART0 for console */

#define CONFIG_BAUDRATE            115200              /* Default baud rate */

#define CONFIG_SYS_BAUDRATE_TABLE        { 115200,230400,380400,460800 }

另外,在系统电源配置处,我们需要将Uart0模块使能,TI并没有使能Uart0的电源模块。

#define CONFIG_SYS_DA850_SYSCFG_SUSPSRC (  \

DAVINCI_SYSCFG_SUSPSRC_TIMER0 |             \

DAVINCI_SYSCFG_SUSPSRC_SPI1 |          \

DAVINCI_SYSCFG_SUSPSRC_UART2 |               \

DAVINCI_SYSCFG_SUSPSRC_UART0 |               \

DAVINCI_SYSCFG_SUSPSRC_EMAC |                \

DAVINCI_SYSCFG_SUSPSRC_I2C)

const struct lpsc_resource lpsc[] = {

{ DAVINCI_LPSC_AEMIF }, /* NAND, NOR */

{ DAVINCI_LPSC_SPI1 },  /* Serial Flash */

{ DAVINCI_LPSC_EMAC },  /* image download */

{ DAVINCI_LPSC_UART0 }, /* console */

{ DAVINCI_LPSC_GPIO },

#ifdef CONFIG_DAVINCI_MMC

{ DAVINCI_LPSC_MMC_SD },

#endif

};

static const struct pinmux_config uart_pins[] = {

{ pinmux(3), 2, 6 },

{ pinmux(3), 2, 7 },

{ pinmux(3), 2, 4 },

{ pinmux(3), 2, 5 }

};

在omapl138_639.c文件中添加Uart0引脚使能结构体。

TI官方开发板的网卡使用的是MII接口,但MII引脚和uart0引脚复用,所以为了使用Uart0,我们需要将uboot中MII接口初始化函数屏蔽。

//if (davinci_configure_pin_mux(emac_pins, ARRAY_SIZE(emac_pins)) != 0)

2.4.2.3 uboot地址

我们需要指定uboot镜像在SPIFlash中的位置,这样SPL将会去改地址加载uboot镜像至DDR,并启动uboot,我们指定0x10000地址作为uboot镜像所在的起始地址,镜像不超过512K。

#define CONFIG_SPL_SPI_LOAD

#define CONFIG_SYS_SPI_U_BOOT_OFFS       0x10000

#define CONFIG_SYS_SPI_U_BOOT_SIZE        0x80000

2.4.2.4 环境变量

环境变量让我们可以不用修改uboot的源代码,而是通过修改环境变量来影响uboot运行时的一些数据和特性。譬如说通过修改bootdelay环境变量就可以更改系统开机自动启动时倒数的秒数。

uboot代码当中有一个值,环境变量中也有一个值。uboot程序实际运行时规则是:如果环境变量为空则使用代码中的值;如果环境变量不为空则优先使用环境变量对应的值。

SPIFlash中其实就是给了个分区,专门用来存储而已。存储时其实是把DDR中的环境变量整体的写入SPIFlash卡中分区里。所以当我们saveenv时其实整个所有的环境变量都被保存了一遍,而不是只保存更改了的。

刚烧录的系统中环境变量分区是空白的,uboot第一次运行时加载的是uboot代码中自带的一份环境变量,叫默认环境变量。我们在saveenv时DDR中的环境变量会被更新到SPIFlash中的环境变量中,就可以被保存下来,下次开机会在环境变量relocate时会SD卡中的环境变量会被加载到DDR中去。

default_environment中的内容虽然被uboot源代码初始化为一定的值(这个值就是我们的默认环境变量),但是在uboot启动的第二阶段,env_relocate时代码会去判断SD卡中的env分区的crc是否通过。如果crc校验通过说明SPIFlash中有正确的环境变量存储,则relocate函数会从SD卡中读取环境变量来覆盖default_environment字符数组,从而每次开机可以保持上一次更改过的环境变量。

将uboot环境变量存储在SPIFlash地址0x00090000开始64K。

#define CONFIG_ENV_IS_IN_SPI_FLASH

#define CONFIG_ENV_SIZE                        (64*1024)

#define CONFIG_ENV_OFFSET                  0x00090000

#define CONFIG_ENV_SECT_SIZE            CONFIG_ENV_SIZE

2.4.3 烧录uboot至SPIFlash

以上步骤都操作完成,我们就可以将编译好的ubootspl和uboot镜像烧录至SPIFlash中了,万事开头难,第一次我们仍然需要使用CCS环境在线仿真的方式进行烧录,需要等待时间略长,打开CCS6.1将我们最熟悉的工程添加进来,该工程在以往的基础上进行了修改,主要是修改的烧录地址,如果你是第一次烧录,请务必使用我提供的工程进行烧录,对于使用该工程进行烧录大家应该很熟悉了,为了减少以后不必要的麻烦,我这里再不厌其烦的带领大家操作一遍。

进入仿真模式后,点击“运行”,console出现如下界面

输入“1”后回车,进入子界面

我们先烧录uboot-spl,在选择之前我们首先将uboot-spl和uboot镜像拷贝到路径D:\\639B_WorkPlace\\obj,输入“1”后回车。

Uboot-spl镜像烧录完成后,不要退出,一鼓作气,继续烧录uboot镜像,uboot镜像比较大,226Kbyte,需要等个两分钟才能烧录完成。

经过漫长的等待,uboot终于烧录完成了,那就赶快重新上电验证下我们的uboot是否已经移植成功了吧!接下来将是激动人心的时刻!

注1:在uboot调试阶段,为了让我们更好的了解uboot和及时发现和解决Bug,建议搭建把DEGUG宏打开,这样在我们使用和调试uboot时,uboot会将一些设备状态和出错信息打印到终端,在include/common.h头文件中打开DEBUG宏

嚯,uboot启动界面出现了,但并不代表我们的工作已经结束了,别忘了uboot的终极目的是为了启动内核,接下来我们需要根据自己项目的需求在uboot中添加我们想要的功能,比如在线升级等等。

注2:有些朋友可能会对我们烧录镜像的文件格式感到疑惑,ubootspl我们烧录的是ais格式的镜像,因为omapl138在启动时只认ais格式的程序,所以我们必须选择ais格式作为spl镜像。而uboot镜像作为spl加载启动的镜像,格式就可以随意些了,平时我们烧录的都是bin文件格式的镜像,但这里有些不同,spl为了启动uboot需要获取uboot的一些信息,比如函数入口,你可以去比较一下你编译出的img格式的镜像比bin文件格式的镜像多64Byte,这64Byte包含了spl加载uboot时需要解析的信息。

omapl138移植uboot系列之移植板卡(第五篇)相关推荐

  1. omapl138移植uboot系列之添加属于我们自己的板卡(第四篇)

    在第一章节,我们已经编译好了一份uboot,但它是适用于TI自己的omapl138_lcdk开发板的,并不适用于我们的板卡,本章将带领大家在uboot中添加639A板卡. 2.3.1 向board中添 ...

  2. omapl138移植uboot系列之启动TI官方移植的Linux内核(启动内核第一篇)

    启动TI官方移植的Linux内核 和编译uboot一样,Linux内核的编译也是三板斧,首先修改Makefile中的ARCH和CROSS_COMPILE,然后找到你要编译的板卡执行make xx_de ...

  3. uboot和linux内核移植,Uboot与kernel移植总结

    设置uimage入口:由于一个可执行的Image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROM(Flash)的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接 ...

  4. omapl138移植uboot系列之在线升级(第八篇完结篇)

    uboot在线升级的原理是先通过某种外部接口(如网口.串口.USB等)将目标文件加载到DDR,然后从DDR中读取二进制文件并写到存储介质指定地址,由于639A底板并无网口,唯一与外部通信的接口就是串口 ...

  5. omapl138移植uboot系列之添加MTD分区(第七篇)

    如果你刚刚使用仿真器的方式烧录了uboot镜像,你肯定会感叹实在是太慢了,先别叹气,看完本节你将爱上烧录程序. 2.6.1 添加MTD分区 MTD(memory Teachno Device)中文翻译 ...

  6. 基于龙芯2K1000移植uboot之DDR

    基于龙芯2K1000移植uboot之DDR 移植环境 开始移植 额外说明 移植环境 CPU:LS2K1000 DDR:SCB13H8G162BF-13KI 编译环境:Ubuntu16.04+gcc-4 ...

  7. 基于龙芯2K1000移植uboot之NAND

    基于龙芯2K1000移植uboot之NAND 移植环境 开始移植 利用原生驱动(不成功) 利用PMON驱动移植(成功) 移植环境 CPU:LS2K1000 NAND:MT29F16G08 编译环境:U ...

  8. 对于初学者,从工程应用角度去移植uboot、kernel、最小根文件系统

    写一篇CSDN总结从工程的角度(非原理而通俗的)去讲解uboot kernel 最小根文件系统(包括busybox) NFS 这几个部分.各部分分别为一篇文章,使用超链接. 目录 前言 一.uboot ...

  9. x210:uboot和系统移植

    注:本文是对朱老师uboot和系统移植课程的备忘引导性笔记,主要是为了能够在学完后快速回忆起相关内容.本文主要记录了一些关键易忘性知识点并包含少量理解性内容,遵循尽量精简的原则,以尽量少的篇幅概括整个 ...

最新文章

  1. 大话设计模式之简单的工厂模式
  2. 零基础python必背代码-编程零基础应当如何开始学习 Python?
  3. 云炬创业政策学习笔记20210111
  4. 某业务自助开通账户问题排查
  5. 自动化运维平台中的统一认证接入与单点登录实现
  6. MATLAB调用Python自定义函数(类、函数等) Python调用MATLAB
  7. cnn 准确率无法提升_清华类脑芯片再登Nature: 全球首款基于忆阻器的CNN存算一体芯片...
  8. Log4cpp 配置文件配置Syslog
  9. 受微软信任的交叉证书将在2021年4月到期,代码签名证书将无法签内核驱动,安信教你如何才能再给驱动签名
  10. FAQ(常见问题解答)
  11. 【算法】O(n2)时间复杂度和O(nlogn)排序算法的简要分析
  12. win10局域网访问其他计算机名,教你win10两台电脑怎么连接局域网
  13. Office 2016 卡顿问题!如果其他方法都没有用就关掉硬件加速!
  14. VUE报错You are using the runtime-only build of Vue where the template compiler is not available
  15. Win10怎么隐藏磁盘分区
  16. unity-shader-基于图像的光照IBL
  17. 安卓中图片占用内存大小分析
  18. 蓝牙HC-05出现进入AT模式之后串口发送AT无返回值或者返回乱码情况
  19. 任何播放器无法播放视频
  20. WWX的520(结构体排序)

热门文章

  1. 开发常用的Git命令
  2. VlC转推播放的视频到虚拟摄像头
  3. 程序员之天梯排行榜,你在哪一级?
  4. 小程序开发外包需要注意哪些问题?
  5. linux硬盘对拷 软件,分享|10 个免费的磁盘克隆软件
  6. 圣诞节的那些事(链接标签+路径)
  7. 杰理AC692X---红外按键介绍
  8. 资深猎头眼中的优质简历是如何炼成的?
  9. 遇到maven私服下载过慢或者卡死的情况
  10. B+树:MySQL数据库中建立索引的数据结构