LED驱动程序设计嵌入式综合实训I课程设计说明书.docx
- 文档编号:9802891
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:64
- 大小:2.44MB
LED驱动程序设计嵌入式综合实训I课程设计说明书.docx
《LED驱动程序设计嵌入式综合实训I课程设计说明书.docx》由会员分享,可在线阅读,更多相关《LED驱动程序设计嵌入式综合实训I课程设计说明书.docx(64页珍藏版)》请在冰点文库上搜索。
LED驱动程序设计嵌入式综合实训I课程设计说明书
XXXX
课程设计说明书
题目
基于Linux的LED驱动程序设计
系(部)
计算机科学与技术
专业(班级)
软件五班
姓名
学号
指导教师
起止日期
2013.12.05-2014.01.03
课程设计任务书
课程名称:
服务外包软件综合实训II
题目:
基于Linux的LED驱动程序设计
已知技术参数和设计要求:
设计基于Linux的LED驱动程序及其测试程序,具体要求如下:
(1)学会对嵌入式系统进行分析、设计,培养嵌入式系统底层开发能力。
(2)掌握嵌入式Linux开发环境的搭建方法。
(3)掌握编译Bootloader、编译内核、部署文件系统的方法。
(4)掌握基于嵌入式Linux的ARM微处理器的简单接口驱动程序的设计方法。
(5)加强各小组之间的团队合作精神。
各阶段具体要求:
(1)开发前的准备:
基于Linux的开发环境的搭建。
(2)系统分析:
包括基于Linux驱动程序的原理、开发的流程。
(3)编码实现:
根据要求对LED驱动程序进行编码实现。
(4)测试:
编写测试程序对驱动程序进行测试。
设计工作量:
(1)软件设计:
完成问题陈述中所提到的软件以及工作量要求。
(2)论文:
要求撰写不少于3000个文字的文档,详细说明各阶段具体要求。
工作计划:
安排4周时间进行综合实训。
第一周----嵌入式Linux开发环境的搭建方法。
第二周----编译Bootloader、编译内核、文件系统。
第三、四周----基于嵌入式Linux的ARM微处理器的简单接口驱动程序的设计和测试程序的设计。
注意事项
⏹提交文档
ØXX学院课程设计任务书(每学生1份)
ØXX学院课程设计论文(每学生1份)
ØXX学院课程设计鉴定表(每学生1份)
指导教师签名:
日期:
2013-12-5
教研室主任签名:
日期:
系主任签名:
日期:
XX学院课程设计鉴定表
姓名
学号
专业
软件工程
班级
五班
设计题目
基于Linux的LED驱动程序设计
指导教师
XX
指导教师意见:
评定等级:
教师签名:
日期:
答辩小组意见:
评定等级:
答辩小组长签名:
日期:
教研室意见:
教研室主任签名:
日期:
系(部)意见:
系主任签名:
日期:
说明
课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;
摘要
嵌入式系统是以应用为中心,以计算机技术为基础、软硬件均可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
其发展已有二十多年的历史,国际上也出现了一些著名的嵌入式操作系统。
如VxWorks,PalmOS,WindowsCE等等,但这些操作系统均属于商品化产品。
而Linux作为一种优秀的FreeOS,近几年在嵌入式领域异军突起,成为最有潜力的嵌入式操作系统。
本次实训是基于Linux的LED驱动程序设计,以《嵌入式系统设计》课程为基础,以S3C6410实验箱为平台,进一步熟悉Linux基本操作,学会应用程序设计过程。
本文档编写目的,旨在为本此实训做一个总结,在LED灯驱动程序设计的过程中,从零开始做起,到最后完成LED驱动程序设计并成功驱动LED灯,编写本文档有助于巩固实训所学。
文档的主要的阅读对象是:
教师、学生、嵌入式设计人员、C语言开发人员、嵌入式测试人员等等。
设计该LED灯驱动程序主要是为了完成在Linux下设计LED灯驱动程序并成功驱动LED灯。
关键词:
S3C6410,交叉编译环境,Linux内核2.6.36,文件系统,Linux驱动程序。
第1章设计需求
1.1嵌入式系统简介
嵌入式系统是基于单片机的一种升级版,它是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
我们可从几方面来理解嵌入式系统:
1、嵌入式系统是面向用户、面向产品、面向应用的,嵌入式系统是与应用紧密结合的,它具有很强的专用性,必须结合实际系统需求进行合理的裁减利用。
嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进行,因此嵌入式系统产品一旦进入市场,具有较长的生命周期。
2、嵌入式系统是将先进的计算机技术、半导体技术和电子技术和各个行业的具体应用相结合后的产物。
这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。
3、嵌入式系统必须根据应用需求对软硬件进行裁剪,满足应用系统的功能、可靠性、成本、体积等要求。
为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而不是存贮于磁盘等载体中。
4、嵌入式系统本身不具备自主开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发。
实际上,凡是与产品结合在一起的具有嵌入式特点的控制系统都可以叫嵌入式系统。
现在人们讲嵌入式系统时,某种程度上指近些年比较热的具有操作系统的嵌入式系统。
1.2设计需求
本次综合实训任务主要是基于Linux的LED驱动程序设计及完成相关的操作。
大致分为两个阶段,第一阶段为环境搭建,第二部分是驱动程序设计。
需要完成的任务是,由驱动程序驱动开发板的LED灯,并且经测试,能够正确的点亮或熄灭开发板上的LED灯,即为完成本次实训任务。
有能力的同学,可以尝试使用更多的方式实现LED控制,或者尝试驱动开发板上的其它硬件设备,如数码管、摄像头、触控屏、网卡等等。
第2章开发环境搭建
2.1安装VmwareWorkstation9软件
打开已经下载好的VMware-workstation-full-9.0.1-894247.exe,进入安装界面,安装过程采用默认设置安装,安装过程中需要输入序列号,如下列图2-1至2-10所示:
图2-1开始安装VmwareWorkstation
图2-2典型安装
图2-3安装路径
图2-4启动时检查更新
图2-5帮助提高VmwareWorkstation
图2-6创建桌面快捷方式和开始菜单文件夹
图2-7继续完成安装
图2-8安装进度
图2-9安装进度
图2-10安装完成
至此安装结束,VmwareWorkstation9软件可以正常使用了
2.2在VmwareWorkstation9中安装Linux操作系统(ubuntu12.04)
ubuntu是一个免费的操作系统,隶属Linux类操作系统,基于GNU/Linux设计,基于Debian之上的一个发行版。
ubuntu囊括了大量精挑细选自Debian发行版的软件包,同时保留了Debian强大的软件包管理系统,以便简易的安装或彻底的删除程序。
与大多数发行版附带数量巨大的可用可不用的软件不同,Ubuntu的软件包清单只包含那些高质量的重要应用程序。
ubuntu提供了一个健壮、功能丰富的计算环境,既适合家用又适用于商业环境。
Ubuntu开发团队努力精益求精,每6个月就会发布一个版本,以提供最新最强大的软件。
默认桌面环境采用GNOME,一个UNIX和Linux主流桌面套件和开发平台。
另一个UNIX和Linux主流桌面环境是KDE。
接下来,准备在VmwareWorkstation9中安装ubuntu12.04操作系统,安装步骤如下图2-11至2-16所示:
图2-11典型安装
图2-12选择安装文件图2-13设置用户名及密码
图2-14虚拟机安装路径图2-15设置虚拟机文件结构
图2-16完成安装
至此ubuntu12.04操作系统安装完毕,等待系统自动配置完成即可,安装完成后,会进入ubuntu的图形界面,这样我们就安装ubuntu12.04操作系统完成了,可以在这个操作系统下进行我们的实训了。
2.3设置虚拟机共享
在ubuntu操作系统安装完毕后,启动ubuntu,然后在VmwareWorkstation中设置虚拟机文件夹共享,方便以后在宿主PC以及虚拟机之间传输文件。
具体设置如下图:
图2-17设置虚拟机文件共享
2.4更新数据源
ubuntu包含大量的服务和程序,有些服务必须联网更新后才能使用,更新数据源是为了以后使用更多服务做准备工作,具体步骤如下:
(1)首先在ubuntu中打开终端,在终端中输入如下命令:
sudogedit/etc/apt/sources.list
(2)打开sources.list文件后,在此文件中添加如下信息:
deboneiricmainuniverserestrictedmultiverse
deb-srconeiricmainuniverserestrictedmultiverse
deboneiric-securityuniversemainmultiverserestricted
deb-srconeiric-securityuniversemainmultiverserestricted
deboneiric-updatesuniversemainmultiverserestricted
deboneiric-proposeduniversemainmultiverserestricted
deb-srconeiric-proposeduniversemainmultiverserestricted
deboneiric-backportsuniversemainmultiverserestricted
deb-srconeiric-backportsuniversemainmultiverserestricted
deb-srconeiric-updatesuniversemainmultiverserestricted
添加完以上信息后,保存文件并退出。
(3)回到终端界面,输入命令:
sudoapt-getupdate
开始更新数据源,等待系统更新完毕即可。
2.5配置TFTP
TFTP的全称是TrivialFileTransferProtocol,即简单文件传输协议。
使用此服务传送文件时没有数据校验、密码验证,非常适合小型文件的传输。
在通过TFTP传送文件时,需要服务端和客户端,对于我们嵌入式系统来讲,服务端就是我们的宿主机,下面我们来对他进行配置:
(1)在终端中输入命令安装TFTP服务:
sudoapt-getinstalltftp-hpa
sudoapt-getinstalltftpd-hpa//服务器
(2)在终端中输入命令:
sudogedit/etc/default/tftpd-hpa,打开文件后,将文件内容更改为如下所示的内容:
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/temp/tftpboot"
TFTP_ADDRESS="0.0.0.0:
69"
TFTP_OPTIONS="-s-l-c"
文件内容更改完毕,保存并退出,回到终端界面
(3)重新启动TFTP服务:
sudo/etc/init.d/tftpd-hparestart
(4)测试TFTP,首先在TFTP服务端所在目录下新建测试文件test0,然后输入以下命令:
tftplocalhost
tftp>getserver.txt
tftp>putclient.txt
tftp>q
在任意目录下,输入以上命令,能够正常的和tftpboot服务端进行文件传输,即表示TFTP服务已经安装并配置成功了,测试图如下图2-18所示:
图2-18配置TFTP
2.6配置NFS服务
NFS(NetworkFileSystem)指网络文件系统,是Linux系统中经常使用的一种服务,NFS是一个RPCservice,很像windows中的文件共享服务。
它的设计是为了在不同的系统间使用,所以它的通讯协议设计与主机及作业系统无关。
当使用者想用远端档案时只要用"mount"就可把remote档案系统挂接在自己的档案系统之下,使得远端的档案在使用上和local的档案没两样。
在NFS服务中,宿主机(Servers)是被挂载(mount)端,为了远端客户机(Clients)(如:
S3C6410目标板)可以访问宿主PC机的文件,我们需要配置宿主机两方面内容:
①打开NFS服务,②允许“指定用户”访问宿主PC机。
(1)在终端中输入命令安装NFS服务:
apt-getinstallnfs-kernel-server
(2)输入以下命令以配置NFS服务:
sudogedit/etc/exports
打开文件后,在文件中添加如下内容:
/temp/tftpboot/nfsroot*(insecure,rw,sync,no_root_squash)
添加完毕,保存文件并退出,继续输入如下命令,为NFS服务端所在目录授予权限:
chmod777/temp/tftpboot/nfsroot
(3)重新启动NFS服务
sudo/etc/init.d/nfs-kernel-serverrestart
sudo/etc/init.d/portmaprestart
(3)测试NFS服务:
showmount–e
mount172.16.41.217:
/temp/tftpboot/nfsroot/mnt
ls-l/mnt
第3章Uboot、Linux内核的编译及根文件系统的制作
3.1安装交叉编译器
绝大多数的Linux软件开发都是以native方式进行的,即本机(HOST)开发、调试,本机运行的方式。
这种方式通常不适合于嵌入式系统的软件开发,因为对于嵌入式系统的开发,没有足够的资源在本机(即开发板上系统)运行开发工具和调试工具。
通常的嵌入式系统的软件开发采用一种叫做交叉编译调试的方式。
交叉编译调试环境建立在宿主机(即一台PC机)上,对应的开发板叫做目标板。
图3-1交叉编译环境
开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码(这种可执行代码并不能在宿主机上执行,而只能在目标板上执行),然后把可执行文件下载到目标机上运行。
调试时的方法很多,可以使用串口、以太网口等,具体使用哪种调试方法可以根据目标机处理器所提供的支持作出选择。
宿主机和目标板的处理器一般都不相同,宿主机为Intel或AMD处理器,而目标板如S3c6410为SAMSUNGS3C64xx处理器,GNU编译器提供这样的功能,在编译编译器时可以选择开发所需的宿主机和目标机从而建立开发环境。
宿主机上的操作系统一般要求安装Linux,但Linux有多个发行版本,在此,我们使用Ubuntu作为本系统的宿主机PC操作系统,然后在宿主机上要建立交叉编译调试的开发环境。
嵌入式开发通常要求宿主机配置有网络,支持NFS(为交叉开发时mount所用),支持TFTP(为下载文件时所用)等服务。
具体步骤如下:
(1)在ubuntu终端下,将文件复制到工作目录:
cp/mnt/hgfs/Shared/arm-linux-gcc-4.3.2.tgz/temp
(2)将arm-linux-gcc-4.3.2.tgz解压到/usr/local/arm目录下:
tarxvjfarm-linux-gcc-4.3.2.tgz–C/usr/local/arm
解压完成后,在/usr/local/arm目录下会有刚刚解压的4.3.2编译器,以后可以方便的使用此编译器来进行一些编译工作了。
图3-2交叉编译环境安装
3.2网络设置
桥接:
虚拟机和宿主机具有不同的ip地址,适合嵌入系统在线开发,上网不方便。
NAT:
虚拟机和宿主机是同样的IP,适合上网安装软件。
设置方法:
(1)双击虚拟机的网卡切换桥接和NAT.
图3-3更改网络连接为桥接方式
(2)更改为桥接后:
sudogedit/etc/network/interfaces,打开文件后,添加以下信息并保存退出:
autolo
ifaceloinetloopback
autoeth0
ifaceeth0inetstatic
address172.16.41.217
netmask255.255.255.0
network172.16.41.0
broadcast172.16.41.255
gateway172.16.41.1
(3)使用如下命令来启动networking服务:
/etc/init.d/networkingrestart
3.3安装busybox工具
在Linux内核编译的工作中,busybox是一个十分实用的工具,安装busybox能为内核编译工作带来许多方便,安装busybox很简单:
(1)复制busybox-1.15.2.tar.bz2文件到工作目录并解压,解压完后进入busybox目录:
cpbusybox-1.15.2.tar.bz2/temp
tarxfbusybox-1.15.2.tar.bz2
cdbusybox-1.15.2
(2)修改Makefile文件:
sudogeditMakefile
(3)依次执行以下命令:
make
makeinstall
这样就完成了busybox工具的安装,不需要做其它修改工作
图3-4busybox安装
3.4编译Bootloader
bootloader引导加载程序是系统加电后运行的第一段软件代码。
PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的OSBootLoader(比如,LILO和GRUB等)一起组成。
BIOS在完成硬件检测和资源分配后,将硬盘MBR中的BootLoader读到系统的RAM中,然后将控制权交给OSBootLoader。
BootLoader的主要运行任务就是将内核映象从硬盘上读到RAM中,然后跳转到内核的入口点去运行,也即开始启动操作系统。
步骤如下:
(1)将s3c6410_uboot.bz2解压到任意目录,使用cd命令进入该目录:
tarxfs3c6410_uboot.bz2
cds3c6410_uboot
(2)修改Makefile文件:
sudogeditMakefile
在Makefile中将CROSS_COMPILE所指向的路径修改为编译器所在目录,如下图所示:
(3)编译uboot,在终端下分别执行如下命令:
makedistclean
makembt6410_config
make
编译完成后,会在uboot根目录下生成uboot.bin文件,可以利用这个uboot.bin文件进行烧写了。
图3-5uboot编译
3.5编译Linux内核
(1)将linux-2.6.36.bz2拷贝到工作目录,然后解压
tarxflinux-2.6.36.bz2
(2)进入linux-2.6.36内核目录,修改Makefile
cdlinux-2.6.36
sudogeditMakefile
(3)修改mach-smdk6410.c
geditlinux-2.6.36/arch/arm/mach-s3c64xx/mach-smdk6410.c
在mach-smdk6410.c文件中添加如下内容:
staticstructresourcesmdk6410_smsc911x_resources[]={
[0]={
.start=S3C64XX_PA_XM0CSN5,
.end=S3C64XX_PA_XM0CSN5+SZ_64K-1,
//.start=S3C64XX_PA_SMC9115,
//.end=S3C64XX_SZ_SMC9115,
.flags=IORESOURCE_MEM,
},
[1]={
.start=S3C_EINT(10),
.end=S3C_EINT(10),
.flags=IORESOURCE_IRQ|IRQ_TYPE_LEVEL_LOW,
},
};
(4)修改linux-2.6.36内核根目录下的.config文件,执行以下命令:
cplinux-2.6.36/arch/arm/configs/s3c6400_defconfig/temp/linux-2.6.36/.config
这样可以将s3c6400_defconfig中的信息复制到.config中,执行此命令的目的是为了在核配置中添加或修改一些信息,如串口号,网卡驱动等等。
(5)配置网卡驱动,在linux-2.6.36根目录下执行命令:
makemenuconfig
在新弹出的窗口中,按照下列信息进行相应配置。
(注意:
*表示该功能编译到内核,M表示作为内核模块编译,空格表示该功能不编译到内核中,即新的内核不支持该功能)
SystemType
(2)S3CUARTtouseforlow-levelprocess
√NetWorkingSupport
NetWorkingoptions:
√TCP/IPnetworking
√IP:
kernellevelautoconfiguration
√IP:
DHCPsupport
√IP:
BOOTPsupport
√IP:
RARPsupport
DeviceDrivers:
√NetWorkingDeviceSupport
√Ethernet(10or100Mbit)
*SMSCLAN911x/LAN921x...
FileSystems:
NetWorkfilesystem
√NFSClientsupport
√RootfilesystemonNFS
如下列图3-6至3-17所
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LED 驱动程序 设计 嵌入式 综合 课程设计 说明书