本次主要是要新增一个samsung的芯片到u-boot中,网上查阅资料发现s5pc1xx是与手上的S5PV210的友善的Tiny版子寄存器兼容的比较多,所以就准备以他为基础增加一个我的板子的支持到u-boot中。
step1
拷贝archarm目录下的mach-s5pc1xx目录修改名称为mach-s5pv210,注意这里的mach-xxx后面的xxx的命令是和Kconfig文件一会的修改相关的。
step2
在archarmKconfig 文件中增加新的芯片这里参考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
修改archarmmach-s5pv210目录下的Kconfig为如下内容
if ARCH_S5PV210
choice
prompt 'Tiny board select'
optional
endchoice
config SYS_SOC
default 's5pv210'
endif
然后在archarmKconfig文件增加
。
。
。
source 'arch/arm/mach-s5pc1xx/Kconfig' 原来就有的
source 'arch/arm/mach-s5pv210/Kconfig' 增加的
。
。
。
step4
增加board文件,参考archarmmach-s5pc1xxKconfig 文件中,这个芯片支持的平台,我这里选择goni平台作为参考拷贝boardsamsunggoni
到当前目录修改名称为boardsamsungtiny210;然后修改其中的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
返回去也就需要在前面拷贝修改后的archarmmach-s5pv210Kconfig文件中增加内容最后如下
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
这样还不够还差一个头文件并且这个头文件的命名必须是boardsamsungtiny210Kconfig文件中的 SYS_CONFIG_NAME 选项的值 本例就是Tiny210.h
具体目录是includeconfigs,最后就是增加默认配置文件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中全局查找一下找不到的符号,发现在archarmcpuarmv7s5p-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 移植 --->6、引导Linux启动测试
下一篇:u-boot 移植 --->1、u-boot配置(Kbuild)
- 热门资源推荐
- 热门放大器推荐
- RDR-142 - 35W电源
- i.MX RT1060 Evaluation Kit
- 使用 Embedded Planet 的 5CEFA9U27 的参考设计
- DC1369A-D、LTC2258-14 演示板、14 位 65 Msps ADC、LVDS 输出、5-170MHz
- LT3990EMSE-5 12V 降压转换器的典型应用
- 使用 Analog Devices 的 LTC1148 的参考设计
- LT1377IS8 具有直接反馈的正负转换器的典型应用
- 使用 NXP Semiconductors 的 TL431AI 的参考设计
- LT8304IS8E 18V 至 80Vin、5Vout 隔离反激式转换器的典型应用电路
- LT3512EMS 演示板,单片式高压隔离反激式转换器 36V VIN 75V,VOUT = 5V @ 500mA

非常经典的关于LLC的杨波博士论文
INA2126E-250

XC6406PP60DL






京公网安备 11010802033920号