实验四Linux内核移植实验
- 格式:doc
- 大小:1.76 MB
- 文档页数:17
linux的移植、内核、文件系统的生成与下载一、实验目的1.了解内核编译过程2.了解linux移植的基本过程,掌握内核和文件系统的下载方法。
3.掌握嵌入式主机运行环境的配置。
二、实验内容1. 学习内核编译的过程2. 学习linux移植的基本过程2. 学习内核和文件系统的生成与下载方法三、实验设备1. PentiumII以上的PC机、EL-ARM860实验箱四、linux的移植说明1.内核编译1)内核的结构本实验系统运行的linux版本是针对linux-2.6.28进行移植的,其组成结构如下图所示:图linux-2.6.28的目录结构图Linux内核非常庞大,包括驱动程序在内有上百兆。
如下图示其主要结构目录:/arch子目录包含了所有与硬件体系结构相关的内核移植代码。
其中每一个目录都代表一种硬件平台,对于每种平台都应该包括:boot: 包括启动内核所使用的部分或全部平台的相关代码。
kernel:包括支持体系结构特有的特征代码lib:包括存放体系结构特有的通用函数的实现代码mm:包括存放体系结构特有的内存管理程序的实现mach-xxx:包括存放该处理器的移植代码/Documentation子目录包含有关内核的通用解释和注释。
/drivers子目录包含内核中所有的设备驱动程序,每个不同的驱动占用一个子目录,如char、block、net、mtd、i2c等。
/fs 子目录包含了所支持的文件系统的代码,如EXT、FAT、NTFS、JFFS2等。
/include 子目录包含了建立内核代码时所需的大部分库文件的头文件,该模块利用其他模块重建内核。
同时,它也包括不同平台需要的库文件,被放置在include/linux 子目录下。
/init子目录包含了内核的初始化代码,内核从此目录下开始工作。
/ipc 子目录包含了内核的进程间通讯的代码。
/kernel 子目录是内核的最核心部分,包含了进程调度、定时器等,而和平台相关的一部分代码放在arch/*/kernel目录下。
实验四 Linux-2.6.14内核移植--网卡驱动的添加【实验目的】本实验通过在上个实验结果的linux2.6.14内核上移植CS89900A网卡驱动,使其可以通过网络nfs的方式挂载在ubantu主机环境上的文件系统,从而实现linux系统的完全启动。
【实验环境】1、Ubuntu 7.0.4发行版2、GEC2410平台以及开发板中移植好的u-boot3、交叉编译器arm-linux-gcc【实验步骤】(1) 下载linux内核/pub/linux/kernel/v2.6/linux-2.6.14.1.tar.bz2 ,下载linux2.6.14内核致/source/kernel目录,如果没有/source/kernel目录,自行建立目录。
root@:/source/kernel# cd /source/kernel/root@:/source/kernel# tar -xjvf linux-2.6.14.tar.bz2root@:/source/kernel/linux-2.6.14# pwd/source/kernel/linux-2.6.14root@:/source/kernel# cd linux-2.6.14进入内核解压后的目录,以后示例中,只要是相对路径全部是相对于/source/kernel/linux-2.6.14这个目录。
(2) 修改Makefile文件修改内核目录树根下的的Makefile,指明交叉编译器:root@:/source/kernel/linux-2.6.14# vim Makefile找到ARCH和CROSS_COMPILE,修改ARCH = armCROSS_COMPILE = arm-softfloat-linux-gnu-保存退出,然后设置你的PATH环境变量,使其可以找到你的交叉编译工具链:root@:/source/kernel/linux-2.6.14# echo $PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games如果第一个路径为/home/linux/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin,则不用再进行设置,如果不是则进行下面步骤进行设置:root@:/source/kernel/linux-2.6.14#export PA TH=$PA TH:/home/linux/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin:(动态加载环境变量,终端关闭后,自己所加载的环境变量立即消失)。
Linux内核移植实验指导书实验目的:完成linux2.6.14内核向ARM平台的移植和剪裁实验内容分为以下几个步骤:1、准备实验环境,包括:安装VMware Tools,准备源码文件。
2、修改环境变量,对flash进行分区,将分区信息加入内核源码,指定启动时的设备初始化,3、下载Yaffs2,解压Yaffs2并将其加入Linux内核,修改Makefile,4、配置内核产生.config文件,然后编译:make zImage ,5、修改、创建根文件系统,所需设备:PC + VMWare + linux操作系统实验要求本次实验要求提交实训报告,可简要描述实验步骤,重点描述本人在实训过程中遇到的问题和解决的方法。
实验步骤由老师提供所需要的工具安装包、内核源码和实训指导书,各位同学根据文档逐步配置编译,实训内容包括:安装vmware tools、搭建交叉编译环境、修改内核源码、Makefile的改写、内核配置裁减、编译调试等。
1.安装vmware虚拟机,安装vmware tools2.修改内核源码,修改环境变量,将分区信息加入内核源码,指定启动时的设备初始化3.安装Yaffs2,解压Yaffs2并将其加入Linux内核,修改Makefile4.配置内核产生.config文件,然后编译系统内核所需设备:PC+linux操作系统1、准备工作需要以下工具和文件:●在PC机D盘建立目录“vmshare”,将上述文件拷贝到“vmshare”目录下,然后安装vmware虚拟机和vmware tools●启动linux后,配置虚拟机与winxp的文件共享,PC机上的共享目录是e盘下的vmshare目录,linux下的共享目录是/mnt/hgfs/vmshare2、展开源码在本步骤中,展开源码,并设置环境变量mkdir /home/armlinux //创建工作目录cp /mnt/hgfs/vmshare/* /home/armlinux //把所有源码拷贝到工作目录下cd / //回到根目录tar -jxvf /home/armlinux/arm-linux-gcc-3.4.1.tar.bz2 //展开交叉编译工具cd /home/armlinux //回到工作目录下tar -jxvf linux-2.6.14.tar.bz2 //展开内核源码建立环境变量、修改Makefile将交叉编译工具路径和内核源码路径加入环境变量。
实验名称实验一Linux操作系统定制安装实验地点博学楼实验时间4月16日网络实验室一、实验目的和要求⑴通过对Linux 操作系统的定制安装,建立对Linux操作系统的初步认识,为后续实验的进行提供基础平台。
⑵掌握Linux操作系统的虚拟机定制安装。
⑶熟悉Linux文件目录结构二、实验内容和原理实验内容:利用虚拟机软件定制安装Linux操作系统,熟悉安装过程中各个选项的意义。
实验原理:虚拟机可以说是一种软件,也可以说是一种技术,它允许用户在一台主机上虚拟出多台计算机,每台虚拟的计算机都可以有自己的硬件及软件配置。
三、主要仪器设备PC机、VMware Player、Redhat/Ubuntu/Fedora四、操作方法与实验步骤⑴安装VMware Player⑵在VMware Player当中创建一个新的虚拟机,指定安装包的路径。
⑶安装定制Redhat Enterprise Linux 5.0说明:⑴对软件开发和和网络服务包进行定制。
⑵选择samba服务、nfs服务、tftp服务、Telnet服务和FTP服务⑶关闭系统防火墙、禁用SELinux服务。
⑷手动设置系统分区。
五、实验数据记录和处理1、安装Ubuntu进入界面:2、选择tftp服务3、对软件开发和网络服务包进行定制,都选择老的软件开发和老的网络服务器4、关闭系统防火网5、禁用SELinux服务六、实验结果与分析七、讨论、心得通过这次实验,在自己电脑的虚拟机上安装好了Ubuntu的镜像文件,并在Ubuntu下写了一些简单的命令,深深地感觉在虚拟机上运行Ubuntu远远要比双系统下方便得多,尤其是在两种不同系统下来回切换。
由于电脑上之前就已经安装过虚拟机,所以,实验报告中未对虚拟机的安装加以赘述。
实验名称实验二熟悉Linux系统的基本命令实验时间4月18日实验地点博学楼网络实验室一、实验目的和要求⑴熟悉Linux命令格式⑵学会如何获取命令帮助信息⑶熟练掌握Linux常用命令⑷掌握GCC命令的使用及其常用参数的含义二、实验内容和原理实验内容:系统设置命令、文件及文件夹操作命令、压缩与解压缩命令、自动补全与历史命令、管道与重定向命令、GCC命令的使用三、主要仪器设备PC机、装有Linux操作系统的虚拟机四、操作方法与实验步骤⑴练习以下常用命令的使用shutdown、reboot、logout、exit、useradd、userdel、su、cd、ls、touch、mkdir、cp、rm、rmdir、mv、more、less、man、du、find、clear、grep、cat、history、tar、unzip、chmod、管道命令|以及重定向命令⑵举例说明管道命令| 的使用⑶举例说明重定向命令<、<<、>、>>的使用⑷编写一个C的源程序,并用gcc进行编译,练习使用gcc的各个参数,理解参数的意义五、实验数据记录和处理1.cd、ls 、mkdir 新建hello文件夹2.cp 复制a到hello文件夹3.rm移除hello 中的a文件4.rmdir移除hello文件夹5.mv更改文件名字、移动文件6.du -b 以字节为单位显示cache目录的大小7.find / -name lolo搜索当前目录下名为lolo的文件8.grep 在lan/b.txt文件里查找字符3,并输出行号-n;输出b.txt内容9.grep重定向追加>>六、讨论、心得本次实验室是熟悉Linux的基本操作命令。
实验 5-3 Linux-2.6.28移植实验【实验目的】熟悉Linux-2.6.28移植过程。
【实验步骤】第一步:从/pub/linux/kernel/v2.6下载linux-2.6.28.tar.bz2压缩文件(或光盘中提供);【图5-3-1】第二步:将linux-2.6.28.tar.bz2压缩文件复制到Linux工作目录;第三步:在Linux下利用tar jxvf linux-2.6.28.tar.bz2命令解压linux-2.6.28.tar.bz2压缩文件。
第四步:进入解压后的linux-2.6.28目录下,利用vi编辑工具修改linux-2.6.28目录下的顶层Makefile文件。
第五步:修改linux-2.6.28目录下的顶层Makefile文件,设置编译linux操作系统的CPU体系架构变量ARCH 和所使用的交叉编译工具链变量CROSS_COMPILE(注:实验使用arm-linux交叉编译工具链 4.2.1版本,可从/pub/snapgear/tools/arm-linux/下载arm-linux-tools-20070808.tar.gz压缩文件,解压到/OPT目录下)。
改为ARCH ?= armCROSS_COMPILE ?=/opt/usr/local/bin/arm-linux-【图5-3-2】第六步:将linux-2.6.28目录下的arch/arm/configs/mainstone_defconfig文件复制为xsbase270_defconfig文件。
第七步:在linux-2.6.28/arch/arm/mach-pxa目录下增加一个xsbase270.c文件(实际上从该目录下的mainstone.c复制而来.也可以直接复制实验代码中的文件),然后根据实际平台进行修改。
第八步:修改linux-2.6.28\arch\arm\mach-pxa目录下的Makefile文件,增加编译xsbase270.c 的编译选项,即:obj-$(CONFIG_MACH_XSBASE270) += xsbase270.o。
linux操作系统实验报告第一篇:linux操作系统实验报告Linux实验报告一一、实验步骤及内容1.虚拟机软件的安装(1)先准备虚拟机安装包。
(2)更改安装路径:“D: VMwareVMware Workstationvmware.exe”(3)输入序列号:ctrl+v,在安装过程中不能进行复制剪切操作。
(4)不能重新启动,才能继续安装汉化版D: vmwarevmware workstation2.新建一个虚拟机并进行配置(1)单击新建虚拟机虚拟机的类型选择:典型安装选择客户端操作系统:linux虚拟机的名字及位置根据需要网络类型选择:,桥接。
指定的磁盘容量删除软驱:双击floppy—remove虚拟内存设置:双击memory—1024MB设置linux的安装文件:选择安装镜像文件—指定第一个安装文件—就可以啦!之后会提示安装第二个安装文件就进行选择第二个中间鼠标切换用CTRL+ALT。
3.安装LINUX操作系统(1)要确定鼠标是否在虚拟机的激活状态下:敲回车不需要检测安装文件选择skip进入linux的安装前的配置选项:选择安装的语言—中文简体键盘:--默认鼠标:--默认安装类型:--workstation磁盘分区:--自动分区引导程序:默认网络配置:默认防火墙:无防火墙支持的语言:中文时区:亚洲-上海密码:root123456安装的软件包:全部。
二.在已有虚拟机软件的基础上安装LINUX的技巧。
(1)新建虚拟机—典型安装—linux ,red hat linux---给虚拟机命名,并且指定安装位置d:red hat linux---桥接---10G。
(2)在刚才建立的虚拟机上安装linux系统.(3)配置要安装的linux系统的安装文件iso镜像文件(4)选择配置好linux镜像文件刚才建立的虚拟机,启动虚拟机,开始安装。
三.实验总结充分了解linux系统的安装,学会新建虚拟机,在虚拟机上安装linux系统.和一些简单的技巧并对此门课程有了一定的兴趣。
实验四内核移植实验目的:了解Linux内核源代码的目录结构及各目录的相关内容,了解Linux内核各配置选项内容和作用,掌握Linux内核配置文件的作用,掌握Linux内核的编译过程,掌握将新增内核代码加入到Linux内核结构中的方法。
实验硬件条件:1、开发板tiny64102、传输数据用的USB线、串口线等实验软件条件:1、开发环境:根文件:yaffs2.tar.bz2编译器:arm-linux-gcc-4.3.2内核源码:linux-2.6.38.tar.bz2宿主机:ubuntu10.042、测试环境:终端软件:超级终端下载软件:dnw实验步骤:一、实验步骤1.解压linux源码进入根目录下的/home/tom/source/kernel目录,解压linux-2.6.3源码,指令tar xvfj linux-2.6.38.tar.bz2,如图:2.修改架构与编译器进入解压完的linux-2.6.38目录修改架构,编译器(需要在arm上运行,所以用交叉编译器)191改为ARCH ?=arm192行改为CROSS_COMPILE ?=arm-linux-退出后生成默认配置文件指令:cp arch/arm/configs/s3c6400_defconfig .config修改配置项,指令:make menuconfig找到System Type里将MINI6410选上,然后退出保存。
二、实验步骤1.拷贝NAND FLASH驱动到linux-2.6.38里相应的文件位置处指令:cp ../nandflash移植需要替换的源码/s3c_nand.c drivers/mtd/nand/cp ../nandflash移植需要替换的源码/s3c_nand_mlc.fo (空格)drivers/mtd/nand/cp ../nandflash移植需要替换的源码/nand_base.c(空格) drivers/mtd/nand/cp ../nandflash移植需要替换的源码/Kconfig drivers/mtd/nand/ cp ../nandflash移植需要替换的源码/regs-nand.h (空格) arch/arm/plat-samsung/include/plat/2.修改nand驱动Makefile进入nand目录,指令cd drivers/mtd/nand修改Makefile,指令gedit Makefile在20行增加obj-$(CONFIG_MTD_NAND_S3C) += s3c_nand.o在末尾行添加obj-$(CONFIG_MTD_NAND_S3C) += s3c_nand_mlc.fo保存退出,进入linux2.6.38目录,执行make menuconfig找到Device Drivers进入Memory Technology Device (MTD)support勾选相应选项如图:Device Drivers---><*> Memory Technology Device (MTD) support --->[*] MTD partitioning support[*] Command line partition table parsing<*> Direct char device access to MTD devices<*> Caching block device access to MTD devices<*> NAND Device Support --->< > NAND Flash support for Samsung S3C SoCs 去掉不要选<*> NAND Flash support for S3C SoC[*] S3C NAND Hardware ECC退出并且保存三、实验步骤1.添加yaffs2文件系统的支持进入kernel目录,解压yaffs2.tar.bz2指令:tar xvfjyaffs2.tar.bz2进入解压出来的yaffs2目录执行指令:./patch-ker.sh c m ../linux-2.6.38进入linux-2.6.38目录,执行make menuconfig进入File systems选择[*] Miscellaneous filesystems --->勾选yaffs2 file system support以及与yaffs2相关选项,全部勾选直到Journalling Flash File System v2(JFFS2) support前面退出并且保存2.添加ubifs文件系统的支持执行make menuconfig进入Device Drivers勾选相应选项Device Drivers --->Memory Technology Device (MTD) support ---> Enable UBI - Unsorted block images --->进入File systems勾选相应选项File systems --->Miscellaneous filesystems --->UBIFS file system support保存退出后,执行make zImage,将生成的zImage烧入实验板,生成的zImage在arch/arm/boot下实验结果:在这次试验中是我学习到知识最多的一节课,应为涉及到的知识面太多了,以前从来没接触过,在这次内核移植的过程中我遇到了太多的问题,主要对内核移植没有很好的理解,不过最后在老师的帮助下也都完成了任务,也对内核移植有了更深的认识和理解。
合肥学院嵌入式系统设计实验报告(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一下就会出现如下图所示。
⑶配置内核界面,不用做任何更改,在主菜单里选择<Exit>退出,并选“Yes”保存设置返回到刚命令行界面,生成相应配置的头文件。
编译内核:#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 <linux/mtd/mtd.h>#include <linux/mtd/nand.h>#include <linux/mtd/nand_ecc.h>#include <linux/mtd/partitions.h>#include <plat/nand.h>再次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 ?=armCROSS_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)。
找到MACHINE_START(S3C2440, "SMDK2440") ,修改为:MACHINE_START(MINI2440, "FriendlyARM Mini2440 development board")⑥从 SMDK2440 到 MINI2440因为我们要制作自己的 mini2440 平台体系,因此把 mach-mini2440.c 中所有的smdk2440 字样改为 mini2440。
除此之外,还有一个地方需要改动,在 mini2440_machine_init(void)函数中,把smdk_machine_init()函数调用注释掉,因为我们后面会编写自己的初始化函数,不需要调用该函数。
2.3 定制内核配置⑴使用 Linux 官方自带的 mini2440 配置,在 Linux 源代码根目录下执行#make mini2440_defconfig命令:⑵移植 Nand 驱动并更改分区信息进入到/home/linux2.6.32.2/linux-2.6.32.2/arch/arm/mach-s3c2440文件夹中执行: # gedit mach-mini2440.c命令:在 mach-mini2440.c 中加入以下代码:static struct mtd_partition mini2440_default_nand_part[] = {[0] = {.name = "supervivi",.size = 0x00040000,.offset = 0,},[1] = {.name = "param",.offset = 0x00040000,.size = 0x00020000,},[2] = {.name = "Kernel", ; 对应/dev/mtdblock2.offset = 0x00060000,.size = 0x00500000,},[3] = {.name = "root",.offset = 0x00560000,.size = 1024 * 1024 * 1024,},[4] = {.name = "nand",;.offset = 0x00000000,.size = 1024 * 1024 * 1024,}};static struct s3c2410_nand_set mini2440_nand_sets[] = {[0] = {.name = "NAND",.nr_chips = 1,.nr_partitions = ARRAY_SIZE(mini2440_default_nand_part),.partitions = mini2440_default_nand_part,},};static struct s3c2410_platform_nand mini2440_nand_info = {.tacls = 20,.twrph0 = 60,.twrph1 = 20,.nr_sets = ARRAY_SIZE(mini2440_nand_sets),.sets = mini2440_nand_sets,.ignore_unset_ecc = 1,};如下图所示:还需要把 nand flash 设备注册到系统中,static struct platform_device *mini2440_devices[] __initdata = { &s3c_device_usb,&s3c_device_lcd,&s3c_device_wdt,&s3c_device_i2c0,&s3c_device_iis,&s3c_device_nand, ;把nand flash设备添加到开发板的设备列表结构};⑶配置和编译带 YAFFS2 支持的内核在执行#make zImage命令时会出现如下错误:错误:arch/arm/mach-s3c2440/mach-mini2440.c:156: error: unknown field 'sets' specified in initializer通过网上查找资料于是在自己的mach-mini2440.c中加入#include <linux/mtd/mtd.h>#include <linux/mtd/nand.h>#include <linux/mtd/nand_ecc.h>#include <linux/mtd/partitions.h>#include <plat/nand.h>再次make zImage以下就不会出现错误了。
执行命令:#make menuconfig要使用yaffs2文件系统,需要先配置nand flash驱动支持,在Device drivers菜单中选择MTD选项如图,并按回车进入找到NAND Device Support选项并进入选择Nand Flash驱动支持返回到内核配置主菜单,并找到File systems选项进入找到如图选项Miscellaneous filesystems并进入找到YAFFS2支持选项,如图选择然后<Exit>返回即可。