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

2.3.1 向board中添加属于自己的板卡

board目录下每一个终极文件夹都是一块板卡的片上驱动程序,TI 工程师们移植过的omapl138_lcdk板卡位于board/davinci/da8xxevm目录下的omapl138_lcdk.c文件,你可能就要问了,board目录下的板卡成千上万,你是怎么万里挑一把TI移植的板卡挑出来的呢?

还记得第一节我们进行板卡配置时执行过的make omapl138_lcdk_defconfig吗?如果你够细心,当时你会发现执行完这条命令以后,终端会显示一串信息,其中最后一条是:所示。

这段英文就不用我来翻译了吧?其实,当我们make xxx_defconfig进行板卡配置的时候,在uboot顶级目录会生成一个名为“.config”的文件,这个文件是隐藏的,我们可以vi打开它。

我们暂时只需要重点关注以上六个配置项的值,暂时先讲后三个,意思是供应商:davinci 板卡名称:da8xxevm  配置名:omapl138_lcdk。

然后我们就在board/davinci/da8xxevm目录下找到了omapl138_lcdk.c文件,这种命名方式显然是TI工程师偷懒了,按照规则来说应该是:供应商:ti 板卡:davinci(或者是omapl138)配置名:omapl138_lcdk。

我们就按照这个规则在board目录下建立一个属于639A的板卡文件夹(供应商:davinci板卡:hltborad配置名:omapl138_639),为了方便,我直接在davinci目录下拷贝一份da8xxevm文件夹,命名为“hltboard”,cd 进入hltboard目录,ls:

将omapl138_lcdk.c重命名为omapl138_639.c: mv omapl138_lcdk.c omapl138_639.c

打开Makefile:vi Makefile

全部删除,修改为如下图所示:

修改完成后保存退出,继续修改KConfig文件,修改前如下图所示,TI在该文件中定义了两块开发板的配置,我们将其全部删除。

添加我们为639A板卡描述的信息至KConfig文件,如下所示

以上操作完成后,我们的板卡就添加好了,但此时还不能编译,且看后续章节

2.3.2添加xxx_defconfig文件

omapl138_lcdk_defconfig文件是TI为自己开发板添加的配置文件,位于configs目录下,我们拷贝一份命名为“omapl138_639_defconfig”作为我们的配置文件,接下来我们将639A板卡不存在的外设和没有用到的模块删除掉,不用纠结,这一步只是大概的进行配置,就算有所遗漏,我们还有第二步骤进行遗漏补充,修改后的配置文件内容如下

CONFIG_ARM=y

CONFIG_ARCH_DAVINCI=y

CONFIG_TARGET_OMAPL138_639=y

CONFIG_SPL_LIBCOMMON_SUPPORT=y

CONFIG_SPL_LIBGENERIC_SUPPORT=y

CONFIG_USE_BOOTARGS=y

CONFIG_BOOTARGS=console=ttyO0,115200

CONFIG_SYS_PROMPT="Hanc@639B=> "

CONFIG_SPL_SERIAL_SUPPORT=y

CONFIG_BOOTDELAY=3

CONFIG_VERSION_VARIABLE=y

CONFIG_DISPLAY_CPUINFO=n

CONFIG_DISPLAY_BOARDINFO=n

CONFIG_SPL=y

CONFIG_HUSH_PARSER=y

CONFIG_CMD_BOOTZ=y

CONFIG_CMD_ASKENV=y

CONFIG_CMD_DHCP=y

CONFIG_CMD_MII=y

CONFIG_CMD_PING=y

CONFIG_CMD_TIME=y

CONFIG_CMD_EXT2=y

CONFIG_CMD_FAT=y

CONFIG_CMD_SF=y

CONFIG_CMD_FS_GENERIC=y

CONFIG_SPI_FLASH=y

CONFIG_SPI_FLASH_GIGADEVICE=y

CONFIG_SPI_FLASH_STMICRO=y

CONFIG_SYS_NS16550=y

CONFIG_USE_SPIFLASH=y

CONFIG_SPL_SPI_SUPPORT=y

CONFIG_SPL_SPI_LOAD=y

CONFIG_SYS_SPI_U_BOOT_OFFS=0x10000

CONFIG_SPL_SPI_FLASH_SUPPORT=y

CONFIG_DM_SPI = y

在xxx_defconfig文件中配置一定不要有空格,比如

CONFIG_TARGET_OMAPL138_639=y

则配置无效!!!

注:omapl138_639_defconfig文件中的CONFIG_TARGET_OMAPL138_LCDK一定要修改为CONFIG_TARGET_OMAPL138_639,回顾下上节板卡的KConfig文件:

你可能已经注意到omapl138_639_defconfig文件中的CONFIG_TARGET_OMAPL138_639和KConfig文件中的TARGET_OMAPL138_639只差一个“CONFIG_”字符串,它们是有关系的,Makefile在执行的时候会将“CONFIG_TARGET_OMAPL138_639”的“CONFIG_”处理掉,然后去所有子目录下的KConfig文件中去寻找“TARGET_OMAPL138_639”,从而找到配置的板卡。

因为Makefile的这种特性,配置文件也是这个道理,所以以后配置文件的命名一定要遵循“xxx_defconfig”的格式,否则肯定会出错。

以上文本中,每一个以“CONFIG”开头修饰的变量均代表uboot中的一个模块,将其在该文件中加入或删除即为uboot的裁剪,这样的语句有成百之多,这里仅将我们有用的留下,没有用到的全部删除。

