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

正文內(nèi)容

u-boot引導(dǎo)加載程序(bootloader)源代碼分析與移植-資料下載頁

2025-06-25 23:15本頁面
  

【正文】 POL | (AT91C_SPI_DLYBS amp。DATAFLASH_TCSS) |(AT91C_SPI_DLYBCT amp。 DATAFLASH_TCHS) |(AT91C_MASTER_CLOCK / AT91C_SPI_CS3_CLK) 8)。/* 允許SPI0 */AT91C_BASE_SPI0SPI_CR = AT91C_SPI_SPIEN。while(!(AT91C_BASE_SPI0SPI_SR amp。 AT91C_SPI_SPIENS))。// Add tempo to get SPI in a safe state.// Should be removed for new silicon (Rev B)udelay(500000)。dummy = AT91C_BASE_SPI0SPI_SR。dummy = AT91C_BASE_SPI0SPI_RDR。}AT91F_DataflashProbe ()函數(shù)的定義在board/at91sam9260ek/ 中:[board/at91sam9260ek/]int AT91F_DataflashProbe(int cs, AT91PS_DataflashDesc pDesc){/* SPI0 片選允許 */AT91F_SpiEnable(cs)。/* 獲取DataFlash 狀態(tài) */AT91F_DataFlashGetStatus(pDesc)。/* 根據(jù)返回值判斷是否檢測到 */return((pDescmand[1] == 0xFF)? 0: pDescmand[1] amp。 0x3C)。}AT91S_DataFlashStatus AT91F_DataFlashGetStatus(AT91PS_DataflashDesc pDesc){AT91S_DataFlashStatus status。/* if a transfert is in progress == return 0 */if( (pDescstate) != IDLE)return DATAFLASH_BUSY。/* first send the read status mand (D7H) */pDescmand[0] = DB_STATUS。pDescmand[1] = 0。pDescDataFlash_state = GET_STATUS。pDesctx_data_size = 0 。 /* Transmit the mand and receive response */pDesctx_cmd_pt = pDescmand 。pDescrx_cmd_pt = pDescmand 。pDescrx_cmd_size = 2 。pDesctx_cmd_size = 2 。/* 向SPI 寫命令,等待返回 */status = AT91F_SpiWrite (pDesc)。pDescDataFlash_state = *( (unsigned char *) (pDescrx_cmd_pt) +1)。return status。} 環(huán)境變量重定位mon/ 中的env_relocate()函數(shù)實(shí)現(xiàn)環(huán)境變量的重定位:[mon/]void env_relocate (void){DECLARE_GLOBAL_DATA_PTR。DEBUGF (%s[%d] offset = 0x%lx\n, __FUNCTION__,__LINE__,gdreloc_off)。ifdef CONFIG_AMIGAONEG3SEenable_nvram()。endif/* 如果環(huán)境變量嵌入在代碼中,環(huán)境變量指針env_ptr 增加一個(gè)重定位偏移 */ifdef ENV_IS_EMBEDDED/** The environment buffer is embedded with the text segment,* just relocate the environment pointer*/env_ptr = (env_t *)((ulong)env_ptr + gdreloc_off)。DEBUGF (%s[%d] embedded ENV at %p\n, __FUNCTION__,__LINE__,env_ptr)。else/* 否則,給環(huán)境變量指針env_ptr 分配存儲空間 *//** We must allocate a buffer for the environment*/env_ptr = (env_t *)malloc (CFG_ENV_SIZE)。DEBUGF (%s[%d] malloced ENV at %p\n, __FUNCTION__,__LINE__,env_ptr)。endif/** After relocation to RAM, we can always use the memory functions*/env_get_char = env_get_char_memory。/*如果環(huán)境變量無效(Flash 中存儲的環(huán)境變量塊CRC 有錯(cuò)),顯示“環(huán)境變量錯(cuò)誤”信息,拷貝缺省環(huán)境變量*/if (gdenv_valid == 0) {if defined(CONFIG_GTH) || defined(CFG_ENV_IS_NOWHERE) /* Environment notchangable */puts (Using default environment\n\n)。elseputs (*** Warning bad CRC, using default environment\n\n)。SHOW_BOOT_PROGRESS (1)。endifif (sizeof(default_environment) ENV_SIZE){puts (*** Error default environment is too large\n\n)。return。}memset (env_ptr, 0, sizeof(env_t))。memcpy (env_ptrdata,default_environment,sizeof(default_environment))。ifdef CFG_REDUNDAND_ENVIRONMENTenv_ptrflags = 0xFF。endifenv_crc_update ()。gdenv_valid = 1。}else {/* 否則,env_relocate_spec() 調(diào)用read_dataflash(CFG_ENV_ADDR,CFG_ENV_SIZE,(uchar *)env_ptr)從Flash 加載環(huán)境變量*/env_relocate_spec ()。}gdenv_addr = (ulong)amp。(env_ptrdata)。ifdef CONFIG_AMIGAONEG3SEdisable_nvram()。endif} 初始化設(shè)備Uboot 中設(shè)備的類型是device_t,,在 include/ 中定義:typedef struct {int flags。 /* Device flags: input/output/system */int ext。 /* Supported extensions */char name[16]。 /* Device name *//* GENERAL functions */int (*start) (void)。 /* To start the device */int (*stop) (void)。 /* To stop the device *//* OUTPUT functions */void (*putc) (const char c)。 /* To put a char */void (*puts) (const char *s)。 /* To put a string (accelerator) *//* INPUT functions */int (*tstc) (void)。 /* To test if a char is ready... */int (*getc) (void)。 /* To get that char *//* Other functions */void *priv。 /* Private extensions */} device_t。可以看出,device_t 的主體是一系列操作設(shè)備的函數(shù)指針,另外還包含了設(shè)備名稱,標(biāo)記和私有數(shù)據(jù)等等。mon/ 中的devices_init 函數(shù)實(shí)現(xiàn)設(shè)備的初始化:[mon/]int devices_init (void){ifndef CONFIG_ARM /* already relocated for current ARM implementation */DECLARE_GLOBAL_DATA_PTR。ulong relocation_offset = gdreloc_off。int i。for (i = 0。 i (sizeof (stdio_names) / sizeof (char *))。 ++i) {stdio_names[i] = (char *) (((ulong) stdio_names[i]) +relocation_offset)。}endif/* 創(chuàng)建設(shè)備鏈表devlist */devlist = ListCreate (sizeof (device_t))。if (devlist == NULL) {eputs (Cannot initialize the list of devices!\n)。return 1。}/* 根據(jù)需要初始化各個(gè)設(shè)備,注冊到devlist */if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)i2c_init (CFG_I2C_SPEED, CFG_I2C_SLAVE)。endififdef CONFIG_LCDdrv_lcd_init ()。endifif defined(CONFIG_VIDEO) || defined(CONFIG_CFB_CONSOLE)drv_video_init ()。endififdef CONFIG_KEYBOARDdrv_keyboard_init ()。endififdef CONFIG_LOGBUFFERdrv_logbuff_init ()。endifdrv_system_init ()。ifdef CONFIG_SERIAL_MULTIserial_devices_init ()。endififdef CONFIG_USB_TTYdrv_usbtty_init ()。endififdef CONFIG_NETCONSOLEdrv_nc_init ()。endifreturn (0)。}函數(shù) drv_system_init ()總是要執(zhí)行的,這個(gè)函數(shù)創(chuàng)建并注冊了一個(gè)串行口設(shè)備和一個(gè)空設(shè)備(空設(shè)備是可選的),在mon/ 中定義:[mon/]static void drv_system_init (void){/* 創(chuàng)建串行口設(shè)備*/device_t dev。memset (amp。dev, 0, sizeof (dev))。strcpy (, serial)。 = DEV_FLAGS_OUTPUT | DEV_FLAGS_INPUT | DEV_FLAGS_SYSTEM。ifdef CONFIG_SERIAL_SOFTWARE_FIFO = serial_buffered_putc。 = serial_buffered_puts。 = serial_buffered_getc。 = serial_buffered_tstc。else = serial_putc。 = serial_puts。 = serial_getc。 = serial_tstc。endif/* 注冊設(shè)備:把設(shè)備加到設(shè)備鏈表dev_list 中 */device_register (amp。dev)。/* 根據(jù)需要?jiǎng)?chuàng)建空(NULL)設(shè)備*/ifdef CFG_DEVICE_NULLDEVmemset (amp。dev, 0, sizeof (dev))。strcpy (, nulldev)。 = DEV_FLAGS_OUTPUT | DEV_FLAGS_INPUT | DEV_FLAGS_SYSTEM。 = nulldev_putc。 = nulldev_puts。 = nulldev_input。 = nulldev_input。/* 注冊設(shè)備:把設(shè)備加到設(shè)備鏈表dev_list 中 */device_register (amp。dev)。endif} 控制臺初始化控制臺初始化分兩個(gè)階段:console_init_f()和console_init_r()。console_init_f()完成的功能很簡單, 只是根據(jù)環(huán)境變量設(shè)置了global_data 中的一些數(shù)據(jù)成分(hasconso
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1