omapl138移植uboot系列之添加属于我们自己的板卡(第四篇)
在第一章节,我们已经编译好了一份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系列之添加属于我们自己的板卡(第四篇)相关推荐
- omapl138移植uboot系列之添加MTD分区(第七篇)
如果你刚刚使用仿真器的方式烧录了uboot镜像,你肯定会感叹实在是太慢了,先别叹气,看完本节你将爱上烧录程序. 2.6.1 添加MTD分区 MTD(memory Teachno Device)中文翻译 ...
- omapl138移植uboot系列之启动TI官方移植的Linux内核(启动内核第一篇)
启动TI官方移植的Linux内核 和编译uboot一样,Linux内核的编译也是三板斧,首先修改Makefile中的ARCH和CROSS_COMPILE,然后找到你要编译的板卡执行make xx_de ...
- omapl138移植uboot系列之移植板卡(第五篇)
上节操作完成后,虽然uboot中有了我们自己的板卡,但并未进行移植,所以现在是还不能烧录的,本节将带领大家根据自己的板卡进行uboot移植. 2.4.1 图形界面下配置 命令行执行 make menu ...
- omapl138移植uboot系列之在线升级(第八篇完结篇)
uboot在线升级的原理是先通过某种外部接口(如网口.串口.USB等)将目标文件加载到DDR,然后从DDR中读取二进制文件并写到存储介质指定地址,由于639A底板并无网口,唯一与外部通信的接口就是串口 ...
- “约见”面试官系列之常见面试题之第六十四篇之call和apply区别(建议收藏)
call和apply用来调用函数,并用指定对象(第一个参数)替换函数的 this 值,同时用指定数组替换函数的参数.注:也可以不指定参数,此时只是单纯的调用函数,如:fun.call() 语法: fu ...
- “约见”面试官系列之常见面试题之第五十四篇之语义化标签(建议收藏)
目录 什么是语义元素? 为什么要语义化? HTML5常用的语义元素 很多面试官会问:谈谈你对 HTML5语义化标签的理解.那么本篇博客专门解答一下这个问题. 什么是语义元素? 语义是指对一个词或者句子 ...
- “约见”面试官系列之常见面试题之第八十四篇之手写promise(建议收藏)
class Promise{constructor(excutor){this.value = '';this.reason = '';this.status = 'padding'this.onFu ...
- “约见”面试官系列之常见面试题之第七十四篇之v-if和v-for优先级(建议收藏)
永远不要把 v-if 和 v-for 同时用在同一个元素上. 一般我们在两种常见的情况下会倾向于这样做: 为了过滤一个列表中的项目 (比如 v-for="user in users" ...
- “约见”面试官系列之常见面试题之第一百零四篇之vue优点(建议收藏)
vue的优点: 1.轻量级框架 只关注视图层,是一个构建数据的视图集合,大小只有几十kb Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统 2.简单易学 国人开发,中文文档,不存在语言障 ...
最新文章
- 【代码笔记】Web-CSS-CSS id和Class选择器
- top命令的笔记补充2--如何将top信息后台运行并写入log
- 错误linux autocof.h,【技巧】一种提高 [ 定位Linux内核编译错误 ] 效率的方法
- 如何使用LaTeX让自己不乱?
- SAP 电商云 Spartacus UI Quick Order 对应的 CMS 内容
- java框架mybatis配置文件总结一
- XDOJ-1002-小W的塔防(dp)
- mysqldump备份还原
- matlab销量预测的数学模型,数学建模:酒店最优化问题.用matlab算出《酒店价格预测模型》...
- 关于proc的介绍,比较详细
- 棋牌游戏-c#实现批量修改文件后缀
- 图像质量指标:峰值信噪比PSNR和结构相似性SSIM
- codevs 1535 封锁阳光大学
- MyEclipse详解
- mysql获取当前日期的前一天_MySql取得日期(前一天、某一天)
- 基于python学生考勤_学生考勤系统(含源代码).pdf
- java 停止定时器_Java/Android计时器(开始,暂停,恢复,停止)
- Qt [GC9-2]:从无到有
- 【JAVA】Java 内存模型中的 happen-before
- UML面向对象分析与建模