zoukankan      html  css  js  c++  java
  • u-boot 移植 --->2、在u-boot新增SOC和板子

        本次主要是要新增一个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
    到当前目录修改名称为boardsamsung iny210;然后修改其中的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

    这样还不够还差一个头文件并且这个头文件的命名必须是boardsamsung iny210Kconfig文件中的 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文件,这个文件中实际就是一些宏再由各个源文件引用后对目标代码进行条件编译最后实现裁剪。

     

  • 相关阅读:
    关于js计算非等宽字体宽度的方法
    [NodeJs系列]聊一聊BOM
    Vue.js路由管理器 Vue Router
    vue 实践技巧合集
    微任务、宏任务与Event-Loop
    事件循环(EventLoop)的学习总结
    Cookie、Session和LocalStorage
    MySQL 树形结构 根据指定节点 获取其所在全路径节点序列
    MySQL 树形结构 根据指定节点 获取其所有父节点序列
    MySQL 创建函数报错 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators
  • 原文地址:https://www.cnblogs.com/w-smile/p/13124602.html
Copyright © 2011-2022 走看看