admin 管理员组

文章数量: 1086019


2024年12月24日发(作者:深圳大数据培训排行榜)

学生学号

实验课成绩

实 验 报 告 书

实验课程名称

开课学院

指导教师姓名

学生姓名

学生专业班级

嵌入式操作系统

计算机科学与技术学院

毛雪涛

小灰灰的爸爸

中国好学长系列

2013 — 2014 学年 第 二 学期

实验课程名称: 嵌入式操作系统

实验项目名称

实验者

同组者

小灰灰的

爸爸

Linux安装与使用

专业班级

中国好学长

系列

实验成绩

组别

实验日期

年 月 日

第一部分:实验分析与设计

(可加页)

一、实验内容描述(问题域描述)

内容:描述一下安装和使用的过程,举几个命令作为例子

二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或

者算法描述)

实验原理和设计:

1、安装Linux操作系统,并配置Linux操作系统

2、基本命令的练习

3、查看Linux的各个重要目录的结构。

三、主要仪器设备及耗材

硬件:THUGA-1型实验箱,PC机

软件:PC机操作系统:Linux

第二部分:实验调试与结果分析

(可加页)

一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)

1、在Vmware虚拟机的运行界面中,点击菜单的File项在弹出的下拉菜单中选择“New

“项再点击 Virtual Machine。进入安装向导。

2、在安装向导中选择自定义安装(Custom),进入下一步。

3、选择虚拟机平台,不同的Vmware虚拟机平台支持的硬件特性不同。进入下一步。

4、选择要安装的Linux操作系统光盘镜像,同时使用Vmware虚拟机的“Easy Install“功

能自动安装Linux操作系统。

5、设置安装的Linux系统的用户名和密码信息。

6、设置Linux虚拟机的显示名称及安装路径。选择Linux系统在用户本机上实际额的安

装路径。

7、配置虚拟机使用的处理器。配置处理器数量、处理器的内核数,这里使用默认的设置:

一个单核处理器。

8、配置虚拟机使用的存储空间、网络类型、I/O适配器类型、创建一个虚拟磁盘,在其上

安装Linux操作系统、并选择使用的磁盘类型、磁盘的空间大小及设定存储磁盘文件的路径。

9、对话框汇总了前面的设置项目,如果没有错误,不需要修改,直接点击“Finish“按钮,

进行Linux系统的安装。

10、Linux系统安装完毕后会自动启动,输入用户名、口令,进入Linux系统的桌面环境。

11、配置Samba服务,点击“Applications’’→‘System Settings’→‘Security Level’弹出

‘Security Level Configuration’对话框。

12、在‘Security Level Configuration’对话框中,将‘Security Level’项设置为‘Disable

firewall’,即无防火墙。

13、点击“Applications’’→‘System Settings’→‘Samba’,对‘Samba服务器配置’对话

框中进行配置。

14、对Samba服务各项进行设置保存,就可以看到Linux系统下的共享文件夹/home/zcnet。

二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)

实验结果正常

三、实验小结、建议及体会

1、使用Vmware虚拟机在Windows系统中安装Linux操作系统,安装过程不需要修改

Windows中的硬盘分区,只要具有足够的剩余磁盘空间就行了。

2、Linux系统使用的是Redhat Enterprise Linux Advanced Server 4 发行版本。

3、Linux系统直接挂载即可,安装简单,提供很多网络服务,有两种共享功能:Vmware

虚拟机的共享设置和linux系统的Samba服务可供选择。

四、实验小结、建议及体会

通过这次学习,我对Linux的了解更加的深入了,也对Linux下的编程操作更加的熟练了!!

实验课程名称: 嵌入式操作系统

实验项目名称

实验者

同组者

嵌入式交叉编译环境构建

小灰灰的

爸爸

专业班级

中国好学长

系列

实验成绩

组别

实验日期

年 月 日

第一部分:实验分析与设计

(可加页)

一、实验内容描述(问题域描述)

1.了解嵌入式开发环境及交叉编译器

