欢迎来到天天文库
浏览记录
ID:16124604
大小:4.65 MB
页数:22页
时间:2018-08-08
《嵌入式系统设计实验四》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、合肥学院嵌入式系统设计实验报告(2013-2014第2学期)专业:11级自动化卓越班实验项目:Linux内核移植实验实验成员:指导老师:干开峰实验时间:2014年5月15日电子信息与电气工程系2014年4月制实验四Linux内核移植实验一、实验目的1、熟悉嵌入式Linux的内核相关代码分布情况。2、掌握Linux内核移植过程。3、学会编译和测试Linux内核。二、实验内容本实验了解Linux2.6.32代码结构,基于S3C2440处理器,完成Linux2.6.32内核移植,并完成编译和在目标开发板上测试通过。三、实验步骤1、使用光盘自带源码默认配置Linux内核拷贝解压
2、源码linux-2.6.32.2-mini2440.tar.gz。本开发板为了方便编译出和光盘烧写文件完全一致的内核,针对不同的LCD输出分别做了相应的内核配置文件:config_mini2440_t35–适用于统宝3.5”LCD的内核配置文件config_mini2440_l80–适用于Sharp8”LCD(或兼容)的内核配置文件config_mini2440_n35–适用于NEC3.5”LCD的内核配置文件config_mini2440_a70–适用于群创7”LCD的内核配置文件config_mini2440_vga1024x768–适用于VGA显示输出(分辨率10
3、24x768模块的内核配置文件)执行以下命令来使用缺省配置文件config_x35#cpconfig_mini2440_x35.config;注意:x35后面有个空格,然后有个“.”开头的config然后执行“makemenuconfig”,出现配置内核界面,不用做任何更改,在主菜单里选择退出,并选“Yes”保存设置返回到刚命令行界面,生成相应配置的头文件。编译内核:#makeclean#makezImage编译完成后,会在内核目录arch/arm/boot/下生成zImage内核映像文件。2、官网下载源码移植2.1移植前准备(1)下载内核在网站链接http
4、://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.bz2,下载Linux-2.6.32.tar.bz2。新建一个工作目录s3c2440,将内核源码包拷贝至工作目录下。(2)下载yaffs2代码在网站链接http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/cvs-root.tar.gz?parent=1&view=ta,下载cvs-root.tar.gz压缩包,拷贝至工作目录s3c2440下。(3)安装交叉编译环境下载arm-linux-gcc4.3.2,然后安装并配置环境
5、变量,最后执行:#arm-linux-gcc-v查看2.2建立自己的目标平台(1)解压内核源码tarxvzflinux-2.6.32.2.tar.gz(2)进入内核目录,修改makefile,并对内核进行默认配置进行修改183行,修改:ARCH?=armCROSS_COMPILE?=arm-linux-接下来,要测试一下linux的编译是否能正常通过。执行:#makes3c2410_defconfig;使用缺省内核配置文件,s3c2410_defconfig是SMDK2440的缺省配置文件#make;编译时间较长。经过漫长的等待后编译成功了(3)修改机器码由于Bootl
6、oader传递给Linux内核的机器号为1999,为与Bootloader传递参数一致,修改Linux内核的机器号。友善之臂已经为mini2440申请了自己的机器码为1999,它位于linux-2.6.32.2/arch/arm/tools/mach_types文件中。(4)修改时钟源频率在mach-mini2440.c(删除原来的mach-mini2440.c,通过复制mach-smdk2440.c得到的新的mach-mini2440.c)的第160行staticvoid__initsmdk2440_map_io(void)函数中,把其中的16934400(代表原SM
7、DK2440目标板上的晶振是16.9344MHz)改为mini2440开发板上实际使用的12000000(代表mini2440开发板上的晶振12MHz)。删除原来的mach-mini2440.c(5)从SMDK2440到MINI2440因为我们要制作自己的mini2440平台体系,因此把mach-mini2440.c中所有的smdk2440字样改为mini2440。除此之外,还有一个地方需要改动,在mini2440_machine_init(void)函数中,把smdk_machine_init()函数调用注释掉,因为我们后面会编写自己的
此文档下载收益归作者所有