嵌入式驱动设计实训报告.docx

上传人:b****8 文档编号:23888175 上传时间:2023-05-21 格式:DOCX 页数:11 大小:700.94KB
下载 相关 举报
嵌入式驱动设计实训报告.docx_第1页
第1页 / 共11页
嵌入式驱动设计实训报告.docx_第2页
第2页 / 共11页
嵌入式驱动设计实训报告.docx_第3页
第3页 / 共11页
嵌入式驱动设计实训报告.docx_第4页
第4页 / 共11页
嵌入式驱动设计实训报告.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

嵌入式驱动设计实训报告.docx

《嵌入式驱动设计实训报告.docx》由会员分享,可在线阅读,更多相关《嵌入式驱动设计实训报告.docx(11页珍藏版)》请在冰豆网上搜索。

嵌入式驱动设计实训报告.docx

嵌入式驱动设计实训报告

2011-2012学年第2学期

实验报告书

 

课程名称嵌入式驱动设计

  

 

系(部)信息工程系

专业班级计算机09-4教改班

学生姓名王军

学生学号0943020120

 

山东科技大学(泰山科技学院)

一、Mini2440开发板的介绍

我们这次实训用的板子是Mini2440,Mini2440是一款基于ARM9的开发板,采用SamsungS3C2440芯片,并采用专业稳定的CPU内核电源芯片和复位芯片来保证系统运行时的稳定性。

在进行器件地址说明之前,有一点需要注意,nGCS0片选的空间在不同的启动模式下,映射的器件是不一样的。

在NANDFlash启动模式下,内部的4KBytesBootSram被映射到nGCS0片选的空间;在NorFlash启动模式下(非NandFlash启动模式),与nGCS0相连的外部存储器NorFlash就被映射到nGCS0片选的空间SDRAM地址空间:

0x30000000~0x34000000。

Supervivi在出厂的时候已经预装入板子的NorFlash中,设置拨动开关S2为NORFlash启动,即可进入BIOS模式,此时开发板上的绿色LED1会呈现闪烁状态,其启动界面如下图:

双击运行光盘中的“windows平台工具\usb下载驱动\FriendlyARMUSBDownloadDriverSetup_20090421.exe”安装程序,开始安装USB下载驱动。

注意:

此处安装的USB驱动仅在BIOS模式下有用。

安装完成后,打开光盘中的dnw.exe下载软件,可以看到USB连接OK,如图:

功能主菜单如下图:

二、实训流程

1.确定supervivi版本、开发平台及交叉编译器;

2.获取Linux内核源代码(采用版本为Linux-2.6.32.2);

3.克隆建立自己的目标平台(制定交叉编译环境变量及配置内核菜单中的MINI2440);

4.移植Nand驱动并更改分区信息;

5.移植yaffs2;

6.移植DM9000网卡驱动;

7.实训扩展;

三、实训内容

1.确定supervivi的版本为supervivi-0945-2K,supervivi的功能可通过USB下载配合DNW这个程序使用。

功能如图所示:

2.获取Linux内核源代码

对于Linux-2.6.32.2,我们是基于Ubuntu10.04平台做开发的,所有的配置和编译脚本也基于此平台,并使用符合EABI标准的新型编译器:

arm-linux-gcc-4.3.2。

3.克隆建立自己的目标平台一般步骤为:

(1)、获取mini2440.c

我们要参考SMDK2440加入自已的开发板平台,我们使用的是mini2440,因此取名为MINI2440。

在linux-2.6.32.2/arch/arm/tools/mach_types文件中,我们可以看到mini2440的机器码为1999。

接下来,我们注意到linux-2.6.32.2/arch/arm/mach-s3c2440目录下有个mach-mini2440.c文件,把它直接删除。

将linux-2.6.32.2/arch/arm/mach-s3c2440/目录下的mach-smdk2440.c复制一份。

命名为mach-mini2440.c,找到MACHINE_START(S3C2440,“SMDK2440”),修改为MACHINE_START(MINI2440,“FriendlyARMMini2440developmentboard”)。

开发板运行后,在命令行终端输入:

cat/proc/cpuinfo可以看到我们添加的开发板信息。

(2)、修改时钟源频率

在mach-mini2440.c(就是我们刚刚通过复制mach-smdk2440.c得到的)的第160行staticvoid__initsmdk2440_map_io(void)函数中,把其中的16934400(代表原SMDK2440目标板上的晶振是16.9344MHz)改为mini2440开发板上实际使用的12000000(代表mini2440开发板上的晶振12MHz,元器件标号为X2)。

(3)、从SMDK2440到MINI2440

制作自己的mini2440平台体系,需要把mach-mini2440.c中所有的smdk2440字样改为mini2440,可以使用批处理命令修改,在vim的命令模式下输入:

%s/smdk2440/mini2440/g。

(把所有和“smdk2440”匹配的字符串全部替换为“mini2440”,前面的“%s“代表字符串匹配,最后的“g”代表global,是全局的意思),除此之外,还有一个地方需要改动,在mini2440_machine_init(void)函数中,把smdk_machine_init()函数调用注释掉。

(因为我们后面会编写自己的初始化函数,不需要调用smdk2440原来的)。

(4)、编译测试

在Linux源代码根目录下执行#makemini2440_defconfig(使用Linux官方自带的mini2440配置);#makezImage;重新编译并把生成的内核文件zImage(位于arch/arm/boot目录)下到板子中,可以看到内核已经可以正常启动了(但此时大部分硬件驱动还没加,并且也没有文件系统,因此还无法登陆)。

