am335x-uboot-2014.10移植
来源:互联网 发布:淘宝店设计装修多少钱 编辑:程序博客网 时间:2024/05/29 14:17
移植基于am335x evm 板子的
参考文章:
am335x学习笔记-uboot-2014.10
注意几个文件
board/ti/am335x/u-boot.lds
arch/arm/cpu/armv7/am33xx/u-boot-spl.lds
include/configs/ti_am335x_common.h
include/configs/ti_armv7_common.h
include/configs/am335x_evm.h
arch/arm/include/asm/arch/omap.h
SPL目录下u-boot-spl.map u-boot-spl
arm-linux-objdump -d u-boot-spl > SPL //重定向到文件中,反汇编文件,根据反汇编文件和map文件界定函数的位置
//arch/arm/cpu/armv7/start.S#ifndef CONFIG_SKIP_LOWLEVEL_INIT bl cpu_init_cp15 bl cpu_init_crit#endif bl _main
//include/configs/ti_am335x_common.h#if !defined(CONFIG_SPL_BUILD) && !defined(CONFIG_NOR_BOOT)#define CONFIG_SKIP_LOWLEVEL_INIT#endif
SPL 阶段 CONFIG_SKIP_LOWLEVEL_INIT 没有定义
cpu_init_cp15: 协处理器的有关配置,这里不讨论。
cpu_init_crit: bl lowlevel_init
//arch/arm/cpu/armv7/lowlevel_init.SENTRY(lowlevel_init) ldr sp, =CONFIG_SYS_INIT_SP_ADDR bic sp, sp, #7 /* 8-byte alignment for ABIcompliance */#ifdef CONFIG_SPL_BUILD ldr r9, =gdata#else sub sp, sp, #GD_SIZE bic sp, sp, #7 mov r9, sp#endif push {ip, lr} bl s_init pop {ip, pc}ENDPROC(lowlevel_init)
//include/configs/ti_armv7_common.h#define CONFIG_SYS_INIT_SP_ADDR (NON_SECURE_SRAM_END - \ GENERATED_GBL_DATA_SIZE)//arch/arm/include/asm/arch/omap.h#ifdef CONFIG_AM33XX#define NON_SECURE_SRAM_START 0x402F0400#define NON_SECURE_SRAM_END 0x40310000#define SRAM_SCRATCH_SPACE_ADDR 0x4030B800#endif//include/generated/generic-asm-offsets.h#define GENERATED_GBL_DATA_SIZE 192 #define GD_SIZE 184
//arch/arm/cpu/armv7/am33xx/board.cvoid s_init(void){#ifdef CONFIG_NOR_BOOT //undefine enable_norboot_pin_mux();#endif#ifdef CONFIG_SPL_BUILD save_omap_boot_params();#endif watchdog_disable();//cpudir/am33xx/board.c timer_init(); //enable uart0 pin mux set_uart_mux_conf();//cpudir/arch_timer.c setup_clocks_for_console();//cpudir/am33xx/clock_am33xx.c uart_soft_reset();#if defined(CONFIG_NOR_BOOT) || defined(CONFIG_QSPI_BOOT) gd->baudrate = CONFIG_BAUDRATE; serial_init(); gd->have_console = 1;#elif defined(CONFIG_SPL_BUILD) gd = &gdata; //uart init preloader_console_init();//common/spl/spl.c#endif#if defined(CONFIG_SPL_AM33XX_ENABLE_RTC32K_OSC) /* Enable RTC32K clock */ rtc32k_enable();//cpudir/am33xx/board.c#endif#ifdef CONFIG_SPL_BUILD board_early_init_f();//cpudir/am33xx/board.c sdram_init();//board/ti/am335x/board.c#endif}
关于时钟管理部分: 寄存器 CM_WKUP.CM_WKUP_CLKSTCTRL,个人理解类似总开关,CM_WKUP_CLKSTCTRL[CLKTRCTRL],管理其他位的开关,而其他位是只读的,在寄存器CM_WKUP.CM_WKUP_UART0_CLKCTRL[MODULEMODE]对应模块的激活
//cpudir/am33xx/clock_am33xx.cvoid setup_clocks_for_console(void){ clrsetbits_le32(&cmwkup->wkclkstctrl, CD_CLKCTRL_CLKTRCTRL_MASK, CD_CLKCTRL_CLKTRCTRL_SW_WKUP << CD_CLKCTRL_CLKTRCTRL_SHIFT); .......... clrsetbits_le32(&cmwkup->wkup_uart0ctrl, MODULE_CLKCTRL_MODULEMODE_MASK, MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN << MODULE_CLKCTRL_MODULEMODE_SHIFT); ..........}
//cpudir/am33xx/board.cint board_early_init_f(void){ prcm_init();//cpudir/am33xx/clock.c,基本时钟的初始化 set_mux_conf_regs();//board/ti/am335x/board.c,板级引脚配置 return 0;}
CLKOUT = 输入时钟 * m /(n+1) * (1 /M2);
//在sdram_init中调用config_ddr//cpudir/am33xx/emif4.cvoid config_ddr(unsigned int pll, const struct ctrl_ioregs *ioregs, const struct ddr_data *data, const struct cmd_control *ctrl, const struct emif_regs *regs, int nr){ ddr_pll_config(pll);//空函数#ifndef CONFIG_TI816X//未定义 config_vtp(nr);#endif config_cmd_ctrl(ctrl, nr);//cpudir/am33xx/ddr.c config_ddr_data(data, nr);#ifdef CONFIG_AM33XX config_io_ctrl(ioregs); /* Set CKE to be controlled by EMIF/DDR PHY */ writel(DDR_CKE_CTRL_NORMAL, &ddrctrl->ddrckectrl);#endif /* Program EMIF instance */ config_ddr_phy(regs, nr); set_sdram_timings(regs, nr); if (get_emif_rev(EMIF1_BASE) == EMIF_4D5) config_sdram_emif4d5(regs, nr); else config_sdram(regs, nr);}#endif
sdram_init执行完毕,bl _main //arch/arm/lib/crt0.S
ENTRY(_main)#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_STACK) ldr sp, =(CONFIG_SPL_STACK)#else ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)#endif bic sp, sp, #7 /* 8-byte alignment for ABI compliance */ mov r2, sp sub sp, sp, #GD_SIZE /* allocate one GD above SP */ bic sp, sp, #7 /* 8-byte alignment for ABI compliance */ mov r9, sp /* GD is above SP */ mov r1, sp mov r0, #0clr_gd: cmp r1, r2 /* while not at end of GD */ strlo r0, [r1] /* clear 32-bit GD word */ addlo r1, r1, #4 /* move to next */ blo clr_gd#if defined(CONFIG_SYS_MALLOC_F_LEN) && !defined(CONFIG_SPL_BUILD) sub sp, sp, #CONFIG_SYS_MALLOC_F_LEN str sp, [r9, #GD_MALLOC_BASE]#endif /* mov r0, #0 not needed due to above code */ bl board_init_f //arch/arm/lib/spl.cENDPROC(_main)//arch/arm/lib/spl.cvoid __weak board_init_f(ulong dummy){ debug("arch/arm/lib/spl.c:board_init_f\n"); memset(__bss_start, 0, __bss_end - __bss_start); gd = &gdata; board_init_r(NULL, 0);//common/spl/spl.c}
//common/spl/spl.cvoid board_init_r(gd_t *dummy1, ulong dummy2){ .....#ifdef CONFIG_SPL_BOARD_INIT spl_board_init();//cpudir/omap-common/boot-common.c#endif boot_device = spl_boot_device();//cpudir/omap-common/boot-common.c switch (boot_device) {//省略一些没有关系的语句#ifdef CONFIG_SPL_MMC_SUPPORT case BOOT_DEVICE_MMC1: case BOOT_DEVICE_MMC2: case BOOT_DEVICE_MMC2_2: spl_mmc_load_image();//common/spl/spl_mmc.c break;#endif#ifdef CONFIG_SPL_NAND_SUPPORT case BOOT_DEVICE_NAND: spl_nand_load_image(); break;#endif } }
//cpudir/omap-common/boot-common.cvoid spl_board_init(void){#ifdef CONFIG_SPL_NAND_SUPPORT gpmc_init();//cpudir/omap-common/mem-common.c#endif#if defined(CONFIG_AM33XX) && defined(CONFIG_SPL_MUSB_NEW_SUPPORT) arch_misc_init();//cpudir/board.c#endif#if defined(CONFIG_HW_WATCHDOG) hw_watchdog_init();//driver/watchdog/omap_wdt.c#endif#ifdef CONFIG_AM33XX am33xx_spl_board_init();//board/ti/am335x/board.c#endif}
//cpudir/omap-common/mem-common.c
void gpmc_init(void)
{
writel(0x00000012, &gpmc_cfg->config);//改为
writel(0x2,&gpmc->config);写保护引脚底电平有效
}
- am335x-uboot-2014.10移植
- AM335x uboot 移植
- AM335x uboot 移植
- AM335x uboot 移植
- AM335x uboot 移植
- [UBI]为AM335x uboot 移植UBI UBIFS功能
- Ti-am335x-uboot-2015.07移植LCD显示logo功能
- AM335x uboot spl分析
- AM335x uboot spl分析
- AM335x uboot spl分析
- AM335x uboot spl分析
- AM335x uboot spl分析
- AM335x uboot spl分析
- AM335x uboot spl分析
- am335x uboot参数 说明
- AM335X u-boot移植
- am335x nand驱动移植
- am335x 移植网上资料
- jQuery写的一棵动态加载的树
- 算法导论第一章,第二章笔记
- RBAC用户角色权限设计方案
- 是否已安装目标应用
- mysql常用引擎
- am335x-uboot-2014.10移植
- .net异常处理
- 使用git命令上传新的项目到git私有仓库
- 零基础学python-18.9 序列映射函数:map
- 体验复杂度
- Condtion实现生产者消费者通信
- Corosync+Pacemaker+DRBD+MySQL 实现高可用MySQL集群
- iOS经典讲解之UICollectionView
- webpack+react问题汇总