1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      μClinux在S3C4510B上的移植

      更新時間: 2007-10-15 09:11:17來源: 粵嵌教育瀏覽量:1365

      Linux是一種支持多種體系結構處理器的操作系統,有很強的移植性。描述了將μClinux移植到基于S3C4510B處理器目標板上的方法與過程。首先介紹了S3C4510B處理器和μClinux,并簡單說明了如何搭建移植環境,然后著重討論了在該開發板上Bootloader的設計實現以及μClinux內核的移植方法,對在這種基于μClinux的嵌入式系統環境下如何開發應用程序做了簡單說明。 

        1引言

        ARM(Advanced RISC Machines),既可以認為是一個公司的名字,也可以認為是對一微處理器的通稱,還可以認為是一種技術的名字。

        1991年ARM公司成立于英國劍橋,主要出售芯片設計技術的授權。目前,采用ARM技術知識產權(IP)核的微處理器,即我們通常所說的ARM微處理器,已遍及工業控制、消費類電子產品、通信系統、網絡系統、無線系統等各類產品市場,基于ARM技術的微處理器應用約占據了32位RISC微處理器75%以上的市場份額,ARM技術正在逐步滲入我們生活的各個方面。

        采用RISC架構的ARM微處理器一般具有如下特點:體積小、低功耗、低成本、高性能;支持Thumb(16位)/ARM(32位)雙指令集,能很好的兼容8位/16位器件;大量使用寄存器,指令執行速度更快;大多數數據操作都在寄存器中完成;尋址方式靈活簡單,執行效率高;指令長度固定。ARM的產品主要包括ARM7 Thumb家族和ARM9 Thumb家族、ARM 10 Thumb家族以及StrongARM家族。 

        2 基于ARM的S3C4510B處理器和μClinux
        
        本文所使用的S3C4510B是Samsung公司使用ARM7處理器內核開發的一塊嵌入式微處理器。作為一款高性價比的網絡處理器,S3C4510B已廣泛應用于各種網絡設備中,其中央處理器為ARM7TDMI核。ARM7TMDI是目前使用廣泛的32位嵌入式RISC處理器,屬低端ARM處理器核。TDMI的基本含義為:
        
        T:支持16位壓縮指令集Thumb;
        D:支持片上Debug;
        M:內嵌硬件乘法器(Multiplier);
        I:嵌入式ICE,支持片上斷點和調試點。

        ThumbTM16位壓縮指令集能以較小的存儲空間需求,獲得32位的系統性能。S3C4510B處理器包括8kB可配置的一體化Cache/SRAM,1個I2C串行接口,2個UART,2個32位定時器,18個可編程的通用I/O口,以及1個10 M/100 M以太網控制器。豐富的片內外圍極大地簡化了系統的設計。同時這款微處理器對操作系統的支持廣泛,包括Windows CE、Linux、Palm OS等μClinux是針對控制領域的嵌入式Linux操作系統,他從Linux 2.0/2.4內核派 生而來,沿襲了主流Linux的絕大部分特性。適合不具備內存管理單元(Memory Manage ment Unit,簡稱MMU)的微處理器/微控制器,例如ARM7TDMI,他通常具有很少內存或Flash的嵌入式系統。在GNU通用公共許可證(GUN GPL)的保證下,運行μClinux操作系統的用戶可以使用幾乎所有的Linux API函數,不會因為沒有MMU而受到影響。

        3建立μClinux開發環境

        嵌入式系統的開發與一般的應用開發的差別在于,前者需要建立特殊的硬件環境,而后者一般基于特定的操作系統或分布式平臺。后者的平臺已經對硬件或網絡媒質做了抽象,從而不需要由系統開發者來完成這些工作。而在嵌入式系統開發中,這也由開發者完成。

        嵌入式系統開發環境一般分成主機端(HOST)和目標板(TARGET)兩個部分。主機端是開發平臺,用于運行開發過程中的各種工具;目標板是運行和測試平臺,是嵌入式系統的終駐留環境。在主機端和目標板之間需要通過某種方式進行通信,如使用RS232C串口。這種通信的目的在于發送控制指令和傳輸數據,同時獲得反饋信息。

        圖1是系統移植工作的硬件環境。

        主機端的PC使用COM1通過MAX232和S3C4510B的UART 1相連接,通過串口完成對目標板的必要控制功能。S3C4510B開發板上配備有一塊DM9161以太網卡芯片和主機端建立原始(raw ) IP連接,使用鏈路層地址完成大批量數據的傳送。

        硬件環境建立之后,就需要創建軟件開發環境。軟件環境主要是指ARM體系結構的交叉編譯環境,在主機端使用RedHat Linux 8.0操作系統,并在其上建立gcc的ARM體系結構的交叉開發環境。可以從http://mac.os.nctu.edu.tw處下載工具鏈:

        (1) armelfbinutils2.115.i385.rpm
        一些輔助工具,包括objdump(可以反編譯二進制文件),as(匯編編譯器),ld(連接 器)等。
        (2)armelfgcc2.95.32.i386.rpm
        配置目標為arm的GNU的C編譯器。使用他在宿主機上開發編譯目標上可運行的二進制文件。
        (3)genromfs0.5.11.i386.rpm
        生成Romfs的工具。Romfs是一種文件系統。這種文件系統相對于一般的ext2文件系統要求更少的空間。
        將這3個文件放在宿主機上的任意一個目錄下,然后輸入下面的命令來安裝:

        我們就建立好了μClinux的軟件開發環境。

        4 Bootloader的設計實現

        Bootloader被用于系統從硬件啟動到操作系統啟動的過渡,是嵌入式系統中必不可少的一段程序。他相當于PC機中的BIOS和OS Loader,用于初始化運行硬件和啟動操作系統,因此其實現方式由硬件的特性決定。和BIOS/OS Loader一樣,他需要固化在目標板中,每次啟動目標板時,首先會運行Bootloader,在他完成CPU和相關硬件的初始化之后,才從事先規定的地址啟動操作系統或嵌入式應用的固化程序。
        
        在嵌入式系統開發過程中,Bootloader還擔任了與主機端通信的任務,他相當于一個“服務器”,不斷監聽從主機端傳來的控制信息和數據信息,完成相應的操作。

        當系統上電后,Bootloader從地址0x0開始執行,將存儲器映射重新配置,如表1所示,并會執行Linux的固化內核。

        Bootloader可以使用ARM仿真軟件SDT2.5通過JTAG下載到目標板上。

        5 μClinux內核的編譯和移植
        
        作為操作系統的核心,μClinux內核負責管理系統的進程、內存、設備驅動程序、文件系統和網絡系統,決定著系統的各種性能。μClinux內核采用模塊化的組織結構,通過增減內核模塊的方式來增減系統的功能。

        內核配置,在產品列表中選擇Samsung/4510B。在庫的選擇上選uC-lib c。
        
        (2) make dep
        尋找依存關系。
        
        (3) make clean
        清除以前構造內核時生成的所有目標文件、模塊文件和一些臨時文件。
        
        (4) make lib_only
        編譯庫文件。
        
        (5) make user_only
        編譯用戶應用程序文件。
        
        (6) make romfs
        生成romfs文件系統。
        
        (7) make image

        (8) make

        通過各個目錄的makefile文件進行,會在各目錄下生成一大堆目標文件。
        
        上述步驟完成后,就完成了對μClinux源碼的編譯工作。我們可以在/μClinuxS amsung/images目錄下看到2個內核文件:image.ram和image.rom。

        其中iamge.rom可以直接燒寫入Flash存儲器中,當系統復位或上電時,內核自解壓到SDRAM運行。Image.ram可以通過SDT載入到SDRAM中直接運行。

        μCLinux的內核有2種可選的運行方式:可以在Flash上直接運行,也可以加載到RAM中運行。

        Flash運行方式:把內核的可執行映像文件燒到Flash上,系統啟動時從Flash的某個地址開始逐句執行。這種方法實際上是很多嵌入式系統采用的方法。

        內核加載RAM方式:把內核的壓縮文件存放在Flash上,系統啟動時讀取壓縮文件在內存里解壓,然后開始執行,這種方式相對復雜一些,但是運行速度可能更快。同時這也是標準Li nux系統采用的啟動方式。

        6 應用程序在μClinux上的開發

        下面將介紹如何把一個應用程序(例如examplec)添加到μClinux上的過程。

        首先進入μClinux-Samsung/user目錄并建立一個自己的子目錄,如myproject。將exam plec復制到myproject目錄下,并編寫相應的makefile文件。接著進入user目錄,增加一行語句到該目錄下的makefile文件:

         dir_$(CONFIG_USER_MAAPP_LEDNXY)+=myapp
         切換到目錄μClinuxSamsung/config下,打開configin這個文件,并在增加類似下面的語句:
         mainmenu_option next_comment
        comment'My Application'
        bool'example' CONFIG_USER_MYPROJECT_
        EXAMPLE
        comment'My Application
        endmenu

        此后,在編譯內核的make menuconfig時就可以在Customize Vendor/User Setting(NE W)這一項的子菜單中選中自己的應用程序example,然后按第5節中相同的辦法進行編譯即可。

        但是,如果我們每修改一次應用程序,就要把他加入到內核中重新編譯,顯然效率太低,也不可行。那么有什么方法來節省調試時間呢?

        在上面的章節中曾提到Bootloader可以擔當與主機端通信的任務,在這里我們就可以通過他把應用程序快速下載到目標板上。

        首先通過elf2flt這個工具交叉編譯example.c生成在μClinux下的可執行文件example(flat格式),命令如下:

        arm-elf-gcc-Wall-o2- wl,elf2flt- o example example.c

        接著將宿主機與目標板通過串口線連接,并在宿主機上啟動一個超級終端,例如minic om,選擇好一個COM口(通常是串口1),設置波特率為19 200,8個數據位、1個停止位,無校驗。然后選擇傳輸協議Zmodom,選定需要傳輸的文件example并發送。傳輸結束后可以通過超級終端在目標板的目錄中發現example,這說明傳輸成功。

        在目標板上將example加上x屬性(可執行屬性),然后輸入命令/example就可以運行此程序了。顯然,通過這種方法可以很方便快捷的調試應用程序,等調試結束,再把他加入到內核中一起編譯即可。

        7 結語

        討論了如何將μClinux移植到ARM7體系微處理器S3C4510B上的基本流程,同時也簡要的介紹了Bootloader以及應用程序的加載和調試方法。在不同的宿主機和目標板環境下,具體移植過程中可能會出現各種不同的錯誤或問題,可以充分利用GCC這個強大的工具,根據他的錯誤提示來一步步的進行修正,終成功的移植μClinux。

        參考文獻   

        [1]李善平,劉文峰,王煥龍.Linux與嵌入式系統[M].北京:清華大學出版社,2003
        [2]李駒光,聶雪媛,江澤明,等.ARM應用系統開發詳解[M]北京:清華大學出版社,2003

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 婷婷久久综合九色综合98 | 亚洲AV午夜福利精品一区二区 | 亚洲欧美精品伊人久久 | 日本一卡精品视频免费 | 午夜性色生活片在线观看 | 天天爽夜夜操一区二区 |