2.了解嵌入式Linux的相关特性

3.掌握如何建立一个嵌入式Linux开发环境

4.如何利用交叉编译器来编译内核

二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或

者算法描述)

1、建立交叉编译环境

该交叉编译工具在光盘的Linuxtoolchains文件夹下的2 。

具体步骤如下:

1)解压编译工具包

首先进入/usr/local 目录,建立一个arm的子目录(如果/usr/local/arm 目录

不存在),再进入该目录。命令如下:

# cd /usr/local

# mkdir arm

# cd arm

然后将光盘Linux目录下的 “toolchain”文件夹下的2拷

贝到刚刚进入的arm目录下,并执行以下命令:

# tar jxf 2

解压后会出现一个3.3.2的目录,该目录下有gcc,g++,bin等各种实用工

具。就这样,交叉编译工具就安装好了。

2)将该交叉编译工具的路径添加到环境变量

解压后,交叉编译工具中的可执行文件在3.3.2/bin 目录下,此目录不在

Linux系统的可执行程序搜索目录中,因此需要在启动设置里手动添加进去,

具体做法是修改/etc/bashrc或用户主目录下的.bashrc文件,在文件的最后一行

增加路径,增加的文本如下:

export PATH=$PATH:/usr/local/arm/3.3.2/bin

这样就将交叉编译工具的路径添加进去了。为了使修改的文件立即生效,

可执行:

# source /etc/bashrc (假设修改的文件是/etc/bashrc)

或者重起Linux操作系统。然后在终端上输入arm,然后按tab键,会自动

显示arm- linux-,表示交叉编译环境安装成功。

二、编译内核

首先将光盘Linuxkernel目录下的pxa270_ 拷贝到/home 目

录,然后进入这个目录,解压命令如下:

# cd /home

# tar -xzvf pxa270_

解压完成后,将会看到在/home目录下生成一个pxa270_linux-2.6.9 的文件目

录。

接着进入pxa270_linux-2.6.9 此目录,该目录下显示的是嵌入式Linux的内

核代码的组织结构:

/arch 子目录包含了所有硬件结构特定的内核代码。如 i386,alpha 和 arm.。

/drivers 子目录包含了内核中所有的设备驱动程序,如 usb 和 sound。

/fs 子目录包含了所有的文件系统的代码。如 nfs,ext3 和 jffs2 等。

/include 子目录包含了建立内核代码时所需的大部分库文件,这个模块利

用其它模块重建内核。该目录也包括了不同平台需要的库文件。比如,asm-arm

是 arm 平台需要的库文件。

/init 子目录包含了内核的初始化代码,内核从此处工作。

/ipc 子目录包含了进程间通信代码

/kernel 子目录包含了主内核代码

/mm 子目录包含了所有内核管理代码

/net 子目录包含了和网络相关的代码,如 atm,ipv6 等。

一般在每个目录下都有一个 depend 文件和一个 Makefile 文件。这两个文

件都是编译时使用的辅助文件。其中 Makefile 文件中指出了编译时需要用到

的编译器,也是移植内核过程中不可缺少的。

执行 make menuconfig 命令。

# cd pxa270_linux_2.6.9

# make menuconfig

三、主要仪器设备及耗材

硬件:THUGA-1型实验箱,PC机

软件:PC机操作系统:Linux

第二部分:实验调试与结果分析

(可加页)

一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)

1、下载解压2文件到/home目录中,进入linux-2.6.14目录中,

运行“vi Makefile”命令,修改第192行与193行内容。

2、运行“cp arch/arm/configs/smdk2410_defconfig .config”命令,.config是内核

编译时所依赖的重要文件。

3、运行“make ARCH=arm menuconfig”命令启动内核配置菜单,按要求配置内核,配置

结束后选中“Save Configuration to an Alternate File ”项,然后确定设置保存到.config

配置文件中。

4、直接运行 “make ARCH=arm CROSS_COMPILE=arm-linux-”命令对内核进行交叉编译。

