本次主要是要新增一个samsung的芯片到u-boot中,网上查阅资料发现s5pc1xx是与手上的S5PV210的友善的Tiny版子寄存器兼容的比较多,所以就准备以他为基础增加一个我的板子的支持到u-boot中。

step1

拷贝arch\arm\目录下的mach-s5pc1xx目录修改名称为mach-s5pv210,注意这里的mach-xxx后面的xxx的命令是和Kconfig文件一会的修改相关的。

step2

在arch\arm\Kconfig 文件中增加新的芯片这里参考s5pc1xx的内容




config ARCH_S5PC1XX
bool "Samsung S5PC1XX"
select CPU_V7
select DM
select DM_SERIAL
select DM_GPIO
select DM_I2C config ARCH_S5PV210
bool "Samsung S5P210"
select CPU_V7
select DM
select DM_SERIAL
select DM_GPIO
select DM_I2C 。

step3

修改arch\arm\mach-s5pv210\目录下的Kconfig为如下内容

if ARCH_S5PV210

choice
prompt "Tiny board select"
optional endchoice config SYS_SOC
default "s5pv210"
endif

然后在arch\arm\Kconfig文件增加




source "arch/arm/mach-s5pc1xx/Kconfig" 原来就有的
source "arch/arm/mach-s5pv210/Kconfig" 增加的


step4

增加board文件,参考arch\arm\mach-s5pc1xx\Kconfig 文件中,这个芯片支持的平台,我这里选择goni平台作为参考拷贝board\samsung\goni
到当前目录修改名称为board\samsung\tiny210\;然后修改其中的Kconfig为如下内容

if TARGET_TINY210
config SYS_BOARD
default "tiny210"
config SYS_VENDOR
default "samsung"
config SYS_SOC
default "s5pv210"
config SYS_CONFIG_NAME
default "Tiny210"
endif

返回去也就需要在前面拷贝修改后的arch\arm\mach-s5pv210\Kconfig文件中增加内容最后如下

if ARCH_S5PV210

choice
prompt "Tiny board select"
optional config TARGET_TINY210
bool "S5P 210 board"
select OF_CONTROL endchoice config SYS_SOC
default "s5pv210"
source "board/samsung/tiny210/Kconfig"
endif

注意这里的config SYS_SOC 的值就是和前面的mach-xxx后面的名字要一致。否则在make时候不会吧新增的SOC文件夹

step5

这样还不够还差一个头文件并且这个头文件的命名必须是board\samsung\tiny210\Kconfig文件中的 SYS_CONFIG_NAME 选项的值 本例就是Tiny210.h

具体目录是\include\configs\,最后就是增加默认配置文件tiny_defconfig,复制s5p_goni_defconfig为Tiny210_defconfig
然后执行

make distclean
make Tiny210_defconfig

make 进行编译链接过程出错

ch/arm/mach-s5pv210/built-in.o: In function `s5pc100_get_pll_clk':
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/arch/arm/mach-s5pv210/clock.c:60: undefined reference to `s5p_cpu_id'
arch/arm/mach-s5pv210/built-in.o: In function `s5pc100_get_pclk':
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/arch/arm/mach-s5pv210/clock.c:278: undefined reference to `s5p_cpu_id'
arch/arm/mach-s5pv210/built-in.o: In function `s5pc110_get_pclk':
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/arch/arm/mach-s5pv210/clock.c:272: undefined reference to `s5p_cpu_id'
arch/arm/mach-s5pv210/built-in.o: In function `s5pc1xx_get_uart_clk':
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/arch/arm/mach-s5pv210/clock.c:286: undefined reference to `s5p_cpu_id'
board/samsung/common/built-in.o: In function `set_board_info':
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/board/samsung/common/misc.c:98: undefined reference to `s5p_cpu_rev'
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/board/samsung/common/misc.c:98: undefined reference to `s5p_cpu_id'
board/samsung/tiny210/built-in.o: In function `board_mmc_init':
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/board/samsung/tiny210/s5p210.c:139: undefined reference to `s5p_cpu_id'
common/built-in.o: In function `cread_line':
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/common/cli_readline.c:265: undefined reference to `get_tbclk'
common/built-in.o:(.data.init_sequence_f+0x40): undefined reference to `print_cpuinfo'
drivers/gpio/built-in.o: In function `s5p_gpio_get_bank':
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/drivers/gpio/s5p_gpio.c:72: undefined reference to `s5p_cpu_id'
drivers/usb/gadget/built-in.o: In function `otg_phy_init':
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/drivers/usb/gadget/dwc2_udc_otg_phy.c:76: undefined reference to `s5p_cpu_id'
lib/built-in.o: In function `tick_to_time':
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/lib/time.c:103: undefined reference to `get_tbclk'
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/lib/time.c:103: undefined reference to `get_tbclk'
lib/built-in.o: In function `usec_to_tick':

在VScode中全局查找一下找不到的符号,发现在arch\arm\cpu\armv7\s5p-common目录下的文件中定义了,所以看一下这个文件是否参与编译执行
make V=1 发现这个文件夹未参与编译查到arch/arm/cpu/armv7/Makefile 这个文件中发现如下一段内容

ifneq (,$(filter s5pc1xx exynos ,$(SOC)))
obj-y += s5p-common/
endif

现在肯定就是这一块的内容导致该目录未参与编译了,所以很简单增加我们新增的SOC到里如下

ifneq (,$(filter s5pc1xx exynos s5pv210,$(SOC)))
obj-y += s5p-common/
endif

在进行make成功生成u-boot.bin 目前工程配置基本算是可以开始调试了,后续需要在进行具体code的修改移植了。

