#include typedef unsigned long ulong;
typedef struct environment_s env_t;
typedef struct bd_info bi_dram[1];
} bd_t;
int main(int argc, const char *argv)
#include typedef struct global_data gd_t;
int main()
typedef struct environment_s env_t;
typedef struct bd_info bi_dram[1];
} bd_t;
typedef struct global_data gd_t;
typedef int (init_fnc_t) (void);
register volatile gd_t *gd asm ("r8");
ulong monitor_flash_len;
init_fnc_t *init_sequence = ;
void start_armboot (void) }
//將堆區初始化為0
/* armboot_start is defined in the board-specific linker script */
mem_malloc_init (_armboot_start - config_sys_malloc_len,
config_sys_malloc_len);
puts ("nand: ");
//nand falsh 初始化
nand_init(); /* go init the nand */
/*讀取nand flash的環境變數,然後做crc校驗,如果錯誤則使用預設的環境變數*/
env_relocate ();
/*獲得ip 位址*/
gd->bd->bi_ip_addr = getenv_ipaddr ("ipaddr");
//初始化輸入、輸出裝置列表
stdio_init (); /* get the devices list going. */
jumptable_init ();
//初始化標準輸入、輸出、出錯
console_init_r (); /* fully init console as a device */
/* 使能irq異常 */
enable_interrupts ();
/* initialize from environment */
if ((s = getenv ("loadaddr")) != null)
//初始化網絡卡裝置
eth_initialize(gd->bd);
/* main_loop() can return to retry autoboot, if so just run it again. */
for (;;)
/* notreached - no way out of command loop except booting */
}void hang (void)
struct serial_device ;
static struct serial_device *serial_current = null;
struct serial_device *default_serial_console(void) __attribute__((weak, alias("__default_serial_console")));
int serial_init (void)
return serial_current->init ();
}struct serial_device *__default_serial_console (void)
int s5p_serial0_init(void)
void s5p_serial0_setbrg(void)
int s5p_serial0_getc(void)
int s5p_serial0_tstc(void)
void s5p_serial0_putc(const char c)
void s5p_serial0_puts(const char *s)
struct serial_device s5pc1xx_serial0_device = ;
/* * initialise the serial port with the given baudrate. the settings
* are always 8 data bits, no parity, 1 stop bit, no start bits.
*/int serial_init_dev(const int dev_index)
void serial_setbrg_dev(const int dev_index)
void main_loop (void)
static __inline__ int abortboot(int bootdelay)
} while ((bootdelay > 0) && (!abort))
udelay(10000);
} printf("\b\b\b%2d ", bootdelay);
} putc('\n');
return abort;
}
u boot第二階段分析(二)
接著上一章節的內容,繼續往下分析start armboot函式 1.for迴圈執行init sequence 如下 for init fnc ptr init sequence init fnc ptr init fnc ptr 分析 1 init fnc ptr二重指標指向了init sequen...
uboot啟動第二階段之x load分析
開發板 dm3730 虛擬機器 ubuntu 14.04 編譯器 arm none linux gnueabi x loader 這幾天小小的研究了一下linux的啟動機制 所裡這裡做個小小的總結吧 現在一般的晶元的linux啟動機制是這樣的 上電自執行romcode也就是在rom裡固化的 romc...
u boot第二階段分析(一)
一 start armboot函式簡介 start armboot函式是乙個長函式,在uboot lib arm board.c的第444 908行,其中也呼叫了其他函式,共同構成了u boot的第二階段。1.第二階段的主要工作 我們之前已經分析過了第一階段,主要是初始化了soc內部的一些部件和初始...