久久久久久久麻豆,中日韩av在线,麻豆av在线免费,中文字幕二区三区,欧美日韩视频一区二区,亚洲欧美日韩在线一区,国产无毒不卡

uClinux在嵌入式系統(tǒng)中的移植研究


c,=0x0c00000c;   // Prefetch Abort Handler
  ldr pc,=0x0 c000010;   // Data Abort Handler
  b .
  ldr pc,=0x0c000018;    //IRQ Handler
  ldr pc,=0x0c00001c;    //FIQ Handler
  3.3 uClinux內(nèi)核的修改
  目前uClinux已被成功移植到S3C44B0及其他多款A(yù)RM芯片上,但由于嵌入式操作系統(tǒng)的運(yùn)行是與嵌入式系統(tǒng)的硬件密切相關(guān)的,而硬件的設(shè)計(jì)則會因?yàn)槭褂脠龊系牟煌Р钊f別,因此,uClinux內(nèi)核源代碼中和硬件緊密相關(guān)的部分就應(yīng)該針對特定的硬件作出適當(dāng)?shù)男薷摹?
  首先,從網(wǎng)站(www.uClinx.org)下載源碼uClinux-dist-20040408,但這個(gè)發(fā)行包中的內(nèi)核對S3C44B0X處理器的支持是不完整的,必須為內(nèi)核打上補(bǔ)丁uClinux-2.4.24.patch(可以從http://www.hzlitai.com.cn下載),然后在終端下執(zhí)行:patch –p0 
  -2.4.24.patch就可以安裝該補(bǔ)丁。該補(bǔ)丁完善了對S3C44B0的支持,但是它針對特定的硬件及Bootloader,對內(nèi)核做了相應(yīng)的修改,因此我們在做移植時(shí)應(yīng)該根據(jù)自己的BootLoader及硬件來修改內(nèi)核。修改部分如下:
  (1)壓縮內(nèi)核代碼起始地址修改
  修改目錄linux-2.4.x/arch/armnommu/boot/下的文件Makefile里的如下代碼:
  ifeq ($(CONFIG_BOARD_MBA44),y)
  ZTEXTADDR = 0x0c300000
  ZRELADDR  = 0x0c008000
  Endif
  ZTEXTADDR代表 映像文件image.rom自解壓的起始地址,它的值是由BootLoader的功能2決定的。執(zhí)行功能2,將image.rom從Flash轉(zhuǎn)移到SDRAM的地址0x0c300000,內(nèi)核自解壓,所以ZTEXTADDR必須和這個(gè)值相同。ZRELADDR代表內(nèi)核解壓后代碼輸出起始地址。
  (2)處理器配置選項(xiàng)的修改
  修改目錄linux-2.4.x/arch/armnommu/下的文件config.in里的如下代碼:
  define_int  CONFIG_ARM_CLK   64000000     
  if [ "$CONFIG_SET_MEM_PARAM" = "n" ]; then
  define_hex DRAM_BASE  0x0C000000
  define_hex DRAM_SIZE  0x00800000
  define_hex FLASH_MEM_BASE  0x00000000
  define_hex FLASH_SIZE      0x00200000
  DRAM_BASE代表SDRAM的起始地址,DRAM_SIZE代表SDRAM的大小,F(xiàn)LASH_MEM_BASE代表Flash的起始地址, FLASH_SIZE代表Flash的大小。要根據(jù)自己的Flash和SDRAM來設(shè)定這些值
 (3)內(nèi)核起始地址的修改 
  修改目錄linux-2.4.x/arch/ARMnommu/下的文件Makefile里的如下代碼:
  ifeq ($(CONFIG_BOARD_MBA44),y)
  TEXTADDR   = 0x0c008000
  MACHINE      = S3C44B0X
  INCDIR       = $(MACHINE)
  CORE_FILES  := $(CORE_FILES) #romfs.o
  Endif
  TEXTADDR代表內(nèi)核起始地址,與image.rom自解壓后代碼輸出起始地址(ZRELADDR)相同。
 ?。?)ROM文件系統(tǒng)的定位修改
  修改目錄linux-2.4.x/drivers/block下的文件blkmem.c里的如下代碼:
  #ifdef CONFIG_BOARD_MBA44
  ,
  #endif
  0x00100000是文件系統(tǒng)的定位地址。本文中移植采用uClinux的文件系統(tǒng)ROM file sy stem,它的映象文件romfs.img要燒寫到flash的某一地址。一旦該定位地址確定,在執(zhí)行BootLoader的功能1時(shí)就要將romfs.img燒寫到flash的這個(gè)地址。定位地址不是固定不變的,可以根據(jù)flash和image.rom的大小來更改。
 ?。?)定義uClinux異常中斷向量表的起始地址
  修改目錄linux-2.4.x/include/asm-armnommu/proc/下的文件system.h 里的如下代碼:
  #ifdef CONFIG_BOARD_MBA44
  #undef  vectors_base()
  #define vectors_base()  (0x0c000000)
  #endif
  vectors_base()定義了uClinux異常中斷向量表的起始地址 。uClinux啟動后,一旦發(fā)生中斷,處理器會自動跳轉(zhuǎn)到從0x0地址開始的第一級中斷向量表中的某個(gè)表項(xiàng),再跳轉(zhuǎn)到從vectors_base()開始的uClinux異常中斷向量表中的某個(gè)表項(xiàng),執(zhí)行中斷服務(wù)程序。
  (6)定義CPU體系結(jié)構(gòu)和交叉編譯器
  修改目錄linux-2.4.x/下的文件Makefile里的如下代碼:
  KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
  ARCH := armnommu
  HOSTCFLAGS  = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
   CROSS_COMPILE = arm-elf-
  ARCH := armnommu定義了CPU的體系結(jié)構(gòu),S3C44B0采用的內(nèi)核為無內(nèi)存管理單元的ARM7TDMI,所以體系結(jié)構(gòu)定義為armnommu。CROSS_COMPILE = arm-elf-定義了交叉編譯器名稱,這里采用的交叉編譯器為Arm-elf-tools-20030314.sh,所以名稱定義為arm-elf-。
  3.4交叉編譯環(huán)境的建立
  由于 Bootloader在物理上獨(dú)立于uClinux, 可以在集成開發(fā)環(huán)境下(如ADS)開發(fā),但是uClinux必須在GNU環(huán)境下實(shí)現(xiàn)。Arm-elf-tools-20030314.sh是一個(gè)針對arm的交叉編譯器,在Linux操作系統(tǒng)下安裝這個(gè)編譯器,能夠編譯運(yùn)行于ARM 上的程序。在Linux環(huán)境下,從網(wǎng)站(如http://www.uClinux.org)下載Arm-elf-tools-20030314.sh。將其考到任何一個(gè)目錄下,然后執(zhí)行sh ./ arm-elf-tools-20030314.sh  這樣,交叉編譯工具就安裝好了。
  3.5 uClinux內(nèi)核的配置,編譯及連接
  在編譯uClinux 內(nèi)核之前,首先要對內(nèi)核進(jìn)行配置。用make menuconfig進(jìn)行內(nèi)核的配置,內(nèi)核版本選linux-2.4.x,System Type選 S3C44B0 ARM ,庫函數(shù)版本選uClibc。保存設(shè)置會出現(xiàn)內(nèi)核配置窗口和用戶程序配置窗口,內(nèi)核配置中選擇ROM文件系統(tǒng)支持和S3C44B0串口支持,用戶配置按默認(rèn)選項(xiàng)(可以根據(jù)自己的需要對內(nèi)核和用戶程序進(jìn)行配置)。
  配置完成后,開始編譯內(nèi)核,在終端分別執(zhí)行make dep,make lib_only,make user_only,make romfs,make image,make。當(dāng)內(nèi)核的編譯工作完成后,在目錄uClinux/images下會生成我們需要的映像文件image.rom,image.ram,romfs.img。 
  3.6 uClinux內(nèi)核的下載與執(zhí)行
  使用fluted 工具將 Bootloader 燒寫到 flash 的0X000000處;利用 Bootloader 將內(nèi)核映像image.rom 下載到0x10000處;利用Bootloader 將文件系統(tǒng)romfs.img下載到0x1000
  00處.啟動uClinux就可以在超級終端看到uClinux 的歡迎信息和簡單的shell提示符。
  4 結(jié)束語
  對于嵌入式系統(tǒng)開發(fā)人員來說 ,要將嵌入式操作系統(tǒng)應(yīng)用到嵌入式系統(tǒng)中,首先要做的工作是根據(jù)不同的硬件平臺移植操作系統(tǒng),掌握移植的方法非常重要。本文所述的移植方法已經(jīng)成功應(yīng)用于多個(gè)項(xiàng)目的開發(fā)。所述的移植雖然是針對ARM處理器芯片S3C44B0,但重點(diǎn)闡述的是移植的思路和方法,對將uClinux移植到其他處理器為核心的硬件平臺也有借鑒作用。
  參考文獻(xiàn):
  [1]  李巖,榮盤. 
基于S3C44B0嵌入式uClinux系統(tǒng)原理及應(yīng)用[M] .北京:清華大學(xué)出版社,2005
  [2]  楊瑞亞 ,肖 璋. 嵌入式 uCLinux 內(nèi)核啟動過程分析與設(shè)計(jì) [J]. 微計(jì)算機(jī)信息,2005,21(8-2):32-33
  [3]  Daniel P.Bovet &Marco Cesati. 深入理解Linux內(nèi)核[M]. 北京:中國電力出版社,2004

COPYRIGHT(C) 2011 廈門永宏亞得機(jī)電科技有限公司版權(quán)所有(閩ICP備05025945號) ALL RIGHTS RESERVED?

電話: 0592-5190891 傳真: 0592-5190720 E-Mail: E-mail:yade8895@163.com
地址: 廈門市海滄區(qū)興港六里17號2607室 郵編:361009 聯(lián)系人:翟先生