Linux内核转移实训报告_linux实训报告图文

其他范文 时间:2020-02-28 18:42:16 收藏本文下载本文
【www.daodoc.com - 其他范文】

Linux内核转移实训报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“linux实训报告图文”。

广州航海高等专科学校

嵌入式实验3——Linux内核移植

实验日期:2010.11.16

专业班号:计算机081学号: 22姓名:陈徭

指导教师:封斌老师

一、实验目的:完成linux2.6.14内核向S3C2410实验箱的移植

二、实验内容 :

1、准备实验环境,包括:安装VMware station、安装VMware Tools,准备源码文件。

2、修改环境变量,对flash进行分区,将分区信息加入内核源码,指定启动时的设备初始化,3、下载Yaffs2,解压Yaffs2并将其加入Linux内核,修改Makefile,4、配置内核产生.config文件,然后编译:make zImage,5、修改、创建根文件系统,6、安装内核和根文件系统,启动系统。

三、实验环境:

PC+linux操作系统(第1~5步),S3c2410实验箱(第6步)。

四、实验步骤

1.准备工作

◆在PC机D盘建立目录“vmshare”,将上述文件拷贝到“vmshare”目录下,然后安装vmware虚拟机和vmware tools

◆启动linux后,配置虚拟机与winxp的文件共享,PC机上的共享目录是d盘下的vmshare目录,linux下的共享目录是/mnt/hgfs/vmshare

2.修改内核源码,修改环境变量,将分区信息加入内核源码,指定启动时的设备初始化

1)展开源码

在本步骤中,展开源码,并设置环境变量

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-jxvflinux-2.6.14.tar.bz2//展开内核源码

2)建立环境变量、修改Makefile

将交叉编译工具路径和内核源码路径加入环境变量。修改/root/.bash_profile文件,添加以下内容:

exportKERNEL=/home/armlinux/linux-2.6.14

exportPATH=/usr/local/arm/3.4.1/bin:$PATH

添加完成后存盘退出,执行命令:

source/root/.bash_profile

echo$KERNEL//判断KERNEL变量是否成功定义,应该显示/home/armlinux/linux-2.6.1

4进入内核源码目录下$KERNEL,修改对应的Makefile文件:

cd$KERNEL

viMakefile

找到ARCH与CROSS_COMPILE,修改为

ARCH = arm//注意arm后不能有空格

//注意arm-linux-后不能有空格//说明内核源码目录 //说明交叉编译工具路径 CROSS_COMPILE = arm-linux-

保存退出

3)修改内核源码

◆将分区信息加入内核源码(修改arch/arm/mach-s3c2410/devs.c)

#vi$KERNEL/arch/arm/mach-s3c2410/devs.c 添加头文件:

#include

#include

#include 添加分区结构,其中name: 代表分区名字,size: 代表flash分区大小(单位:字节),offset: 代表flash分区的起始地址(相对于0x0的偏移),目标板计划分5个区,分别存放bootloader, bootloader param,kernel, rootfs和yaffs。

staticstructmtd_partitionpartition_info[]={

};

name: “loader”,//分区名字,任意 size: 0x00020000,//分区大小 offset: 0x0,//分区的起始地址,相对于0x0的偏移 },{ name: “param”, size: 0x00010000, offset: 0x00020000, },{ name: “kernel”, size: 0x00200000, offset: 0x00030000, },{ name: “rootfs”, size: 0x00300000, offset: 0x00230000, },{ name: “yaffs”, size: 0x03A00000, offset: 0x00530000, }

加入Nand Flash分区,nr_partitions:指明partition_info中定义的分区数目,partitions:分区信息表

structs3c2410_nand_setnandset={

};

加入对Nand Flash芯片的支持:tacls, twrph0, twrph1的意思见S3C2410手册sets: 支持的分区集,nr_set:分区集的个数

struct s3c2410_platform_nand superlpplatform={

//NAND Flash芯片支持

//参数意义可参考S3C2410手册

tacls: 0,nr_partitions: 5,//分区数量 partitions: partition_info,//分区表

};

