实验四Linux内核移植实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
合肥学院
嵌入式系统设计实验报告
(2013- 2014第二学期)
专业:
实验项目:实验四 Linux内核移植实验
实验时间: 2014 年 5 月 12
实验成员:
_____
指导老师:***
电子信息与电气工程系
2014年4月制
一、实验目的
1、熟悉嵌入式Linux的内核相关代码分布情况。
2、掌握Linux内核移植过程。
3、学会编译和测试Linux内核。
二、实验内容
本实验了解Linux2.6.32代码结构,基于S3C2440处理器,完成Linux2.6.32内核移植,并完成编译和在目标开发板上测试通过。
三、实验步骤
1、使用光盘自带源码默认配置Linux内核
⑴在光盘linux文件夹中找到linux-2.6.32.2-mini2440.tar.gz源码文件。
输入命令:#tar –jxvf linux-2.6.32.2-mini2440-20110413.tar对其进行解压。
⑵执行以下命令来使用缺省配置文件config_x35
输入命令#cp config_mini2440_x35 .config;(注意:x35后面有个空格,然后有个“.”开头的 config )
然后执行“make menuconfig”命令,但是会出现出现缺少ncurses libraries的错误,如下图所示:
解决办法:输入sudo apt-get install libncurses5-dev 命令进行在线安装ncurses libraries服务。
安装好之后在make menuconfig一下就会出现如下图所示。
⑶配置内核界面,不用做任何更改,在主菜单里选择
编译内核:
#make clean
#make zImage
在执行#make zImage命令时会出现如下错误:
错误:arch/arm/mach-s3c2440/mach-mini2440.c:156: error: unknown field 'sets' specified in initializer
通过网上查找资料
于是在自己的mach-mini2440.c中加入
#include
#include
#include
#include
#include
再次make zImage以下就不会出现错误了。
编译结束后,会在arch/arm/boot目录下生成linux内核映象文件:zImage
⑷进行zImage文件测试
首先Nor Flash启动开发板,在超级终端中选择功能号[k],用dnw下载刚刚配置的zImage镜像文件。然后再把开发板Nand Flash启动,x35触屏会出现小企鹅的图案,同时超级终端也会出现如下图所示画面:
2、官网下载源码移植
2.1 移植前准备
⑴官网下载内核Linux-2.6.32.tar.bz2。新建一个工作目录s3c2440,将内核源码包拷贝至/home/linux2.6.32.2工作目录下。
⑵下载yaffs2代码
官网下载cvs-root.tar.gz压缩包,拷贝至/home/linux2.6.32.2工作目录下。
2.2 建立自己的目标平台
⑴解压内核源码
进入linux2.6.32.2目录下执行解压命令:#tar –jxvf linux-2.6.32.tar.bz2 ,将内核源码进行解压。
⑵进入内核目录,修改makefile,并对内核进行默认配置进行修改183行,修改:
ARCH ?=arm
CROSS_COMPILE ?=arm-linux-
⑶给内核打yaffs2文件系统的补丁
执行#tar -zxvf cvs-root.tar.ga解压命令,对cvs-root.tar.gz压缩包进行解压。
①修改内核fs/Kconfig
在内核fs/Kconfig文件中添加两行内容:#Patched by YAFFS Source”fs/yaffs2/Kconfig”
②修改内核fs/Makefile
在Makefile中添加一行:ojb-$(CONFIG_YAFFS_FS)+=yaffs2/
③在内核fs/目录下创建yaffs2目录
将yaffs2源码目录下的Makefile.kernel文件复制为内核fs/yaffs2/Makefile;
将yaffs2源码目录下的Kconfig文件复制到内核fs/yaffs2目录下;
将yaffs2源码目录下的*.c 和*.h文件复制到内核fs/yaffs2目录下。
④修改机器码
由于Bootloader传递给Linux内核的机器号为1999,为与Bootloader传递参数一致,修改Linux内核的机器号。友善之臂已经为 mini2440 申请了自己的机器码为 1999,它位于linux-2.6.32.2/arch/arm/tools/mach_types文件中。
⑤修改时钟源频率
在 mach-mini2440.c(删除原来的mach-mini2440.c,通过复制mach-smdk2440.c 得到的新的mach-mini2440.c)的第 160 行static void __init smdk2440_map_io(void)函数中,把其中的 16934400(代表原 SMDK2440 目标板上的晶振是 16.9344MHz)改为 mini2440 开发板上实际使用的 12000000(代表 mini2440 开发板上的晶振 12MHz)。