国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

構建嵌入式Linux系統

發布時間:2010-8-30 15:22    發布者:techshare
關鍵詞: linux
引 言:

目前嵌入式系統的應用越來越廣泛,一臺通用PC的外部設備就有5"10個嵌入式微處理器,如鍵盤、軟驅、硬盤、顯示器、打印機、掃描儀、USB接口等均是由嵌入式處理器控制的。在制造工業、過程控制、通信電視、儀器儀表、汽車船舶、航空航天、消費類產品均是嵌入式系統的應用領域。嵌入式系統目前主要有:WindowsCE、VxWorks、QNX等,它們都具較好的實時性,系統可靠性,任務處理隨機性等優點。但是它們的價格普遍偏高,很多開發商承受不起。因而,Linux操作系統成為嵌入式操作系統的首選,原因如下:

在精簡內核在編譯內核之前,首先要明確需要那些驅動和模塊,然后只選擇需要的驅動和模塊,例如,如果系統不需要網絡支持,則可以去掉網絡模塊。內核一般是以壓縮方式存放的,在系統啟動時會自行解壓。內核都是常駐內存的,當需要調用應用程序時,再把需要的程序從磁盤
調入內存運行。

構建內核常用的命令包括:

◆makeconfig:內核配置,調用./scripts/Configure按照arch/i386/config.in來進行配置。

◆makedep:尋找依賴關系。

◆makeclean:清除以前構建內核所產生的所有目標文件、模塊文件、以及一些臨時文件等。

◆makermproper:刪除所有因構建內核過程中產生的所有文件,把內核恢復到最原始的狀態。

◆make:構核,通過各目錄的Makefile文件將會在各個目錄下產生許多目標文件。如果內核沒有錯誤,將產生文件vmlinux,這就是構建的內核。

◆makezImage:在make的基礎上產生壓縮的內核映象文件./arch/$(ARCH)/boot/zImage以及在./arch/$(ARCH)/boot/compresed/目錄下產生臨時文件。

◆makebzImage:在make的基礎上產生壓縮比例更大的內核映象文件./arch/$(ARCH)/boot/bzImage以及在./arch/$(ARCH)/boot/compresed/目錄下產生臨時文件。

◆makemodules:編譯模塊文件,在makeconfig時所配置的所有模塊將在這時編譯,形成模塊目標文件,并把這些目標文件存放在modules目錄中。

◆makemodules_install:把上面編譯好的模塊目標文件放置在目錄./lib/modules/$KERNEL_VERSION/中。上面的編譯內核是在沒有改變源代碼的情況下實現的,如果覺得源代碼提供的功能在某些方面不能滿足要求,就要修改源代碼了。源代碼中主要有以下幾個關鍵部分:有關進程管理的task_struct結構,這個結構幾乎包括了與進程有關的所有文件內容,還有任務隊列、時鐘管理和中斷管理,各種進程間的通信機制,內存管理中各種內存分配函數的實現,虛擬文件系統。



系統啟動

引導啟動程序主要包括以下三個文件:bootsect.s,head.s和setup.s這三個文件雖然都是匯編程序,但確使用了兩種語法格式。bootsect.s和setup.s采用了近似于Intel的匯編語言語法,需要使用Intel8086匯編器和連接器as86和ld86。head.s則使用了GUN的匯編格式,并且運行在保護模式下,需要用GUN的as進行編譯。這是一種AT&T語法的匯編語言格式。 Bootsect.s代碼時磁盤引導塊程序,駐留在磁盤的第一個扇區中,在PC機加電ROM-BIOS自檢后,引導扇區由BIOS加載到內存0x7C00處,然后將自己移動到內存0x90000處。該程序的主要作用是首先將setup模塊(由setup.s編譯的)從磁盤加載到內存緊接著bootsect的后面位置(0x90200),然后利用BIOS中斷0x13取磁盤參數表中當前啟動引導盤的參數,接著在屏幕上顯示“Loadingsystem...”字符串。再將system模塊從磁盤上加載到內存0x10000開始的地方。隨后確定根文件系統的設備號。