5、内核编译完毕后,将在根目录下得到vmlinux文件,复制此文件到

/skyeye-1.2.4/binary下。

6、下载解压2文件,然后把

skyeye-testsuite-2.3/linux/s3c2410/s3c2410x-2.6.14目录下的文件复制到

/skyeye-1.2.4/binary下。

7、在/skyeye-1.2.4/binary目录中运行“./skyeye –e vmlinux”命令,然后可以观察

到屏幕上先输出SKYEYE的配置信息,然后是内核启动信息。在linux操作系统内核启动完毕

后,将进入shell界面,可以接受用户的输入。

二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)

实验结果正常

三、实验小结、建议及体会

通过这次学习,我对Linux的了解更加的深入了,也对Linux下的编程操作更加的熟练了!!

实验课程名称: 嵌入式操作系统

实验项目名称

实验者

同组者

小灰灰的

爸爸

Linux内核移植

专业班级

中国好学长

系列

实验成绩

组别

实验日期

年 月 日

第一部分:实验分析与设计

(可加页)

三、实验内容描述(问题域描述)

内容:描述一下安装和使用的过程,举几个命令作为例子

四、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或

者算法描述)

实验原理和设计:

(1)准备工作

(2)修改顶层Makefile

(3)添加分区

(4)添加devfs

(5)配置编译内核

三、主要仪器设备及耗材

硬件:THUGA-1型实验箱,PC机

软件:PC机操作系统:Linux

第二部分:实验调试与结果分析

(可加页)

五、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)

六、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)

一、准备工作

建立工作目录,下载源码,安装交叉工具链,步骤如下。

mkdir /root/build_kernel

cd /root/build_kernel

wget -c /pub/linux/kernel/v2.6/2

tar jxvf 2

export PATH=/usr/local/arm/3.3.2/binPATH

二、修改顶层Makefile

修改内核目录树根下的的Makefile,指明体系结构是arm,交叉编译工具是arm-linux-。

vi Makefile

找到ARCH和CROSS_COMPILE,修改

ARCH ?= arm

CROSS_COMPILE ?= arm-linux-

保存退出。

三、设置flash分区

此处一共要修改3个文件,分别是:

arch/arm/mach-s3c2410/devs.c ;指明分区信息

arch/arm/mach-s3c2410/mach-smdk2410.c ;指定启动时初始化

drivers/mtd/nand/s3c2410.c ;禁止Flash ECC校验

3.1指明分区信息

在arch/arm/mach-s3c2410/devs.c文件中:

vi arch/arm/mach-s3c2410/devs.c

在arch/arm/mach-s3c2410/devs.c文件添加的内容包括:

(1)添加包含头文件。

(2)建立nand flash分区表。

(3)假如分区信息

(4)建立Nand Flash芯片支持

(5)加入Nand Flash芯片支持到Nand Flash驱动

(1)添加包含头文件。

#include

#include

#include

...

(2)建立Nand Flash分区表

/* 一个Nand Flash总共64MB, 按如下大小进行分区 */

/* NAND Controller */

static struct mtd_partition partition_info[] ={

{ /* 256kB */

name: "boot",

size: 0x00040000,

offset: 0x0,

},{ /*1.75MB */

name: "kernel",

size: 0x001C0000,

offset: 0x00040000,

}, { /* 30MB */

name: "root",

size: 0x01e00000,

offset: 0x00200000,

}, { /* 32MB */

name: "user",

size: 0x02000000,

offset: 0x02000000,

}

};

name: 代表分区名字

size: 代表flash分区大小(单位:字节)

offset: 代表flash分区的起始地址(相对于0x0的偏移)

目标板计划分4个区,分别存放boot, kernel, rootfs以及以便以后扩展使用的用户文件系统空

间。

(3)加入Nand Flash分区

struct s3c2410_nand_set nandset ={

nr_partitions: 4, /* 指明partition_info中定义的分区数目 */

partitions: partition_info, /* 分区信息表*/

};

