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下的编程操作更加的熟练了!!
版权声明:本文标题:武汉理工大学-嵌入式系统的实验报告-中国好学长系列之小灰灰的爸爸_百 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1735131397a1638911.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论