Setup程序的作用主要是利用ROM-BIOS中斷讀取機器系統數據,并將這些數據保存到0x90000開始的位置(覆蓋了bootsect程序所在的地方)。然后setup程序將system模塊從0x10000整塊向下移動到內存絕對地址0x0000處,接下來加載中斷描述符表寄存器(idtr)和全局描述表寄存器(gdtr)。開啟A20地址線,重新設置兩個中斷控制芯片8259A,將硬件中斷號重新設置為0x20-0x2f。最后設置CPU的控制寄存器CR0(也稱機器狀態字),從而進入32位保護模式進行,并跳轉到位于system模塊最前面部分的head.s程序繼續運行。 Head.s程序在被編譯后,會被連接成system模塊的最前面開始部分,即頭部(head)程序。從這里開始,內核完全都是在保護模式下運行了。這段程序實際上處于內存絕對地址0處開始的地方。這個程序功能比較單一,首先是加載各個數據段寄存器,重新設置中斷描述符表idt,共256項。然后重新設置中斷描述符表gdt,接下來檢測A20地址線是不是開啟了,再檢測PC機是否含有數學協處理器芯片,然后設置管理內存的分頁處理機制,最后利用返回指令將預先放置在堆棧中的/init/main.c程序的入口地址彈出,去運行main()內核初始化程序。

設備驅動程序

設備驅動程序在Linux內核中扮演著特殊的角色,它們是一個個獨立的“黑盒子”,使某個特定的硬件響應一個定義良好的內部編程接口,同時完全隱藏了設備的工作細節。用戶操作通過一組標準化的調用完成,而這些調用是和特定的驅動程序無關的。設備驅動程序提供的功能是同外設進行數據傳送。設備包括三種類型:字符設備、塊設備和網絡接口。每個模塊通常實現其中一種類型,相應地,模塊可分為字符模塊(charmodule)、塊模塊(blockmodule)和網絡模塊(networkmodule)三種。然而這種分類方式并不是十分嚴格,程序員可以構建一個大的模塊,在其中實現不同類型的設備驅動程序。三種類型的設備如下:

字符模塊

字符設備是能夠象字節流(比如文件)一樣被訪問的設備,由字符設備驅動程序來實現這種特性。字符設備驅動程序通常至少需要實現open、close、read和write的系統調用。字符終端(dev/console)和串口(/dev/ttySO以及設備類型)就是字符設備的兩個例子,它們能夠用流抽象很好地表示。

塊設備

和字符設備一樣,塊設備也是通過/dev目錄下的文件系統節點被訪問的。塊設備(例如磁盤)上能夠容納文件系統。在大多數Unix系統中,塊設備包括整數個塊,而每塊包含1KB或2的幾次冪字節的數據。Linux允許應用程序如字符設備那樣讀寫塊設備,可以一次傳遞任意多字節的數據。因而,塊設備和字符設備的區別僅僅在于內核內部管理數據的方式,也就是內核和驅動程序的接口不同。塊設備的接口必須支持掛裝(mount)文件系統。

網絡接口


任何網絡事務都要經過一個網絡接口,即一個能夠和其它主機交換數據的設備。通常接口是個硬件設備,但也可能是個純軟件設備,比如回環(loopback)接口。網絡接口由內核中的網絡子系統驅動,負責發送和接收數據包,它必須了解每項事務是如何映射到實際傳送的數據包的。盡管Telnet和FTP連接都是面向流的,它們都使用了同一個設備,但這個設備看到的只是數據包,而不是獨立的流。