(4) 建立Nand Flash芯片支持

struct s3c2410_platform_nand superlpplatform={

tacls:0,

twrph0:30,

twrph1:0,

sets: &nandset,

nr_sets: 1,

};

sets: 支持的分区集

nr_set:分区集的个数

(6)加入Nand Flash芯片支持到Nand Flash驱动

另外,还要修改此文件中的s3c_device_nand结构体变量,添加对dev成员的赋值

struct platform_device s3c_device_nand = {

.name = "s3c2410-nand", /* Device name */

.id = 1, /* Device ID */

.num_resources = ARRAY_SIZE(s3c_nand_resource),

.resource = s3c_nand_resource, /* Nand Flash Controller Registers */

/* Add the Nand Flash device */

.dev = {

.platform_data = &superlpplatform

}

};

name: 设备名称

id: 有效设备编号,如果只有唯一的一个设备为1,有多个设备从0开始计数.

num_resource: 有几个寄存器区

resource: 寄存器区数组首地址

dev: 支持的Nand Flash设备

3.2 指定启动时初始化

kernel启动时依据我们对分区的设置进行初始配置.

arch/arm/mach-s3c2410/mach-smdk2410.c文件

vi arch/arm/mach-s3c2410/mach-smdk2410.c

修改smdk2410_devices[].指明初始化时包括我们在前面所设置的flash分区信息

static struct platform_device *smdk2410_devices[] __initdata = {

s3c_device_usb,

s3c_device_lcd,

s3c_device_wdt,

s3c_device_i2c,

s3c_device_iis,

* 添加如下语句即可 */

s3c_device_nand,

};

保存,退出。

3.3 禁止Flash ECC校验

我们的内核都是通过UBOOT写到Nand Flash的, UBOOT通过的软件ECC算法产生ECC

校验码, 这与内核校验的ECC码不一样, 内核中的ECC码是由S3C2410中Nand Flash控制

器产生的. 所以, 我们在这里选择禁止内核ECC校验.

修改drivers/mtd/nand/s3c2410.c 文件:

vi drivers/mtd/nand/s3c2410.c

找到s3c2410_nand_init_chip()函数,在该函数体最后加上一条语句:

chip->eccmode = NAND_ECC_NONE;

保存,退出。

OK.我们的关于flash分区的设置全部完工.

四、支持启动时挂载devfs

为了我们的内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/dev为devfs文件

系统,修改fs/Kconfig文件

vi fs/Kconfig

找到menu "seudo filesystems"

添加如下语句:

config DEVFS_FS

bool "/dev file system support (OBSOLETE)"

default y

config DEVFS_MOUNT

bool "Automatically mount at boot"

default y

depends on DEVFS_FS

五、配置编译内核

cp arch/arm/configs/smdk2410_defconfig .config

make menuconfig

在smdk2410_defconfig基础上,我所增删的内核配置项如下:

这里约定“#”后面的是注释部分。

Loadable module support -->

Enable loadable module support

Automatic kernel module loading

System Type -->

S3C2410 DMA support

Boot options --> Default kernel command string:

noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200

#说明:mtdblock2代表我的第3个flash分区,它是我的rootfs

# console=ttySAC0,115200使kernel启动期间的信息全部输出到串口0上.

# 2.6内核对于串口的命名改为ttySAC0,但这不影响用户空间的串口编程。

# 用户空间的串口编程针对的仍是/dev/ttyS0等

Floating point emulation -->

NWFPE math emulation

This is necessary to run most binaries!!!

#接下来要做的是对内核MTD子系统的设置

Device Drivers -->

Memory Technology Devices (MTD) -->

MTD partitioning support

#支持MTD分区,这样我们在前面设置的分区才有意义

Command line partition table parsing

#支持从命令行设置flash分区信息,灵活

RAM/ROM/Flash chip drivers -->

<*> Detect flash chips by Common Flash

Interface (CFI) probe

<*> Detect nonCFI

