linux二次开发指南.docx
- 文档编号:10075473
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:44
- 大小:1.42MB
linux二次开发指南.docx
《linux二次开发指南.docx》由会员分享,可在线阅读,更多相关《linux二次开发指南.docx(44页珍藏版)》请在冰豆网上搜索。
linux二次开发指南
A8二次开发平台
应用软件开发指南
版本2.1
目录
1.简介4
2.二次开发平台架构4
2.1驱动层5
2.2LINUX内核5
2.3MINIGUI库、中间件6
2.4应用程序6
3.建立开发环境6
3.1安装VMWare6
3.2安装Linux7
3.3安装VMwaretools13
3.4共享windows文件夹14
3.5交叉编译器安装15
3.6MINIGUI库安装16
4.应用DEMO介绍16
4.1DEMO目录介绍16
4.1.1PC端目录结构16
4.1.2A8中目录结构17
4.2增加文件17
4.3增加文件夹17
4.4编译DEMO18
4.5软件下载工具驱动安装20
4.6应用软件及相关资料下载24
4.7常用命令26
5.中间件接口使用说明28
5.1卡类操作28
5.1.1M1卡操作28
5.1.1.1设置卡片类型28
5.1.1.2寻卡28
5.1.1.3卡类型选择28
5.1.1.4读数据28
5.1.1.5写数据29
5.1.1.6权限控制29
5.1.1.7减值操作29
5.1.1.8加值操作30
5.1.1.9块拷贝30
5.1.2PSAM/IC卡操作30
5.1.2.1卡片上电操作30
5.1.2.2卡片中文件选择31
5.1.2.3执行APDU命令31
5.1.2.4卡进行下电操作31
5.1.2.5IC卡插入检测31
5.1.3磁条卡操作32
5.1.3.1启动磁卡读32
5.1.3.2刷卡检测32
5.1.3.3读二磁道数据32
5.1.3.4读三磁道数据32
5.2打印机操作33
5.2.1缺纸检测33
5.2.2字体大小设置33
5.2.3字间距设置33
5.2.4行间距设置33
5.2.5打印浓度设置33
5.2.6开始打印一行字符34
5.2.7停止打印34
5.2.8打印黑白图片34
5.4时钟操作35
5.4.1驱动应用层接口函数索引表:
35
5.4.2应用层接口函数介绍:
35
5.5网络连接操作36
5.6蜂鸣器控制37
5.7LCD控制37
1.简介
A8是本公司在多年专业技术积累的基础上开发出来的一个二次开发平台。
为您提供灵活、可靠、易用的开发平台。
通过二次开发平台可在短时间内实现各种各样的应用开发。
A8二次开发平台采用的是ARM9+LINUX+中间件+MINIGUI的组合方式实现的。
2.二次开发平台架构
A8二次开发平台以开源操作系统linux为基础、根据不同的硬件配置选择相应的驱动、采用MINIGUI为应用软件开发环境。
实现各个层次的软件相互独立、独立开发调试,各层之采用标准接口进行交互。
A8软件架构主要分为四个层次,分别是硬件驱动层、linux内核、MINIGUI库和中间件、应用软件层。
另外还有一个就是系统引导代码bootloader,bootloader是系统上电后到linux内核启动前执行的代码。
具体层次关系如图1所示。
2.1驱动层
向下实现对硬件设备的控制(包括上下电、读写、复位等操作),向上为LINUX提供标准的接口(包括open、close、read、writ、ioctl等)。
在linux中大部分设备都是以设备文件的形式出现,应用程序可以像操作普通文件一样来操作外部设备,但网络设备除外。
2.2LINUX内核
向下提供了标准的接口,便于驱动程序的注册,向上为应用软件、中间件、MINIGUI提供系统调用接口。
2.3MINIGUI库、中间件
Linux本身并不提供图形界面,根据产品的需求引入GUI库,库提供类似windows的消息处理机制,该机制符合目前大部分软件开发人员的开发习惯;开发人员不需要花费大量的时间和精力学习新的开发环境。
中间件把A8中对外设的操作进行封装,经过封装后中间件向应用层提供统一的接口。
中间件作为二次开发平台的一部分以源代码的形式提供给用户。
2.4应用程序
根据不同的应用开发相关的程序,在SDK中提供相关模块的应用示例,开发人员在实际开发过程中可参考示例进行编码调试。
3.建立开发环境
为能在PC上进行软件的编辑、编译、下载等工作,需要在PC端建立一个开发环境。
先在WINDOWS中安装VMware虚拟机,然后在安装linux系统,最后安装相关的编译器等配套软件。
为使项目成员开发环境尽可能的相同,请将相关开发软件安装在D:
\ProgramFiles下,除非软件本身只能安装在指定的路径。
3.1安装VMWare
1)先运行VMware-workstation-5.0.0-13124.exe按提示将VMWare安装在D:
\ProgramFiles下
2)运行hp_VMware5.0.0.13124_zmb.exe对VMWare进汉化。
3.2安装Linux
1)运行VMwareWorkstation
2)选择新建拟机
3)按下一步提示进行,当到“客户机操作系统”时,请选择您要在此虚拟机上安装的操作系统,并选择对应的版本。
4)按下一步进入命名虚拟机,给虚拟机命名请统一命名为“Linux”,位置请统一放在D盘。
5)网络类型选择“使用桥接网络”按下一步。
6)当到“指定磁盘容量”时,请把磁盘容量指定为大于10G;如容量足够,请设为20G.
7)运行VMWareWorkstation->虚拟机->设置->CD-ROM(IDE1:
0)->使用ISO映像->通过浏览..在F:
\开发工具\软件开发工具\RedHat9.0中选中shrike-i386-disc1开始安装linux。
注:
RedHat9.0可存放在其他目录下。
8)根据需要选择相关选项(通常按照默认值)
9)安装完shrike-i386-disc1后,会提示插入第二张光盘,单击虚拟机->设置->CDROM(IDE1:
0)->使用ISO映象->浏缆->选择shrike-i386-disc2->确定。
继续安装。
10)安装完shrike-i386-disc2后,会提示插入第三张光盘,单击虚拟机->设置->CDROM(IDE1:
0)->使用ISO映象->浏缆->选择shrike-i386-disc3->确定。
继续安装,直到安装完成.。
3.3安装VMwaretools
退出到windows->点击虚拟机(M)->选择设置->CD-ROM(IDE1:
0)->使用ISO映像->通过浏览..在D:
\ProgramFiles\VMware\VMwareWorkstation中选中linux.iso进入linux在根目录下运行mount -t iso9660 /dev/cdrom /mnt/cdrom,把虚拟光驱挂载到系统中。
这时如果进入 /mnt 目录下,将会发现多了一个(或两个)文件:
vmware-linux-tools.tar.gz。
这就是WMWARE TOOLS的LINUX软件包,也就是我们刚才使用WINDOWS打开linux.iso文件所看到的。
用命令cp /mnt/vmware-linux-tools.tar.gz /tmp/把VMwaretools复制到tmp目录下。
用命令umount /dev/cdrom 从系统中卸载虚拟光驱。
进入tmp目录,并用命令tar zxf vmware-linux-tools.tar.gz解压,,产生文件夹vmware-tools-distrib,进入该文件夹可看到文件install.pl,用./install.pl运行安装命令。
按提示进行安装(基本上只要敲回车)。
如果以前有安装过,则会提示你是否需要备份以前的配置文件,建议选择“y”。
按照提示进行即可完成。
3.4共享windows文件夹
在安装完VMwaretools后,退出到windows->点击虚拟机(M)->选择设置->选项->共享文件夹->添加->下一步->在名称输入框中输入名称(如share-win);在主机文件夹中通过浏缆选择要共享的文件夹–>下一步->完成。
然后进入linux的/mnt/hgfs中,通过命令ls就可看到共享文件夹(如share-win)。
3.5交叉编译器安装
1)进入/usr/local/目录中
2)把arm-linux-3.4.1.tar.gz拷贝到/usr/local/目录中。
3)用命令tarzxvfarm-linux-3.4.1.tar.gz进行解压,在/usr/local/中生成
一个arm目录,在arm目录中生成3.4.1。
到此交叉编译器安装完成。
3.6MINIGUI库安装
1)将arm-mg-gcc3.4.1.tar.gz拷贝到/usr/目录中
2)用命令tarzxvfarm-mg-gcc3.4.1.tar.gz进行解压,
产生文件夹arm-mg-gcc3.4.1
到此完成开发环境的建立,可进行应用软件的开发了。
4.应用DEMO介绍
应用程序主要包括两方面的内容,一是界面的开发,主要是通过调用MINIGUI提供的各类函数及相关图片来实现;二是在业务处理过程中相关模块的控制,比如M1卡读写、IC卡读写、磁条卡读写、PSAM卡操作、打印机控制等。
在SDK中提供一个应用程序的DEMO,通过这个DEMO开发人员能进行应用软件的开发。
在DEMO中已经确定了相关资源的布局,开发人员根据实际需要在对应的文件夹中增加代码或图片或相关文件夹,并修改Makefile。
4.1DEMO目录介绍
4.1.1PC端目录结构
在DEMO的一级目录中包括5个文件夹,分别是:
1)bin
在这个目录中包括一个Makefile、所有的目标文件、最终可执行文件。
通过Makefile实现对代码的自动编译。
进入这个目录执行make命令就可对工程中的文件进行编译并生成可执行文件。
可执行文件可通过USB口下载到A8中执行。
2)doc
在这个目录中含二次开发相关说明文档。
应用程序开发过程中产生的文档。
3)middleware
在这个目录中包含中间件相关接口头文件、中间件源码、中间件部分库。
应用程序开发中应通过调用接口头文件实现对设备的操作。
4)resource
在该目录中有一个picture文件夹,主要保存应用中需要的图片文件。
5)source
在这个目录中包含所有的应用代码,这些代码按照业务模块进行划分,同一业务模块的代码(源文件和头文件)放在同一个文件夹中。
对文件夹及文件采用“望文生意”的方式进行命名。
4.1.2A8中目录结构
在A8中所有应用软件及相关资源都是放在/mnt/yaffs/目录下。
通常为某个应用建立一个独立的文件夹,如sdk_demo,并在这个目录中存放相关资源。
对于DEMO在sdk_demo中建有两个一级文件夹,分别是:
1)bin
该文件夹存放可执行文件、MiniGUI.cfg。
MiniGUI.cfg要通过DNW
下载到这个目录中,最好现在PC上先压缩成MiniGUI.cfg.tar.gz(压
缩命令是tarzcvfMiniGUI.cfg.tar.gzMiniGUI.cfg)然后再下载,下载
完后通过命令tarzxvfMiniGUI.cfg.tar.gz进行解压。
2)resource
主要放相关资源,在这个文件夹中有一个picture文件夹,picture存放图片文件。
4.2增加文件
以显示主菜单为例子,介绍如何在工程中加入代码源文件,主要分为以下几个步骤:
1)poweron中添加MainMenu.cMainMenu.h
2)在poweron.mk中
在目标文件中增加MainMenu.o
添加对MainMenu.c的编译规则,
MainMenu.o:
$(POWERON_SRC_PATH)MainMenu.c
$(CC)$(CFLAGS)$(DFLAGS)$(POWERON_SRC_PATH)MainMenu.c
通过以上两步骤就在已有的文件夹中添加了一个源文件,
3)在bin目录中执行make命令,如代码无错误就会在bin中生成目标文件和可执行文件。
4.3增加文件夹
通常开发中为一个新的业务建一个文件夹,用于存放相关代码。
以消费业务为例子,介绍如何在工程中加入文件夹,主要分为以下几个步骤:
1)在source目录中创建一个名字为trans的文件夹。
2)在trans文件夹中创建一个文件trans.mk
3)在trans文件夹中创建与消费相关的源文件,如money_input_win.cmoney_input_win.hpurse_win.c
4)在trans.mk中写入本文件夹中各个源文件的编译规则。
5)在bin目录下的Makefile中加入三项内容
a)源文件及头文件所在的路径
TRANS_SRC_PATH=../source/trans/
TRANS_INC_PATH=../source/trans/
b)包含trans目录中文件的makefile
include../source/trans/trans.mk
c)在依赖目标文件中加入目标文件$(TRANS_OBJ)
4.4编译DEMO
1)首先将DEMO软件拷贝到共享目录(在3.4共享windows文件夹所
设置的文件夹)中。
或者在创建一个应用时就放在这个共享目录中。
2)编译
在linux桌面点主菜单->系统工具->终端如下图
->按下鼠标左键出现一个终端窗口如下图
->通过命令进入到DEMO的bin目录中,执行相关命名进行编译。
编译完成后会在bin目录中生产相关目标文件和可执行文件。
相关操作过程如下图,看不清楚请放大。
4.5软件下载工具驱动安装
1)将DNW目录下的secbulk.inf文拷贝到c:
\windows\inf\文件夹中。
Inf是一个隐藏目录,需要去掉文件夹的隐藏属性才能看到该文件夹。
2)给A8上电
3)用USB线连接PC和A8,PC会发现新硬件,然后会弹出“找到新的硬件向导”,
点击下一步
PC搜索相关驱动
搜索完成后弹出以下界面
选中c:
\windows\secbulk.inf然后点击下一步
弹出以下界面
点击确定弹出secbulk.sys文件路径选择框,如下图
通过浏览选择secbulk.sys存放路径,如下图
点击打开然后再点击确定。
如果顺利则会显示下面界面,
到此完成软件下载驱动程序的安装。
4.6应用软件及相关资料下载
1)用串口线连接A8和PC
2)用USB线连接A8和PC
3)在PC端打开一个串口工具(TCL或串口调试大师等)
4)在串口中输入cat/dev/usbd>/mnt/yaffs/xxxx/yyyy
其中xxxx表示下载的内容存放的路径
yyyy表示下载文件名称
5)打开DNW
对DNW进行配置(通常只需做一次)如下图:
Configuration->Options
点击OK完成设置。
6)下载软件
USBPort->Transmit弹出文件选择框如下图
点击打开就开始下载,如下图
下载完成后串口会显示DownloadO.K.
7)运行应用软件
对于需要运行软件,先要改变其属性才能运行。
通过命令改变一个文件的属性。
chmod+xfilename通过这个命令就将文件filename改为可执行文件。
运行文件只需要在文件所在的目录下输入文件名然后回车即可。
注意:
运行前请确保在该目录中已经有MiniGUI.cfg文件。
4.7常用命令
1)cd目录切换命令
a)cd/mnt/yaffs/sdk_demo通过绝对路径进入到sdk_demo目录。
b)cd./sdk_demo通过相对路径进入到当前目录中的sdk_demo(当然这个目录是已经存在的)
c)cd..退到上一级目录
d)cd/退到根目录
2)mkdir创建目录
如mkddirtest在当前目录中创建一个名为test的目录。
3)rm文件或目录删除命令
如rmtest–rf强行删除目录test及目录中的所有命令,并不产生提示信息。
4)touch、vi创建一个文件
a)touch创建一个空文件
如touchfilename
b)vi创建并编辑一个文件
vifilename创建一个文件并进入编辑状态,编辑完后按ESC–>按shift+:
->保存修改内容按w- >退出编辑按q
通常vi用的频率比较高。
5)insmod/rmmod驱动加载/协助命令
在调用相关驱动函数或中间件之前要加载相应的驱动。
如要在LCD上显示内容则先要加载LCD的驱动,insmod/mnt/yaffs/stdriver/lcd.o。
驱动都放在/mnt/yaffs/stdriver/目录中。
在完成操作后通常为了降低功耗会将驱动卸载掉,通过执行rmmod命令实现。
如rmmodlcd将LCD驱动从内核中卸载。
在调试中可通过lsmod命名查看已经加载的驱动,该命令不需带参数。
5.中间件接口使用说明
中间件是对设备控制的封装,为开发人员提供简单、直观的编程接口。
中间件包含大部分设备的控制接口。
通过中间件开发人员无需了解linux相关的系统调用及设备驱动接口。
5.1卡类操作
5.1.1M1卡操作
提供操作M1卡的相关函数,函数实现文件为mifareone.c,接口头文件为mifareone.h。
函数介绍如下:
5.1.1.1设置卡片类型
longMifareCardTypeSet(longtype)
函数功能:
设置卡片类型(TYPE-A或TYPE-B)。
通常使用比较少.
输入:
type0-TYPE-A;1-TYPE-B;
输出:
无
返回:
=0成功;其它失败;
5.1.1.2寻卡
longMifareOne_SearchCard(unsignedchar*csn,
unsignedlongwaittime)
函数功能:
搜索天线范围内的卡片,获得卡号。
输入:
waittime寻卡时间,以ms为单位;
输出:
csn选择到的卡系列号;长度大于10Byte的数组;
第一个字节为卡号的长度,后面的为具体卡号。
返回:
<0失败;
>0csn长度(字节)
5.1.1.3卡类型选择
longSlectCardType(longslecttype)
函数功能:
选择需要使用的卡功能,某些卡(比如SIM-PASS卡)内部同时具有M1功能和Pro功能,此时程序需要指定操作的是那种功能。
一般只有使用Pro卡的时候,才需要调用该函数
输入:
slecttype=0M1卡,=1Pro卡,=2Type-B卡;
输出:
无
返回:
<0失败;
=0M1卡;=1Pro卡;=2TypeB卡;=3M1/Pro复合卡;
5.1.1.4读数据
longMifareOne_ReadBlock(longblock,unsignedchar*key,
longkey_type,unsignedchar*buf)
函数功能:
从数据区,读一块数据(16Byte)。
输入:
block块序号;
Key块所处的扇区的密钥;
key_type密钥类型:
0x60KeyA;
0x61KeyB;
输出:
buf读到的数据;
返回:
0成功;
其它失败;
5.1.1.5写数据
longMifareOne_WriteBlock(longblock,unsignedchar*key,
longkey_type,unsignedchar*buf)
函数功能:
向数据区,写一块数据(16Byte)。
输入:
block块序号;
Key块所处的扇区的密钥;
key_type密钥类型:
0x60KeyA;
0x61KeyB;
buf写入的数据;
输出:
无;
返回:
0成功;
其它失败;
5.1.1.6权限控制
longMifareOne_WriteAccess(longblock,unsignedchar*key,
longkey_type,unsignedchar*buf)
函数功能:
向安全控制区,写一块数据(16Byte长)。
在发卡时才使用。
输入:
block块序号;
Key块所处的扇区的密钥;
key_type密钥类型:
0x60KeyA,0x61KeyB;
buf写入的数据;
输出:
无;
返回:
0成功;
其它失败;
5.1.1.7减值操作
longMifareOne_Decrement(longblock,unsignedchar*key,
longkey_type,unsignedlongamount)
函数功能:
对一块数据进行减值操作。
输入:
block块序号;
Key块所处的扇区的密钥;
key_type密钥类型:
0x60KeyA,0x61KeyB;
amount金额(分为单位);
输出:
无;
返回:
0成功;
其它失败;
5.1.1.8加值操作
longMifareOne_Increment(longblock,unsignedchar*key,
longkey_type,unsignedlongamount)
函数功能:
对一块数据进行加值操作。
输入:
block块序号;
Key块所处的扇区的密钥;
key_type密钥类型:
0x60KeyA,0x61KeyB;
amount金额(分为单位);
输出:
无;
返回:
0成功;
其它失败;
5.1.1.9块拷贝
longMifareOne_BlockCopy(longblock,unsignedchar*key,
longkey_type,longdesblo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 二次开发 指南