在Linux里,除了直接修改系統內核的源代碼,把設備驅動程序加進內核以外,還可以把設備驅動程序作為可加載的模塊,由系統管理員動態的加載和卸載,使之成為內核的一部分。Linux的模塊可以用C語言編寫,用gcc編譯成目標文件(不進行鏈接,作為*.o文件存在),為此需要在gcc命令行里加上-c的參數。由于在不鏈接時,gcc只允許一個輸入文件,因此一個模塊的所有部分都必須在一個文件里實現。編譯好的模塊*.o放在 / lib / modules / xxxx/misc下(x
xxx表示內核版本),然后用depmod-a使此模塊成為可加載模塊。模塊用insmod命令加載,用rmmod命令來卸載,并可以用lsmod命令來察看所有已經加載的模塊的狀態。編寫模塊時必須提供兩個函數,一個是init_module(void),供insmod在加載的時候自動調用,負責進行設備驅動程序的初始化工作。Init_module返回0表示初始化成功,返回負數表示失敗。另一個函數是voidcleanup_module(void),載模塊卸載時調用,負責進行設備驅動程序的清除工作。在成功的向系統注冊了設備驅動程序后(調用register_chrdev成功后),就可以用mknod命令來把設備映射成一個特別文件,其它程序社用這個設備的時候,只要對此特別文件進行操作就可以了。

結 語

本文主要論述了如何構造嵌入式Linux系統,設計和實現一個完整并且小巧使用的嵌入式Linux系統是一個非常復雜的過程。由于嵌入式Linux是由標準Linux裁減而來的,所以需要對Linux的內核有深入的了解。本文所構建的一個小型嵌入式Linux系統,已成功運用于S3C2410 。所欠缺的是構建的內核還不夠小,原因可能是存在一些不必要的硬件驅動程序以及庫的裁減不夠理想導致的。今后的工作主要集中在對外設模塊和庫的裁減上,以及開發一些特定硬件的驅動程序。 參考文獻: 1魏永明,駱剛,姜軍譯。Linux設備驅動程序(第二版)。中國電力出版社,2002 2趙炯著。Linux內核完全注釋,2004 3馮永紅,朱善君。裁剪Linux技術分析。2001嵌入式系統及單片機國際學術交流會論文集,2001 本文于2004年8月30日收到。劉新朝:研究生,研究方向為微機控制。
本文地址:http://www.qingdxww.cn/thread-24614-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點宏來節省時間和空間
  • Dev Tool Bits——使用DVRT協議查看項目中的數據
  • Dev Tool Bits——使用MPLAB® Data Visualizer進行功率監視
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 四虎影在永久地址在线观看 | 久久久久国产亚洲日本 | 男人的天堂在线观看视频不卡 | 麻豆成人传媒一区二区 | 欧美视频久久久 | 在线观看亚洲欧美 | 国产精品1区2区3区在线播放 | 8008幸福宝app官网下载 | 日本韩国欧美一区 | 2022欧美高清中文字幕在线看 | 国产精品视频久 | 欧美日韩在线观看一区二区 | 免费一级毛片麻豆精品 | 精品国产欧美一区二区三区成人 | 四虎国产精品免费久久麻豆 | 国产毛片网 | 欧美成人免费全部观看在线看 | 精品热99 | 欧美日韩一级片在线观看 | 日韩毛片免费视频 | 我不卡在线影院 | 欧美在线视频免费观看 | 精品网址 | 国产产一区二区三区久久毛片国语 | 欧美日韩欧美日韩 | 日韩一区二区精品久久高清 | 偷拍同志老头小便oldman | 欧美网站在线看 | 亚洲欧美高清在线 | 亚洲欧洲日产国码二区在线 | 日本不卡三区 | 日韩精品欧美视频 | 一区二区三区国产 | h版欧美一区二区三区四区 h版欧美大片免费观看 | 色婷婷精品视频 | 国产精品视频一区二区三区经 | 一级欧美一级日韩 | 黄色片视频在线观看 | 精品国产一区二区三区久久久狼 | 簧片免费视频 | 亚洲三级在线 |