AMD/JEDECcompatible

flash chips

<*> Support for Intel/Sharp flash chips

<*> Support for AMD/Fujitsu flash chips

<*> Support for ROM chips in bus mapping

NAND Flash Device Drivers -->

<*> NAND Device Support

<*> NAND Flash support for S3C2410/S3C2440 SoC

Character devices >

Nonstandard serial port support

S3C2410 RTC Driver

#接下来做的是针对文件系统的设置,本人实验时目标板上要上的文件系统是cramfs,故做如下

配置

File systems -->

<> Second extended fs support

#去除对ext2的支持

Pseudo filesystems -->

/proc file system support

Virtual memory file system support (former shm fs)

/dev file system support (OBSOLETE)

Automatically mount at boot (NEW)

#这里会看到我们前先修改fs/Kconfig的成果,devfs已经被支持上了

Miscellaneous filesystems -->

<*> Compressed ROM file system support (cramfs)

#支持cramfs

Network File Systems -->

<*> NFS file system support

保存退出,产生.config文件.

编译内核

make zImage

注意:若编译内核出现如下情况

LD .tmp_vmlinux1

armlinuxld:

arch/arm/kernel/:1439: parse error

make: *** [.tmp_vmlinux1] Error 1

解决方法:修改arch/arm/kernel/

vi arch/arm/kernel/

将文件尾2条的ASSERT注释掉;

/* ASSERT((__proc_info_end __proc_info_begin), "missing CPU support") */

/* ASSERT((__arch_info_end __arch_info_begin), "no machine record defined") */

然后重新make zImage即可。

编译完成后会在arch/arm/boot/目录下生产zImage内核映象。zImage映象是可引导的,

压缩的内核映象,就是我们要移植到开发板上的内核映象文件。

七、实验小结、建议及体会

通过这次学习,我对Linux的了解更加的深入了,也对Linux下的编程操作更加的熟练了!!

实验课程名称: 嵌入式操作系统

实验项目名称

实验者

同组者

小灰灰的

爸爸

文件系统的移植

专业班级

中国好学长

系列

实验成绩

组别

实验日期

年 月 日

第一部分:实验分析与设计

(可加页)

五、实验内容描述(问题域描述)

描述一下文件系统映像文件的准备和移植的步骤(与内核移植类似)

六、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或

者算法描述)

实验原理和设计:

用busybox定制一个很小的文件系统,并且运行用户编译的hello(动态链接)。

三、主要仪器设备及耗材

硬件:THUGA-1型实验箱,PC机

软件:PC机操作系统:Linux

第二部分:实验调试与结果分析

(可加页)

八、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)

九、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)

1 建立工作目录

设定工作目录为/root/build_rootfs/, 下载busybox到该目录

mkdir /root/build_rootfs

2 建立根目录, 该目录就是我们要移植到目标板上的目录,对于嵌入式的文件系统,根目录下

必要的目录包括bin,dev,etc,usr,lib,sbin。

cd /root/build_rootfs

mkdir rootfs

cd rootfs

mkdir bin dev etc usr lib sbin

mkdir usr/bin usr/sbin usr/lib

3 交叉编译busybox,

我们在配置busybox的时候是基于默认配置之上来配置的;先make defconfig就是把busybox

配置成默认,然后再make menuconfig来配置busybox。

#解压

tar jxvf 2

mv busybox-1.5.0 busybox

cd busybox

#添加交叉工具链

export PATH=/usr/local/arm/3.3.2/binPATH

make defconfig

make menuconfig

#配置时,我们基于默认配置,再配置它为静态编译,安装时不要/usr路径,把Miscellaneous

Utilities #下的“taskset”选项去掉,不然会出错。

#如下:

Busybox setting->builds options->build busybox as a static binary ->installitation options ->

don’t use /usrMiscellaneous Utilities ―> [ ] taskset

保存退出。

#编译安装

makeARCH=arm CROSS_COMPILE=arm-linux- CONFIG_PREFIX=/root/build_rootfs/rootfs

