新聞中心
在當(dāng)今全球互聯(lián)的時(shí)代,網(wǎng)絡(luò)的穩(wěn)定性是企業(yè)和個(gè)人越來越注重的問題,尤其是在中國(guó),網(wǎng)絡(luò)監(jiān)管越來越嚴(yán)格,讓網(wǎng)民的網(wǎng)速遭受到一定的影響。因此,各種網(wǎng)絡(luò)測(cè)試工具也不斷涌現(xiàn),如Ping、traceroute、iperf等,而這些工具需要在操作系統(tǒng)中安裝后方可使用。而本文介紹的網(wǎng)絡(luò)測(cè)試工具Uboot則可以在開機(jī)時(shí)進(jìn)行網(wǎng)絡(luò)測(cè)試,較其他測(cè)試工具而言更為便捷。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),撫順企業(yè)網(wǎng)站建設(shè),撫順品牌網(wǎng)站建設(shè),網(wǎng)站定制,撫順網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,撫順網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
一、Uboot 是什么?
Uboot是一種名為Unified Bootloader的開源、自由軟件,具有廣泛的支持平臺(tái)和系統(tǒng)。Uboot能夠被用于常規(guī)的計(jì)算機(jī),包括桌面、嵌入式系統(tǒng)和網(wǎng)絡(luò)設(shè)備等,能夠引導(dǎo)各種操作系統(tǒng),如Linux、Android、FreeBSD等。在開機(jī)時(shí),Uboot運(yùn)行并提供各種引導(dǎo)選擇和啟動(dòng)內(nèi)核的選項(xiàng)。此外,Uboot還可以進(jìn)行網(wǎng)絡(luò)測(cè)試。
二、Uboot的通用方法
1.在Uboot前,我們需要確認(rèn)目標(biāo)IP地址是否能夠成功聯(lián)通,因?yàn)榫W(wǎng)絡(luò)測(cè)試都是基于網(wǎng)絡(luò)通聯(lián)的。
2.在U計(jì)算機(jī)上捆綁Uboot。
3.進(jìn)入U(xiǎn)boot命令行模式。
4.在命令行模式中輸入ping指令,加上目標(biāo)IP地址。
例如,如果我們要測(cè)試目標(biāo)IP地址1.1.1.1與本地網(wǎng)絡(luò)的延遲和丟包情況,其Uboot測(cè)試命令如下:
ping 1.1.1.1
出現(xiàn)下面的打印信息,表示測(cè)試成功。
ping 1.1.1.1
Wting for ethernet…
Using egiga1 device
HOST NAME : i.mx6q-uboot
IP: 192.168.1.254/255.255.255.0
GATEWAY: 192.168.1.1
Default server: 192.168.1.1
PING 1.1.1.1 (1.1.1.1): 56 data bytes
64 bytes from 1.1.1.1: seq=0 ttl=53 time=5.000 ms
64 bytes from 1.1.1.1: seq=1 ttl=53 time=5.000 ms
……
6.如果需要查看詳細(xì)的網(wǎng)絡(luò)測(cè)試結(jié)果,可以加入-v選項(xiàng),如下:
ping -v 1.1.1.1
7.其他測(cè)試命令如traceroute和iperf也是類似的操作。
三、Uboot的高級(jí)方法
1.修改Uboot代碼
Uboot的源代碼可以下載和編譯,如果需要測(cè)試較為復(fù)雜的網(wǎng)絡(luò)模型,可以在Uboot代碼的TCP/IP模塊中進(jìn)行相應(yīng)的修改,如TCP/IP參數(shù)的調(diào)整。
2.支持其他的操作系統(tǒng)
需要手動(dòng)從Uboot的配置中選擇所需的操作系統(tǒng),Uboot提供了復(fù)雜的配置選項(xiàng),可以在編譯時(shí)添加其他的設(shè)備支持和操作系統(tǒng)選項(xiàng)。
四、
Uboot作為強(qiáng)大的開源引導(dǎo)程序,不僅可以維護(hù)設(shè)備的穩(wěn)定性,還可以作為一種網(wǎng)絡(luò)測(cè)試工具,使用非常便捷。通過上述介紹,我們可以通過數(shù)據(jù)包傳輸信息,測(cè)試出目標(biāo)IP地址與本地網(wǎng)絡(luò)的延遲和丟包情況。在這個(gè)互聯(lián)時(shí)代,Uboot的網(wǎng)絡(luò)測(cè)試功能,無論是作為企業(yè)設(shè)備的啟動(dòng)管理工具,還是在家庭網(wǎng)絡(luò)維護(hù)方面,都可以大大提高網(wǎng)絡(luò)服務(wù)的效率。
相關(guān)問題拓展閱讀:
- 怎么讓Uboot中設(shè)置的IP能夠在Linux啟動(dòng)后讀到
- Linux 內(nèi)核和 uboot的難度,相比較哪個(gè)難度大些?
怎么讓Uboot中設(shè)置的IP能夠在Linux啟動(dòng)后讀到
U-boot會(huì)給LinuxKernel傳遞很多參數(shù),如:串手態(tài)口,RAM,videofb等。而Linuxkernel也會(huì)讀取和處理這些參數(shù)。兩者之間通過structtag來傳遞參數(shù)。U-boot把要傳遞給kernel的東西保存在structtag數(shù)據(jù)結(jié)構(gòu)中,啟動(dòng)kernel時(shí),把這個(gè)結(jié)構(gòu)體的物理地址傳給kernel;Linuxkernel通過這個(gè)地址,用parse_tags分析出傳遞過來的參數(shù)。本文主要以U-boot傳遞RAM和Linuxkernel讀取RAM參數(shù)為例進(jìn)行說明。1、u-boot給kernel傳RAM參數(shù)./common/cmd_bootm.c文件中(叢攔指Uboot的根目錄),bootm命令對(duì)應(yīng)的do_bootm函數(shù),當(dāng)分析uImage中信息發(fā)現(xiàn)OS是Linux時(shí),調(diào)用./lib_arm/bootm.c文件中的do_bootm_linux函數(shù)來啟動(dòng)Linuxkernel。在do_bootm_linux函數(shù)中:voiddo_bootm_linux(cmd_tbl_t*cmdtp,intflag,intargc,char*argv,\ulongaddr,ulong*len_ptr,intverify){#ifdefined(CONFIG_SETUP_MEMORY_TAGS)||\defined(CONFIG_CMDLINE_TAG)||\defined(CONFIG_INITRD_TAG)||\defined(CONFIG_SERIAL_TAG)||\defined(CONFIG_REVISION_TAG)||\defined(CONFIG_LCD)||\defined(CONFIG_VFD)setup_start_tag(bd);//初始化tag結(jié)構(gòu)體開始#ifdefCONFIG_SERIAL_TAGsetup_serial_tag(?ms);#endif#ifdefCONFIG_REVISION_TAGsetup_revision_tag(?ms);#endif#ifdefCONFIG_SETUP_MEMORY_TAGSsetup_memory_tags(bd);//設(shè)置RAM參數(shù)#endif#ifdefCONFIG_CMDLINE_TAGsetup_commandline_tag(bd,commandline);#endif#ifdefCONFIG_INITRD_TAGif(initrd_start&&initrd_end)setup_initrd_tag(bd,initrd_start,initrd_end);#endif#ifdefined(CONFIG_VFD)||defined(CONFIG_LCD)setup_videolfb_tag((gd_t*)gd);#endifsetup_end_tag(bd);//初始化tag結(jié)構(gòu)體結(jié)束#endiftheKernel(0,machid,bd->bi_boot_params);//傳給Kernel的參數(shù)=(structtag*)型的bd->bi_boot_params//bd->bi_boot_params在board_init函數(shù)中初始化,如對(duì)于at91rm9200,初始化在at91rm9200dk.c的board_init中進(jìn)行:bd->bi_boot_params=PHYS_SDRAM+0x100;//這個(gè)地址也是所有taglist的首地址,見下面的setup_start_tag函數(shù)}對(duì)于setup_start_tag和setup_memory_tags函數(shù)說明如下。函數(shù)setup_start_tag也在此文件中定義,如下:staticvoidsetup_start_tag(bd_t*bd){params=(structtag*)bd->bi_boot_params;//初始化(structtag*)型的全局變量畢鄭源params為bd->bi_boot_params的地址,之后的setuptags相關(guān)函數(shù)如下面的setup_memory_tags就把其它tag的數(shù)據(jù)放在此地址的偏移地址上。params->hdr.tag=ATAG_CORE;params->hdr.size=tag_size(tag_core);params->u.core.flags=0;params->u.core.pagesize=0;params->u.core.rootdev=0;params=tag_next(params);}RAM相關(guān)參數(shù)在bootm.c中的函數(shù)setup_memory_tags中初始化:staticvoidsetup_memory_tags(bd_t*bd){inti;for(i=0;ihdr.tag=ATAG_MEM;params->hdr.size=tag_size(tag_mem32);params->u.mem.start=bd->bi_dram.start;params->u.mem.size=bd->bi_dram.size;params=tag_next(params);}//初始化內(nèi)存相關(guān)tag}2、Kernel讀取U-boot傳遞的相關(guān)參數(shù)對(duì)于LinuxKernel,ARM平臺(tái)啟動(dòng)時(shí),先執(zhí)行arch/arm/kernel/head.S,此文件會(huì)調(diào)用arch/arm/kernel/head-common.S和arch/arm/mm/proc-arm920.S中的函數(shù),并最后調(diào)用start_kernel:bstart_kernelinit/main.c中的start_kernel函數(shù)中會(huì)調(diào)用setup_arch函數(shù)來處理各種平臺(tái)相關(guān)的動(dòng)作,包括了u-boot傳遞過來參數(shù)的分析和保存:start_kernel(){setup_arch(&command_line);}其中,setup_arch函數(shù)在arch/arm/kernel/setup.c文件中實(shí)現(xiàn),如下:void__initsetup_arch(char**cmdline_p){structtag*tags=(structtag*)&init_tags;structmachine_desc*mdesc;char*from=default_command_line;setup_processor();mdesc=setup_machine(machine_arch_type);machine_name=mdesc->name;if(mdesc->soft_reboot)reboot_setup(“s”);if(__atags_pointer)//指向各種tag起始位置的指針,定義如下://unsignedint__atags_pointer__initdata;//此指針指向__initdata段,各種tag的信息保存在這個(gè)段中。tags=phys_to_virt(__atags_pointer);elseif(mdesc->boot_params)tags=phys_to_virt(mdesc->boot_params);if(tags->hdr.tag!=ATAG_CORE)convert_to_tag_list(tags);if(tags->hdr.tag!=ATAG_CORE)tags=(structtag*)&init_tags;if(mdesc->fixup)mdesc->fixup(mdesc,tags,&from,&meminfo);if(tags->hdr.tag==ATAG_CORE){if(meminfo.nr_banks!=0)squash_mem_tags(tags);save_atags(tags);parse_tags(tags);//處理各種tags,其中包括了RAM參數(shù)的處理。//這個(gè)函數(shù)處理如下tags:__tagtable(ATAG_MEM,parse_tag_mem32);__tagtable(ATAG_VIDEOTEXT,parse_tag_videotext);__tagtable(ATAG_RAMDISK,parse_tag_ramdisk);__tagtable(ATAG_SERIAL,parse_tag_serialnr);__tagtable(ATAG_REVISION,parse_tag_revision);__tagtable(ATAG_CMDLINE,parse_tag_cmdline);}init_mm.start_code=(unsignedlong)&_text;init_mm.end_code=(unsignedlong)&_etext;init_mm.end_data=(unsignedlong)&_edata;init_mm.brk=(unsignedlong)&_end;memcpy(boot_command_line,from,COMMAND_LINE_SIZE);boot_command_line=’\0′;parse_cmdline(cmdline_p,from);//處理編譯內(nèi)核時(shí)指定的cmdline或u-boot傳遞的cmdlinepaging_init(&meminfo,mdesc);request_standard_resources(&meminfo,mdesc);#ifdefCONFIG_Pp_init_cpus();#endifcpu_init();init_arch_irq=mdesc->init_irq;system_timer=mdesc->timer;init_machine=mdesc->init_machine;#ifdefCONFIG_VT#ifdefined(CONFIG_VGA_CONSOLE)conswitchp=&vga_con;#elifdefined(CONFIG_DUMMY_CONSOLE)conswitchp=&dummy_con;#endif#endifearly_trap_init();}對(duì)于處理RAM的tag,調(diào)用了parse_tag_mem32函數(shù):staticint__initparse_tag_mem32(conststructtag*tag){arm_add_memory(tag->u.mem.start,tag->u.mem.size);}__tagtable(ATAG_MEM,parse_tag_mem32);上述的arm_add_memory函數(shù)定義如下:staticvoid__initarm_add_memory(unsignedlongstart,unsignedlongsize){structmembank*bank;size-=start&~PAGE_MASK;bank=&meminfo.bank;bank->start=PAGE_ALIGN(start);bank->size=size&PAGE_MASK;bank->node=PHYS_TO_NID(start);}如上可見,parse_tag_mem32函數(shù)調(diào)用arm_add_memory函數(shù)把RAM的start和size等參數(shù)保存到了meminfo結(jié)構(gòu)的meminfo結(jié)構(gòu)體中。最后,在setup_arch中執(zhí)行下面語句:paging_init(&meminfo,mdesc);對(duì)沒有MMU的平臺(tái)上調(diào)用arch/arm/mm/nommu.c中的paging_init,否則調(diào)用arch/arm/mm/mmu.c中的paging_init函數(shù)。這里暫不分析mmu.c中的paging_init函數(shù)。3、關(guān)于U-boot中的bd和gdU-boot中有一個(gè)用來保存很多有用信息的全局結(jié)構(gòu)體--gd_t(globaldata縮寫),其中包括了bd變量,可以說gd_t結(jié)構(gòu)體包括了u-boot中所有重要全局變量。最后傳遞給內(nèi)核的參數(shù),都是從gd和bd中來的,如上述的setup_memory_tags函數(shù)的作用就是用bd中的值來初始化RAM相應(yīng)的tag。對(duì)于ARM平臺(tái)這個(gè)結(jié)構(gòu)體的定義大致如下:include/a-arm/global_data.htypedefstructglobal_data{bd_t*bd;unsignedlongflags;unsignedlongbaudrate;unsignedlonghave_console;/*serial_init()wascalled*/unsignedlongreloc_off;/*RelocationOffset*/unsignedlongenv_addr;/*AddressofEnvironmentstruct*/unsignedlongenv_valid;/*ChecksumofEnvironmentvalid?*/unsignedlongfb_base;/*baseaddressofframebuffer*/void**jt;/*jumptable*/}gd_t;在U-boot中使用gd結(jié)構(gòu)之前要用先用宏DECLARE_GLOBAL_DATA_PTR來聲明。這個(gè)宏的定義如下:include/a-arm/global_data.h#defineDECLARE_GLOBAL_DATA_PTRregistervolatilegd_t*gda(“r8”)從這個(gè)宏的定義可以看出,gd是一個(gè)保存在ARM的r8寄存器中的gd_t結(jié)構(gòu)體的指針。說明:本文的版本為U-boot-1.3.4、Linux-2.6.28,平臺(tái)是ARM。
Linux 內(nèi)核和 uboot的難度,相比較哪個(gè)難度大些?
uboot 通用引導(dǎo)程序兄則,說白了就是一小部分代碼用來引導(dǎo)操作系統(tǒng)的;
而Linux內(nèi)核版本最早的0.1版本的也氏缺有幾萬行代碼;
總體來講:Linux內(nèi)核相對(duì)較難,包含的知識(shí)殲塵辯面很廣,很深
關(guān)于linux uboot網(wǎng)絡(luò)測(cè)試的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級(jí)標(biāo)準(zhǔn)機(jī)房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機(jī)柜接入千兆交換機(jī),能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運(yùn)行;創(chuàng)新互聯(lián)專注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認(rèn)可。
文章標(biāo)題:利用LinuxUboot進(jìn)行網(wǎng)絡(luò)測(cè)試的簡(jiǎn)便方法(linuxuboot網(wǎng)絡(luò)測(cè)試)
瀏覽地址:http://www.dlmjj.cn/article/dpjopso.html


咨詢
建站咨詢
