




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、2. 解壓代碼 這個就隨便了,一般解壓在主目錄。 將下載的 mr3420_3220v1.tar.gz 移動到主目錄。 注意:這里壓縮包擴(kuò)展名有誤,實(shí)際上是 bzip2 壓縮的。 打開終端,此時(shí)終端應(yīng)該默認(rèn)在主目錄下,若不在主目錄下,就運(yùn)行 cd 命令進(jìn)入主目錄。 運(yùn)行命令 tar -jxvf mr3420_3220v1.tar.gz 以解壓代碼。tar_jxvf_mr3420_3220v1.png (31.25 KB, 下載次數(shù): 0) 3. 編譯代碼 運(yùn)行命令 cd mr3420_3220v1/build 進(jìn)入代碼編譯目錄。 運(yùn)行命令 make BOARD_TYPE=ap99 fs_prep
2、 以創(chuàng)建編譯過程所需的目錄。 運(yùn)行命令 make BOARD_TYPE=ap99 uboot 以開始編譯 U-Boot。 4. 刷機(jī)測試 如果沒有意外,那么編譯結(jié)束后的輸出應(yīng)該是這樣的: 生成的 u-boot.bin 位于 mr3420_3220v1/images/ap99/ 目錄下。 此文件未被填充到 128K,需要手動填充。 填充后的文件就可以進(jìn)行刷機(jī)測試了。 此文件是未壓縮版,因此本身體積很大。此代碼也不能生成壓縮版的 U-Boot。 5. 說明 操作說明請參閱代碼根目錄下的 readme.txt。入門級的操作就這么簡單。進(jìn)階級: 進(jìn)階級依然使用 TL-MR3420 v1 的代碼。 進(jìn)階
3、級將分離 U-Boot 代碼及現(xiàn)成的工具鏈,搭建基本的交叉編譯環(huán)境。 1. 分離 U-Boot 代碼 U-Boot 代碼位于 mr3420_3220v1/ap99/boot/u-boot 。 將整個 u-boot 目錄復(fù)制到一個地方,如用戶主目錄。 此 u-boot 目錄里的代碼就是全部所需的代碼了。之后的所有操作都在這里面完成。2. 復(fù)制工具鏈 此工具鏈即為編譯器,但是是針對 mips 架構(gòu)的交叉編譯器。 工具鏈位于 mr3420_3220v1/build/gcc-3.4.4-2.16.1/build_mips。 將整個 build_mips 復(fù)制到一個地方,如主目錄。 3. 搭建編譯環(huán)境
4、現(xiàn)在,mr3420_3220v1 目錄已經(jīng)沒有用,可以刪掉,因?yàn)樗行枰奈募家褟?fù)制出來了。 設(shè)置環(huán)境變量以讓 Shell 能夠訪問到工具鏈。運(yùn)行命令 export PATH=$PATH:/build_mips/bin 即可。 此設(shè)置只在當(dāng)前的 Shell 里有效。關(guān)于如何設(shè)置永久的環(huán)境變量,請自行百度。 4. 清理代碼 此操作用于清理上次編譯產(chǎn)生的臨時(shí)文件及配置文件,為下次配置及編譯做準(zhǔn)備。 進(jìn)入 u-boot 目錄:運(yùn)行命令 cd /u-boot 。 運(yùn)行命令 make distclean 以執(zhí)行完全清理。 5. 編譯代碼 這里是一個完整的編譯步驟。 a. 指定開發(fā)板類型 此操作表示我們
5、要編譯哪個開發(fā)板。AR7241 的開發(fā)板(這里其實(shí)叫參考板,reference board)名稱為 ap99,因此運(yùn)行 make ap99_config 以進(jìn)行配置。 所有的開發(fā)板定義都寫在 Makefile 里。其中以 *_config: 開頭的行,* 就是開發(fā)板名稱。 AR 及 QCA 系列的參考板名稱會在最后列出。 有些開發(fā)板還有額外的參數(shù)可以定義,這里暫不講解。b. 編譯 運(yùn)行命令 make CROSS_COMPILE=mips-linux- 進(jìn)行編譯。 CROSS_COMPILE=mips-linux- 指定了交叉編譯器的文件名前綴為 mips-linux-。例如,要使用工具鏈中的
6、gcc 程序,那么就運(yùn)行 mips-linux-gcc。這個可以看一下 build_mips/bin 目錄下的文件名。 由于之前運(yùn)行了 export PATH=$PATH:/build_mips/bin 命令,所以 Shell 能夠直接找到相關(guān)程序的位置。否則,CROSS_COMPILE= 需要指定為 /build_mips/bin/mips-linux-。 c. 測試 編譯成功后,u-boot 目錄下會生成 u-boot.bin,這就是未填充到 128K 的文件。 6. 常用編譯命令。 make *_config 配置生成為指定的開發(fā)板(* 為開發(fā)板名稱)。 make CROSS_COMPI
7、LE=* 編譯代碼,并指定交叉編譯器文件名前綴為 *。 make clean 清理上次編譯生成的臨時(shí)文件。此命令不會刪除開發(fā)板配置,下次編譯可以直接運(yùn)行 make 命令。 make distclean 清理編譯生成的臨時(shí)文件及開發(fā)板配置。運(yùn)行此命令后,需要再次指定開發(fā)板后才能進(jìn)行編譯。其它說明: 這里使用的 MR3420 v1 代碼不能生成壓縮代碼。其他的,如 AR9331 AR934x 等代碼需要在編譯時(shí)加入 COMPRESSED_UBOOT=1 來進(jìn)行編譯,如 make CROSS_COMPILE=mips-linux- COMPRESSED_UBOOT=1 。 編譯 AR934x QCA
8、95xx 的代碼需要指定使用的以太網(wǎng)交換機(jī) PHY 類型,即在編譯時(shí)加入 ETH_CONFIG=_s27 或 ETH_CONFIG=_s17 。其中 _s27 為內(nèi)置百兆 PHY,_s17 為外部千兆 PHY。 具體路由型號的 GPL 代碼里都有說明文件,可以根據(jù)說明文件來進(jìn)行編譯,并了解參考板名稱。常見參考板名稱: AR7240 - ap91 AR7241 - ap99 AR9331 - ap121 AR9341 - ap123 AR9342 - mi124 AR9344 - db12x QCA953x - ap143 QCA9558 - ap135 其它的請?jiān)?及 上進(jìn)行查找。:UBoot
9、 啟動過程及簡單代碼分析這里以 AR7241 的 U-Boot 為例MIPS 架構(gòu)簡介MIPS 地址空間:這里說的是地址空間,不是內(nèi)存空間。內(nèi)存只是映射在一部分地址空間上而已。內(nèi)存分為4段 (Kuseg、Kseg0、Kseg1、Kseg2),其中 Kseg0 (0x80000000 0x9fffffff) 為緩存段,直接映射在物理地址段上。Kseg1 (0xa0000000 0xbfffffff) 為非緩存段,直接映射在物理地址段上。Kuseg 和 Kseg2 需要經(jīng)過地址轉(zhuǎn)換才能訪問。在 CPU 復(fù)位時(shí),緩存未被初始化,只有 Kseg1 能夠被直接訪問。AR71XX 物理段:內(nèi)存、Flash
10、、IO寄存器等都被映射在物理段上范圍為 00x1fffffff,訪問時(shí)需要通過宏 KSEG0ADDR(_addr) 來通過 Kseg0 訪問或 KSEG1ADDR(_addr) 來通過 Kseg1 訪問。物理地址一般不能直接訪問,都需要通過 Kseg0 或 Kseg1 來訪問。主要的映射范圍:DDR:00x0fffffff (這一段直接映射物理內(nèi)存,一般通過帶緩存的 Kseg0 來訪問,以便加快速度)I/O空間:0x10000000 0x1dffffff (這一段直接控制硬件,必須通過 Kseg1 來訪問)SPI Flash 空間:0x1f000000 0x1fffffff (這一段映射閃存的
11、前 16MB 數(shù)據(jù))AR71XX 啟動過程CPU 上電時(shí),物理段中,SPI Flash 的前4MB 被循環(huán)映射在 0x1f000000 上,因此會被重復(fù) 4 次。執(zhí)行地址為 KSEG1ADDR(0x1fc00000),即 0xbfc00000。*注意:U-Boot 在編譯時(shí),實(shí)際設(shè)置的基址,即啟動地址為 KSEG0ADDR(0x1f000000),即 0x9f000000。下面會講到為什么要這么設(shè)置。U-Boot 中的起始代碼在 cpu/mips/start.S 中:_start:#ifndef COMPRESSED_UBOOTRVECENT(reset,0) /* U-boot entry
12、point */RVECENT(reset,1) /* software reboot */RVECENT(romReserved,2)-省略-RVECENT(romReserved,125)RVECENT(romReserved,126)RVECENT(romReserved,127)/* We hope there are no more reserved vectors!* 128 * 8 = 1024 = 0x400* so this is address R_VEC+0x400 = 0xbfc00400*/復(fù)制代碼以上代碼設(shè)置異常向量,不需要理解第一句 RVECENT(reset,0
13、) 為一個跳轉(zhuǎn),直接轉(zhuǎn)到下面的代碼進(jìn)行運(yùn)行.align 4reset:/* set GPIO_OE- added by lsz to fix the LED issue 09.03.25 */li a1, AR7100_GPIO_OElw v1, 0(a1)li v0, 0x3fdffor v1, v1, v0sw v1, 0(a1)lw v0, 0(a1)lw v0, 0(a1)-省略-/* CONFIG0 register */li t0, CONF_CM_UNCACHEDmtc0 t0, CP0_CONFIG復(fù)制代碼以上代碼前半部分通過設(shè)置 GPIO 來點(diǎn)亮路由的 LED。后半部分設(shè)置
14、CPU 相關(guān)參數(shù),不需要理解以上代碼沒有包含使用相對地址的指令,也就是說,無論這段代碼在 CPU 地址空間的何種位置,都能夠正常執(zhí)行因此雖然 CPU 的執(zhí)行地址為 0xbfc00000,以上代碼依然能執(zhí)行/* Initialize GOT pointer.*/bal 1fnop.word _GLOBAL_OFFSET_TABLE_1:move gp, ralw t1, 0(ra)move gp, t1復(fù)制代碼以上代碼加載了用于 U-Boot 重定位的 GOT 指針,它是 U-Boot 在內(nèi)存中進(jìn)行自身移動的關(guān)鍵la t9, lowlevel_initjalr t9nop復(fù)制代碼以上代碼進(jìn)行 C
15、PU 頻率設(shè)置,超頻就是在這里實(shí)現(xiàn)的la t0, rel_startj t0noprel_start:復(fù)制代碼以上代碼很關(guān)鍵,它實(shí)現(xiàn)了 U-Boot 的執(zhí)行地址的轉(zhuǎn)移假設(shè)當(dāng)前 CPU 的執(zhí)行地址在 0xbfc00000 + x那么執(zhí)行此段代碼后,CPU 執(zhí)行地址將跳轉(zhuǎn)到 0x9f000000 + x 處進(jìn)行執(zhí)行前面提到了 CPU 在復(fù)位時(shí),物理段 0x1f000000 處循環(huán)映射 4 次 Flash 的前 4MB,而 U-Boot 大小只有100KB多,因此 0x1f000000 跟 0x1fc00000 處的數(shù)據(jù)是一樣的,這就實(shí)現(xiàn)了運(yùn)行地址的轉(zhuǎn)移。至于為什么不跳轉(zhuǎn)到 0xbf000000 +
16、 x 處運(yùn)行,是因?yàn)?AR71XX CPU 在復(fù)位時(shí),緩存可用,因此通過 Kseg0 段執(zhí)行,可以加快速度。/* REMAP_DISABLE */li a0, AR7100_SPI_CLOCKli t0, 0x43sw t0, 0(a0)復(fù)制代碼以上代碼的作用是禁用物理段 0x1f000000 的 4MB Flash 數(shù)據(jù)循環(huán)映射,以便讓 0x1f000000 能夠映射 16MB 的 Flash 數(shù)據(jù)/* Initialize caches.*/* 初始化緩存 */la t9, simple_mips_cache_resetjalr t9nop/* . and enable them.*/*
17、啟用緩存 */li t0, CONF_CM_CACHABLE_NONCOHERENTmtc0 t0, CP0_CONFIG-省略-#if defined(CONFIG_AR7100) | defined(CONFIG_AR7240)/* 將緩存鎖定在 Kseg0 低端處 */la t9, mips_cache_lock_24kjalr t9nop#endif#endif /* #ifndef COMPRESSED_UBOOT */* 將棧指針指向緩存 */li t0, CFG_SDRAM_BASE + CFG_INIT_SP_OFFSETla sp, 0(t0)/* 進(jìn)入 C 環(huán)境 */la
18、t9, board_init_fj t9nop復(fù)制代碼這段代碼的作用是初始化緩存,并將緩存鎖定在 Kseg0 上,用作臨時(shí)的??臻g此時(shí)內(nèi)存并未初始化, Kseg0 對應(yīng)的 0x80000000 0x8fffffff 還不能被訪問,因此需要用緩存代替。然后跳轉(zhuǎn)到 board_init_f 進(jìn)行執(zhí)行下面開始在 C 環(huán)境中運(yùn)行文件:lib_mips/board.cvoid board_init_f(ulong bootflag)gd_t gd_data, *id;bd_t *bd;init_fnc_t *init_fnc_ptr;ulong addr, addr_sp, len = (ulong)&
19、uboot_end - CFG_MONITOR_BASE;ulong *s;#ifdef COMPRESSED_UBOOTchar board_string50;#endif#ifdef CONFIG_PURPLEvoid copy_code (ulong);#endif/* Pointer is writable since we allocated a register for it.*/gd = &gd_data;/* compiler optimization barrier needed for GCC = 3.4 */_asm_ _volatile_(: : :memory);me
20、mset (void *)gd, 0, sizeof (gd_t);/* 依次運(yùn)行初始化函數(shù) */for (init_fnc_ptr = init_sequence; *init_fnc_ptr; +init_fnc_ptr) if (*init_fnc_ptr)() != 0) hang ();#ifdef COMPRESSED_UBOOTcheckboard(board_string);printf(%snn,board_string);gd-ram_size = bootflag;puts (DRAM:);print_size (gd-ram_size, n);#endif/* Now
21、that we have DRAM mapped and working, we can* relocate the code and continue running from DRAM.*/addr = CFG_SDRAM_BASE + gd-ram_size;/* We can reserve some RAM on top here.*/* round down to next 4 kB limit.*/addr &= (4096 - 1);debug (Top of RAM usable for U-Boot at: %08lxn, addr);-省略-/* Save local v
22、ariables to board info struct*/* 記錄內(nèi)存基址及大小、串口波特率 */bd-bi_memstart = CFG_SDRAM_BASE; /* start ofDRAM memory */bd-bi_memsize = gd-ram_size; /* sizeofDRAM memory in bytes */bd-bi_baudrate = gd-baudrate; /* Console Baudrate */memcpy (id, (void *)gd, sizeof (gd_t);/* On the purple board we copy the code
23、in a special way* in order to solve flash problems*/#ifdef CONFIG_PURPLEcopy_code(addr);#endif/* 執(zhí)行代碼轉(zhuǎn)移 */relocate_code (addr_sp, id, addr);/* NOTREACHED - relocate_code() does not return */復(fù)制代碼board_init_f 的作用為進(jìn)行內(nèi)存、時(shí)鐘、串口等設(shè)備的初始化,并為 U-Boot 的運(yùn)行劃分內(nèi)存。初始化函數(shù)位于 board_init_f 函數(shù)上方init_fnc_t *init_sequence =
24、#ifndef COMPRESSED_UBOOTtimer_init, /* 初始化時(shí)鐘 */#endifenv_init, /* initialize environment */ /* 初始化環(huán)境變量 */#ifdef CONFIG_INCA_IPincaip_set_cpuclk, /* set cpu clock according to environment variable */#endifinit_baudrate, /* initialze baudrate settings */#ifndef COMPRESSED_UBOOTserial_init, /* serial c
25、ommunications setup */ /* 初始化串口,這樣 TTL 才有輸出 */#endifconsole_init_f, /* 初始化控制臺環(huán)境 */display_banner, /* say that we are here */ /* 顯示 U-Boot 1.1.4 . */#ifndef COMPRESSED_UBOOTcheckboard, /* 顯示 AP99 (ar7241 - Virian) U-boot */init_func_ram, /* 初始化內(nèi)存 */#endifNULL,;復(fù)制代碼以上為初始化函數(shù)列表,依次運(yùn)行在初始化完成后,board_init_f
26、調(diào)用 relocate_code 將 U-Boot 代碼從 Flash 中復(fù)制到內(nèi)存中,再從內(nèi)存中執(zhí)行回到 cpu/mips/start.S.globl relocate_code.ent relocate_coderelocate_code:move sp, a0 /* Set new stack pointer */li t0, CFG_MONITOR_BASEla t3, in_ramlw t2, -12(t3) /* t2 - uboot_end_data */move t1, a2/* Fix GOT pointer:* New GOT-PTR = (old GOT-PTR - CF
27、G_MONITOR_BASE) + Destination Address*/* 根據(jù)傳遞的參數(shù)計(jì)算移動距離 */move t6, gpsub gp, CFG_MONITOR_BASEadd gp, a2 /* gp now adjusted */sub t6, gp, t6 /* t6 - relocation offset */* t0 = source address* t1 = target address* t2 = source end address*/* 復(fù)制代碼到內(nèi)存 */1:lw t3, 0(t0)sw t3, 0(t1)addu t0, 4ble t0, t2, 1bad
28、du t1, 4 /* delay slot */* If caches were enabled, we would have to flush them here.*/* Jump to where weve relocated ourselves.*/* 跳轉(zhuǎn)到移動后的代碼繼續(xù)執(zhí)行 */addi t0, a2, in_ram - _startj t0nop.word uboot_end_data.word uboot_end.word num_got_entriesin_ram:/* 此時(shí)已經(jīng)在內(nèi)存中了 */* Now we want to update GOT.*/lw t3, -4(
29、t0) /* t3 - num_got_entries */addi t4, gp, 8 /* Skipping first two entries. */li t2, 2/* GOT 表重定位 */1:lw t1, 0(t4)beqz t1, 2fadd t1, t6sw t1, 0(t4)2:addi t2, 1blt t2, t3, 1baddi t4, 4 /* delay slot */* Clear BSS.*/lw t1, -12(t0) /* t1 - uboot_end_data */lw t2, -8(t0) /* t2 flags |= GD_FLG_RELOC; /*
30、tell others: relocation done */debug (Now running in RAM - U-Boot at: %08lxn, dest_addr);gd-reloc_off = dest_addr - CFG_MONITOR_BASE;/* 記錄 U-Boot 重定位時(shí)移動的偏移量 */monitor_flash_len = (ulong)&uboot_end_data - dest_addr;/* We have to relocate the command table manually*/* U-Boot 命令表,重定位所有字符串地址和函數(shù)地址 */for
31、(cmdtp = &_u_boot_cmd_start; cmdtp !=&_u_boot_cmd_end; cmdtp+) ulong addr;addr = (ulong) (cmdtp-cmd) + gd-reloc_off;#if 0printf (Command %s: 0x%08lx = 0x%08lxn,cmdtp-name, (ulong) (cmdtp-cmd), addr);#endifcmdtp-cmd =(int (*)(struct cmd_tbl_s *, int, int, char *)addr;addr = (ulong)(cmdtp-name) + gd-r
32、eloc_off;cmdtp-name = (char *)addr;if (cmdtp-usage) addr = (ulong)(cmdtp-usage) + gd-reloc_off;cmdtp-usage = (char *)addr;#ifdef CFG_LONGHELPif (cmdtp-help) addr = (ulong)(cmdtp-help) + gd-reloc_off;cmdtp-help = (char *)addr;#endif/* there are some other pointer constants we must deal with */#ifndef
33、 CFG_ENV_IS_NOWHEREenv_name_spec += gd-reloc_off;#endif/* 熄滅路由的 LED */* turn off switch LED added by tiger 20091225 */ar7240_gpio_sw_led();-省略-/* configure available FLASH banks */* 初始化 Flash,顯示 Flash:XXXX (X MB) */size = flash_init();display_flash_config (size);bd = gd-bd;bd-bi_flashstart = CFG_FLA
34、SH_BASE;bd-bi_flashsize = size;#if CFG_MONITOR_BASE = CFG_FLASH_BASEbd-bi_flashoffset = monitor_flash_len; /* reserved area for U-Boot */#elsebd-bi_flashoffset = 0;#endif/* initialize malloc() area */* 初始化內(nèi)存管理器,以便能夠使用 malloc 等函數(shù) */mem_malloc_init();malloc_bin_reloc();/* relocate environment function
35、 pointers etc. */* 重定位環(huán)境變量相關(guān)函數(shù)和數(shù)據(jù) */env_relocate();/* board MAC address */s = getenv (ethaddr);for (i = 0; i bi_enetaddri = s ? simple_strtoul (s, &e, 16) : 0;if (s)s = (*e) ? e + 1 : e;/* IP Address */bd-bi_ip_addr = getenv_IPaddr(ipaddr);#if defined(CONFIG_PCI)/* Do pci configuration*/* PCI 設(shè)備初始化
36、*/pci_init();#endif/* leave this here (after malloc(), environment and PCI are working) */* Initialize devices */devices_init ();jumptable_init ();/* Initialize the console (after the relocation and devices init) */console_init_r ();/* * * * * * * * * * * * * * * * * * * * * */* Initialize from envi
37、ronment */if (s = getenv (loadaddr) != NULL) load_addr = simple_strtoul (s, NULL, 16);#if (CONFIG_COMMANDS & CFG_CMD_NET)if (s = getenv (bootfile) != NULL) copy_filename (BootFile, s, sizeof (BootFile);#endif /* CFG_CMD_NET */#if defined(CONFIG_MISC_INIT_R)/* miscellaneous platform dependent initial
38、isations */misc_init_r ();#endif#if (CONFIG_COMMANDS & CFG_CMD_NET)/* 初始化網(wǎng)絡(luò) */#if defined(CONFIG_NET_MULTI)puts (Net: );#endifeth_initialize(gd-bd);#endif/* main_loop() can return to retry autoboot, if so just run it again. */* 進(jìn)入命令主循環(huán),永不返回 */for (;) main_loop ();/* NOTREACHED - no way out of comman
39、d loop except booting */復(fù)制代碼到此為止 U-Boot 就開始正常運(yùn)行了在處理交互命令前,U-Boot 會檢查有沒有啟動命令文件:common/main.cvoid main_loop (void)-省略-#if defined(CONFIG_BOOTDELAY) & (CONFIG_BOOTDELAY = 0)char *s;int bootdelay;#endif-省略-#if defined(CONFIG_BOOTDELAY) & (CONFIG_BOOTDELAY = 0)/* 獲取啟動延時(shí) */s = getenv (bootdelay);bootdelay
40、= s ? (int)simple_strtol(s, NULL, 10) : CONFIG_BOOTDELAY;/ debug (# main_loop entered: bootdelay=%dnn, bootdelay);# ifdef CONFIG_BOOT_RETRY_TIMEinit_cmd_timeout ();# endif /* CONFIG_BOOT_RETRY_TIME */-省略-/* 獲取啟動命令 */s = getenv (bootcmd);if (!s) /* 如果沒有啟動命令,就設(shè)置默認(rèn)的命令 */#ifdef CONFIG_ROOTFS_FLASH/* XXX
41、 if rootfs is in flash, expect uImage to be in flash */#ifdef CONFIG_AR7100/* 這里設(shè)置的即為 AR71XX 的默認(rèn)固件啟動命令 */setenv (bootcmd, bootm 0xbf200000);#elsesetenv (bootcmd, bootm 0xbf450000);#endif /* CONFIG_AR7100 */#elsesetenv (bootcmd, tftpboot 0x8022c090 uImage; bootm 0x8022c090);#endif/* 重新獲取啟動命令 */s = ge
42、tenv (bootcmd);/ debug (# main_loop: bootcmd=%sn, s ? s : );if (bootdelay = 0 & s & !abortboot (bootdelay) # ifdef CONFIG_AUTOBOOT_KEYEDint prev = disable_ctrlc(1); /* disable Control C checking */# endif # ifndef CFG_HUSH_PARSER/* 執(zhí)行啟動命令 */run_command (s, 0);# elseparse_string_outer(s, FLAG_PARSE_S
43、EMICOLON |FLAG_EXIT_FROM_LOOP);# endif# ifdef CONFIG_AUTOBOOT_KEYEDdisable_ctrlc(prev); /* restore Control C checking */# endif-省略-#endif /* CONFIG_BOOTDELAY */#ifdef CONFIG_AMIGAONEG3SEextern void video_banner(void);video_banner();#endif/* 啟動命令執(zhí)行完畢,則開始處理交互命令 */* Main Loop for Monitor Command Processing*/#ifdef CFG_HUSH_PARSERparse_file_outer();/* This point is never reached */for (;);#el
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度薪資調(diào)整與員工績效獎金補(bǔ)充協(xié)議
- 2025年度綜合停車場車位物業(yè)管理服務(wù)協(xié)議
- 2025年度航空航天產(chǎn)業(yè)投資人投資協(xié)議
- 2025年度陵園墓地墳地買賣及墓園設(shè)施租賃合同
- 二零二五年度賓館物業(yè)管理經(jīng)營權(quán)轉(zhuǎn)接協(xié)議
- 二零二五年度員工持股有限責(zé)任公司股權(quán)分配執(zhí)行協(xié)議
- 2025年度超市品牌授權(quán)合作協(xié)議書
- 二零二五年度建筑行業(yè)兼職監(jiān)理人員服務(wù)協(xié)議
- 二零二五年度專利使用權(quán)轉(zhuǎn)讓協(xié)議書詳規(guī)
- 2025年度高科技研發(fā)領(lǐng)域出資入股合同
- “三級”安全安全教育記錄卡
- 冀教版小學(xué)四年級英語下冊第二單元11課Lesson11 How's the-weather today教學(xué)設(shè)計(jì)
- 醫(yī)保按病種分值付費(fèi)(DIP)院內(nèi)培訓(xùn)
- 愛蓮說-王崧舟
- 普通創(chuàng)造學(xué):第五章創(chuàng)造原理及其技法(5次)
- 第04章 金屬的斷裂韌度
- 嗅覺系統(tǒng)和嗅覺通路
- 接收電腦的團(tuán)縣委聯(lián)系方式統(tǒng)計(jì)表
- BrownBear繪本附配音PPT課件
- 供電局配電網(wǎng)設(shè)備缺陷管理標(biāo)準(zhǔn)(試行)_圖文
- 一元立木材積表
評論
0/150
提交評論