uboot 源码研究
星空探索
linux
展开
-
uboot目录结构
u-boot$ lsapi common doc fs lib net snapshot.commitarch config.mk drivers include Licenses post testboard configs dts Kbuild MAINTAINER原创 2017-03-27 08:08:32 · 692 阅读 · 0 评论 -
uboot global_data
include/asm-generic/global_data.hglobal_data: /* * The following data structure is placed in some memory which is * available very early after boot (like DPRAM on MPC8xx/MPC82xx, or * some原创 2017-03-16 08:27:17 · 407 阅读 · 0 评论 -
uboot bd_info
include/asm-generic/u-boot.hbd_info:/* * Board information passed to Linux kernel from U-Boot * * include/asm-ppc/u-boot.h */#ifndef __ASSEMBLY__typedef struct bd_info { unsigned long原创 2017-03-16 08:27:00 · 998 阅读 · 0 评论 -
uboot uclass和uclass_driver
struct uclass { void*priv; structuclass_driver *uc_drv; structlist_head dev_head; structlist_head sibling_node;};struct uclass_driver { constchar *name;原创 2017-03-16 08:22:26 · 2526 阅读 · 0 评论 -
uboot下ARMv8 lds
#include #include OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64")OUTPUT_ARCH(aarch64)ENTRY(_start)SECTIONS{#ifdef CONFIG_ARMV8_SECURE_BASE /DISCARD/ :原创 2017-03-16 08:27:34 · 1351 阅读 · 0 评论 -
uboot下ARMv8 EL切换
#include #include #include #include ENTRY(armv8_switch_to_el2) switch_el x6, 1f, 0f, 0f0: cmp x5, #ES_TO_AARCH64 b.eq 2f /* * When loading 32-bit kernel, it will jump * to secure原创 2017-03-16 08:27:54 · 5045 阅读 · 3 评论 -
uboot下ARMV8 lowlevel_init
lowlevel_init:#include #include #include ENTRY(lowlevel_init) /* * Setup a temporary stack. Global data is not available yet. */#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_STAC原创 2017-03-16 08:28:11 · 880 阅读 · 0 评论 -
Uboot 下board_init_f调用函数集合
前面我们讨论了board_init_f调用的调用时机,此函数主要是对init_sequence_f中的函数进行回调。common/board_f.cstatic const init_fnc_t init_sequence_f[] = {#ifdef CONFIG_SANDBOX setup_ram_buf,#endif setup_mon_len,#ifdef CON原创 2017-03-16 08:34:31 · 2910 阅读 · 0 评论 -
uboot 通用board_init_f实现
common/board_f.cvoid board_init_f(ulong boot_flags){#ifdef CONFIG_SYS_GENERIC_GLOBAL_DATA /* * For some architectures, global data is initialized and used before * calling this function.原创 2017-03-16 08:33:58 · 1196 阅读 · 0 评论 -
uboot下函数run_main_loop分析
common/board_r.c run_main_loop static int run_main_loop(void){#ifdef CONFIG_SANDBOX sandbox_main_loop_init();#endif /* main_loop() can return to retry autoboot, if so just run it agai原创 2017-03-16 08:33:21 · 589 阅读 · 0 评论 -
uboot下run_main_loop中main_loop实现
common/main.c main_loop/* We come here after U-Boot is initialised and ready to process commands */void main_loop(void){ const char *s; bootstage_mark_name(BOOTSTAGE_ID_MAIN_LOOP, "main_loop原创 2017-03-16 08:33:06 · 795 阅读 · 0 评论 -
uboot中main_loop下bootdelay_process实现
common/autoboot.c CONFIG_AUTOBOOT const char *bootdelay_process(void){ char *s; int bootdelay;#ifdef CONFIG_BOOTCOUNT_LIMIT unsigned long bootcount = 0; unsigned long bootlimit = 0;原创 2017-03-16 08:32:07 · 1712 阅读 · 0 评论 -
uboot 下MMC驱动
drivers\mmc static const struct blk_ops mmc_blk_ops = { .read = mmc_bread,#ifndef CONFIG_SPL_BUILD .write = mmc_bwrite, .erase = mmc_berase,#endif .select_hwpart = mmc_select_hwpart,原创 2017-03-16 08:30:47 · 2287 阅读 · 0 评论 -
uboot 设备驱动之设备描述
include/dm/device.h/** * struct udevice - An instance of a driver * * This holds information about a device, which is a driver bound to a * particular port or peripheral (essentially a drive原创 2017-03-16 08:30:35 · 612 阅读 · 0 评论 -
uboot 设备驱动之设备驱动描述
include/dm/device.h/** * struct driver - A driver for a feature or peripheral * * This holds methods for setting up a new device, and also removing it. * The device needs information to se原创 2017-03-16 08:30:17 · 602 阅读 · 0 评论 -
uboot 设备驱动之 驱动申明
include/dm/device.h /* Declare a new U-Boot driver */#define U_BOOT_DRIVER(__name) \ ll_entry_declare(struct driver, __name, driver)/* Get a pointer to a given driver */#define DM_GET_D原创 2017-03-16 08:30:00 · 949 阅读 · 0 评论 -
uboot下设备id描述
include/dm/device.h OF_CONTROL/** * struct udevice_id - Lists the compatible strings supported by a driver * @compatible: Compatible string * @data: Data for this compatible string */stru原创 2017-03-16 08:29:49 · 1095 阅读 · 0 评论 -
uboot 设备树scan
drivers/core/root.c int dm_init_and_scan(bool pre_reloc_only){ int ret; ret = dm_init(); if (ret) { debug("dm_init() failed: %d\n", ret); return ret; } ret = dm_scan_platdata(pre_r原创 2017-03-16 08:29:35 · 1375 阅读 · 0 评论 -
uboot下init_sequence_f函数之copy_uboot_to_ram
copy_uboot_to_ram:#if defined(CONFIG_X86) || defined(CONFIG_ARC) copy_uboot_to_ram, do_elf_reloc_fixups, clear_bss,#endif原创 2017-03-16 08:29:20 · 458 阅读 · 0 评论 -
uboot下init_sequence_f函数之jump_to_copy
jump_to_copy:#if !defined(CONFIG_ARM) && !defined(CONFIG_SANDBOX) && \ !CONFIG_IS_ENABLED(X86_64) jump_to_copy,#endif /* ARM calls relocate_code from its crt0.S */#if !defined(CONFIG原创 2017-03-16 08:28:49 · 797 阅读 · 0 评论 -
uboot下init_sequence_r函数集
common/board_r.c/* * Over time we hope to remove these functions with code fragments and * stub funtcions, and instead call the relevant function directly. * * We also hope to remove most of原创 2017-03-16 08:28:35 · 1640 阅读 · 0 评论 -
uboot下init_sequence_f函数之init_func_i2c
common/board_f.c init_func_i2c #if defined(CONFIG_HARD_I2C) || defined(CONFIG_SYS_I2C)static int init_func_i2c(void){ puts("I2C: ");#ifdef CONFIG_SYS_I2C i2c_init_all();#else i2c_i原创 2017-03-22 08:20:27 · 620 阅读 · 0 评论 -
uboot下init_sequence_f函数之reserve_legacy_video
reserve_legacy_video:# if defined(CONFIG_VIDEO) && (!defined(CONFIG_PPC) || defined(CONFIG_8xx)) && \ !defined(CONFIG_ARM) && !defined(CONFIG_X86) && \ !defined(CONFIG_BLACKFIN) && !defined(CO原创 2017-03-22 08:20:02 · 338 阅读 · 0 评论 -
uboot下init_sequence_f函数之reserve_trace
reserve_trace:static int reserve_trace(void){#ifdef CONFIG_TRACE gd->relocaddr -= CONFIG_TRACE_BUFFER_SIZE; gd->trace_buff = map_sysmem(gd->relocaddr, CONFIG_TRACE_BUFFER_SIZE); debug("Res原创 2017-03-22 08:19:41 · 309 阅读 · 0 评论 -
uboot下init_sequence_f函数之reserve_malloc
#ifndef CONFIG_SPL_BUILD reserve_malloc, reserve_board,#endif static int reserve_malloc(void){ gd->start_addr_sp = gd->start_addr_sp - TOTAL_MALLOC_LEN; debug("Reserving %dk for malloc原创 2017-03-22 08:19:27 · 585 阅读 · 0 评论 -
uboot下init_sequence_f函数之setup_machine
setup_machine:static int setup_machine(void){#ifdef CONFIG_MACH_TYPE gd->bd->bi_arch_number = CONFIG_MACH_TYPE; /* board id for Linux */#endif return 0;}原创 2017-03-22 08:19:01 · 576 阅读 · 0 评论 -
uboot下init_sequence_f函数之reserve_global_data
reserve_global_data:static int reserve_global_data(void){ gd->start_addr_sp -= sizeof(gd_t); gd->new_gd = (gd_t *)map_sysmem(gd->start_addr_sp, sizeof(gd_t)); debug("Reserving %zu Bytes for原创 2017-03-21 08:33:08 · 322 阅读 · 0 评论 -
uboot下init_sequence_f函数之reserve_fdt
reserve_fdt:static int reserve_fdt(void){#ifndef CONFIG_OF_EMBED /* * If the device tree is sitting immediately above our image then we * must relocate it. If it is embedded in the data原创 2017-03-21 08:32:54 · 319 阅读 · 0 评论 -
uboot下init_sequence_f函数之show_dram_config
show_dram_config:static int show_dram_config(void){ unsigned long long size;#ifdef CONFIG_NR_DRAM_BANKS int i; debug("\nRAM Configuration:\n"); for (i = size = 0; i < CONFIG_NR_DRAM_BANKS; i原创 2017-03-21 08:29:00 · 422 阅读 · 0 评论 -
uboot下init_sequence_f函数之reserve_stacks
reserve_stacks:static int reserve_stacks(void){ /* make stack pointer 16-byte aligned */ gd->start_addr_sp -= 16; gd->start_addr_sp &= ~0xf; /* * let the architecture-specific code tailor原创 2017-03-21 08:26:19 · 274 阅读 · 0 评论 -
uboot下init_sequence_f函数之setup_dram_config
setup_dram_config:static int setup_dram_config(void){ /* Ram is board specific, so move it to board code ... */ dram_init_banksize(); return 0;}原创 2017-03-21 08:26:05 · 266 阅读 · 0 评论 -
uboot下init_sequence_f函数之display_new_sp
display_new_sp:static int display_new_sp(void){ debug("New Stack Pointer is: %08lx\n", gd->start_addr_sp); return 0;}原创 2017-03-21 08:25:52 · 311 阅读 · 0 评论 -
uboot下init_sequence_f函数之setup_board_extra
setup_board_extra:#ifdef CONFIG_SYS_EXTBDINFOstatic int setup_board_extra(void){ bd_t *bd = gd->bd; strncpy((char *) bd->bi_s_version, "1.2", sizeof(bd->bi_s_version)); strncpy((char *) bd->原创 2017-03-21 08:25:37 · 287 阅读 · 0 评论 -
uboot下init_sequence_f函数之reloc_fdt
reloc_fdt:static int reloc_fdt(void){#ifndef CONFIG_OF_EMBED if (gd->flags & GD_FLG_SKIP_RELOC) return 0; if (gd->new_fdt) { memcpy(gd->new_fdt, gd->fdt_blob, gd->fdt_size); gd->fdt原创 2017-03-21 08:24:05 · 269 阅读 · 0 评论 -
uboot下init_sequence_f函数之setup_reloc
setup_reloc:static int setup_reloc(void){ if (gd->flags & GD_FLG_SKIP_RELOC) { debug("Skipping relocation due to flag\n"); return 0; }#ifdef CONFIG_SYS_TEXT_BASE gd->reloc_off = gd->re原创 2017-03-21 08:23:42 · 649 阅读 · 0 评论 -
uboot下init_sequence_f函数之init_func_spi
common/board_f.c init_func_spi #if defined(CONFIG_HARD_SPI)static int init_func_spi(void){ puts("SPI: "); spi_init(); puts("ready\n"); return 0;}#endif原创 2017-03-22 08:20:38 · 276 阅读 · 0 评论 -
uboot下init_sequence_f函数之announce_dram_init
announce_dram_initstatic int announce_dram_init(void){ puts("DRAM: "); return 0;}原创 2017-03-22 08:20:46 · 360 阅读 · 0 评论 -
uboot下init_sequence_f函数之dram_init
dram_init:int dram_init(void){ gd->ram_size = initdram(0); return 0;}原创 2017-03-22 08:20:58 · 1273 阅读 · 0 评论 -
uboot下init_sequence_f函数之reserve_lcd
reserve_lcd:# ifdef CONFIG_LCDstatic int reserve_lcd(void){# ifdef CONFIG_FB_ADDR gd->fb_base = CONFIG_FB_ADDR;# else /* reserve memory for LCD display (always full pages) */ gd->rel原创 2017-03-23 08:24:24 · 446 阅读 · 0 评论 -
uboot下init_sequence_f函数之reserve_video
reserve_video:#ifdef CONFIG_DM_VIDEOstatic int reserve_video(void){ ulong addr; int ret; addr = gd->relocaddr; ret = video_reserve(&addr); if (ret) return ret; gd->relocaddr = addr;原创 2017-03-22 08:23:48 · 661 阅读 · 0 评论