版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.科技学院计算机学院综合性实验报告科技学院计算机学院综合性实验结 课 论 文 论文题目 在ARM平台上移植linux操作系统 实验学期 2016 至 2017 学年 第 1 学期学生所在学院部 计算机学院 年级 专业班级 学生姓名 学号 任课教师 实验成绩 计算机学院制课程结课论文评价教 师 评 价序号评定项目ABCDE1课程学习的态度与纪律2结课论文的格式规范和字数3结课论文内容翔实与完整程度4结课论文研究内容与课程的关联度5结课论文研究的深度6总评评价标准:1.表格第一行中的A、B、C、D、E分别对应优、良、中、及格、不及格。2.学生结课论文的总评成绩分为优、良、中、及格、不及格5个等级,
2、分别对应95、85、75、65、55。优秀:所有评价项目中都是B以上,且至少获得4个A;良好:所有评价项目中都是C以上,且至少获得4个B或A;中等:所有评价项目中都是D以上,且至少获得4个C或以上;及格:所有评价项目中都是D以上;不及格:符合以下条件之一的:(1)评价项目中只要有一项是E;(2)课程学习期间无视课程纪律,未能参加课程学习的时间超过全部时间的三分之一以上;(3)课程学习目的不明确,结课论文报告马虎潦草或内容与课程学习内容不符,未达到课程学习中规定的基本要求;(4)大部分内容抄袭别人或网上的内容。在ARM平台上移植linux操作系统摘要:在ARM平台上移植linux操作系统作为实现
3、设备小型化、智能化的一个重要元素,目前己经广泛应用于国防、工业、交通、能源、信息技术以及日常生活等各个领域,研究和开发linux操作系统在ARM平台上的移植具有重要的现实意义。本文主要介绍了将公开源代码的linux3.3.3内核移植到S3C6410(arm1172 核)的关键技术分析以及具体的移植过程,建立嵌入式Linux交叉开发环境,移植BootLoader引导程序,配置、编译、移植Linux内核,制作文件系统并对文件系统进行移植到开发板。我们可以根据内核所支持的文件系统类型制作文件系统本论文选择制作yaffs文件系统并移植。并且vim,arm-linux-gcc开发环境下设计了一个简单的测
4、试程序。另外,基于此平台的开发也将使软件缺陷大幅度减少,从而为程序员开发此平台上进行二次开发。关键字:linux 嵌入式 移植 内核 配置目录1 绪 论31.1课题研究的背景、目的和意义32 嵌入式 Linux系统构成和软件开发环境32.1嵌入式Linux系统的体系结构32.2嵌入式Linux开发软件平台建立32.2.1软件开发平台的二种平台的介绍43 嵌入式Linux的引导BootLoader程序44.Linux内核的编译、移植44.1 Linux内核启动流程44.2内核移植的实现54.3配置、编译内核75文件系统制作95.1内核支持YAFFS文件系统106测试136.1编写简单C程序测试移
5、植的系统136.2在开发板执行测试程序137结论与展望141 绪 论1.1课题研究的背景、目的和意义随着各种芯片技术的发展,各种嵌入式产品也如雨后春笋一般地出现了。目前,嵌入式产品应用领域涉及移动通信、汽车、医疗、家电等很多领域。而且,如今的嵌入式硬件的速度和容量越来越接近于PC,因此在这些嵌入式产品上运行操作系统就成为了可能。一直以来,很多企业花费了巨大成本研发了大量运行在PC上的软件产品。如果将这些优秀的软件应用在嵌入式系统中,将会成为快速开发嵌入式系统,降低嵌入式产品开发成本,提高软件稳定性和安全性的重要途径。2 嵌入式 Linux系统构成和软件开发环境进行嵌入式操作系统以及驱动程序的移
6、植,需要对目标硬件平台和软件结构有深入的理解。本章介绍嵌入式Linux系统的体系结构、硬件平台构成和嵌入式软件开发环境。2.1嵌入式Linux系统的体系结构除了硬件系统外,嵌入式Linux系统需要有下面三个基本元素:系统引导程序BootLoader(用于设备加电后的系统定位引导)、Linux微内核(内存管理、程序管理)、初始化进程。但如果要它成为完整的操作系统并继续保持小型化还必须加上硬件驱动程序、硬件接口程序和应用程序组。最终可用的嵌入式Linux系统体系结构如表所示:表2-1嵌入式Linux系统体系结构应用软件应用层BOOTLOADER、LINUX KERNEL、DRIVERS系统层嵌入式
7、开发板实验板(本论文使用SAMSUNG S3C6410)硬件层2.2嵌入式Linux开发软件平台建立软件开发平台是嵌入式开发的关键,嵌入式软件开发平台建立的目的是为了进行BootLoader移植、Linux内核移植以及GUI系统开发。由于嵌入式硬件平台的存储空间有限、处理器频率较低,很难直接在嵌入式硬件式平台上建立Linux系统、安装嵌入式开发软件,因此只能采用嵌入式交叉开发环境来解决这个问题。2.2.1软件开发平台的二种平台的介绍嵌入式Linux系统开发需要一台装有Linux操作系统的PC机,在此机器上运行交叉编译工具,Linux系统采用FC5,具体有以下几种方案:l)采用VMWare。2)
8、按通常的方法,在独立的分区上安装Linux操作系统。但是安装2个系统需要用的grub,需要配置修改启动项,而且删除此Linux操作系统很麻烦。3 嵌入式Linux的引导BootLoader程序引导BootLoader程序是为了初始化ARM平台上的硬件设备,引导内核,给内核提供ARM平台的硬件参数,还有为操作系统引导根文件系统。4.Linux内核的编译、移植内核是操作系统的核心组件。使用内核的目的是希望以一致的方式管理硬件,以及为用户软件提供高层抽象层。Linux 会驱动设备、管理I/O 的存取、调度进程、共享存储空间、管理信号的配送以及处理其他管理工作。4.1 Linux内核启动流程在移植的调
9、试阶段,在没有在线仿真器的情况下,可以通过板上LED的状态输出或串口输出的调试信息进行错误定位,所以有必要了解一下内核的启动流程,图4-1对此做来解释。 内核在启动的过程中按下图步骤一步一步启动,了解启动的顺序,有利于掌握好内核移植的工作安排过程。图4-1内核启动流程图4.2内核移植的实现在Linux内核移植的初始阶段,应尽可能屏蔽不相关的设备驱动以及内核功能配置选项,使内核支持的选项尽可能的少,构造最小内核。在确保己经进行的内核移植操作正确的情况下逐步的添加相应的硬件支持和功能支持。1)Makefile文件介绍Make是用来自动编译、链接程序的实用工具,Make命令将根据 Makefile文
10、件的规则来决定如何编译和连接程序。Makefile文件描述程序之间的依赖关系,以及提供更新文件的命令。Makefile文件贯穿内核代码目录,所有Makefile中的CROSS_COMPILE关键字用于指定要进行交叉编译工具链,ARCH关键字用于指定目标平台,所以这里改为: CROSS_COMPILE ? = arm-linux-ARCH ? = arm2)arch/ARM/config.in文件config.in是配置文件,运行 make menuconfig命令时出现的菜单就是config配置的。config文件决定了menuconfig菜单的内容。把使用的平台加在需要的地方,这样在配置Li
11、nux内核时就能够选择是否支持新添加的平台了。 3)arch/arm/Makefile根目录下的Makefile,指定了交叉编译器arch/ARM/Makefile更具针对性,系统启动代码是通过这个文件产生的。在内核添加对S3C2410处理器的支持。其代码如下:ifeq (#(CONFIG_ARCH_S3C2410),y)TEXTADDR= 0xC0008000MACHINE= s3c2410endifTEXTADDR为内核解压的起始地址,决定内核起始运行地址,即内核映像应下载的位置,根据开发板的电路设计,这个地址是OxC0008000。这里0xC0008000的含义是,从地址0xC00000
12、00开始,总共32M字节的空间。4)compressed/Makefile添加对本文开发板的支持。通过这个文件,将从vmLinux创建一个压缩的vmlinuz镜像。ifeq(#(CONFIG_ARCH_S3C6410),y)objs += head-s3c6410.oEndif5)compressed/head_s3c641O.S这个文件是依据S3C6410的芯片手册编写的,主要用来初始化处理器。主要完成到对系统主要模块的配置、运行环境的建立、系统时钟、MMU等模块的配置等。6)arch/arm/kernel/MakefileMakefile的作用是根据配置的情况,构造出需要编译的源文件列表,
13、然后分别编译,并把目标代码链接到一起,最终形成Linux内核二进制文件。7)debug_armv.S在此文件中定义串口打印函数,关闭全部外围设备的时钟,从而保证系统正确运行。8)setup.c这个文件中一个非常重要的函数是setup_arch。这个函数用来完成和体系相关的初始化工作,比如对物理内存结构meminfo的初始化。这个结构在内存初始化中有很重要的作用。其中,nBanks指定了内存块的数量,bank指定了每块内存的范围。在这里用来指定块开始和长度的PAGE_OFFSET和MEM_SIZE,都定义在includelasm-ARM/arch-s3c6410/memory.h中,PAGE_O
14、FFSET是内存的开始地址,往后函数就将根据meminfo进行内存结构初始化。9)arch/ARM/mach-s3c6410发布的代码只对处理器的基本信息提供了支持,有关开发板的外设,例如USB、电源管理等都需要自己添加。4.3配置、编译内核编译内核之前首先要配置内核,配置内核的命令包括: 1)make s3c6400_defconfig这种方法将配置选项以命令行的形式列出,会恢复内核的默认配置。如果己经存在有.config的配置文件,那么就会以该文件中的配置选项作为默认配置设置。2)make menuconfig与 make config类似,不过这种方法的显示方式是以菜单模式进行显示的。M
15、ake xconfig使用鼠标选择对应的选项, make menuconfig使用空格选择相应的选项,每个选项前的括号可以是、<>和()。中括号中要么是空格,要么是*,尖括号里可以是空格、*和M;小括号里的内容是在所提供的几个选项里选择一个。空格表示不将该功能编译进内核,*表示将该功能编译进内核,M表示将该功能编译成模块,在需要时将其动态插入到内核。 3)make xconfig(不推荐使用)用于X Window下的配置,将配置选项以图形菜单的形式显示出来。在进行相应的配置的时候,有三种方式选择:Y:将该功能编译进内核;N:不将该功能编译进内核;M:将该功能编译成可译载需要时动态插
16、入到内核的模块。make xconfig使用鼠标选择对应的选项,make menuconfig使用空格选择相应的选项,每个选项前的括号可以是、<>和()。中括号中要么是空格,要么是*,尖括号里可以是空格、*和M;小括号里的内容是在所提供的几个选项里选择一个。空格表示不将该功能编译进内核,*表示将该功能编译进内核,M表示将该功能编译成模块,在需要时将其动态插入到内核。1) 执行make -j2 zImage生成可以移植到开发板的zImage。其中 j2 表示使用双核编译,加快编译速度。使用zImage 自解压内核镜像。图4-3 内核zImage生成的界面 2)make modules
17、此命令可以完成对所选的内核选项进行组件化编译,所需时间取决于所选的内核组件选项的多少。还可以使用命令:# make modules SUBDIRS = drivers/x将编译好的U-Boot.bin、zImage、rootfs文件系统放在linux系统下的tftpboot下面以便烧写,tftp和nfs配置在第二章已经讲过,配置好可以执行下面操作进行对内核、文件系统的烧写:1) 移植uboot 连接好JTAG并口线,用./JLASH_2410EP_Nor /f:u-boot.bin;2) 移植内核tftp 0x500080000 zImage /*下载内核到开发板*/bootm 0x50008
18、0000 /*启动内核*/ 3) 移植文件系统 tftp 0x50000000 rootfs /*下载文件系统到开发板*/nand 0x50000000 0x200000 /*将rootfs烧入开发板*/移植好的内核启动在超级终端会可以看到如下所示: 图4-4 内核启动界面5文件系统制作文件系统是操作系统的一个重要组成部分, 通过对操作系统所管理的存储空间的抽象,向用户提供统一的、对象化的访问接口,屏蔽对物理设备的直接操作和资源管理。5.1内核支持YAFFS文件系统下载下来源码之后,在根目录下存在一个patch-ker.sh,这是一个给linux打补丁的脚本,打上这个补丁之后,内核的源代码就支
19、持yaffs2了,我们来看一下这个脚本的最后部分。脚本中每个命令行必须以TAB键开始,这是基本常识。首先,解压安装busybox修改Makefile,执行以下命令:# tar jxvf busybox-1.9.2.tar.bz2# cd busybox-1.9.2# vim Makefile对其做如下修改: ARCH ?= armCROSS_COMPILE ? = arm-linux-退出Makefile。然后通过make menuconfig图形界面根据你的要求进行修改。# make menuconfig图5-1 menuconfig目录下的修改下面是根据文件选项往下一步一步设置的说明:Bu
20、sybox setting -> build option -> *build busybox as a static binary Init Utilities -> *init *Support reading as inittab file Shells -> choose your devifault shell(ash) -> (X) ash Linux Module Utilities-> *Support version 2.2.x to 2.6.x Linux kernels*表示选上,空格表示不选,M表示用到的时候调用。然后修改文件appl
21、ets/applets.c 将第21行如下代码注释掉/* # error Aborting compilation */ 否则出现错误: applets/applets.c:21:2: error: # error Aborting compilation。执行 # make .# make CONFIG_PREFIX=/root_01 install busybox 就被安装到根目录/root_01下了(/root_01下生成 bin linuxrc sbin usr) /root_01是自己在主机根目录下建的一空文件。图5-2 表示根文件下生成的root_01在/root_01中 创建文件
22、dev、/etc、/home、/home、/usr、/lib、/mnt、/var、/tmp、/proc、/opt# mkdir dev etc home lib mnt var tmp proc sys opt将库文件拷到/lib下,这里是在4.3.2的目录里的库,别的编译器库行丌行没试过。 # cd /home/wyx/usr/local/arm/4.3.2/arm-linux/lib # cp *.so* /root_01/lib -d 注意这两装载器对应的库文件(ld.so和ld-linux.so)没有到主机里的lib找。 创建etc目录下文件 在root_01/etc目录下创建一个in
23、ittab文件 内容如下: :sysinit:/etc/init.d/rcS :respawn:-/bin/sh tty2:askfirst:-/bin/sh :restart:/sbin/init :ctrlaltdel:/sbin/reboot :shutdown:/bin/umount -a -r :shutdown:/sbin/swapoff -a 创建etc/mdev.conf文件,内容为空。同样的方法创建etc/init.d/rcS文件: #!/bin/sh (相当于windows下的批处理文件.bat)ifconfig eth0 22mount -a mkd
24、ir /dev/pts mount -t devpts devpts/dev/pts echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s 最后还要改变它的属性使它能够执行。# chmod 777 etc/init.d/rcS (777表示所有用户有权限执行)创建etc/fstab文件:proc /proc proc defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 sysfs /sys sysfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0 在/root_01/
25、dev 建立节点文件:# mknod console c 5 1 # mknod null c 1 3 下载cramfs-1.1.tar.gz解压后在其顶层make得到mkcramfs 把mkcramfs 和root_01放在一起。 执行 # mkcramfs root_01 myroot01.cramfs 生成可以烧写的根文件myroot.cramfs 将myroot.cramfs改名为 root # mv myroot.cramfs root将root文件拷贝到tftpboot文件下以便烧写。6测试6.1编写简单C程序测试移植的系统在终端执行vim hello.c编写一个简单的C程序如下:# include <stdio.h>int main(void)printf("hello arm!n");printf("Thanks Erveybody!n");return 0 ;编写好之后保存退出hello.c,执行以下命令:# arm-linux-gcc o hello.c hello (生成可运行的二进制hello文件)# cp hello /udisk将会生成一个可以在开发板运行的二进制文件hello,将hello拷贝到
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024八年级数学上册第一章因式分解3公式法第2课时用完全平方公式分解因式习题课件鲁教版五四制
- 2024年乌鲁木齐客运从业资格证的考试题目是什么题
- 2024年海南客运资格证摸拟考试题
- 2024年杭州客运从业资格证应用能力考试
- 2024年武汉驾驶员客运从业资格证考试题库
- 2024年来宾客运从业资格证考试题目
- 2024年西宁2024年客运从业资格证模拟考试题及答案
- 开学交通安全第一课学习心得(31篇)
- 文员年度考核工作总结2024(3篇)
- 店铺合作经营协议书(34篇)
- 阀门带压堵漏技术(李彪)
- 钙离子增敏剂对心衰治疗带来的治疗革命
- 建筑工程初步设计文件审查要点
- 《律师参与公司自行清算业务操作指引》
- 引水工程施工设计方案
- 四氢呋喃项目可行性研究报告-用于立项备案
- 部编版《道德与法治》五年级下册第8课《推翻帝制 民族觉醒》优质课件
- Q∕GDW 11514-2021 变电站智能机器人巡检系统检测规范
- 基坑支护工程(技术标图文)
- 汽车美容装饰行业员工提成方案
- 布缆船操作规程
评论
0/150
提交评论