在ARM平台上移植linux操作系统-计算机综合实验嵌入式论文_第1页
在ARM平台上移植linux操作系统-计算机综合实验嵌入式论文_第2页
在ARM平台上移植linux操作系统-计算机综合实验嵌入式论文_第3页
在ARM平台上移植linux操作系统-计算机综合实验嵌入式论文_第4页
在ARM平台上移植linux操作系统-计算机综合实验嵌入式论文_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

华北科技学院计算机学院综合性实验华北科技学院计算机学院综合性实验 结结 课课 论论 文文 论文题目论文题目在在 ARMARM 平台上移植平台上移植 linuxlinux 操作系统操作系统 实验学期实验学期20162016至至2012017 7学年学年 第第1 1学期学期 学生所在学院部学生所在学院部计算机学院计算机学院 年级年级20132013专业班级专业班级计科计科 B B131131 学生姓名学生姓名纪彬纪彬学号学号201307014119201307014119 任课教师任课教师顾涛顾涛 实验成绩实验成绩 计算机学院制计算机学院制 华北科技学院计算机学院综合性实验报告 第 1 页 课程结课论文评价课程结课论文评价 教教 师师 评评 价价 序号序号评定项目评定项目A AB BC CD DE E 1课程学习的态度与纪律 2结课论文的格式规范和字数 3结课论文内容翔实与完整程度 4结课论文研究内容与课程的关联度 5结课论文研究的深度 6总评 评价标准:评价标准: 1.表格第一行中的 A、B、C、D、E 分别对应优、良、中、及格、不及格。 2.学生结课论文的总评成绩分为优、良、中、及格、不及格 5 个等级,分别 对应 95、85、75、65、55。 优秀:所有评价项目中都是 B 以上,且至少获得 4 个 A; 良好:所有评价项目中都是 C 以上,且至少获得 4 个 B 或 A; 中等:所有评价项目中都是 D 以上,且至少获得 4 个 C 或以上; 及格:所有评价项目中都是 D 以上; 不及格:符合以下条件之一的: (1)评价项目中只要有一项是 E; (2)课程学习期间无视课程纪律,未能参加课程学习的时间超过 全部时间的三分之一以上; (3) 课程学习目的不明确, 结课论文报告马虎潦草或内容与课程学习内 容不符,未达到课程学习中规定的基本要求; (4)大部分内容抄袭别人或网上的内容。 华北科技学院计算机学院综合性实验报告 第 2 页 在在 ARMARM 平台上移植平台上移植 linuxlinux 操作系统操作系统 摘要摘要: :在 ARM 平台上移植 linux 操作系统作为实现设备小型化、 智能化的 一个重要元素,目前己经广泛应用于国防、工业、交通、能源、信息技 术以及日常生活等各个领域,研究和开发 linux 操作系统在 ARM 平台上 的移植具有重要的现实意义。本文主要介绍了将公开源代码的 linux3.3.3 内核移植到 S3C6410(arm1172 核)的关键技术分析以及具 体的移植过程,建立嵌入式 Linux 交叉开发环境,移植 BootLoader 引导 程序,配置、编译、移植 Linux 内核,制作文件系统并对文件系统进行移 植到开发板。我们可以根据内核所支持的文件系统类型制作文件系统本 论文选择制作 yaffs 文件系统并移植。并且 vim,arm-linux-gcc 开发环 境下设计了一个简单的测试程序。另外,基于此平台的开发也将使软件 缺陷大幅度减少,从而为程序员开发此平台上进行二次开发。 关键字关键字:linux 嵌入式 移植 内核 配置 华北科技学院计算机学院综合性实验报告 第 3 页 目录目录 1 绪 论.4 1.1 课题研究的背景、目的和意义.4 2 嵌入式 Linux 系统构成和软件开发环境.4 2.1 嵌入式 Linux 系统的体系结构.4 2.2 嵌入式 Linux 开发软件平台建立.4 2.2.1 软件开发平台的二种平台的介绍. 5 3 嵌入式 Linux 的引导 BootLoader 程序.5 4.Linux 内核的编译、移植.5 4.1 Linux 内核启动流程.5 4.2 内核移植的实现.6 4.3 配置、编译内核.8 5 文件系统制作.10 5.1 内核支持 YAFFS 文件系统.11 6 测试.14 6.1 编写简单 C 程序测试移植的系统.14 6.2 在开发板执行测试程序.14 7 结论与展望.15 华北科技学院计算机学院综合性实验报告 第 4 页 1 绪绪 论论 1.1 课题研究的背景、目的和意义课题研究的背景、目的和意义 随着各种芯片技术的发展,各种嵌入式产品也如雨后春笋一般地出现了。目前, 嵌入式产品应用领域涉及移动通信、汽车、医疗、家电等很多领域。而且,如今的 嵌入式硬件的速度和容量越来越接近于 PC,因此在这些嵌入式产品上运行操作系统 就成为了可能。一直以来,很多企业花费了巨大成本研发了大量运行在 PC 上的软件 产品。如果将这些优秀的软件应用在嵌入式系统中,将会成为快速开发嵌入式系统, 降低嵌入式产品开发成本,提高软件稳定性和安全性的重要途径。 2 嵌入式嵌入式 Linux 系统构成和软件开发环境系统构成和软件开发环境 进行嵌入式操作系统以及驱动程序的移植,需要对目标硬件平台和软件结构有 深入的理解。本章介绍嵌入式 Linux 系统的体系结构、硬件平台构成和嵌入式软件 开发环境。 2.1 嵌入式嵌入式 Linux 系统的体系结构系统的体系结构 除了硬件系统外,嵌入式 Linux 系统需要有下面三个基本元素:系统引导程序 BootLoader(用于设备加电后的系统定位引导)、 Linux 微内核(内存管理、 程序管理)、 初始化进程。但如果要它成为完整的操作系统并继续保持小型化还必须加上硬件驱 动程序、硬件接口程序和应用程序组。最终可用的嵌入式 Linux 系统体系结构如表 所示: 表 2-1 嵌入式 Linux 系统体系结构 应用软件应用层 BOOTLOADER、LINUX KERNEL、DRIVERS系统层 嵌入式开发板实验板 (本论文使用 SAMSUNG S3C6410) 硬件层 2.2.2 2 嵌入式嵌入式 LinuxLinux 开发软件平台建立开发软件平台建立 软件开发平台是嵌入式开发的关键,嵌入式软件开发平台建立的目的是为了进 华北科技学院计算机学院综合性实验报告 第 5 页 行 BootLoader 移植、Linux 内核移植以及 GUI 系统开发。由于嵌入式硬件平台的存 储空间有限、处理器频率较低,很难直接在嵌入式硬件式平台上建立 Linux 系统、 安装嵌入式开发软件,因此只能采用嵌入式交叉开发环境来解决这个问题。 2.2.1 软件开发平台的二种平台的介绍 嵌入式 Linux 系统开发需要一台装有 Linux 操作系统的 PC 机,在此机器上运行 交叉编译工具,Linux 系统采用 FC5,具体有以下几种方案: l)采用 VMWare。 2)按通常的方法,在独立的分区上安装 Linux 操作系统。但是安装 2 个系统需 要用的 grub,需要配置修改启动项,而且删除此 Linux 操作系统很麻烦。 3 嵌入式嵌入式 Linux 的引导的引导 BootLoader 程序程序 引导 BootLoader 程序是为了初始化 ARM 平台上的硬件设备,引导内核,给 内核提供 ARM 平台的硬件参数,还有为操作系统引导根文件系统。 4.4.LinuxLinux 内核的编译、移植内核的编译、移植 内核是操作系统的核心组件。使用内核的目的是希望以一致的方式管理硬 件,以及为用户软件提供高层抽象层。Linux 会驱动设备、管理I/O 的存取、调 度进程、共享存储空间、管理信号的配送以及处理其他管理工作。 4.1 Linux 内核启动流程内核启动流程 在移植的调试阶段,在没有在线仿真器的情况下,可以通过板上 LED 的状态输 出或串口输出的调试信息进行错误定位,所以有必要了解一下内核的启动流程,图 4-1 对此做来解释。 内核在启动的过程中按下图步骤一步一步启动,了解启动的顺序,有利于 掌握好内核移植的工作安排过程。 华北科技学院计算机学院综合性实验报告 第 6 页 图 4-1 内核启动流程图 4.2 内核移植的实现内核移植的实现 在 Linux 内核移植的初始阶段,应尽可能屏蔽不相关的设备驱动以及内核功能 配置选项,使内核支持的选项尽可能的少,构造最小内核。在确保己经进行的内核 移植操作正确的情况下逐步的添加相应的硬件支持和功能支持。 1)Makefile 文件介绍 Make 是用来自动编译、链接程序的实用工具,Make 命令将根据 Makefile 文件 华北科技学院计算机学院综合性实验报告 第 7 页 的规则来决定如何编译和连接程序。Makefile 文件描述程序之间的依赖关系,以及 提供更新文件的命令。Makefile 文件贯穿内核代码目录,所有 Makefile 中的 CROSS_COMPILE 关键字用于指定要进行交叉编译工具链,ARCH 关键字用于指定目标 平台,所以这里改为: CROSS_COMPILE? = arm-linux- ARCH ?= arm 2)arch/ARM/config.in 文件 config.in 是配置文件,运行 make menuconfig 命令时出现的菜单就是 config 配置的。 config 文件决定了 menuconfig 菜单的内容。 把使用的平台加在需要的地方, 这样在配置 Linux 内核时就能够选择是否支持新添加的平台了。 3)arch/arm/Makefile 根目录下的 Makefile,指定了交叉编译器 arch/ARM/Makefile 更具针对性,系 统启动代码是通过这个文件产生的。在内核添加对 S3C2410 处理器的支持。其代码 如下: ifeq (#(CONFIG_ARCH_S3C2410),y) TEXTADDR= 0 xC0008000 MACHINE= s3c2410 endif TEXTADDR 为内核解压的起始地址,决定内核起始运行地址,即内核映像应下载 的位置,根据开发板的电路设计,这个地址是 OxC0008000。这里 0 xC0008000 的含义 是,从地址 0 xC0000000 开始,总共 32M 字节的空间。 4)compressed/Makefile 添加对本文开发板的支持。 通过这个文件, 将从vmLinux创建一个压缩的vmlinuz 镜像。 ifeq(#(CONFIG_ARCH_S3C6410),y) objs += head-s3c6410.o Endif 5)compressed/head_s3c641O.S 这个文件是依据 S3C6410 的芯片手册编写的,主要用来初始化处理器。主要完 成到对系统主要模块的配置、运行环境的建立、系统时钟、MMU 等模块的配置等。 6)arch/arm/kernel/Makefile 华北科技学院计算机学院综合性实验报告 第 8 页 Makefile 的作用是根据配置的情况,构造出需要编译的源文件列表,然后分别 编译,并把目标代码链接到一起,最终形成 Linux 内核二进制文件。 7)debug_armv.S 在此文件中定义串口打印函数,关闭全部外围设备的时钟,从而保证系统正确 运行。 8)setup.c 这个文件中一个非常重要的函数是 setup_arch。这个函数用来完成和体系相关 的初始化工作,比如对物理内存结构 meminfo 的初始化。这个结构在内存初始化中 有很重要的作用。 其中, nBanks 指定了内存块的数量,bank 指定了每块内存的范围。 在 这 里 用 来 指 定 块 开 始 和 长 度 的 PAGE_OFFSET 和 MEM_SIZE , 都 定 义 在 includelasm-ARM/arch-s3c6410/memory.h 中,PAGE_OFFSET 是内存的开始地址,往 后函数就将根据 meminfo 进行内存结构初始化。 9)arch/ARM/mach-s3c6410 发布的代码只对处理器的基本信息提供了支持,有关开发板的外设,例如 USB、 电源管理等都需要自己添加。 4.3 配置、编译内核配置、编译内核 编译内核之前首先要配置内核,配置内核的命令包括: 1)make s3c6400_defconfig 这种方法将配置选项以命令行的形式列出,会恢复内核的默认配置。如果己经 存在有.config 的配置文件,那么就会以该文件中的配置选项作为默认配置设置。 2)make menuconfig 与 make config 类似,不过这种方法的显示方式是以菜单模式进行显示的。 华北科技学院计算机学院综合性实验报告 第 9 页 Make xconfig 使用鼠标选择对应的选项, make menuconfig 使用空格选择相应 的选项,每个选项前的括号可以是 、和()。中括号中要么是空格,要么是*, 尖括号里可以是空格、*和 M;小括号里的内容是在所提供的几个选项里选择一个。 空格表示不将该功能编译进内核,*表示将该功能编译进内核,M 表示将该功能编译 成模块,在需要时将其动态插入到内核。 3)make xconfig(不推荐使用) 用于 X Window 下的配置,将配置选项以图形菜单的形式显示出来。 在进行相应的配置的时候,有三种方式选择: Y:将该功能编译进内核; N:不将该功能编译进内核; M:将该功能编译成可译载需要时动态插入到内核的模块。 make xconfig 使用鼠标选择对应的选项,make menuconfig 使用空格选择相应 的选项,每个选项前的括号可以是、和()。中括号中要么是空格,要么是*,尖 括号里可以是空格、*和 M;小括号里的内容是在所提供的几个选项里选择一个。空 格表示不将该功能编译进内核,*表示将该功能编译进内核,M 表示将该功能编译成 模块,在需要时将其动态插入到内核。 1) 执行 make -j2 zImage 生成可以移植到开发板的 zImage。 其中 j2 表示使用双核编译,加快编译速度。 使用 zImage 自解压内核镜像。 图 4-3 内核 zImage 生成的界面 2)make modules 此命令可以完成对所选的内核选项进行组件化编译,所需时间取决于所选的内 华北科技学院计算机学院综合性实验报告 第 10 页 核组件选项的多少。还可以使用命令: # 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)移植内核 tftp0 x500080000 zImage/*下载内核到开发板*/ bootm 0 x500080000/*启动内核*/ 3)移植文件系统 tftp0 x50000000 rootfs/*下载文件系统到开发板*/ nand0 x50000000 0 x200000 /*将 rootfs 烧入开发板*/ 移植好的内核启动在超级终端会可以看到如下所示: 图 4-4 内核启动界面 5 文件系统制作文件系统制作 文件系统是操作系统的一个重要组成部分, 通过对操作系统所管理的存储空间 的抽象,向用户提供统一的、对象化的访问接口,屏蔽对物理设备的直接操作和资 源管理。 华北科技学院计算机学院综合性实验报告 第 11 页 5.1 内核支持内核支持 YAFFS 文件系统文件系统 下载下来源码之后,在根目录下存在一个patch-ker.sh,这是一个给linux打补 丁的脚本,打上这个补丁之后,内核的源代码就支持yaffs2 了,我们来看一下这个 脚本的最后部分。脚本中每个命令行必须以TAB键开始,这是基本常识。 首先,解压安装 busybox 修改 Makefile,执行以下命令: # tar jxvf busybox-1.9.2.tar.bz2 # cd busybox-1.9.2 # vim Makefile 对其做如下修改: ARCH?= arm CROSS_COMPILE? = arm-linux- 退出 Makefile。 然后通过 make menuconfig 图形界面根据你的要求进行修改。 # make menuconfig 图 5-1 menuco nfig 目录下 的修改 下面是根据文件选项往下一步一步设置的说明: Busybox 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 华北科技学院计算机学院综合性实验报告 第 12 页 Linux Module Utilities- *Support version 2.2.x to 2.6.x Linux kernels *表示选上,空格表示不选,M 表示用到的时候调用。 然后修改文件 applets/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 中 创建文件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目录下创建一个inittab文件 内容如下: :sysinit:/etc/init.d/rcS :respawn:-/bin/sh tty2:askfirst:-/bin/sh :restart:/sbin/init 华北科技学院计算机学院综合性实验报告 第 13 页 :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 22 mount -a mkdir /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 defaults0 0 tmpfs /tmp tmpfs defaults 0 0 sysfs /sys sysfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0 在/root_01/dev 建立节点文件: # mknod console c 5 1 # mknod nullc 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 文件下以便烧写。 华北科技学院计算机学院综合性实验报告 第 14 页 6 测试测试 6.1 编写简单编写简单 C 程序测试移植的系统程序测试移植的系统 在终端执行 vim hello.c 编写一个简单的 C 程序如下: # include 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, 将 he

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论