嵌入式操作系统实训报告

  • 格式:doc
  • 大小:56.00 KB
  • 文档页数:15

嵌入式操作系统实训报告

一、实习的任务与目的

本次实训的目的是在学生已掌握了嵌入式操作系统的知识、对当前嵌入式操作系统的主要种类和应用领域有较清晰的概念的基础上,以嵌入式Linux操作系统教学内容为指导,以S3C2410经典实验箱为平台,使学生掌握配置、裁剪、移植和维护嵌入式Linux操作系统的技能和相关理论知识,具备一个初级嵌入式Linux系统程序员的综合技能。

本次实训的任务是通过教师对嵌入式Linux的配置、裁剪、移植以及文件系统的移植等内容的讲解,让学生掌握如何搭建嵌入式开发环境、嵌入式Linux系统移植、文件系统移植以及简单的驱动程序的开发。

二、实习内容

第一部分 嵌入式LINU开发基础知识

1.1 嵌入式LINUX简介

1.2 嵌入式LINUX开发平台简介

1.3 嵌入式LINUX开发流程

1.4 嵌入式LINUX开发环境的建立

第二部分 嵌入式Linux系统构建

2.1 Bootloader移植

2.2 LINUX内核裁剪与移植

2.2 创建根文件系统

第三部分 设备驱动程序设计 3.1 模块方式驱动实验

3.2 LED驱动实验

3.3 中断按键控制LED实验

三、实训步骤

一)移植U-Boot.1.2.0到博创2410

一、在U-Boot中建立自己的开发板类型,并测试编译。

1 在工作目录下解压U-Boot。

$tar zxvf u-boot.git.tar.gz

2 进入U-Boot目录,修改Makefile,为开发板建立编译项

3 在/board子目录中建立自己的开发板目录,还要记得修改自己的开发板目录下的Makefile文件,不然编译时会出错:COBJS := tekkaman2410.o

flash.o

4 在include/configs/中建立配置头文件

$cd ../../..$cp include/configs/smdk2410.h include/configs/tekkaman2410.h

5测试交叉编译成功!!

二、修改U-Boot中的文件,以匹配博创的2410实验箱。

1 修改/cpu/arm920t/start.S

2 在board/tekkaman/tekkaman2410加入NAND Flash读函数,建立

nand_read.c文件。

3 修改board/tekkaman/tekkaman2410/Makefile文件

4 修改include/configs/tekkaman2410.h文件,添加如下内容:

5 修改board/tekkaman/tekkaman2410/lowlevel_init.S文件

依照开发箱的内存区的配置情况, 修改board/tekkaman/tekkaman2410/lowlevel_init.S文件

6 修改/board/tekkaman/tekkaman2410/tekkaman2410.c......

8 在 include/linux/mtd/nand_ids.h的结构体nand_flash_ids加入

static struct nand_flash_dev nand_flash_ids[] = {

......

{"Samsung KM29N16000",NAND_MFR_SAMSUNG, 0x64, 21, 1, 2, 0x1000,

0},

{"Samsung K9F1208U0M", NAND_MFR_SAMSUNG, 0x76, 26, 0, 3, 0x4000,

0},

{"Samsung unknown 4Mb", NAND_MFR_SAMSUNG, 0x6b, 22, 0, 2, 0x2000,

0},

......

{NULL,}

};

9 修改/lib_arm中的board.c。

10 修改common/env_nand.c

11 在/board/tekkaman/tekkaman2410/tekkaman2410.c文件的末尾添加对Nand

Flash 的初始化函数

u-boot运行至第二阶段进入start_armboot()函数。其中nand_init()函数是对nand flash的最初初始化函数。Nand_init()函数在两个文件中实现。其调用与CFG_NAND_LEGACY宏有关,如果没有定义这个宏,系统调用

drivers/nnd/nand.c中的nand_init();否则调用自己在board/smdk2410/smdk2410.c中的nand_init()函数。3C2410_GetBase_NAND();

12 修正U-Boot的NE2000驱动的低级错误

将第45行:

at /ecos/ecos-license/ */

改为:at /ecos/ecos-license/

