实验三、linux内核移植

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验内容三—Linux内核移植

一、实验目的

根据前两次实验的基础上做Linux内核移植实验,为以后移植应用程序做准备(P84)。

二、实验内容

在Linux下利用交叉编译工具配置编译zImage并烧写到arm开发箱中。

三、实验步骤

(1)实验准备

从网上下载Linux的最新版本,解压后可以看到它的全部源代码,我们这里以

(2)修改顶层Makefile

在顶层Makefile中先要定义交叉编译器,这里就使用我们第一次实验中构建的交叉编

如果学生机上没有交叉编译环境,先从教师机上下载交叉编译环境或者通过共享目录来

在export PATH前面插入

这样一句,以后启动就可以直接使用arm-linux-gcc了。

要使环境变量立马生效,可以使用下面的命令。

我们可以用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个字节;

第1块命名为"kernel",用来存放内核,起始地址是Nand Flash的0x30000,最大0x1D0000个字节;

第2块命名为"rootfs",用来存放根文件系统,起始地址是Nand Flash的0x200000,最大30M字节;

第3块命名为"ext-fs1",留给用户存放其他文件系统,起始地址是Nand Flash 的0x2000000,最大32M字节;

至于具体要怎么分,这样根据你的目标机的Nand Flash来定,不能一概而论。分区的方法就是修改arch/arm/plat-s3c24xx目录下的common-smdk.c文件:

执行gedit arch/arm/plat-s3c24xx/common-smdk.c命令,找到:static struct mtd_partition smdk_default_nand_part[],在其中填入下面的内容(将原来的内容覆盖)

(4)添加devfs文件系统支持

为了我们的内核支持devfs,以及在启动时能自动挂载/dev。编辑fs/Kconfig:在907行menu "Pseudo filesystems"下面添加如下代码:

(5)配置内核

首先执行make s3c2410_defconfig命令获取s3c2410_defconfig文件中给定的配置。然后执行make menuconfig命令配置内核

将出现以下图形配置界面:

在这个选单中,选择system type -->s3c2410 machines中的smdk2410,其它的arch-machines全部取消。

这个页面选择s3c2410 Machines -->

这个页面把其它machines全部取消。

配置文件系统支持[可选]

上图是支持Ext3文件系统选项下面是SD卡支持选项

选中mmc/SD card support后进入里面

选中上面的选项后,插入sd卡时候会有提示

退出时候记得选择yes进行保存

(6)配置文件系统

为arm系统制作根文件系统的详细过程描述如下。

1、首先建立一个空根目录

我们的项目空间中将根文件系统规划在rootfs目录下,这个目录现在是空的,就把它作为我们的空根目录,接下来我们就在这个目录下建立根文件系统。

2、在rootfs中建立文件系统的目录结构,所有命令如下:

第一行创建根文件系统目录。

第二行进入根文件系统目录。

第三行在根目录下创建一级目录bin dev etc lib proc sbin sys usr mnt tmp var。

第四行更改tmp权限,使得用户只能修改、删除自己在本目录下创建的文件。

第五行创建usr目录下的子目录

第六行创建mnt目录下的子目录。

第七行创建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,下面是它的命令格式:

Name是设备名称,“b”或“c”用来指定设备的类型是块设备还是字符设备。Major 指定设备的主设备号,Minor是次设备号。

下面我们来创建嵌入式Linux系统中一些基本的设备文件,必须是root权限,命令如下:

4、准备启动配置文件

Linux启动所需要的文件有etc/inittab、etc/init.d/rcS、etc/fstab这三个文件(以下均假定当前路径在/arm2410/rootfs)。

下面创建inittab文件,命令:gedit etc/inittab, 在文件中添加如下内容:

相关文档
最新文档