总结

我新增芯片和板子的配置过程,我认为kbuild 的工作原理可以作为黑盒子看待会用就可以,明白他的配置过程就可以,就比如参考我前面的Kbuild的配置过程分析就可以知道在执行make xxx_defconfig 时实际匹配到了u-boot的顶层makefile文件中的特定规则,这个规则就是生成了Kbuild工具,他是一个主机可执行文件读取u-boot下的所有Kconfig文件这些文件都是通过source “xxxxx”这种类似C语言中的include的操作原理类似的方式实现相互的引用最终生成了一个.config在工程的根目录下并在make时生成config.h文件,这个文件中实际就是一些宏再由各个源文件引用后对目标代码进行条件编译最后实现裁剪。

u-boot 移植 --->2、在u-boot新增SOC和板子的更多相关文章

  1. Spring Boot 项目学习 (三) Spring Boot + Redis 搭建

    0 引言 本文主要介绍 Spring Boot 中 Redis 的配置和基本使用. 1 配置 Redis 1. 修改pom.xml,添加Redis依赖 <!-- Spring Boot Redi ...

  2. (转)Spring Boot 2 (八):Spring Boot 集成 Memcached

    http://www.ityouknow.com/springboot/2018/09/01/spring-boot-memcached.html Memcached 介绍 Memcached 是一个 ...

  3. spring boot 系列之一:spring boot 入门

    最近在学习spring boot,感觉确实很好用,开发环境搭建和部署确实省去了很多不必须要的重复劳动. 接下来就让我们一起来复习下. 一.什么是spring boot ? spring boot是干嘛 ...

  4. spring boot 系列之五:spring boot 通过devtools进行热部署

    前面已经分享过四篇随笔: spring boot 系列之一:spring boot 入门 spring boot 系列之二:spring boot 如何修改默认端口号和contextpath spri ...

  5. Spring Boot 2 (八):Spring Boot 集成 Memcached

    Spring Boot 2 (八):Spring Boot 集成 Memcached 一.Memcached 介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数 ...

  6. Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源

    Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源 在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spri ...

  7. Spring Boot 2 (三):Spring Boot 2 相关开源软件

    Spring Boot 2 (三):Spring Boot 2 相关开源软件 一.awesome-spring-boot Spring Boot 中文索引,这是一个专门收集 Spring Boot 相 ...

  8. Spring Boot 2 (二):Spring Boot 2 动态 Banner

    Spring Boot 2 (二):Spring Boot 2 动态 Banner Spring Boot 2.0 提供了很多新特性,其中就有一个小彩蛋:动态 Banner. 一.配置依赖 使用 Sp ...

  9. Spring Boot 2(一):Spring Boot 2.0新特性

    Spring Boot 2(一):Spring Boot 2.0新特性 Spring Boot依赖于Spring,而Spring Cloud又依赖于Spring Boot,因此Spring Boot2 ...

随机推荐

  1. 微信小程序腾讯地图SDK使用方法

    一.本篇文章主要知识点有以下几种: 1.授权当前位置 2.map组件的使用 3.腾讯地图逆地址解析 4.坐标系的转化 二.效果如下: 三.WXML代码 <map id="map&quo ...

  2. 简易双色球dome分享

    代码如下: <style type="text/css"> div {font-weight: bold;text-align: center;} .tone{widt ...

  3. 从synchronized和lock区别入手聊聊java锁机制

    写这篇文章之前,我去百度了一下啥叫锁,百度百科上写道:置于可启闭的器物上,以钥匙或暗码开启.确实我们一般理解的锁就是门锁,密码锁,但是在计算机科学中,锁又是啥,说实话,这个问题我也思考了很久,也没法很 ...

  4. STP 根桥、根端口、指定端口是如何选举的

    学习HCIA过程中,对交换机的根桥.跟端口以及指定端口选举有些迷糊,也度娘了一番,总觉得一部分人解释的不够全面精细.通过仔细研究最终有了自己的理解,分享给大家,如果纰漏,欢迎指正. STP收敛过程: ...

  5. Bitter.Core系列十:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore 之 Log 日志

    Bitter 框架的 Log 全部采用 NLog 日志组件.Bitter.Core 的 执行语句的日志记录 Nlog 日志级别为:info.  如果想要查看Bitter.Core 的执行SQL,先要去 ...

  6. HTML Standard系列:Event loop、requestIdleCallback 和 requestAnimationFrame

    HTML Standard系列:Event loop.requestIdleCallback 和 requestAnimationFrame - 掘金 https://juejin.im/post/5 ...

  7. Springboot中PropertySource注解的使用

    https://blog.csdn.net/qq_30739519/article/list/3 注解 https://blog.csdn.net/qq_30739519/article/detail ...

  8. Java 常见关键字总结:final、static、this、super!

    final,static,this,super 关键字总结 final 关键字 final关键字,意思是最终的.不可修改的,最见不得变化 ,用来修饰类.方法和变量,具有以下特点: final修饰的类不 ...

  9. 活动精彩实录 | 王峰:Cassandra在360的多场景应用及未来趋势

    点击此处观看完整活动视频 大家好,我是360的王峰,我今天主要通过Cassandra在多场景下的应用来介绍一下Cassandra在360落地的情况. 我会从以下这几个方面进行介绍.首先介绍下Cassa ...

  10. 扩展欧几里得(exgcd)及其应用

    定义 扩展欧几里得算法是用来在已知一组 \((a,b)\) 的时,求解一组 \((x,y)\) 使得 \[ax+by=gcd(a,b) \] 思想 and 板子 根据相关的知识可以得到 \[gcd(a ...