SC设备驱动及其界面设计.docx
- 文档编号:8302756
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:13
- 大小:22.29KB
SC设备驱动及其界面设计.docx
《SC设备驱动及其界面设计.docx》由会员分享,可在线阅读,更多相关《SC设备驱动及其界面设计.docx(13页珍藏版)》请在冰豆网上搜索。
SC设备驱动及其界面设计
封面
作者:
PanHongliang
仅供个人学习
福建工程学院
FujianUniversityOfTechnology
《嵌入式系统》课程设计(论文)
题目:
基于S3C2410设备驱动及其界面设计
班级:
电子0601
姓名:
江虎
学号:
0206104124
指导老师:
张平均李光炀吴忠强
福建工程学院电子信息与电气工程系
2010.01.15
《嵌入式系统》课程设计
一、设计课题:
基于S3C2410的设备驱动及其界面设计
二、设计目的:
1、进一步巩固嵌入式系统的基本知识;
2、掌握嵌入式应用系统的基本结构;
3、掌握嵌入式系统开发环境建立和使用;
4、掌握嵌入式系统基本驱动、应用程序的设计调试和编译移植方法;
5、学会查阅有关专业资料及设计手册;
6、MiniGUI界面编程。
三、设计任务及要求:
1、掌握嵌入式系统开发环境建立和使用;
2、掌握嵌入式系统基本驱动、应用程序的设计调试和编译移植方法;
3、MiniGUI在PC上的安装、移植
4、Linux基本输入输出驱动程序设计编译与移植
5、基于MiniGUI的基本输入输出应用编程编译与移植
6、编写设计说明书(方案的确定、设计环节的考虑及必要说明等)及设备的使用说明;
7、绘制有关图纸.
四、设计内容:
1、MiniGUI在X86上安装和运行
1.1、准备工作
①建立工作目录:
mkdir/minigui-free
cd/minigui-free
mkdir/src
②复制源文件到工作目录:
cp/media/disk/src/*./
cp/mnt/hgfs/linux/src/*/minigui-free
③解压文件:
tarzxvflibminigui-1.6.10.tar.gz
tarzxvfminigui-res-1.6.10.tar.gz
tarzxvfmg-samples-1.6.10.tar.gz
1.2、MiniGUI库安装
1进入目录:
cdlibminigui-1.6.10/
2配置:
./configure
在x86上运行只需默认配置即可,配置完成后即可生成Makefile
3编译:
make
成功后即可生成必要的库文件等。
4安装:
makeinstall
在x86上安装库文件。
5.把libminigui加入库搜索路径:
进入/etc/ld.so.conf.d建一个minigui.conf,写上/usr/local/lib
可以使用命令完成:
[root@fedora7]#echo/usr/local/lib>/etc/ld.so.conf.d/minigui.conf
(如果你使用的不是fedora7可能没有/etc/ld.so.conf.d这个目录,只有一个/etc/ld.so.conf,不过作用是一样的,在这个文件末尾加上/usr/local/lib)
(4)最后要把系统共享库缓存刷新,将libminigui加载上,可以使用命令
[root@fedora7]#ldconfig
这个命令执行时要花十多秒,耐心等待。
当然不使用刷新命令重启系统也可以。
1.3、MiniGUI资源安装
①进入目录:
cdminigui-res-1.6.10/
②安装:
makeinstall
必要资源文件的复制安装等操作。
1.4、MiniGUI例子编译
1进入目录:
cdmg-samples-1.6.10/
2./configure
3编译:
make
编译src目录下的例子程序,用于验证MiniGUI是否安装成功。
即可在src目录下生成可执行文件
1.5、安装qvfb
使用qt的qvfb
cdqvfb1.1
./configure
make
makeinstall
apt-getinstallqt3-dev-tools-embedded
1.6、配置MiniGUI.cfg
vi/usr/local/etc/MiniGUI.cfg修改如下部分为
[system]
#GALengineanddefaultoptions
gal_engine=qvfb
defaultmode=800x480-16bpp
#IALengine
ial_engine=qvfb
mdev=/dev/input/mice
mtype=IMPS2
[fbcon]
defaultmode=800x480-16bpp
[qvfb]
defaultmode=800x480-16bpp
display=0
1.6、运行MiniGUI例子程序
1打开qvfb:
qvfb-width800-height480&
2运行helloword:
src/helloworld
出现此窗口说明运行成功。
1.7、问题
①错误1:
InitGUI:
Cannotinitializecolorsofwindowelement!
InitGUIfailurewhenusing/usr/local/etc/MiniGUI.cfgascfgfile.
解决方法:
正确配置MiniGUI.cfg文件
②错误2:
Permissiondenied
解决方法:
权限不够,使用root用户登录。
3错误3:
编译出错未找到jpeg,png等
解决方法:
安装zlib,png,jpeg库。
4错误4:
5错误5:
出现符号未找到等编译错误
解决方法:
makeclean后在make
2、控制面板界面编程
1.建立新的zc.c文件,在makefile.am文档里添加zc.source=zc.c
2.重新命名helloworld.c文件,将程序写进去,并在/minigui-free/mg-samples-1.6.10目录下执行./configure。
再执行make命令。
①选用对话框方式编程,结构DLGTEMPLATE用来定义对话框本身,结构CTRLDATA用来定义控件。
staticDLGTEMPLATEDlgYourTaste=
{
WS_BORDER|WS_CAPTION,
WS_EX_NONE,
0,0,720,480,
"Contrl",
0,0,
8,NULL,
0
}。
分别对对话框属性进行定义。
staticCTRLDATACtrlYourTaste[]=
{
{
"button",
WS_VISIBLE|BS_DEFPUSHBUTTON|WS_TABSTOP|WS_GROUP,
B1_X,B_Y,B_W,B_H,
IDC_LED1,
"LED1",
0
},
…………………………等等
}。
在此结构中定义控件,其中包括4个按钮用来控制LED,3个静态文本框用来显示提示消息,不允许用户更改,1个编辑框用来输入频率。
部分代码省略。
2主函数操作:
打开设备获得文件描述符,函数连接等。
led_fd=open("/dev/led",O_RDONLY)。
if(led_fd<0)
{
perror("openlederror!
")。
exit
(1)。
}
DlgYourTaste.controls=CtrlYourTaste。
DialogBoxIndirectParam(&DlgYourTaste,HWND_DESKTOP,DialogBoxProc,0L)。
3回调函数:
包括对话框回调函数、文本框回调函数。
staticvoidmy_notif_proc(HWNDhwnd,intid,intnc,DWORDadd_data)
{
if(id==IDC_EDIT&&nc==EN_CHANGE)
{
}
}
staticintDialogBoxProc(HWNDhDlg,intmessage,WPARAMwParam,LPARAMlParam)
{
switch(message)
{
caseMSG_INITDIALOG:
{
}
return1。
caseMSG_PAINT:
{
}
return1。
caseMSG_TIMER:
{
}
caseMSG_COMMAND:
switch(wParam)
{
}
break。
caseMSG_CLOSE:
break。
}
returnDefaultDialogProc(hDlg,message,wParam,lParam)。
}
使用的几个消息:
MSG_INITDIALOG:
建立对话框和控件之后,发送到回调函数的
MSG_PAINT:
窗口重绘时发送到窗口过程。
MSG_TIMER:
timer专用。
MSG_COMMAND:
传递wParam参数。
MSG_CLOSE:
关闭时发送。
文本框回调函数用于频率的获取。
④自定义函数:
实现绘图功能。
staticvoiddraw_circle_s(HWNDhDlg,intx,intwhich)
{
HDChdc。
intcolor。
color=((which==0)?
PIXEL_blue:
PIXEL_red)。
hdc=BeginPaint(hDlg)。
SetBrushColor(hdc,color)。
FillCircle(hdc,x,100,25)。
EndPaint(hDlg,hdc)。
}根据传递的参数绘制不同颜色的圆。
⑤必须深刻理解消息回调机制,每一个消息产生各自的动作。
3、驱动程序设计
3.1LED驱动
通过不同的参数实现不同LED的亮灭情况即可。
staticinteduk4_led_ioctl(structinode*inode,structfile*file,unsignedintcmd,unsignedlongarg)
{
unsignedcharstatus=0xff。
switch(cmd){
case0:
case1:
if(arg>4){
return-EINVAL。
}
status=inb(LED_BASE)。
if(0==cmd){
status&=~(0x1< }elseif(1==cmd){ status|=(0x1< } outb(status,LED_BASE)。 return0。 default: return-EINVAL。 } } 3.2键盘驱动 首先必须实现键值的读取,使用基本的行列扫描法。 为提高驱动效率使用到了系统定时器,FIFO,队列,阻塞读取等。 为了和IAL结合,必须在驱动中实现状态信息的传递,使用1bit表示如1表示弹起,0表示按下。 实现方法: 当上一次键值和当前键值相等时表示一直按着回一直放开。 当上一次键值比当前键值小时表示按下,直接返回键值,当上一次键值比当前键值大时表示松开按键,键值最高为置1后返回。 具体见代码。 3.3驱动编译 必须先编译开发板所使用的linux内核,生成模块后才能,编译驱动,具体步骤如下: makezImage makemodules 驱动最好写个Makefile文件,来编译。 然后make 4、IAL移植 主要完成INPUT结构体的填充。 input->update_mouse=NULL。 input->get_mouse_xy=NULL。 input->set_mouse_xy=NULL。 input->get_mouse_button=NULL。 input->set_mouse_range=NULL。 input->update_keyboard=keyboard_update。 input->get_keyboard_state=keyboard_get_state。 input->suspend_keyboard=NULL。 input->resume_keyboard=NULL。 input->set_leds=NULL。 input->wait_event=wait_event。 只需实现keyboard的相关函数即可,mouse设备不需实现。 keyboard_update函数实现state[NR_KEYS]数组的更新,使之映射为MiniGUI所提供的键盘定义。 staticintkeyboard_update(void) { char*statinfo。 intstatus。 intkey。 statinfo=(btn_state&KEY_RELEASED)? "UP": "DOWN"。 status=(btn_state&KEY_RELEASED)? 0: 1。 key=btn_state&KEY_NUM。 switch(key) { case0: state[SCANCODE_0]=status。 break。 case1: state[SCANCODE_1]=status。 break。 case2: state[SCANCODE_2]=status。 break。 case3: state[SCANCODE_3]=status。 break。 case4: state[SCANCODE_4]=status。 break。 } returnNR_KEYS。 }key即为去掉按键状态信息的键值。 SCANCODE_x为系统提供的键值,status为状态信息。 通过switch实现数组的更新。 staticconstchar*keyboard_get_state(void) { return(char*)state。 }直接返回数组地址。 wait_event函数是输入引擎的核心,使用select系统调用检查是否有可读取的数据,当可用是读取(e>0)。 Init2410Input是IAL的入口函数实现设备文件的打开和input结构的初始化,还有一些必要的初始化。 Term2410Input函数实现设备文件关闭和资源释放等。 5、MiniGUI在ARM开发板上运行 5.1、MiniGUI库安装 1进入目录: cdlibminigui-1.6.10/ 2配置: 首先makeclean,去除x86上的目标文件 修改configure.in启用SMDKIAL的编译选项build_smdk2410_ial_engine="yes" ./configure--host=arm-linux\ --enable-pngsupport=no\ --enable-gifsupport=no\ --prefix=/minigui-free/nfsroot 3编译: make 成功后即可生成必要的库文件等。 4安装: makeinstall 在/minigui-free/nfsroot上安装库文件。 5.2、MiniGUI资源安装 1进入目录: cdminigui-res-1.6.10/ 2配置: 修改config.linux TOPDIR=/minigui-free/nfsroot 3安装: makeinstall 在/minigui-free/nfsroot上安装资源文件。 5.3、MiniGUI界面程序编译 1进入目录: cdmg-samples-1.6.10/复制界面程序到src目录下可替换其中的一个例子程序或在src目录下修改Makefile.am添加源文件。 2配置: 首先makeclean 然后 ./configure--build=i686-pc-linux-gnu--host=arm-linux--prefix=/minigui-free/nfsroot/LDFLAGS=-L/minigui-free/nfsroot/libCPPFLAGS=-I/minigui-free/nfsroot/includeCFLAGS=-I/minigui-free/nfsroot/include 3编译: make src目录下生成可执行文件,使用fileedit出现ARM字样,即说明可运行于arm处理器上 5.4、界面程序运行 拷贝交叉编译后的库文件,资源文件,配置文件,和可执行程序到arm开发板上, 并修改配置文件。 然后运行程序。 根据出现的文件反复修改和调试。 五、设计总结: 虽然只有短短的2周时间,但是经过我们的努力,还是顺利完成了老师布置的实习任务。 过程中进行中还是遇到了许多的问题,通过老师,同学,网络的帮助,最终解决了一个个的问题,因此收获也是蛮多的。 回想起从对MiniGUI的懵懂,到学会设计简单的应用程序是何等的开心。 俗话说: 技不压身。 多学一些知识总是对自己的发展有帮助的。 对于这个嵌入式的开发流程,软件开发方法,我们都有了切实的感受,不再是理论课上那干瘪瘪的论述了。 在软件编译过程中最为棘手的问题,我觉得就是链接库的问题,每一个都有相当复杂的依赖关系,由于我们对嵌入式开发的经验不足,有时候很难能知道库依赖于那个软件中,比较常用的办法是下载安装与名称相关的软件,如lib*库等等。 即可解决大部分在软件编译中,出现的错误。 对于配置,也是一个非常容易出错的地方,不同的软件配置是不一样的,常提高查看帮助文件来解决,虽然是英文,但一般大家都能看的懂,只有肯往下看一般都会有收获的。 网络上提供的信息,由于与我们开发环境的不同,软件版本的不同等总总原因,应该尽力先理解别人的,在调试自己。 或许柳岸花明了。 在嵌入式开发中,脚本文件是形形色色的,错综复杂的,但万变不离其宗,总有可遵循规律的地方,也是有其一定的语法的,对于脚步文件的理解和编写对于开发将是有非常大的帮助的,我们不能小看它的作用。 除了脚步之外,核心就是源文件了,有C的有C++的,我们着重理解C然后再去了解别的开发语言。 这将是非常的开发习惯。 六、设计参考书 1、《嵌入式系统接口设计与Linux驱动程序开发》 2、《ARM9嵌入式LINUX系统构建与应用》 3、华恒ARM9嵌入式教案实验指导书 4、MiniGUI编程手册 5、Linux应用程序编程 版权申明 本文部分内容,包括文字、图片、以及设计等在网上搜集整理。 版权为潘宏亮个人所有 Thisarticleincludessomeparts,includingtext,pictures,anddesign.CopyrightisPanHongliang'spersonalownership. 用户可将本文的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。 除此以外,将本文任何内容或服务用于其他用途时,须征得本人及相关权利人的书面许可,并支付报酬。 Usersmayusethecontentsorservicesofthisarticleforpersonalstudy,researchorappreciation,andothernon-commercialornon-profitpurposes,butatthesametime,theyshallabidebytheprovisionsofcopyrightlawandotherrelevantlaws,andshallnotinfringeuponthelegitimaterightsofthiswebsiteanditsrelevantobligees.Inaddition,whenanycontentorserviceofthisarticleisusedforotherpurposes,writtenpermissionandremunerationshallbeobtainedfromthepersonconcernedandtherelevantobligee. 转载或引用本文内容必须是以新闻性或资料性公共免费信息为使用目的的合理、善意引用,不得对本文内容原意进行曲解、修改,并自负版权等法律责任。 Reproductionorquotationofthecontentofthisarticlemustbereasonableandgood-faithcitationfortheuseofnewsorinformativepublicfreeinformation.Itshallnotmisinterpretormodifytheoriginalintentionofthecontentofthisarticle,andshallbearlegalliabilitysuchascopyright.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SC 设备 驱动 及其 界面设计