除了上述描述的一些模块会在编译时添加进来以外,还有一些模块默认就是已经添加进来的,如果我们无需使用,可以在图形界面配置阶段将其取消。

2.3.3添加板卡配置头文件

board目录下的代码都是.c文件,与其对应的头文件位于include/configs目录下,TI开发板的配置头文件也在该目录下,名为“omapl138_lcdk.h”。

拷贝一份“omapl138_lcdk.h”命名为“omapl138_639.h”,打开omapl138_639.h,将宏定义#define CONFIG_MACH_OMAPL138_LCDK修改为#define CONFIG_MACH_OMAPL138_639,为什么要这么做呢?

还是第一节,当时我们添加完“hltboard”后,不是修改过Makefile吗?再贴一次当时修改后的截图。

obj-$(CONFIG_MACH_OMAPL138_639) += omapl138_639.o是一条条件编译语句,即当宏定义CONFIG_MACH_OMAPL138_639存在时,才会编译omapl138_639.c文件。

以上操作都完成后,我们需要向以下代码添加进arch/arm/mach-davinci/Kconfig文件中。

config TARGET_OMAPL138_639

bool "OMAPL138 639"

select SUPPORT_SPL

select SYS_DA850_PLL_INIT

select SYS_DA850_DDR_INIT

source "board/davinci/hltboard/Kconfig"

这样,到此为止我们的板卡已经添加成功了,这时编译肯定是没问题了。

omapl138移植uboot系列之添加属于我们自己的板卡(第四篇)相关推荐

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

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

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

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

  3. omapl138移植uboot系列之移植板卡(第五篇)

    上节操作完成后,虽然uboot中有了我们自己的板卡,但并未进行移植,所以现在是还不能烧录的,本节将带领大家根据自己的板卡进行uboot移植. 2.4.1 图形界面下配置 命令行执行 make menu ...

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

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

  5. “约见”面试官系列之常见面试题之第六十四篇之call和apply区别(建议收藏)

    call和apply用来调用函数,并用指定对象(第一个参数)替换函数的 this 值,同时用指定数组替换函数的参数.注:也可以不指定参数,此时只是单纯的调用函数,如:fun.call() 语法: fu ...

  6. “约见”面试官系列之常见面试题之第五十四篇之语义化标签(建议收藏)

    目录 什么是语义元素? 为什么要语义化? HTML5常用的语义元素 很多面试官会问:谈谈你对 HTML5语义化标签的理解.那么本篇博客专门解答一下这个问题. 什么是语义元素? 语义是指对一个词或者句子 ...

  7. “约见”面试官系列之常见面试题之第八十四篇之手写promise(建议收藏)

    class Promise{constructor(excutor){this.value = '';this.reason = '';this.status = 'padding'this.onFu ...

  8. “约见”面试官系列之常见面试题之第七十四篇之v-if和v-for优先级(建议收藏)

    永远不要把 v-if 和 v-for 同时用在同一个元素上. 一般我们在两种常见的情况下会倾向于这样做: 为了过滤一个列表中的项目 (比如 v-for="user in users" ...

  9. “约见”面试官系列之常见面试题之第一百零四篇之vue优点(建议收藏)

    vue的优点: 1.轻量级框架 只关注视图层,是一个构建数据的视图集合,大小只有几十kb Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统 2.简单易学 国人开发,中文文档,不存在语言障 ...

最新文章

  1. 【代码笔记】Web-CSS-CSS id和Class选择器
  2. top命令的笔记补充2--如何将top信息后台运行并写入log
  3. 错误linux autocof.h,【技巧】一种提高 [ 定位Linux内核编译错误 ] 效率的方法
  4. 如何使用LaTeX让自己不乱?
  5. SAP 电商云 Spartacus UI Quick Order 对应的 CMS 内容
  6. java框架mybatis配置文件总结一
  7. XDOJ-1002-小W的塔防(dp)
  8. mysqldump备份还原
  9. matlab销量预测的数学模型,数学建模:酒店最优化问题.用matlab算出《酒店价格预测模型》...
  10. 关于proc的介绍,比较详细
  11. 棋牌游戏-c#实现批量修改文件后缀
  12. 图像质量指标:峰值信噪比PSNR和结构相似性SSIM
  13. codevs 1535 封锁阳光大学
  14. MyEclipse详解
  15. mysql获取当前日期的前一天_MySql取得日期(前一天、某一天)
  16. 基于python学生考勤_学生考勤系统(含源代码).pdf
  17. java 停止定时器_Java/Android计时器(开始,暂停,恢复,停止)
  18. Qt [GC9-2]:从无到有
  19. 【JAVA】Java 内存模型中的 happen-before
  20. UML面向对象分析与建模

热门文章

  1. 百度搜索 “Java面试题” 前200页
  2. JVM帝国一日游【穿越小说】
  3. java导出excel,导入excel,导出csv工具类整理
  4. 模糊神经网络 matlab,模糊神经网络程序代码
  5. 模糊神经网络学习1【基础案例】
  6. 非师范专业不能教高中吗 高中教师资格证怎么考
  7. 抓紧收藏,教你如何轻松快速度过冷启动时期?短视频新手必看
  8. 智慧环保大数据可视化系统建设
  9. 基于win10的hyper-v安装openwrt与zerotier实现内网穿透及异地组网
  10. 遇到maven私服下载过慢或者卡死的情况