1 / 28

第十四章

第十四章. Embedded Linux 開發環境. Linux 系統的發展. Linux 最早是在 1991 年,由芬蘭大學生 Linus Torvalds 在 Helsinki 大學模仿 UNIX 所發展的作業系統 Linux 依照自由軟體基金會 ( Free Software Foundation ) 出版的 GNU 通用公共許可證條款 ( GNU General Public License , GPL ) 開放原始碼內容 一般人可以透過網路下載其原始碼,也吸引了更多學者研究員藉此實現印證他們的理論來改善 Linux ,使得 Linux 的功能日漸強大.

nola
Download Presentation

第十四章

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第十四章 Embedded Linux 開發環境 嵌入式系統導論, 探矽工作室

  2. Linux 系統的發展 • Linux最早是在1991年,由芬蘭大學生Linus Torvalds在Helsinki大學模仿UNIX所發展的作業系統 • Linux依照自由軟體基金會 (Free Software Foundation) 出版的 GNU 通用公共許可證條款 (GNU General Public License,GPL) 開放原始碼內容 • 一般人可以透過網路下載其原始碼,也吸引了更多學者研究員藉此實現印證他們的理論來改善Linux,使得Linux的功能日漸強大 嵌入式系統導論, 探矽工作室

  3. Linux 受歡迎的特性 • 開放原始碼、模組化設計 • 穩定性夠 • 網路功能強大 • 跨平台 • 應用軟體眾多 嵌入式系統導論, 探矽工作室

  4. 桌上型Linux系統與嵌入式 Linux 系統 • 最初Linux系統是在桌上型電腦上所發展的作業系統 • 嵌入式系統與桌上型電腦有著許多差異,例如缺少螢幕、鍵盤或是磁碟機等周邊之外,CPU所執行的指令型態也不盡相同,因此需要特別移植有關CPU等硬體相關的程式碼部分 嵌入式系統導論, 探矽工作室

  5. Linux 核心 嵌入式系統導論, 探矽工作室

  6. Linux 檔案系統 嵌入式系統導論, 探矽工作室

  7. Linux MMU的功能 嵌入式系統導論, 探矽工作室

  8. 具有MMU 與 non-MMU系統 • 許多嵌入式系統的中央處理器 (CPU) 缺少了記憶體管理單元 (MMU) 功能,使得Linux從標準版本衍生出稱為uClinux的Linux版本 • 原本藉由MMU所達到的記憶體保護與虛擬位址功能在uClinux裡不存在。這表示說核心與應用程式都屬於同一個定址空間,所以應用程式必須很小心的使用記憶體位址 • 並非所有的嵌入式處理器都缺乏 MMU 的機制,因此許多嵌入式為處理器還是可以使用一般的 Linux 核心 嵌入式系統導論, 探矽工作室

  9. Embedded Linux的發展環境 • GNU (GNU‘s Not Unix) 的軟體開發環境 • 包括了編譯器、組譯器、文書處理軟體等各式各樣的應用軟體。藉由這些開發軟體可以順利的編譯出一套Linux系統環境核心或是Linux上的應用程式 嵌入式系統導論, 探矽工作室

  10. 跨平台編譯環境 • GNU同樣提供跨平台編譯器,這些方便的工具包括有C編譯器,C++編譯器,組譯器等等 • binutils - 用於操作二進位檔案的程式集合。它們包括諸如 ar、as、objdump、objcopy 這樣的程式 • gcc - GNU C 編譯器 • glibc - 所有應用程式都將鏈結到的 C 函式庫 嵌入式系統導論, 探矽工作室

  11. VERSION = 2 PATCHLEVEL = 4 SUBLEVEL = 6 EXTRAVERSION = KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/ar m/ -e s/sa110/arm/) CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ else if [ -x /bin/bash ]; then echo /bin/bash; \ else echo sh; fi ; fi) TOPDIR := $(shell /bin/pwd) HPATH = $(TOPDIR)/include FINDHPATH = $(HPATH)/asm $(HPATH)/linux $(HPATH)/scsi $(HPATH)/net HOSTCC = gcc HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer CROSS_COMPILE = # # Include the make variables (CC, etc...) # AS = $(CROSS_COMPILE)as LD = $(CROSS_COMPILE)ld CC = $(CROSS_COMPILE)gcc CPP = $(CC) -E AR = $(CROSS_COMPILE)ar NM = $(CROSS_COMPILE)nm STRIP = $(CROSS_COMPILE)strip OBJCOPY = $(CROSS_COMPILE)objcopy OBJDUMP = $(CROSS_COMPILE)objdump MAKEFILES = $(TOPDIR)/.config GENKSYMS = /sbin/genksyms DEPMOD = /sbin/depmod MODFLAGS = -DMODULE CFLAGS_KERNEL = PERL = perl export VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION KERNELRELEASE ARCH \ all: do-it-all ………….. ……… …. Linux 核心組態的Makefile部分內容 嵌入式系統導論, 探矽工作室

  12. Linux 開機流程 • 開機載入者 (bootloader) • PC的版本來說,開機載入者的種類包含了lilo、grub與syslinux • Embedded Linux的開機載入者的種類例如Blob 、Redboot、Angel或是 PMON 嵌入式系統導論, 探矽工作室

  13. Linux Bootloader • 初始化CPU及決定速度。 • 組態記憶體對映,包括了SRAM、Flash與ROM的位址對映。 • 初始SDRAM的控制器並且載入開機載入者的程式本體到SDRAM裡,然後有必要的話,依據系統規格進行重新對映的工作。 • 初始基本的周邊與載入驅動程式,例如RS-232,有些周邊需要在開機載入者執行的時候作初始化的動作,不過有些周邊可以留待Linux核心來進行初始。 • 設定堆疊指標與參數區域範圍指標。 • 載入Linux核心與根檔案系統 (RFS),並且將偵測到的CPU種類與其他平台參數傳遞給核心,如此便完成了開機載入者的工作了 嵌入式系統導論, 探矽工作室

  14. Linux ROM或是Flash記憶體分配 嵌入式系統導論, 探矽工作室

  15. 設定核心 • Linux核心的程式碼可以分成兩大部分 • 與硬體相關的程式碼大部分放在arch目錄 • 與硬體無關的程式碼可以使用選單的方式來選擇核心的組成,然後透過鏈結器腳本 (linker script) 描述核心檔案內的物件配置與映設,製作出一個可執行的 Linux 核心檔案 嵌入式系統導論, 探矽工作室

  16. 鏈結器腳本 OUTPUT_ARCH(<arch>) /* <arch> includes architecture type */ ENTRY(stext) /* stext is the kernel entry point */ SECTIONS /* SECTIONS command describes the layout of the output file */ { . = TEXTADDR; /* TEXTADDR is LMA for the kernel */ .init : { /* Init code and data*/ _stext = .; /* First section is stext followed by __init data section */ __init_begin = .; *(.text.init) __init_end = .; } ……………….. 嵌入式系統導論, 探矽工作室

  17. linux/init/main.c 裡的start_kernel函式片段 asmlinkage void __init start_kernel(void) { …… lock_kernel(); printk(linux_banner); setup_arch(&command_line); printk("Kernel command line: %s\n", saved_command_line); parse_options(command_line); trap_init(); init_IRQ(); sched_init(); time_init(); softirq_init(); …… console_init(); #ifdef CONFIG_MODULES init_modules(); #endif …… kmem_cache_init(); sti(); calibrate_delay(); …….. mem_init(); kmem_cache_sizes_init(); mempages = num_physpages; fork_init(mempages); proc_caches_init(); vfs_caches_init(mempages); buffer_init(mempages); page_cache_init(mempages); …….. signals_init(); ………. smp_init(); kernel_thread(init, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGNAL); unlock_kernel(); current->need_resched = 1; cpu_idle(); } 對整個作業系統核心 每一部份做出始化的動作 嵌入式系統導論, 探矽工作室

  18. 視窗版核心組態環境 嵌入式系統導論, 探矽工作室

  19. 視窗系統 • 嵌入式 Linux 所使用的視窗系統都是藉由直接控制繪圖區域緩衝區 (frame buffer) 的方式,避免掉 X Server 這樣複雜的架構設計 • 目前嵌入式系統常見的視窗系統包括QT/Embedded、Microwindows、Tiny-X、GtkFB、MiniGUI等等 嵌入式系統導論, 探矽工作室

  20. 週邊設備驅動程式 • 繪圖區域緩衝區 (Frame Buffer) 嵌入式系統導論, 探矽工作室

  21. Microwindows 嵌入式系統導論, 探矽工作室 Microwindows的MP3 Player和PIM軟體示範畫面

  22. Qt/Embedded Qt/Embedded PDA應用上的示範畫面 嵌入式系統導論, 探矽工作室

  23. MiniGUI MiniGUI的示範畫面 嵌入式系統導論, 探矽工作室

  24. 以Tiny X為基礎的JHE專案 以Tiny X為基礎的JHE(Just Handhelds Environment)專案 裡用Gtk+搭配做出來的畫面 嵌入式系統導論, 探矽工作室

  25. GtkFB Red Hat, Inc. 提供的GtkFB在800x600螢幕上畫面範例 嵌入式系統導論, 探矽工作室

  26. Real Time Linux 系統 • 原本的 Linux 設計之初,並不是為了嵌入式系統的環境所設計,不過因為其開放原始碼的特性,有些組織將其修改成符合嵌入式系統所需 • 例如 RTLinux 與 RTAI 嵌入式系統導論, 探矽工作室

  27. 應用程式修正 • 應用程式必須配合使用一些專為即時系統所設計的應用程式介面 (API) 來發展,並且搭配一個即時系統的排程器 (scheduler) • 所使用的演算法包括了 RMS (Rate Monotonic Scheduling) 與 EDF (Earliest Deadline First) 等方式,其中 RMS 因為其精簡的實作方式而廣為大家所採用 嵌入式系統導論, 探矽工作室

  28. 總結 • Linux原始碼的開放以及開發環境的齊全,使得Linux作業系統在短時間內便成為了嵌入式平台作業系統的一個熱門人選 • 以目前的技術來說,有Preemption Improvement以及Interrupt Abstraction這兩種機制可以為Linux作業系統加入即時系統的要素 • 應用在PDA上的handhelds專案為範例,讓大家能夠感受到Linux的魅力 嵌入式系統導論, 探矽工作室

More Related