twrph1: 0, sets: &nandset, nr_sets: 1,修改s3c_device_nand,以加入NAND Flash驱动:name: 设备名称,id: 有效设备编号,如果只有唯一的一个设备为1,有多个设备从0开始计数。num_resource: 有几个寄存器区,resource: 寄存器区数组首地址,dev: 支持的Nand Flash设备

structplatform_devices3c_device_nand = {

};

◆指定启动时的设备初始化

kernel启动时依据我们对分区的设置进行初始配置,修改.resource = s3c_nand_resource,//寄存器区的首地址 //添加如下信息,表示NAND Flash设备.dev={.platform_data=&superlpplatform }.name = “s3c2410-nand”,//设备名称.id =-1, //有效设备编号,-1表示唯一设备.num_resources = ARRAY_SIZE(s3c_nand_resource),//寄存器区的个arch/arm/mach-s3c2410/mach-smdk2410.c文件,修改smdk2410_devices[]结构,指明初始化时包括在前面所设置的flash分区信息

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

找到结构platform_device,在结构定义的最后加入一个条项&s3c_device_nand: 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,};

◆禁止Flash ECC效验

内核通过vivi把数据写入NAND Flash,而vivi的ECC效验算法和内核的不同,内核的效验码是由NAND Flash控制器产生的,所以在此必须禁用NAND Flash ECC。修改drivers/mtd/nand/s3c2410.c 文件:

vi$KERNEL/drivers/mtd/nand/s3c2410.c

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

chip->eccmode = NAND_ECC_NONE;

保存,退出。

3.安装Yaffs2,解压Yaffs2并将其加入Linux内核,修改Makefile ◆解压Yaffs2并将其加入Linux内核

cd/home/armlinux

tar-zxvfyaffs2.tar.gz

cdyaffs2

shpatch-ker.shc$KERNEL

1.配置内核产生.config文件,然后编译系统内核

为了使内核支持devfs,启动时在/sbin/init运行之前能自动挂载/dev为devfs文件系统,修改fs/Kconfig文件

cd$KERNEL

vifs/Kconfig

找到menu “Pseudo filesystems”,添加以下语句:

config DEVFS_FS

config DEVFS_MOUNT

bool “Automatically mount at boot” defaulty depends on DEVFS_FS bool “/dev file system support(OBSOLETE)” defaulty

4.配置内核产生.config 文件,然后编译系统内核

cparch/arm/configs/smdk2410_defconfig.config

makemenuconfig

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

Loadable module support >

[*] Enable loadable module support [*] Automatic kernel module loading

System Type >

Boot options >Default kernel command string:

noinitrd root=/dev/mtdblock3init=/linuxrc console=ttySAC0,115200

#说明:mtdblock3代表的第4个flash分区,它是rootfs,而console=ttySAC0,115200使kernel#启动期间的信息全部输出到串口0上,2.6内核对于串口的命名改为ttySAC0,但这不影#响用户空间的串口编程。用户空间的串口编程针对的仍是/dev/ttyS0等

Floating point emulation >

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

Device Drivers >

Memory Technology Devices(MTD)--->[*] MTD partitioning support#支持MTD分区,这样我们在前面设置的分[*] NWFPE math emulation [*] S3C2410 DMA support 区才有意义

Character devices--= >[*] Nonstandardserial port support [*] S3C2410 RTC Driver NAND Flash Device Drivers---> NAND Device Support NAND Flash support for S3C2410/S3C2440 SoC[*] 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

#接下来做的是针对文件系统的设置,目标板上的根文件系统是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已经被支持上了 Compreed ROM file system support(cramfs)#支持cramfs NFS file system support Miscellaneous filesystems > Network File Systems >

保存退出,产生.config文件.◆编译内核

makezImage

编译成功后,在$KERNEL/arch/arm/boot目录下,生成zImage文件。

5.烧录系统

(未完成)

五、实验感想:

本次实训中遇到了不少问题,但我都及时请教老师或同学而得到了解决。解决问题后的那种感觉真的很好。以前总觉得Linux系统内核的移植是非常陌生、非常高深的,通过实训后发现只要肯花心思去搞懂,任何东西都会变得容易很多的。

下载Linux内核转移实训报告word格式文档
下载Linux内核转移实训报告.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

    热门文章
      整站推荐
        点击下载本文