uClinux在嵌入式系統(tǒng)中的移植研究
3.3 uClinux內(nèi)核的修改
目前uClinux已被成功移植到S3C44B0及其他多款A(yù)RM芯片上,但由于嵌入式操作系統(tǒng)的運(yùn)行是與嵌入式系統(tǒng)的硬件密切相關(guān)的,而硬件的設(shè)計(jì)則會(huì)因?yàn)槭褂脠龊系牟煌Р钊f別,因此,uClinux內(nèi)核源代碼中和硬件緊密相關(guān)的部分就應(yīng)該針對特定的硬件作出適當(dāng)?shù)男薷摹?P>首先,從網(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 –p0uClinux
-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)相同。
(4)ROM文件系統(tǒng)的定位修改
修改目錄linux-2.4.x/drivers/block下的文件blkmem.c里的如下代碼:
#ifdef CONFIG_BOARD_MBA44
{0, 0x00100000, -1},
#endif
0x00100000是文件系統(tǒng)的定位地址。本文中移植采用uClinux的文件系統(tǒng)ROM file system,它的映象文件romfs.img要燒寫到flash的某一地址。一旦該定位地址確定,在執(zhí)行BootLoader的功能1時(shí)就要將 romfs.img燒寫到flash的這個(gè)地址。定位地址不是固定不變的,可以根據(jù)flash和image.rom的大小來更改。
矢量控制相關(guān)文章:矢量控制原理
評論