基于linux的基本绘图程序的编写Word下载.docx
- 文档编号:22519436
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:22
- 大小:542.80KB
基于linux的基本绘图程序的编写Word下载.docx
《基于linux的基本绘图程序的编写Word下载.docx》由会员分享,可在线阅读,更多相关《基于linux的基本绘图程序的编写Word下载.docx(22页珍藏版)》请在冰豆网上搜索。
1.linux驱动程序的编写流程
(1)设备驱动程序的file_operations结构
(2)设备驱动程序编写的具体内容
(3)将设备驱动加到linux内核中
(4)将设备驱动编译成驱动模块
2.linux应用程序的编写、添加、调试
helloworld应用程序是最简单的应用程序,以它为例建立helloworld应用程序步骤如下:
创建一个文件夹,名称建议用hello
(1)编写Helloworld程序
编写helloworld.c文件,代码在/home/nfs/hello文件内保存在hello目录下。
(2)编写Makefile文件
编写Makefile文件,代码/home/nfs/hello文件内一定要注意格式,格式不正确,编译会出错。
Makefile文件同样放在hello目录下。
(3)编译
在虚拟机LINUX终端下,把目录切换到/home/nfs/hello目录下,使用命令
make
然后,如果编译通过,则在hello目录下生成可执行文件hello
(4)运行
3.LCD的驱动程序
LCD的设备驱动程序属于字符设备的驱动,因此,按照字符设备的规则编写。
驱动程序名为Lcd_driver.c,首先是
(1)LCD设备文件的file_operations结构
/*
************************************************************************
-函数名称:
structfile_operationsLCD_fops
-函数说明:
文件结构
-输入参数:
无
-输出参数:
*/
structfile_operationsLCD_fops={
open:
LCD_Open,//打开设备文件
ioctl:
LCD_Ioctl,//设备文件其他操作
release:
LCD_Close,//关闭设备文件
};
//其他选项省略
staticintLCDIoctl(structinode*inode,structfile*file,unsignedintcmd,unsignedlongarg)
LCD控制输出
0
staticintLCDIoctl(structinode*inode,structfile*file,unsignedintcmd,unsignedlongarg)
{
charcolor;
structpara
{
unsignedlonga;
unsignedlongb;
unsignedlongc;
unsignedlongd;
}*p_arg;
switch(cmd)//得到的命令
case0:
printk("
setcolor\n"
);
Set_Color(arg);
printk("
LCD_COLOR=%x\n"
LCD_COLOR);
return1;
case1:
printk("
drawh_line\n"
p_arg=(structpara*)arg;
LCD_DrawHLine(p_arg->
a,p_arg->
b,p_arg->
c);
//drawh_line
LCD_DrawHLine(p_arg->
b+15,p_arg->
LCD_DrawHLine(p_arg->
b+30,p_arg->
case2:
drawv_line\n"
LCD_DrawVLine(p_arg->
//drawv_line
LCD_DrawVLine(p_arg->
a+15,p_arg->
a+30,p_arg->
case3:
drwacircle\n"
LCD_DrawCircle(p_arg->
//drawcircle
return1;
case4:
drawrect\n"
p_arg=(structpara*)arg;
LCD_FillRect(p_arg->
c,p_arg->
d);
//drawrect
return1;
case5:
drawfillcircle\n"
p_arg=(structpara*)arg;
LCD_FillCircle(p_arg->
a,p_arg->
b,p_arg->
//drawfillcircle
case6:
LCDisclear\n"
LCD_Clear(0,0,319,239);
//clearscreen
case7:
//drawrect
default:
return-EINVAL;
}
}
voidCloseLCD(structinode*inode,structfile*file)
LCD关闭
structinode*inode,structfile*file
staticvoidCloseLCD(structinode*inode,structfile*file)
LCDisclosed\n"
return;
staticintOpenLCD(structinode*inode,structfile*file)
LCD打开
staticintOpenLCD(structinode*inode,structfile*file)
LCDisopen\n"
return0;
/*LCD设备的硬件初始化函数*/
/*注册LCD设备,调用初始化函数*/
**********************************************************************
intLCDInit(void)
注册LCD设备
0,或-EBUSY
int__initLCD_Init(void)
intresult;
Setup_LCDInit();
RegisteringS3C2410LCDDevice\t--->
\t"
result=register_chrdev(LCD_MAJOR,"
S3C2410LCD"
&
LCD_fops);
//注册设备
if(result<
0)
printk(KERN_INFO"
[FALLED:
CannotregisterS3C2410LCD_driver!
]\n"
return-EBUSY;
else
[OK]\n"
InitializingS3C2410LCDDevice\t--->
printk("
S3C2410LCDDriverInstalled.\n"
LCD_Exit
卸载lcd设备
void__exitLCDdriver_Exit(void)
Lcd_CstnOnOff(0);
unregister_chrdev(LCD_MAJOR,"
YouhaveuninstallTheLCDDriversuccesfully,\nifyouwanttoinstallagain,pleaseusetheinsmodcommand\n"
module_init(LCD_Init);
module_exit(LCDdriver_Exit);
(2)将设备驱动编译成驱动模块
使用同一个驱动程序的源代码,要定义如下一些函数int__initdevice_init(void);
void__exitdevice_exit(void);
module_init(device_init);
module_exit(device_exit);
在光盘资料/实验程序/linux/lcddriver/driver目录下,存放驱动程序的源码和Makefile文件以及驱动的目标代码,Makefile文件中已编写好交叉编译选项,在linux环境下,在终端里,切换到该目录下,使用make命令,就能把Lcd_driver.c编译成Lcd_driver.o动态驱动模块。
(3)将设备驱动编译进内核
在虚拟机LINUX终端下,把目录切换到相应目录下,使用命令make命令,
然后,如果编译通过,则在相应目录下生成相应的可执行文件.
4.LCD的应用程序
应用程序名为app_lcd.c,详细代码说明
#include<
stdio.h>
stdlib.h>
sys/ioctl.h>
unistd.h>
intmain()
intfd,i;
intrt;
intcmd,arg0;
charenter_c;
unsignedlongarg_G,arg_B,arg_R,arg_Y,arg_W,arg_K,arg_CY;
structarg
unsignedlongb;
unsignedlongc;
unsignedlongd;
};
structargarg1={0,120,300,0};
structargarg2={140,0,239,0};
structargarg3={100,100,50,0};
structargarg4={0,0,319,239};
structargarg5={240,100,60,0};
structargarg6={0,0,319,239};
structargarg7={40,170,100,200};
arg_G=0x00FF00;
arg_R=0xFF0000;
arg_B=0x0000FF;
arg_Y=0xAAAA00;
arg_W=0xFFFFFF;
arg_K=0x000000;
arg_CY=0x808080;
if((fd=open("
/dev/S3C2410LCD"
0))<
0)
printf("
cannotopen/dev/S3C2410LCD\n"
exit(0);
do{
cmd=getchar();
switch(cmd)
{
case49:
enter_c=getchar();
rt=ioctl(fd,0,arg_R);
//setRED
cmd=0;
break;
case50:
rt=ioctl(fd,0,arg_G);
//setGREEN
case51:
rt=ioctl(fd,0,arg_B);
//setBLUE
cmd=0;
break;
case52:
rt=ioctl(fd,0,arg_Y);
//setYELLOW
case53:
rt=ioctl(fd,0,arg_W);
//setWHITE
cmd=0;
case54:
rt=ioctl(fd,0,arg_K);
//setBLACK
case55:
rt=ioctl(fd,0,arg_CY);
//setCYNE
case'
a'
:
rt=ioctl(fd,1,(unsignedlong)&
arg1);
//drawh_line
case'
b'
rt=ioctl(fd,2,(unsignedlong)&
arg2);
c'
rt=ioctl(fd,3,(unsignedlong)&
arg3);
d'
rt=ioctl(fd,4,(unsignedlong)&
arg4);
e'
rt=ioctl(fd,5,(unsignedlong)&
arg5);
f'
rt=ioctl(fd,6,(unsignedlong)&
arg6);
g'
rt=ioctl(fd,7,(unsignedlong)&
arg7);
default:
}
}while(cmd!
='
q'
//"
q"
isquitcommand
close(fd);
该程序从linux终端中输入字符,在LCD屏上显示不同的颜色、显示画圆、画线、画点、填充圆、填充矩形等基本的LCD操作。
5.注意事项
LCD的应用程序,应该在加入LCD驱动之后使用,否则,无法正常运行!
当动态加载好驱动或把驱动编进内核中去后,也可以使用两种方法运行应用程序。
本方法使用动态调试法。
六.操作步骤
用交叉网线和直接串口线将PC机与ARM板连接好,启动虚拟机的LINUX
(1)打开WINDOWS下的超级终端。
具体参数设置如下:
(2))打开实验箱上的电源,在WINDOWS下的超级终端显示通过串口打印出来的数据,按reset键,会出现如下图界面,表示实验系统的文件系统已经启动起来了!
(3)配置实验箱ARM板的IP地址。
WINDOWS下的超级终端输入:
ifconfigeth0192.168.0.21
(4)建立实验箱与虚拟机LINUX共享。
mount192.168.0.121:
/home/nfs/mnt/yaffs,然后回车
(5)(6)进入实验箱的共享目录。
cd/mnt/yaffs然后回车;
接着输入:
cdlcddriver/driver,然后回车.
之后会看到屏幕变绿.
(7)使用挂载驱动模块的命令insmodLcd_driver.o当终端上输出
RegisteringS3C2410LCDDevice--->
[OK]
InitializingS3C2410LCDDevice--->
[OK]
S3C2410LCDDriverInstalled.
则说明驱动模块正常加载。
(8)进入相应目录:
cd../app_lcd
(9)创建设备文件,输入命令:
mknod/dev/S3C2410LCDc600
(10)键入执行命令./app_lcdd,则主机终端有LCDisopen输出。
之后,就可以输入控制命令,在LCD屏开始显示。
(11)在WINDOWS下的超级终下先输入1,2,3,4,5,6,7,中的一个,然后回车。
之后,再输入画实体的字符,回车,观察实验效果,然后输入改变颜色的字符,回车,再输入相同的画实体字符,观察颜色是否改变。
输入字符“q”,则退出应用程序。
说明:
选择要进行绘画的颜色,1对应着红,2对应着绿,3对应着蓝,4对应着黄,5对应着白,6对应着黑,7对应着浅蓝。
输入”a”,”b”,”c”,”d”,”e”,”f”,”g”,则显示要画的实体。
a对应着画水平线,ba对应着画竖直线,c对应着画圆,d对应着填充全屏,e对应着填充圆,f对应着清屏,g对应着填充矩形。
“q”则退出应用程序。
(12)将应用程序加入文件系统
编译成功后,把可执行文件,放到存放文件系统root_tech的usr/sbin目录或者usr/bin目录下.之后,使用mkcramfs制作工具,利用命令MKCRAMFSroot_techrootfs.cramfs来生成新的文件系统。
之后把它通过网口烧下载到flash中,当系统启动后,就可在usr/sbin目录或者usr/bin目录下,执行可执行程序。
(13)在终端下,使用卸载驱动模块的命令rmmodLcd_driver.当终端上输出YouhaveuninstallTheLCDDriversuccesfully,ifyouwantt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 linux 基本 绘图 程序 编写
![提示](https://static.bdocx.com/images/bang_tan.gif)