本次主要是要新增一个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. 阿里云VOD(一)

    一.阿里云视频点播 1.功能介绍 视频点播(ApsaraVideo VoD,简称VoD)是集视频采集.编辑.上传.媒体资源管理.自动化转码处理(窄带高清TM).视频审核分析.分发加速于一体的一站式音视 ...

  2. 解决Ajax同源政策的方法【JSONP + CORS + 服务器端解决方案】

    解决Ajax同源政策的方法 使用JSONP解决同源限制问题 jsonp是json with padding的缩写,它不属于Ajax请求,但它可以模以Ajax请求.\ 步骤 1.将不同源的服务器端请求地 ...

  3. JMeter联机负载及问题解决

    主控制机:存放JMeter脚本的机器叫做主控制机 负载机:被连接并用来运行脚本的机器叫做负载机 操作步骤: 1.修改主控制机上,JMeter安装目录bin目录下的JMeter.properties文件 ...

  4. LVS负载均衡之DR模式原理介绍

    LVS基本原理 流程解释: 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间 PREROUTING 链首先会接收到用户请求,判断目标 IP 确定是本机 IP ...

  5. SQL函数知识点

    SQL函数知识点 SQL题目(一) 1.查询部门编号为10的员工信息 select*from emp where empno=10; 2.查询年薪大于3万的人员的姓名与部门编号 select enam ...

  6. (Oracle)看懂Oracle执行计划(转载)

    最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问 ...

  7. Linux centos7编译源码安装redis

    1.安装准备 ① 由于redis底层用c语言编写的,安装redis需要先将官网下载的源码进行编译,编译依赖make和gcc环境,如果没有则需要安装(一般系统中已经装了了make和gcc,无须再装) 安 ...

  8. 系列trick - 随机

    系列trick - 随机 不断更新中,欢迎来提供idea 随机的字符串 出现次数 \(\ge 2\) 的子串期望长度是 \(\log n\) 两个随机串的期望LCP,LCSuf,LCSub长度是 \( ...

  9. 「NOIP2009」最优贸易

    「NOIP2009」最优贸易 「NOIP2009」最优贸易内存限制:128 MiB时间限制:1000 ms 题目描述C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意 ...

  10. LOJ10128. 花神游历各国

    花神喜欢步行游历各国,顺便虐爆各地竞赛.花神有一条游览路线,它是线型的,也就是说,所有游历国家呈一条线的形状排列,花神对每个国家都有一个喜欢程度(当然花神并不一定喜欢所有国家). 每一次旅行中,花神会 ...