all install

ARCH指定平台

CROSS_COMPILE指定交叉编译

CONFIG_PRRFIX指定安装的路径

#把安装的linuxrc删除

cd /root/build_rootfs/rootfs

rm linuxrc

3 copy C库

交 叉应用程序的开发需要用到交叉编译的链接库,交叉编译的链接库是在交叉工具链的lib目

录下;我们在移植应用程序到我们的目标板的时候,需要把交叉编译的 链接库也一起移植到

目标板上,这里我们用到的交叉工具链的路径是/usr/local/arm/3.3.2/,所以链接库的目录是

/usr/local /arm/3.3.2/lib(本来跟目标板相关的目录是/usr/local/arm/3.3.2/arm-linux, 因此要拷

贝的链接库应该在/usr/local/arm/3.3.2/arm-linux/lib下,但是此目录的很多链接都是链接到/usr

/local/arm/3.3.2/lib目录下的库文件,所以我们从/usr/local/arm/3.3.2/lib目录拷贝库),此目录

下有四种类 型的文件。

实际的共享链接库,如:

主修订版本的符合链接 如:.6

与版本无关的符合链接(链接到主修订版本的符合链接),如:

静态链接库包文件,如:libc.a

以上四种类型的文件,我们只需要两种:实际的共享链接库;主修订版本的符合链接,还有动

态连接器及其符号链接。

#进入链接库目录

cd /usr/local/arm/3.3.2/lib

#编写一个shell文件,用于copy实际的共享链接库;主修订版本的符合链接;动态连接器及

其符号链接到目标板根目录下的lib(在这里是/root/)。

vi

#内容如下:

for file in libc libcrypt libdl libm libpthread libresolv libutil

do

cp $file-*.so /root/build_rootfs/rootfs/lib

cp -d $.[*0-9] /root/build_rootfs/rootfs/lib

done

cp -d ld*.so* /root/build_rootfs/rootfs/lib

#保存退出

#第一个cp命令会复制实际的共享库

#第二个cp命令会复制符合链接本身

#第三个cp命令会复制动态连接器及其符合链接

#执行刚编写的shell。

source

#这样就把链接库复制过来了。

#接着我们还要缩小复制过来的链接库的体积,如下:

arm-linux-strip –s /root/build_rootfs/rootfs/lib/lib*

5 建立配置文件

这里我们没有添加inittab等文件,我们只是添加了一个c shell初始化时读取的文件。

内核启动的最后,会执行sbin/init程序,init程序在启动的最后会执行/bin/sh,sh在启动

的时候会读取/etc/profile文件

我们在/etc/profile文件里设定PATH,LD_RARYLIB_PATH环境变量,目的是配置用户程序运

行的环境。

cd /root/build_rootfs/rootfs/etc

vi profile

内容如下

#!/bin/sh

echo "Set seaech library in /etc/profile"

export LD_LIBRARY_PATH=/lib

echo "Set user path in /etc/profile"

export PATH=/bin:/sbin:/usr/bin

保存退出

6 添加一个用户程序

进入工作目录

cd /root/build_rootfs/

编辑源文件

vi hello.c

内容如下

#include

main()

{

printf(“welcome to my rootfs/n”);

}

保存退出

交叉编译

arm-linux-gcc hello.c –o hello

复制到目标板的根目录

mv hello /root/build_rootfs/rootfs/usr/bin

7 制作cramfs映像

我们在光盘资料盘下的“Linux内核源码包和工具/toolchain”可以找到mkcramfs工具,把它

复制到“/root/build_rootfs”目录下。

cd /root/build_rootfs/

./mkcramfs rootfs

就是我们要烧写到目标板的映像文件

8 烧写到2分区,启动开发板,运行hello程序。

十、实验小结、建议及体会

通过这次学习,我对Linux的了解更加的深入了,也对Linux下的编程操作更加的熟练了!!


本文标签: 实验 内核 编译