u-boot 移植 --->2、在u-boot新增SOC和板子
本次主要是要新增一个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和板子的更多相关文章
- Spring Boot 项目学习 (三) Spring Boot + Redis 搭建
0 引言 本文主要介绍 Spring Boot 中 Redis 的配置和基本使用. 1 配置 Redis 1. 修改pom.xml,添加Redis依赖 <!-- Spring Boot Redi ...
- (转)Spring Boot 2 (八):Spring Boot 集成 Memcached
http://www.ityouknow.com/springboot/2018/09/01/spring-boot-memcached.html Memcached 介绍 Memcached 是一个 ...
- spring boot 系列之一:spring boot 入门
最近在学习spring boot,感觉确实很好用,开发环境搭建和部署确实省去了很多不必须要的重复劳动. 接下来就让我们一起来复习下. 一.什么是spring boot ? spring boot是干嘛 ...
- spring boot 系列之五:spring boot 通过devtools进行热部署
前面已经分享过四篇随笔: spring boot 系列之一:spring boot 入门 spring boot 系列之二:spring boot 如何修改默认端口号和contextpath spri ...
- Spring Boot 2 (八):Spring Boot 集成 Memcached
Spring Boot 2 (八):Spring Boot 集成 Memcached 一.Memcached 介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数 ...
- Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源
Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源 在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spri ...
- Spring Boot 2 (三):Spring Boot 2 相关开源软件
Spring Boot 2 (三):Spring Boot 2 相关开源软件 一.awesome-spring-boot Spring Boot 中文索引,这是一个专门收集 Spring Boot 相 ...
- Spring Boot 2 (二):Spring Boot 2 动态 Banner
Spring Boot 2 (二):Spring Boot 2 动态 Banner Spring Boot 2.0 提供了很多新特性,其中就有一个小彩蛋:动态 Banner. 一.配置依赖 使用 Sp ...
- Spring Boot 2(一):Spring Boot 2.0新特性
Spring Boot 2(一):Spring Boot 2.0新特性 Spring Boot依赖于Spring,而Spring Cloud又依赖于Spring Boot,因此Spring Boot2 ...
随机推荐
- CSS3+JS完美实现放大镜模式
最近看到一篇讲放大镜的文章,实践后感觉效果非常好,这里分享给大家. 效果如下: 其实现核心: CSS函数,如:calc() -- 动态计算:var() -- 使用自定义变量 CSS伪元素:::befo ...
- 干货!上古神器 sed 教程详解,小白也能看的懂
目录: 介绍工作原理正则表达式基本语法数字定址和正则定址基本子命令实战练习 介绍 熟悉 Linux 的同学一定知道大名鼎鼎的 Linux 三剑客,它们是 grep.awk.sed,我们今天要聊的主角就 ...
- 我为什么不鼓吹 WireGuard
原文链接:https://fuckcloudnative.io/posts/why-not-wireguard/ 最近有一款新型 VPN 工具备受瞩目,相信很多人已经听说过了,没错就是 WireGua ...
- centos系统磁盘扩容
1.查看磁盘空间大小,使用df -h 命令. 2. 增加磁盘空间,例如下图使用VM虚拟机增加的方式.物理机直接安装挂载上去. 3. 使用fdisk /dev/sda, 创建新分区. 4.重启Linux ...
- CobalStrike 4.0 生成后门几种方式 及 主机上线后基础操作
出品|MS08067实验室(www.ms08067.com) 本文作者:BlackCat(Ms08067内网安全小组成员) CobalStrike 4.0 生成后门几种方式 步骤:Attacks-〉P ...
- Vue中双向数据绑定是如何实现的?
vue 双向数据绑定是通过 数据劫持 结合 发布订阅模式的方式来实现的, 也就是说数据和视图同步,数据发生变化,视图跟着变化,视图变化,数据也随之发生改变:核心:关于VUE双向数据绑定,其核心是 Ob ...
- 使用nodejs构建Docker image最佳实践
目录 简介 准备nodejs应用程序 创建Dockerfile文件 创建.dockerignore文件 创建docker image 运行docker程序 node的docker image需要注意的 ...
- LOJ10021 Addition Chains
题目描述 原题来自:ZOJ 1937 已知一个数列 A0,A1,A2,A3,...,Am(其中A0=1,Am=n,A0<A1<A2<A3<...<Am ).对于每个 k, ...
- 小w、小j和小z
n个月没更了,现在学的东西很难,掌握不好,不敢更! 这个题目既不超范围又足够难想,反正我没想出来,很好的题目! 我发现noi.ac上的题目很不错!!! ------------------------ ...
- 简述vue-cli 2.x和vue-cli 3+在项目构建、运行、编译执行时的区别
码文不易啊,转载请带上本文链接呀,感谢感谢 https://www.cnblogs.com/echoyya/p/14363272.html 关于VUE的项目,有个问题一直不是特别清楚 ,不同公司的项目 ...