资源描述:
《嵌入式linux内核移植》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1嵌入式Linux内核移植姓名:成炼学号:081141实验目的l了解Linux内核源代码的目录结构及各目录的相关内容l了解Linux内核各配置选项内容和作用l掌握Linux内核配置文件的作用l掌握Linux内核的编译过程l掌握将新增内核代码加入到Linux内核结构中的方法实验指引尽管目前Linux2.6版本内核已经增加了很多对ARM体系甚至是S3C2410CPU的支持,但仍然需要对内核作一些小的修改来适应我们的开发板,并且需要重新配置、编译和重新生成新的内核映像。本实验着重从NANDFlash分区到下载到开发板等一系列连贯的操作来进行嵌入式Linu
2、x内核的移植。本实验的内核版本为2.6.26。1.NANDFlash分区从NandFlash启动时,S3C2410硬件会自动把NandFlash前4K代码拷贝芯片内部RAM空间,CPU其实是从内部RAM开始执行代码的,所以vivi必须放到NandFlash顶端。vivi开始执行后将初始化硬件设备、建立内存空间映射表,为调用内核做好准备;然后把压缩的内核映像加载到SDRAM中;最后跳转到内核映像入口,启动内核。内核MTD分区必须与vivi分区相一致。因为,vivi分区中的地址是引导程序、内核映像及文件系统下载到NandFlash的真正地址;而内核启动
3、时,内核并不是去读vivi分区中的地址,而是去读内核MTD分区设定的地址;所以,如果内核MTD分区与vivi分区不相同,很可能导致不能正常启动内核及读取文件系统。1.1vivi的重新分区根据开发板的NandFlash大小及开发用途确定新的vivi分区,如表1.1。表1.1vivi的分区信息表打开vivi源代码下的arch/s3c2410/smdk.c文件,在函数:“mtd_partition_default_mtd_partitions[]={}”中可以看到vivi默认的NandFlash分区信息。根据表2的新分区信息,在上述函数中以相同的格式修改
4、原有分区信息即可完成vivi的重新分区。这里可以参考vivi的使用手册,《Gettingstartedwithvivi》。1.2内核MTD的重新分区在给内核MTD重新分区之前,有一点应该注意,2.6.16(含)以前内核与2.6.17(含)以后内核的MTD重新分区方法是不一样的,前者是需要增加新的分区信息,而后者源代码初始文件中已含分区信息,需要的是修改分区信息。我们此次实验选用的内核为2.6.26,其相应的修改如下:在源代码linux-2.6.26/arch/arm/plat-s3c2410xx/common-smdk.c文件下的“mtd_part
5、itionsmdk_default_nand_part[]={}”中,可以看到默认的MTD分区。根据表1.1,以相同的格式修改原分区信息即可完成MTD的重新分区。/*NANDparititonfrom2.4.18-swl5*/staticstructmtd_partitionsmdk_default_nand_part[]={[0]={.name="ViVi",.size=0x00020000,.offset=0x00000000,},[1]={.name="param",.offset=0x00020000,.size=0x00010000,},
6、[2]={.name="kernel",.offset=0x00030000,.size=0x00400000,},[3]={.name="root",.offset=0x00430000,.size=0x00300000,},[4]={.name="yaffs",.offset=0x00730000,.size=0x03800000,},[5]={.name="ucos",.offset=0x3f300000,.size=0x000cc000,}#if0[6]={.name="S3C2410flashpartition6",.offset=0x3
7、f300000,.size=SZ_1M*24,},[7]={.name="S3C2410flashpartition7",.offset=SZ_1M*48,.size=SZ_16M,}#endif};默认情况下分了8个区,而我们需要规划其中的6个分区,因此将后面的部分用#if0和#endif包含起来,暂时不使用。在设置每个分区的大小(.size)和偏移量(.offset)时要小心,不要导致分区重叠,并且内核和跟文件系统的偏移量设置与BootLoader中的设置保持一致,其原因上面已经分析过了。2.内核的配置的基本结构2.1Linux内核的配置系统由
8、四个部分组成Makefile:分布在Linux内核源码中的Makefile,定义Linux内核的编译规则;顶层Makefi