13 因为没有Nor Flash芯片,所以注释掉/common/cmd_bootm.c中关于imls命令的程序段和/common/cmd_flash.c中的程序。不然,按上面的修改,编译会出错。

三、交叉编译U-Boot

二)、移植Linux2.6.24.7到博创2410

操作系统: ubuntu9.04

交叉编译工具: arm-linux-gcc-4.1.1

开发板: 2410-S(s3c2410s)

一、下载并解压Linux2.6.24.7内核源码

从网上下载linux-2.6.24.7内核源码到/arm2410s目录下,并解压

进入内核解压后的目录

二、修改内核源码根目录下的Makefile文件

修改Makefile中的ARCH和CROSS_COMPILE变量,修改为

ARCH = arm

CROSS_COMPILE = arm-linux-

三、设置nand flash分区信息

修改arch/arm/plat-s3c24xx/common-smdk.c文件,修改Nand Flash的分区信息和Nand Flash的硬件信息。

修改的内容如下:

static struct mtd_partition smdk_default_nand_part[] = {

[0] = {

.name = "vivi",

.size = SZ_128K,

.offset = 0,

},

[1] = {

.name = "param", .offset = SZ_128K,

.size = SZ_1M-SZ_128K,

},

[2] = {

.name = "kernel",

.offset = SZ_1M,

.size = SZ_1M * 3,

},

[3] = {

.name = "root",

.offset = SZ_4M,

.size = SZ_4M * 5,

},

[4] = {

.name = "user",

.offset = SZ_4M * 6,

.size = SZ_4M * 10,

},

};

四、 禁止nand flash的ECC校验

修改文件drivers/mtd/nand/s3c2410.c文件,查找函数s3c2410_nand_init_chip(),在函数的最后一行,添加chip->ecc.mode=NAND_ECC_NONE;

五、增加yaffs2文件系统的支持

1、下载Yaffs2到~/arm2410s目录下

2、解压Yaffs2并将其加入Linux内核(打补丁的方式)

六、博创2410所配网卡AX88796(NE2000兼容网卡)驱动的移植。

1、修改arch/arm/Kconfig文件,增加ISA总线支持,使其在make

menuconfig 时出现NE2000的网卡配置选项。

2、修改include/asm-arm/arch-s3c2410/map.h文件。加入AX88796的地址映射。

3、修改arch/arm/mach-s3c2410/mach-smdk2410.c文件。在smdk2410_iodesc 中加入AX88796的地址信息。

4、修改网卡驱动的主要文件drivers/net/ne.c

(1)、添加头文件和定义

(2)、确保定义总线宽度为16位。

(3)、在do_ne_probe函数中增加配置总线参数、基地址和中断的语句

(4)、修改ne_probe1函数

七、配置内核

1、载入up2410的默认配置文件,以简化配置过程

2、手动配置内核,在s3c2410_defconfig基础上,增加以下配置选项:

产生.config文件。

八、编译内核

内核的编译操作

make menuconfig 配置编译选项

make dep 提供变量依赖关系信息

make clean 删除生成的模块和目标文件

make zImage 编译内核生成压缩的映像

make modules 编译模块 至此,内核的编译工作完成,在arch/arm/boot目录下生成了zImage文件,即为压缩的内核映像。

最后,将内核镜像烧写到博创arm2410s开发板上,启动正常,网卡也正常

三)、使用BusyBox制作linux根文件系统(CramFS+mdev)

操作系统:Ubuntu9.04

内核版本:linux-2.6.24.7

开发板:博创arm2410s

交叉编译工具:arm-linux-gcc-4.1.1

BusyBox:busybox-1.11.1

CramFS:CramFS-1.1

一、 准备根文件系统

使用shell脚本create_rootfs.sh,建立根文件系统的目录框架

vi create_rootfs.sh

create_rootfs.sh内容如下:

#!/bin/sh

echo "------Create rootfs directons......"

mkdir rootfs

cd rootfs

echo "--------Create root,dev......"

mkdir root dev etc bin sbin mnt sys proc lib home tmp var usr

mkdir usr/sbin usr/bin usr/lib usr/modules

mkdir mnt/usb mnt/nfs mnt/etc mnt/etc/init.d

mkdir lib/modules

chmod 1777 tmp

cd ..