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

正文內(nèi)容

嵌入式web服務(wù)器boa的移植及其應(yīng)用畢業(yè)論文(編輯修改稿)

2025-07-25 14:04 本頁面
 

【文章內(nèi)容簡介】 ,提供自動極性檢測校正。提供 AUI 接口,用于 10BASE2, 10BASE5和10BASEF連接。 ● 沖突自動重發(fā)機(jī)制,自動 Padding和 CRC 產(chǎn)生。 ● 可編程收發(fā)功能。 ● 流發(fā)送模式,減少 CPU的開銷。 ● 提前中斷,可對幀預(yù)處理。 ● 自動拒收錯誤幀。 ● 支持 Boot Prom、邊界掃描及回送測試。 ● LED驅(qū)動顯示連接狀態(tài)及 LAN的可用性。 3 嵌入式Linux系統(tǒng) Linux簡介[2][3]Linux是UNIX風(fēng)格(UNIX Alike)的操作系統(tǒng)(OS)并且是一種很受歡迎的操作系統(tǒng),它與UNIX系統(tǒng)兼容,開放源代碼。它原本被設(shè)計為桌面系統(tǒng),現(xiàn)在廣泛應(yīng)用于服務(wù)器領(lǐng)域。而更大的影響在于它正逐漸的應(yīng)用于嵌入式設(shè)備。嵌入式linux正是在這種氛圍下產(chǎn)生的。Linux是一個支持多用戶、多進(jìn)程、多線程、實(shí)時性較好的功能強(qiáng)大而穩(wěn)定的操作系統(tǒng),并且可以運(yùn)行在多種硬件平臺上,如:X86 PC、Sun Sparc、Digital Alpha、680x0、powerPC、MIPS等。Linux最在的特點(diǎn)在于它是GNU的一員,遵循公共版權(quán)許可證(GPL),秉承“自由的思想,開放的源碼”的原則,是計算機(jī)愛好者自己的操作系統(tǒng)。Linux有一個完整的TCP/IP協(xié)議棧,同時對其他許多的網(wǎng)絡(luò)協(xié)議都提供支持。這些網(wǎng)絡(luò)協(xié)議都在Linux上得到了很好的實(shí)現(xiàn)。Linux可以稱作是一個針對嵌入式系統(tǒng)的優(yōu)秀網(wǎng)絡(luò)操作系統(tǒng)。Linux所支持的文件系統(tǒng)有多種,其中包括了最常用的NFS(網(wǎng)絡(luò)文件系統(tǒng))、extromfs, MSDOS及FAT 16/32等。參考文獻(xiàn)[1][11][13] Linux的內(nèi)存管理 [1] 內(nèi)存管理子系統(tǒng)是操作系統(tǒng)的重要部分,負(fù)責(zé)控制進(jìn)程對系統(tǒng)硬件內(nèi)在資源的訪問。這是通過物理內(nèi)存管理來實(shí)現(xiàn)。該系統(tǒng)提供進(jìn)程對內(nèi)存的應(yīng)用與計算機(jī)物理內(nèi)存間的映射。內(nèi)存管理子系統(tǒng)為每個進(jìn)程都維護(hù)這樣一個映射關(guān)系。這樣,兩個進(jìn)程就可以訪問同一個虛擬的內(nèi)存地址,而實(shí)際上使用的是不同的物理內(nèi)存地址。內(nèi)存管理子系統(tǒng)還支持頁面交換機(jī)制,將暫時不用的內(nèi)存頁調(diào)出內(nèi)存,使計算機(jī)獲得比實(shí)際內(nèi)存更多的虛擬內(nèi)存。內(nèi)存管理子系統(tǒng)提供的功能有:1.?dāng)U大地址空間擴(kuò)大地址空間使系統(tǒng)顯得擁有比實(shí)際更大量的內(nèi)存。虛擬內(nèi)存可以比系統(tǒng)中的物理內(nèi)存大許多倍,從而解決多進(jìn)程狀態(tài)下內(nèi)存不足的問題。2.內(nèi)存保護(hù)系統(tǒng)中的每個進(jìn)程都有自己的虛擬地址空間。這些虛擬的地址空間是相互完全分離的,從而避免了并發(fā)執(zhí)行的進(jìn)程的所在地址空間沖突問題。另外,硬件的虛擬內(nèi)存機(jī)制允許對內(nèi)存寫保護(hù),這可以防止代碼和數(shù)據(jù)被惡意的程序覆蓋。3.內(nèi)存映射將內(nèi)存映像和數(shù)據(jù)映射到進(jìn)程的地址空間。用內(nèi)存映射,文件的內(nèi)容被直接連接到進(jìn)程的虛擬地址空間。4.公平分配物理內(nèi)存內(nèi)存管理子系統(tǒng)允許系統(tǒng)中每個運(yùn)行中的進(jìn)程公平地共享系統(tǒng)的物理內(nèi)存。5.為進(jìn)程中通信所需要的共享內(nèi)存提供必要的基礎(chǔ)。雖然虛擬內(nèi)存允許進(jìn)程擁有分離(虛擬)的地址空間,有時也需要進(jìn)程之間共享內(nèi)存。例如:系統(tǒng)中可能有多個進(jìn)程運(yùn)行命令解釋程序,雖然可以在每一個進(jìn)程的虛擬地址空間都擁有一份命令解釋程序bash的復(fù)本,更好的是在物理內(nèi)存中只擁有一份復(fù)本,所有運(yùn)行bash的進(jìn)程共享代碼。動態(tài)鏈接庫是多個進(jìn)程共享執(zhí)行代碼的另一個常見例子。共享內(nèi)存也可以用于進(jìn)程間通信(IPC)機(jī)制,兩個或多個進(jìn)程可以通過共同擁有的內(nèi)存交換信息。Linux系統(tǒng)支持系統(tǒng)V(system V)的共享內(nèi)存IPC機(jī)制。標(biāo)準(zhǔn)Linux使用虛擬存儲器技術(shù),這種技術(shù)用于提供比計算機(jī)系統(tǒng)中實(shí)際使用的物理內(nèi)存大得多的內(nèi)存空間。為了支持虛擬存儲管理器的管理,Linux系統(tǒng)采用分頁(paging)的方式來載入進(jìn)程。虛擬存儲器由存儲器管理機(jī)制及一個大容量的快速硬盤存儲器支持。它的實(shí)現(xiàn)基于局部性原理,當(dāng)一個程序在運(yùn)行之前,沒有必要全部裝入內(nèi)存,而是僅將那些當(dāng)前要運(yùn)行的那些部分頁面或段裝入內(nèi)存運(yùn)行(copyonwrite),其余暫時留在硬盤上。程序運(yùn)行時如果它所要訪問的頁(段)己存在,則程序繼續(xù)運(yùn)行,如果發(fā)現(xiàn)不存在的頁(段),操作系統(tǒng)將產(chǎn)生一個頁錯誤(page fault),這個錯誤導(dǎo)致操作系統(tǒng)把需要運(yùn)行的部分加載到內(nèi)存中。必要時操作系統(tǒng)還可以把不需要的內(nèi)存頁(段)交換到磁盤上。利用這樣的方式管理存儲器,便可把一個進(jìn)程所需要用到的存儲器以化整為零的方式,視需求分批載入,而核心程序則憑借屬于每個頁面的頁碼來完成尋址各個存儲器區(qū)段的工作。 linux的進(jìn)程和線程管理[2][13][7][6]、線程進(jìn)程:進(jìn)程是一個運(yùn)行程序并為其提供執(zhí)行環(huán)境的實(shí)體,它包括一個地址空間和至少一個控制點(diǎn),進(jìn)程在這個地址空間上執(zhí)行單一指令序列。進(jìn)程地址空間包括可以訪問或引用的內(nèi)存單元的集合,進(jìn)程控制點(diǎn)通過一個一般稱為程序計數(shù)器(program counter PC)的硬件寄存器控制和跟蹤進(jìn)程指令序列。Fork:由于進(jìn)程為執(zhí)行程序的環(huán)境,因此在執(zhí)行程序前必須先建立這個能”跑”程序的環(huán)境。Linux系統(tǒng)提供系統(tǒng)調(diào)用拷貝現(xiàn)行進(jìn)程的內(nèi)容,以產(chǎn)生新的進(jìn)程,調(diào)用fork的進(jìn)程稱為父進(jìn)程。而所產(chǎn)生的新進(jìn)程則稱為子進(jìn)程。子進(jìn)程會承襲父進(jìn)程的一切特性,但是它有自己的數(shù)據(jù)段,也就是說,盡管子進(jìn)程改變了所屬的變量,卻不會影響到父進(jìn)程的變量值。父進(jìn)程和子進(jìn)程共享一個程序段,但是各自擁有自己的堆棧、數(shù)據(jù)段、用戶空間以及進(jìn)程控制塊。換言之,兩個進(jìn)程執(zhí)行的程序代碼是一樣的,但是各有各的程序計數(shù)器與自己的私人數(shù)據(jù)。當(dāng)內(nèi)核收到fork請求時,它會先查核三件事:首先檢查存儲器是不是足夠。其次是進(jìn)程表是否仍有空缺。最后則是看看用戶是否建立了太多的子進(jìn)程。如果上述說三個條件滿足,那么操作系統(tǒng)會給子進(jìn)程一個進(jìn)程識別碼,并且設(shè)定CPU時間,接著設(shè)定與父進(jìn)程共享的段,同時將父進(jìn)程的文件節(jié)點(diǎn)索引mode拷貝一份給子進(jìn)程運(yùn)用,最終子進(jìn)程會返回數(shù)值0以表示它是子進(jìn)程。至于父進(jìn)程,它可能等待子進(jìn)程的執(zhí)行結(jié)束,或與子進(jìn)程各做各的。exec系統(tǒng)調(diào)用:該系統(tǒng)調(diào)用提供一個進(jìn)程去執(zhí)行另一個進(jìn)程的能力,exec系統(tǒng)調(diào)用是采用覆蓋舊有進(jìn)程存儲器內(nèi)容的方式,所以原來程序的堆棧、數(shù)據(jù)段與程序段都會被修改,只有用戶區(qū)維持不變。vfork系統(tǒng)調(diào)用:由于在使用fork時,內(nèi)核會將父進(jìn)程拷貝一份給子進(jìn)程,但是這樣的做法相當(dāng)浪費(fèi)時間,因為大多數(shù)的情形都是程序在調(diào)用fork后就立即調(diào)用exec,這樣剛拷貝來的進(jìn)程區(qū)域又立即被新的數(shù)據(jù)覆蓋掉。因此Linux系統(tǒng)提供一個系統(tǒng)調(diào)用vfork, vfork假定系統(tǒng)在調(diào)用完成vfork后會馬上執(zhí)行exec,因此vfork不拷貝父進(jìn)程的頁面,只是初始化私有的數(shù)據(jù)結(jié)構(gòu)與準(zhǔn)備足夠的分頁表。這樣實(shí)際在vfork調(diào)用完成后,父子進(jìn)程事實(shí)上共享同一塊存儲器(在子進(jìn)程調(diào)用exec或是exit之前),因此子進(jìn)程可以更改父進(jìn)程的數(shù)據(jù)及堆棧信息,因此vfork系統(tǒng)調(diào)用完成后,父進(jìn)程進(jìn)入睡眠,直到子進(jìn)程執(zhí)行exec。當(dāng)子進(jìn)程執(zhí)行exec時,由于exec要使用被執(zhí)行程序的數(shù)據(jù),代碼覆蓋子進(jìn)程的存儲區(qū)域,這樣將產(chǎn)生寫保護(hù)錯誤(do_wp_page )(這個時候子進(jìn)程寫的實(shí)際上是父進(jìn)程的存儲區(qū)域),這個錯誤導(dǎo)致內(nèi)核為子進(jìn)程重新分配存儲空間。當(dāng)子進(jìn)程正確開始執(zhí)行后,將喚醒父進(jìn)程,使得父進(jìn)程繼續(xù)往后執(zhí)行。 Linux的交叉開發(fā)環(huán)境 [8][7][10][5]1. GNU開發(fā)套件GNU開發(fā)套件作為通用的Linux開放套件,包括一系列的開發(fā)調(diào)試工具。主要組件:GCC: 編譯器,可以做成交叉編譯的形式,即在宿主機(jī)上開發(fā)編譯目標(biāo)上可運(yùn)行的二進(jìn)制文件。Binutils:一些輔助工具,包括objaump(可以反編譯二進(jìn)制文件),as(匯編編譯器),la(連接器)等等。Gdb: 調(diào)試器,可使用多種交叉調(diào)試方式,gabbam(背景調(diào)試工具),gabserver (使用以太網(wǎng)絡(luò)調(diào)試)。1)安裝工具鏈 Mkdir /usr/local/arm Tar zxvf Export PATH=/usr/local/arm/ :$PATH2)二進(jìn)制工具(Binutils )GNU binutils包包括了匯編工具、鏈接器和基本的目標(biāo)文件處理工具。對binutils包的設(shè)置定義了所需的目標(biāo)文件的格式和字節(jié)順序。編譯binutils$ tar –jxvf $ cd $ mkdir buildarmlinux$ cd buildarmlinux$ ../configure –target=armlinux –prefix=/usr/local/arm/$ Make$ Make install3) C編譯器GNU編譯器集GCC是通過使用一種叫做“寄存器轉(zhuǎn)換語言”( RTL)的方式實(shí)現(xiàn)的。假定現(xiàn)在有一種基本的機(jī)器描述性文件,它已經(jīng)能滿足大家的需要?,F(xiàn)在要做的僅僅是設(shè)置默認(rèn)情況下使用的參數(shù)和如何將文件組合成可執(zhí)行文件的方式。編譯GCC的輔助編譯器(并打上補(bǔ)丁) $ tar –jxvf $ cd $ mkdir buildarmlinux $ cd buildarmlinux $ ../configure –target=armlinux –prefix=/usr/local/arm/ –withheaders=/urs/local/ 4) 編譯生成glibc庫(并打上補(bǔ)丁) $ tar xvzf $ cd $ tar xzvf $mkdir buildarmlinux $ cd buildarmlinux $ CC=armlinuxas AS=armlinuxas LD=armlinuxld ../configure host=armlinux withheaders=/usr/local/arm/ $ make $make install5) 編譯生成完整的GCC編譯器$ cd $ vi gcc/config/arm/tlinux$ cd $ make distclean$ rm –rf ./*2. 配置$ ../configure –target=armlinux –prefix=/usr/local/arm/withheaders=/usr/local/arm/ enablethreads=pthreads enableshared enablestatic enblelanguages=”c,c++”$ make$make install6)制作交叉調(diào)試器 $ tar –zxvf $ cd $ mkdir buildarmlinux $ cd buildarmlinux $ ../configure target=armlinux prefix=/usr/local/arm/ $ make $ make install7)編譯gdbserver $ cd $ cd gdb/gdbserver $ chmod u+x configure $ CC=armlinuxgcc ./configure host=armlinux $ make(備注: target 指定交叉工具的目標(biāo)板體系結(jié)構(gòu)是armlinuxprefix 指定安裝路徑為/usr/local/arm/withheaders 指定內(nèi)核頭文件所在路徑為/usr/local/arm disablethreads 選項指定不使用線程,也不使用線程庫, enablelanguages 指定僅支持的語言. enableaddons=linuxthread選項支持線程庫. enableshared選項支持共享庫.)4 U-boot在GEC2410上的移植 BootLoader的介紹[6]引導(dǎo)加載程序BootLoader 是系統(tǒng)加電后運(yùn)行的第一段代碼。我們熟悉的PC 中的引導(dǎo)程序一般由BIOS 和位于硬盤MBR 中的OS bootloader(例如LILO 或者GRUB)一起組成。然而在嵌入式系統(tǒng)中通常沒有像BIOS 那樣的固件程序(有的嵌入式CPU 有),因此整個系統(tǒng)的加載啟動任務(wù)就完全由bootloader 來完成。比如在一個基于ARM920T core 的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時都從地址0x00000000 開始執(zhí)行,而在這個地址處安排的通常就是系統(tǒng)的BootLoader 程序。簡單地說,BootLoader 就是在操作系統(tǒng)內(nèi)核或用戶應(yīng)用程序運(yùn)行之前運(yùn)行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟 硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核或用戶應(yīng)用程序準(zhǔn)備好正確的環(huán)境。
bootloader 是依賴于硬件而實(shí)現(xiàn)的,特別是在嵌入式系統(tǒng)中。不同的體系結(jié)構(gòu)需求的bootloader 是不同的;除了體系結(jié)構(gòu),bootloader 還依賴于具體的嵌入式板級設(shè)備的配置。也就是說,對于兩塊不同的嵌入式板而言,即使它們基于相同的CPU 構(gòu)建,運(yùn)行在其中一塊電路板上的bootloader,未必能夠運(yùn)行在另一塊電路開發(fā)板上。 BootLoader啟動模式介紹[7][6][10]大多數(shù) Boot Loader 都包含兩種不同的操作模式:啟動加載模
點(diǎn)擊復(fù)制文檔內(nèi)容
化學(xué)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1