zoukankan      html  css  js  c++  java
  • 从uboot官方开始移植

    一、start.S文件分析

    1、设置中断异常向量表

    2、save_boot_params    //空函数,直接返回,占位的意思   (126)

    3、设置CPU为SVC32 mode  (131)

    4、调用cpu_init_cp15 :关闭MMU、cache  (159)

    5、调用cpu_init_crit----->调用lowlevel_init:IO复位、关看门狗、初始化串口

     

    二、uboot代码的修改

    1、在代码的前边添加16字节的校验头信息

    2、修改lowlevel_init的链接问题

    • arch/arm/cpu/u-boot.ldsstart.o后面添加board/samsung/goni/lowlevel_init.o (.text*)
    • 修改board/samsung/goni/Makefile

    3、添加DDR初始化,在cpu_init_crit中添加,之后进行代码的重定位

    • 添加cpu_init.S文件到uboot2013.10中
    • 作链接处理,同lowlevel_init.S文件一样
    • 添加头文件s5pc110.h到include目录下
    • DDR配置参数,从三星版本的smdkv210single.h中复制到s5p_goni.h中
    • s5pc110.h中进行修整

    4、添加uboot第二阶段重定位

    • 重定位代码移植
    • bss段移植
    • movi_bl2_copy函数移植

                 movi.c和movi.h到uboot2013.10中,方法和cpu_init.S一样

    • _mian函数中基本处理,去掉重定位功能
    • 最后在s5p_goni.h中添加了 CONFIG_EVT1这个宏
    • 屏蔽掉这个规则"R_ARM_RELATIVE

    下面的修改都是在_main中

    5、修改banner

    _main----> board_init_f---->init_sequence中display_banner函数

     6、CPU信息的更改

    _main----> board_init_f---->init_sequence中的print_cpuinfo函数

    更改时钟频率:在cpu_init_crit函数中添加时钟的初始化函数,从samsung版本的移植,然后再S5p_goni.h中添加相应的宏

     7、board名称更改

    _main----> board_init_f---->init_sequence中的checkboard函数

     8、DDR配置值修改

    _main----> board_init_f---->init_sequence中的dram_init函数,在S5p_goni.h中修改DRAM的配置宏信息

    #define CONFIG_NR_DRAM_BANKS	2
    #define PHYS_SDRAM_1		CONFIG_SYS_SDRAM_BASE	/* OneDRAM Bank #0 */
    #define PHYS_SDRAM_1_SIZE	(256 << 20)		/* 256 MB in Bank #0 */
    #define PHYS_SDRAM_2		0x40000000		/* mDDR DMC1 Bank #1 */
    #define PHYS_SDRAM_2_SIZE	(256 << 20)		/* 256 MB in Bank #1 */
    

      

     9、屏蔽多余信息提示WARNING和PMIC

    board_init_r中enable_caches();函数

    board_init_r中power_init_board()函数

    10、去掉oneNand支持

    在S5p_goni.h中屏蔽CONFIG_CMD_ONENAND宏

    在S5p_goni.h中屏蔽和ONENAND相关的宏

    1 //#define CONFIG_ENV_IS_IN_ONENAND    1
    2 //#define CONFIG_ENV_SIZE            (256 << 10)    /* 256 KiB, 0x40000 */
    3 //#define CONFIG_ENV_ADDR            (1 << 20)    /* 1 MB, 0x100000 */
    4 
    5 //#define CONFIG_USE_ONENAND_BOARD_INIT
    6 //#define CONFIG_SAMSUNG_ONENAND        1
    7 //#define CONFIG_SYS_ONENAND_BASE        0xB0000000

    在根据提示信息作相应的修改,添加这些宏

    1 #define CONFIG_ENV_SIZE            CFG_ENV_SIZE    /* 256 KiB, 0x40000 */
    2 #define CONFIG_ENV_IS_IN_MMC       1
    3 #define CONFIG_SYS_MMC_ENV_DEV   0     //0表示SD卡

    在board/samsung/goni的Makefile中,去掉onenand.o(15行)

    在common中屏蔽掉COBJS-$(CONFIG_ENV_IS_IN_NAND) += env_nand.o    46行

    11、添加SD/MMC支持

    • 对比三星版本,复制文件到uboot/drivers/mmc,注释掉CONFIG_SDHCI、CONFIG_S5P_SDHCI,添加CONFIG_S3C_HSMMC宏,根据文件复制samsung中driver/mmc中makefile相关内容
    • board_mmc_init()函数修改成三星版本的,根据三个函数所在的文件进行移植,(把setup_hsmmc.c添加到uboot的goni文件夹下)
    • 在浏览三个函数,看缺少什么宏,进行移植
    • 编译,根据报错进行相应修改

    (1)出错1:cmd_mmc.c中出错。原因是cmd_mmc.c和mmc驱动密切相关,所以改了驱动后这个实现文件也要跟着改,解决方法是从三星版本的直接同名文件复制过来替换

    (2)出错2:drivers/mmc/mmc_write.c编译出错。原因是这个文件和本来版本中的mmc.c文件相关,但是mmc.c被替换掉了所以这个文件编译报错。解决方案就是修改makefile去掉这个文件的依赖,让他不被编译。

    (3)出错3:#include<regs.h>注释掉,然后添加#include <s5pc110.h>

    12、环境变量的移植

    • 环境变量相关代码浏览,通过搜索saveenv,找到Env_mmc.c--->saveenv()----->mmc_get_env_addr()[修改offset]------>使CONFIG_ENV_OFFSET=17*512
    • 修改完环境变量后,先用命令mmc write 0 30000000 17# 32破坏掉inand自带的,然后重启即可看见自己修改的那一份

    14、网卡驱动的移植

    • 找到board.c,在S5p_goni.h添加CONFIG_CMD_NET宏
    • 添加ping  tftp命令支持,在S5p_goni.h添加CONFIG_CMD_PING    CONFIG_CMD_NET
    • 在eth.c添加注册函数,board_eth_init用来注册网卡
    1 extern int dm9000_initialize(bd_t *bis);
    2 
    3 static int board_eth_init(bd_t *bis)
    4 {
    5 
    6     return dm9000_initialize(bis);
    7 
    8 }

       

  • 相关阅读:
    vue项目中关闭eslint
    关于ios的safari下,页面底部弹出登陆遮罩层,呼出软键盘时 问题解决
    1.wap端绑定电话号码&发送短信
    node.js的安装与配置
    2020年Web前端开发工作容易找吗?
    JS干货分享—-this指向
    2020年学习前端开发应该看哪些书?
    laravel migrate增加、修改、删除字段
    echarts饼状统计图、柱状统计图
    PHP伪静态
  • 原文地址:https://www.cnblogs.com/zyj23/p/12392759.html
Copyright © 2011-2022 走看看