(5)、关于内核配置菜单中的mini2440选项

在命令行执行:

#makemenuconfig(前面已经执行了makemini2440_defconfig加载了缺省配置,因此这里可以直接执行该命令);可根据一下步骤找到MINI2440选项:

SystemType->S3C2440Machines->MINI2440developmentboard,在Linux-2.6.32.2/arch/arm/mach-s3c2440/Kconfig文件中可查看到内核配置菜单中MINI2440选项的一些定义。

这里的显示信息只是在内核配置菜单中出现的,要让选择的配置实际起效,还需要根据此配置在Makefile中添加相应的代码文件,请看该目录下的Makefile。

4.移植Nand驱动并更改分区信息一般步骤:

(1)、Linux-2.6.32.2内核所支持的NandFlash类型

Linux-2.6.32.2已经自带了大部分的驱动。

在linux-2.6.32.2/drivers/mtd/nand/nand_ids.c文件中,定义了所支持的各种NandFlash类型,如下图

(2)、修改NandFlash分区表

打开/arch/arm/plat-24xx/common-smdk.c可以看到NandFlash的分区表在Linux-2.6.32.2中,nand驱动是被注册为平台设备的,这同样可在/arch/arm/plat-24xx/common-smdk.c文件中看出。

因此,在mach-mini2440.c中加入为各个分区信息的代码(包含此分区的名字,大小、偏移地址)。

(3)、从启动信息中查看分区表

至此,就完成了nandflash驱动的移植,此时在内核根目录执行“makezImage”,把生成的zImage烧写到开发板。

5.让linux支持yaffs2文件系统

(1)、获取yaffs2的源代码

在可以下载到最新的yaffs2源代码,需要使用git工具,在命令行输入:

#gitclonegit:

//www.aleph1.co.uk/yaffs2稍等片刻,就可以下载到最新的yaffs2的源代码目录,本光盘中也有单独的yaffs2源代码包(文件名为:

yaffs2-src-20100329.tar.gz)。

(2)、为内核打上yaffs2的补丁

进入yaffs2源代码目录执行:

#cdyaffs2

#./patch-ker.shc/opt/FriendlyARM/mini2440/linux-2.6.32.2

此时进入linux-2.6.32.2/fs目录,可以看到已经多了一个yaffs2目录。

(3)、配置和编译带yaffs2支持的内核

在Linux内核源代码根目录运行:

makemenuconfig

按照如下步骤进行配置:

FileSystemsMiscellaneousfilesystemsYAFFS2filesystemsupport

按空格选中它,这样我们就在内核中添加了yaffs2文件系统的支持,按“Exit”退出内核配置。

最后在命令行执行:

#makezImage。

(4)、烧写到开发板运行测试

最后会生成linux-2.6.32.2/arch/arm/boot/zImage,使用supervivi的“k“功能把它烧写到nandflash,按“b“启动系统,这时,如果nandflash已经存在文件系统(可以使用supervivi的“y“功能烧写友善之臂提供的现成的yaffs2文件系统映像root_qtopia-128M.img用以测试),就会看到下图信息了,这说明yaffs2已经移植成功。

6.移植DM9000网卡驱动步骤:

(1)、设备资源初始化

Linux-2..6.32.2已经自带了完善的DM9000网卡驱动驱动(源代码位置:

linux-2.6.32.2/drivers/net/dm9000.c),它也是一个平台设备,因此在目标平台初始化代码中,只要填写好相应的结构表即可,具体步骤如下:

a.首先添加驱动所需的头文件dm9000.h;

b.再定义DM9000网卡设备的物理基地址;

c.再填充该平台设备的资源设置,以便和DM9000网卡驱动接口配合起来;这样,DM9000平台设备的接口就填完了。

(2)、调整DM9000所用的位宽寄存器

因为Linux-2.6.32.2的DM9000网卡驱动并不是专门为mini2440准备的,所以还要在其源代码中做一些移植工作,如下步骤。

a、打开linux-2.6.32.2/drivers/net/dm9000.c,头文件处添加2410相关的配置定义,如下红色部分:

b、在dm9000设备的初始化函数中添加如下红色部分,这里是配置DM9000所用片选总线的时序,因为mini2440目前只有一个通过总线外扩的设备,在此设备驱动中直接修改相关的寄存器配置会更加容易理解一些,当然这部分也可以放到mach-mini2440.c中。

(3)、关于MAC地址

需要注意的是,本开发板所用的DM9000网卡并没有外接EEPROM用以存储MAC地址,因此系统中的MAC地址是一个“软”地址,也就是可以通过软件进行修改,可以随意改为其他值,在staticint__devinitdm9000_probe(structplatform_device*pdev)函数中可以看出:

(4)、配置内核加入DM9000,并编译运行测试

此时会带内核源代码目录,执行:

#makemenuconfig

开始在内核中配置网卡驱动,依次选择如下菜单项:

然后执行:

#makezImage

最后生成arch/arm/boot/zImage文件,使用”k”命令把它烧写到开发板,并使用默认的文件系统启动,在命令行终端运行ifconfig命令可以看到如图所示。

四、实训心得

在这次实训中,虽然工作紧张辛苦但是感觉很充实,经过这次的实训,我切实感受到了自己需要学习的东西还有很多,在嵌入式这条路上还需要稳扎稳打,通过实训,让我真真切切体会到做事情需要细心仔细,一个小小的错误,就可能会阻碍工作的进展,因此我们更需要有耐心。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 教育学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1