freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

u-boot引導(dǎo)加載程序(bootloader)源代碼分析與移植(編輯修改稿)

2025-07-22 23:15 本頁面
 

【文章內(nèi)容簡介】 私有數(shù)據(jù) global_dataglobal_data 在include\asmarm\ 中定義:[include\asmarm\]typedef struct global_data {bd_t *bd。 /* bd_info 結(jié)構(gòu),包含更多的信息 */unsigned long flags。unsigned long baudrate。 /* 波特率 */unsigned long have_console。 /* 有無控制臺 */unsigned long reloc_off。 /* 重定位的偏移量 */unsigned long env_addr。 /* 環(huán)境變量塊的地址 */unsigned long env_valid。 /* 環(huán)境變量是否有效 */unsigned long fb_base。 /* Frame buffer 地址 */ifdef CONFIG_VFDunsigned char vfd_type。 /* VFD 類型 */endifvoid **jt。 /* 跳轉(zhuǎn)表 */} gd_t。bd_info 在include\asmarm\ 中定義:[include\asmarm\]typedef struct bd_info {int bi_baudrate。 /* 串行口波特率 */unsigned long bi_ip_addr。 /* IP 地址 */unsigned char bi_enetaddr[6]。 /* MAC 地址 */struct environment_s *bi_env。 /* 環(huán)境變量塊地址 */ulong bi_arch_number。 /* 機器類型 */ulong bi_boot_params。 /* 傳遞給linux 的參數(shù)塊地址 */struct /* RAM configuration */{ulong start。ulong size。}bi_dram[CONFIG_NR_DRAM_BANKS]。 /* DRAM 區(qū)間列表:起始地址和大小 */} bd_t。 初始化序列init_sequenceInit_sequence 是一個函數(shù)指針數(shù)組,數(shù)組中每一個元素都指向一個初始化函數(shù)。[lib_arm/]typedef int (init_fnc_t) (void)。init_fnc_t *init_sequence[] = {cpu_init, /* basic cpu dependent setup */board_init, /* basic board dependent setup */interrupt_init, /* set up exceptions */env_init, /* initialize environment */init_baudrate, /* initialze baudrate settings */serial_init, /* serial munications setup */console_init_f, /* stage 1 init of console */display_banner, /* say that we are here */dram_init, /* configure available RAM banks */display_dram_config,if defined(CONFIG_VCMA9) || defined (CONFIG_CMC_PU2)checkboard,endifNULL,}。對于 AT91SAM9260EK,這些函數(shù)的位置和完成的功能如表1 所示:表 1 init_sequence 中初始化函數(shù)說明函數(shù)名稱 位置(所在的文件) 功能概述cpu_init cpu/arm926ejs/ 堆棧初始化board_init board/at91sam9260ek/ 復(fù)位PHY 芯片;設(shè)置GPIO 口;設(shè)置機器類型和啟動參數(shù)塊地址到global_data 中相關(guān)數(shù)據(jù)成分中interrupt_init cpu/arm926ejs/at91sam9260/ 初始化PIT(可編程間隔定時器)env_init mon/ 初始化Dataflash;判斷DataFlash 中環(huán)境變量快的有效性(計算比較CRC),設(shè)置gdenv_valid;設(shè)置環(huán)境變量快的起始地址gdenv_addrinit_baudrate lib_arm/ 從環(huán)境變量中讀取波特率, 初始化gdbdbi_baudrateserial_init cpu/arm926ejs/at91sam9260/ 初始化串行口console_init_f mon/ 控制臺初始化第一階段: 初始化gdhave_console 和gdflagsdisplay_banner lib_arm/ 輸出版本信息和代碼/數(shù)據(jù)段/堆棧信息到控制臺dram_init board/at91sam9260ek/ 初始化SDRAM區(qū)間信息:gdbdbi_dramdisplay_dram_config lib_arm/ 輸出SDRAM 區(qū)間信息信息到控制臺checkboard AT91SAM9260EK 未使用下面重點分析 cpu_init,board_init,interrupt_init,env_init,serial_init 等幾個函數(shù),其它幾個比較簡單,這里不再分析。(1) cpu_init這個函數(shù)的功能是設(shè)置 irq 和fiq 模式的堆棧起始點。 AT91SAM9260EK 沒有使用Uboot的中斷機制,所以這個函數(shù)實際上什么也沒做。[cpu/arm926ejs/]int cpu_init (void){/** setup up stacks if necessary*/ifdef CONFIG_USE_IRQDECLARE_GLOBAL_DATA_PTR。IRQ_STACK_START = _armboot_start CFG_MALLOC_LEN CFG_GBL_DATA_SIZE 4。FIQ_STACK_START = IRQ_STACK_START CONFIG_STACKSIZE_IRQ。endifreturn 0。}(2) board_init[board/at91sam9260ek/]int board_init (void){DECLARE_GLOBAL_DATA_PTR。/* 復(fù)位PHY 芯片,復(fù)位脈沖寬度500ms */AT91C_BASE_RSTCRSTC_RMR = (AT91C_RSTC_KEY amp。 ((unsigned int)0xA524)) |(AT91C_RSTC_ERSTL amp。 (0x0D 8))。AT91C_BASE_RSTCRSTC_RCR = (AT91C_RSTC_KEY amp。 ((unsigned int)0xA524)) |AT91C_RSTC_EXTRST。/* 等待復(fù)位完成 *//* Wait for end hardware reset */while (!(AT91C_BASE_RSTCRSTC_RSR amp。 AT91C_RSTC_NRSTL))。/* 控制臺初始化第一階段 */console_init_f ()。/* 打開系統(tǒng)控制模塊和PIOC 模塊的時鐘 *///Enable clocks for SMC and PIOCAT91C_BASE_PMCPMC_PCER = 1 AT91C_ID_SYS。AT91C_BASE_PMCPMC_PCER = 1 AT91C_ID_PIOC。//bright all led /* 設(shè)置GPIO 口,點亮相關(guān)的LED */AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,AT91C_PIO_PA15|AT91C_PIO_PA16|AT91C_PIO_PA30|AT91C_PIO_PA31)。AT91F_PIO_SetOutput(AT91C_BASE_PIOA,AT91C_PIO_PA23)。/* 如果配置了LCD,設(shè)置Framebuffer 起始地址 */ifdef CONFIG_LCDifndef CONFIG_LCD_EXT_SDRAMgdfb_base = (unsigned long) AT91C_IRAM。elsegdfb_base = (unsigned long) AT91C_EXT_SDRAM。endifendif/* 設(shè)置機器類型,MACH_TYPE_AT91SAM9260EK 在include/asmarm/中定義為848*/gdbdbi_arch_number = MACH_TYPE_AT91SAM9260EK。/* 設(shè)置引導(dǎo)參數(shù)塊地址 0x20000100 */gdbdbi_boot_params = PHYS_SDRAM + 0x100。return 0。}(3) interrupt_init[cpu/arm926ejs/at91sam9260/]int interrupt_init (void){p_pitc = AT91C_BASE_PITC。/* 打開系統(tǒng)控制模塊的時鐘 */*AT91C_PMC_PCER = 1 AT91C_ID_SYS。/* 打開PIT(周期間隔計時器) */p_pitcPITC_PIMR = AT91C_PITC_PITEN。/* 設(shè)置PIT 的計數(shù)初始值 */p_pitcPITC_PIMR |= TIMER_LOAD_VAL。/* 復(fù)位PIT */reset_timer_masked()。return 0。}(4) env_init[mon/ ]int env_init(void){DECLARE_GLOBAL_DATA_PTR。ulong crc, len, new。unsigned off。uchar buf[64]。int DataflashExists。if (gdenv_valid == 0){/* DataFlash 初始化,檢測 DataFlash 是否存在 */if((DataflashExists = AT91F_DataflashInit())){ /* prepare for DATAFLASH read/write *///printf(Dataflash is not plugged or not supported\n)。//return 1。//}/* 從DataFlash 讀入環(huán)境變量塊的CRC 值 */read_dataflash (CFG_ENV_ADDR+offsetof(env_t,crc),sizeof(ulong),amp。crc)。/* 分段從DataFlash 讀入環(huán)境變量塊,每次讀取64 字節(jié),計算CRC */new = 0。len = ENV_SIZE。off = offsetof(env_t,data)。while (len 0) {int n = (len sizeof(buf)) ? sizeof(buf) : len。read_dataflash (CFG_ENV_ADDR+off,n , buf)。new = crc32 (new, buf, n)。len = n。off += n。}/*如果 CRC 正確(計算結(jié)果和讀取的值相等),設(shè)置gdenv_valid=1,gdenv_addr指向環(huán)境變量數(shù)據(jù)區(qū)起始地址(注意此時環(huán)境變量尚未讀入RAM)*/if (crc == new) {gdenv_addr = offsetof(env_t,data)。gdenv_valid = 1。}/* 否則,設(shè)置gdenv_valid=0,gdenv_addr 指向缺省環(huán)境變量 */else {gdenv_addr = (ulong)amp。default_environment[0]。gdenv_valid = 0。}}}return 0。}缺省環(huán)境變量 default_environment 在mon/ 中被定義為:uchar default_environment[] = {ifdef CONFIG_BOOTARGSbootargs= CONFIG_BOOTARGS \0endififdef CONFIG_BOOTCOMMANDbootcmd= CONFIG_BOOTCOMMAND \0endififdef CONFIG_RAMBOOTCOMMANDramboot= CONFIG_RAMBOOTCOMMAND \0endififdef CONFIG_NFSBOOTCOMMANDnfsboot= CONFIG_NFSBOOTCOMMAND \0endifif defined(CONFIG_BOOTDELAY) amp。amp。 (CONFIG_BOOTDELAY = 0)bootdelay= MK_STR(CONFIG_BOOTDELAY) \0endifif defined(CONFIG_BAUDRATE) amp。amp。 (CONFIG_BAUDRATE = 0)baudrate= MK_ST
點擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1