实验四Linux内核移植实验
linux的移植

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系统移植实验手册

实验四 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内核移植指导书

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实验报告

实验名称实验一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 内核移植实验

实验 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内核移植、根文件系统、busybox

/ #通过共享目录
为了方便使用 arm-linux-gcc,我们可以把它所在的目录添加到环境变量中 在 export PATH 前面插入 PATH=/arm2410/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/bin/:$PATH 这样一句,以后启动就可以直接使用 arm-linux-gcc 了。 要使环境变量立马生效,可以使用下面的命令。 source /etc/profile 我们可以用 arm-linux-gcc -v 来查看交叉编译器版本,如果是 4.1.1 就是正确的。 (3)设置 Nand Flash 分区信息表 设置 Nand Flash 的分区信息表是为内核启动以后加载文件系统用的,可以将 Nand Flash 看成我们 PC 机的硬盘,对 Nand Flash 的分区看成是对硬盘的分区,硬盘可以分成 C 盘,D 盘之类,而 Nand Flash 则可以分成很多块,每块有不同的名字、大小和用途。下面 是对 Super-ARM 实验箱的 Nand Flash 进行分区的情况(参考表 5-1-1): � 第 0 块命名为 "uboot" ,它用来存放 u-boot.bin 映像,起始地址是 Nand Flash 的 0x000000,最大 0x30000 个字节;
var
� �
第七行创建 var 目录下的子目录。 第八行更改 var/tmp 目录的权限。
3、创建设备文件 先了解一下 Linux 的设备:Linux 中主要有 2 种类型的设备:字符设备(无缓冲且只能顺 序存取)、块设备(有缓冲且可以随机存取)。每个设备都必须有主、次设备号,主设备号相同 的设备是同类设备(使用同一个驱动程序)。这些设备中,有些设备是对实际存在的物理硬件 的抽象,而有些设备则是内核自身提供的功能(不依赖于特定的物理硬件,又称为"虚拟设备 ")。每个设备在 /dev 目录下都有一个对应的文件(节点)。可以通过 cat /proc/devices 命令查 看当前已经加载的设备驱动程序的主设备号。 你可以在你的宿主机上执行这个命令看看你的 宿主机所拥有的设备文件,可以看到,Linux 有很多很多的设备文件,在嵌入式 Linux 中并 没有这么多的设备,下面用 mknod 命令创建一些主要设备文件。 关于 Linux 的设备号:很多设备在 Linux 下已经有默认的主次设备号,如帧缓冲设备是 Linux 的标准字符设备,主设备号是 29,如果 Linux 下有多个帧缓冲设备,那么这些帧缓冲 设备的次设备号就从 0~31(Linux 最多支持 32 个帧缓冲设备)进行编号,比如 fb0 对应的 次设备号就是 0,fb1 为 1,类推。用户也可以创建自己的设备文件,比如下一篇章中我们 要讨论的 Led 设备,需要注意的是用户自己的设备号不能与一些标准的系统设备号重叠。 Linux 下创建设备节点的命令是 mknod,下面是它的命令格式: mknod Name { b | c } Major Minor Name 是设备名称,“b”或“c”用来指定设备的类型是块设备还是字符设备。Major 指定设备的主设备号,Minor 是次设备号。 下面我们来创建嵌入式 Linux 系统中一些基本的设备文件, 必须是 root 权限, 命令如下: mknod -m 600 dev/console c 5 1 #创建系统控制台设备 mknod -m 666 dev/null c 1 3 #创建空设备, 任何写入都将被丢弃, 任何读取都得到 EOF mknod dev/fb0 c 29 0 #创建第一个帧缓冲设备,显示接口 mknod dev/tty c 5 0 #创建 TTY 设备 mknod dev/tty0 c 4 0 #创建当前虚拟控制台 mknod dev/tty1 c 4 1 mknod dev/tty2 c 4 2 mknod dev/tty3 c 4 3 mknod dev/tty4 c 4 4 ln -s dev/fb0 dev/fb #创建创建 fb 到 fb0 的链接 4、准备启动配置文件 Linux 启动所需要的文件有 etc/inittab、 etc/init.d/rcS、 etc/fstab 这三个文件(以下均假定当 前路径在/arm2410/rootfs)。 下面创建 inittab 文件,命令:gedit etc/inittab, 在文件中添加如下内容: ::sysinit:/etc/init.d/rcS ::askfirst:-/bin/sh ::respawn:-/bin/sh ::restart:/sbin/init ::ctrlaltdel:/sbin/reboot
linux操作系统实验报告

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 内核的编译菜单有几个版本,运行:
1)基于字符界面的config: make config进 入命令行,可以一行一行的配置;
2)基于图形界面的menuconfig:make menuconfig 进入menuconfig 菜单。(稳定且用得最多)
建议经常使用的部分直接编译到内核中,比如网卡。
嵌入式系统设计
内核源码结构
(存放目录:/usr/src/Linux-)
Linux2.4.18
/arch /drivers
/arm
sparc
/m68k
/kernel /lib /init
/boot mach-s3c2410 /kernel /lib
/ipc /fs
嵌入式系统设计
Network firewalls: 是否让内核支持采用网络防火墙。如果计算机想当 firewalls server或者是处于TCP/IP 通信协议网络的网路结构 下,这一项就选上。 Packet socket mmapped IO : 选该项则Packet socket可以利用端口进行快速通讯。 IP advanced router : 如果你想把自己的Linux 配成路由器功能这项肯定要选。 选上后会带出几个子项。这些子项可以更精确配置相关路由功能。
3)基于图形界面的xconfig: make xconfig 进入xconfig菜单。
嵌入式系统设计
嵌入式系统设计 基于字符界面的make config
嵌入式系统设计 基于图形界面的menuconfig 配置菜单
嵌入式系统设计 基于图形界面的xconfig 配置菜单
- 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一下就会出现如下图所示。
⑶配置内核界面,不用做任何更改,在主菜单里选择<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>返回即可。