微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式Linux: uClinux操作系统移植

嵌入式Linux: uClinux操作系统移植

时间:05-11 来源:互联网 点击:

hift){

unsignedintsize;

/*onlytextisprofiled*/

prof_len=(unsignedlong)_etext-(unsignedlong)_stext;

prof_len>>=prof_shift;

size=prof_len*sizeof(unsignedint)+PAGE_SIZE-1;

prof_buffer=(unsignedint*)alloc_bootmem(size);

}

kmem_cache_init();

sti();

calibrate_delay();

#ifdefCONFIG_BLK_DEV_INITRD

if(initrd_start!initrd_below_start_ok

initrd_start

printk(KERN_CRITinitrdoverwritten(0x%08lx0x%08lx)-

disablingit.n,initrd_start,min_low_pfn

initrd_start=0;

}

#endif

mem_init();

kmem_cache_sizes_init();

pgtable_cache_init();

mempages=num_physpages;

fork_init(mempages);

proc_caches_init();

vfs_caches_init(mempages);

buffer_init(mempages);

page_cache_init(mempages);

#ifdefined(CONFIG_ARCH_S390)

ccwcache_init();

#endif

signals_init();

#ifdefCONFIG_PROC_FS

proc_root_init();

#endif

#ifdefined(CONFIG_SYSVIPC)

ipc_init();

#endif

check_bugs();

printk(POSIXconformancetestingbyUNIFIXn);

/*

*Wecountontheinitialthreadgoingok

*Likeidlersinitisanunlockedkernelthread,whichwill

*makesyscalls(andthusbelocked)。

*/

smp_init();

rest_init();

}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

5.系统源码的修改

移植一个操作系统到新的硬件平台,比较好的办法是寻找一个架构相近并且已经做好操作系统移植的硬件平台。然后,对原先的操作系统做一定修改。系统源码修改的工作量取决于自行设计的硬件平台与现有的硬件平台之间差异程度。此设计中的硬件平台与三星4510芯片较为接近,并且也可以下载到针对4510b的uclinux系统源码。所以可以从此源码入手,根据我们的硬件平台与4510b的不同之处,在源码中找到相应的文件并加以修改。下面介绍如何修改系统源码。

需要修改的系统源码主要有如下几处:

(1)bootloader相关代码。此代码位于uClinuxlinux-2.4.xarcharmnommubootcompressed目录下名为head.s的文件中。此处程序用汇编语言实现,需要修改的地方主要是设置memorymap的代码,与memorycontroller的硬件实现相关。

(2)UART相关代码。UART相关代码位于uClinuxlinux-2.4.xdriverschar目录下的serial.c

(3)定时器相关代码。uClinux中有如下函数调用star_kernel()->time_init()->setup_timer(),需要修改setup_timer()函数中的相关代码。

(4)中断控制器相关。uClinuxlinux-2.4.xarcharmnommuirq.c

除了上述的代码,还有其他多处需要修改。在修改源代码时,可按照uclinux启动和执行顺序依次修改整个平台。熟悉linux内核源码结构对操作系统移植有很大帮助。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top