如何系统的学习Linux驱动开发

如何系统的学习Linux驱动开发,第1张

在学习之前一直对驱动开发非常的陌生,感觉有点神秘。不知道驱动开发和普通的程序开发究竟有什么不同;它的基本框架又是什么样的;他的开发环境有什么特殊的地方;以及怎么写编写一个简单的字符设备驱动前编译加载,下面我就对这些问题一个一个的介绍。

一、驱动的基本框架

1.  那么究竟什么是驱动程序,它有什么用呢:

l     驱动是硬件设备与应用程序之间的一个中间软件层

l 它使得某个特定硬件能够响应一个定义良好的内部编程接口,同时完全隐蔽了设备的工作细节

l     用户通过一组与具体设备无关的标准化的调用来完成相应的 *** 作

l 驱动程序的任务就是把这些标准化的系统调用映射到具体设备对于实际硬件的特定 *** 作上

l     驱动程序是内核的一部分,可以使用中断、DMA等 *** 作

l     驱动程序在用户态和内核态之间传递数据

2.  Linux驱动的基本框架

3.  Linux下设备驱动程序的一般可以分为以下三类

1)        字符设备

a)         所有能够象字节流一样访问的设备都通过字符设备来实现

b)        它们被映射为文件系统中的节点,通常在/dev/目录下面

c)        一般要包含open read write close等系统调用的实现

2)        块设备

d)        通常是指诸如磁盘、内存、Flash等可以容纳文件系统的存储设备。

e)         块设备也是通过文件系统来访问,与字符设备的区别是:内核管理数据的方式不同

f)         它允许象字符设备一样以字节流的方式来访问,也可一次传递任意多的字节。

3)        网络接口设备

g)        通常它指的是硬件设备,但有时也可能是一个软件设备(如回环接口loopback),它们由内核中网络子系统驱动,负责发送和接收数据包。

h)        它们的数据传送往往不是面向流的,因此很难将它们映射到一个文件系统的节点上。

二、怎么搭建一个驱动的开发环境

因为驱动是要编译进内核,在启动内核时就会驱动此硬件设备;或者编译生成一个.o文件, 当应用程序需要时再动态加载进内核空间运行。因此编译任何一个驱动程序都要链接到内核的源码树。所以搭建环境的第一步当然是建内核源码树

1.       怎么建内核源码树

a) 首先看你的系统有没有源码树,在你的/lib/ modules目录下会有内核信息,比如我当前的系统里有两个版本:

#ls /lib/ modules

2.6.15-rc7  2.6.21-1.3194.fc7

查看其源码位置:

## ll /lib/modules/2.6.15-rc7/build

lrwxrwxrwx 1 root root 27 2008-04-28 19:19 /lib/modules/2.6.15-rc7/build ->/root/xkli/linux-2.6.15-rc7

发现build是一个链接文件,其所对应的目录就是源码树的目录。但现在这里目标目录已经是无效的了。所以得自己重新下载

b)下载并编译源码树

有很多网站上可以下载,但官方网址是:

http://www.kernel.org/pub/linux/kernel/v2.6/

下载完后当然就是解压编译了

# tar –xzvf linux-2.6.16.54.tar.gz

#cd linux-2.6.16.54

## make menuconfig (配置内核各选项,如果没有配置就无法下一步编译,这里可以不要改任何东西)

#make

如果编译没有出错。那么恭喜你。你的开发环境已经搭建好了

三、了解驱动的基本知识

1.         设备号

1)        什么是设备号呢?我们进系统根据现有的设备来讲解就清楚了:

#ls -l /dev/

crwxrwxrwx 1 root root     1,   3 2009-05-11 16:36 null

crw------- 1 root root     4,   0 2009-05-11 16:35 systty

crw-rw-rw- 1 root tty      5,   0 2009-05-11 16:36 tty

crw-rw---- 1 root tty      4,   0 2009-05-11 16:35 tty0

在日期前面的两个数(如第一列就是1,3)就是表示的设备号,第一个是主设备号,第二个是从设备号

2)        设备号有什么用呢?

l 传统上, 主编号标识设备相连的驱动. 例如, /dev/null 和 /dev/zero 都由驱动 1 来管理, 而虚拟控制台和串口终端都由驱动 4 管理

l 次编号被内核用来决定引用哪个设备. 依据你的驱动是如何编写的自己区别

3)        设备号结构类型以及申请方式

l   在内核中, dev_t 类型(在 中定义)用来持有设备编号, 对于 2.6.0 内核, dev_t 是 32 位的量, 12 位用作主编号, 20 位用作次编号.

l   能获得一个 dev_t 的主或者次编号方式:

MAJOR(dev_t dev)//主要

MINOR(dev_t dev)//次要

l   但是如果你有主次编号, 需要将其转换为一个 dev_t, 使用: MKDEV(int major, int minor)

4)        怎么在程序中分配和释放设备号

在建立一个字符驱动时需要做的第一件事是获取一个或多个设备编号来使用. 可以达到此功能的函数有两个:

l       一个是你自己事先知道设备号的

register_chrdev_region, 在 中声明:

int register_chrdev_region(dev_t first, unsigned int count, char *name)

first 是你要分配的起始设备编号. first 的次编号部分常常是 0,count 是你请求的连续设备编号的总数. name 是应当连接到这个编号范围的设备的名子 它会出现在 /proc/devices 和 sysfs 中.

l       第二个是动态动态分配设备编号

int alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, char *name)

使用这个函数, dev 是一个只输出的参数, 它在函数成功完成时持有你的分配范围的第一个数. fisetminor 应当是请求的第一个要用的次编号 它常常是 0. count 和 name 参数如同给 request_chrdev_region 的一样.

5)        设备编号的释放使用

不管你是采用哪些方式分配的设备号。使用之后肯定是要释放的,其方式如下:

void unregister_chrdev_region(dev_t first, unsigned int count)

6)

2.         驱动程序的二个最重要数据结构

1)         file_operation

倒如字符设备scull的一般定义如下:

struct file_operations scull_fops = {

.owner =  THIS_MODULE, 

 .llseek =  scull_llseek, 

 .read =  scull_read, 

 .write =  scull_write, 

 .ioctl =  scull_ioctl, 

 .open =  scull_open, 

 .release =  scull_release,  

}

file_operation也称为设备驱动程序接口

定义在 , 是一个函数指针的集合. 每个打开文件(内部用一个 file 结构来代表)与它自身的函数集合相关连( 通过包含一个称为 f_op 的成员, 它指向一个 file_operations 结构). 这些 *** 作大部分负责实现系统调用, 因此, 命名为 open, read, 等等

2)         File

定义位于include/fs.h

struct file结构与驱动相关的成员

l         mode_t f_mode      标识文件的读写权限

l         loff_t f_pos           当前读写位置

l         unsigned int_f_flag 文件标志,主要进行阻塞/非阻塞型 *** 作时检查

l         struct file_operation * f_op  文件 *** 作的结构指针

l         void * private_data 驱动程序一般将它指向已经分配的数据

l         struct dentry* f_dentry  文件对应的目录项结构

3.         字符设备注册

1)        内核在内部使用类型 struct cdev 的结构来代表字符设备. 在内核调用你的设备 *** 作前, 必须编写分配并注册一个或几个这些结构. 有 2 种方法来分配和初始化一个这些结构.

l             如果你想在运行时获得一个独立的 cdev 结构,可以这样使用:

struct cdev *my_cdev = cdev_alloc()

my_cdev->ops = &my_fops

l             如果想将 cdev 结构嵌入一个你自己的设备特定的结构 你应当初始化你已经分配的结构, 使用:

void cdev_init(struct cdev *cdev, struct file_operations *fops)

2)        一旦 cdev 结构建立, 最后的步骤是把它告诉内核, 调用:

int cdev_add(struct cdev *dev, dev_t num, unsigned int count)

说明:dev 是 cdev 结构, num 是这个设备响应的第一个设备号, count 是应当关联到设备的设备号的数目. 常常 count 是 1, 但是有多个设备号对应于一个特定的设备的情形.

3)        为从系统去除一个字符设备, 调用:

void cdev_del(struct cdev *dev)

4.         open 和 release

超市POS系统与其他业态的POS系统的主要功能相同吗

大体框架是相同的,例如进销存及报表这是基本功能,但不同业态有不同业态的特色,有些东西是不能通用的,或者用起来特别麻烦,例如药店总体和超市运营没什么区别,但药品要求有GSP认证,并且药品要管到每个商品的批次,而且要非常准确,超市最多能做到理论上的先进先出,而不是实际上的先进先出,例如服装店,服装店要管到同一商品每个尺码有多少,相同尺码不同颜色的有多少,细节还有好多好多,只是举一些简单例子。

简述pos系统的功能

POS(Point of Sale)系统其发挥管理功能的基本构件是,商品条形码、POS收银系统、后台电脑。

(一)POS系统基本构件介绍

1.商品条形码

商品条形码由商品包装上带有若干黑白条纹组成,标有数字的图案。商品条形码是一种商品识别标记,它是供光电识读装置向计算机输人资料的程式码,其内容包含商品的生产国名、厂名、产品编号等资讯。条码的定义是:由一组宽度不同,反射率不同,平行相邻的条和空,按照预先规定的编号规则组合起来,用来表示一组资料的符号,这个资料可以是数字,字母或某些符号。

当前,国际上有通用于欧洲的EAN条码,通用于美国和加拿大的UPS条码两大系统。EAN条码与UPS条码可以相容,它们分属于国际物品编码委员会(EAN)和美国统一编码委员会(UCC)。凡是加入条码组织的会员国可以获得该组织分配的国际统一编号字首。中国物品编码中心于1991年正式加入国际物品编码协会,协会分配给我国的字首码为690,也就是以690为首的国际通用商品程式码为中国商品程式码,即EAN码。标准型EAN程式码由13位数字构成称为EAN—13程式码,其中3位国家程式码,4位厂商程式码,5位商品程式码和1位校验码构成。制造厂商程式码由中国物品编码中心分配,商品程式码由厂家编定,校验号是为了防止误读设定的。最近国际物品编码协会又分配给中国物品编码中心一个字首号“691”。

商品条形码是适应计算机的发展而发展起来的一种高速准确的资料输入技术。商品条形码应用在POS系统上,它利用收款机作为终端与主机相联,并借助于光电识读装置录入商品资讯,当带有条码符号所表示的资讯录人到计算机,计算机从资料库中查找出该商品的名称、价格等,经过资料处理,打印出结算清单,并记录每一笔销售情况。POS系统不仅实现了商品进、销、存的自动化管理,而且为顾客提供了最优质的服务,极大地提高了超级市场的经营质量和管理效率。

2.POS收银系统。

超级市场只有使用POS收银系统才能阅读商品条码。进行收银结帐,并记录下商品的销售情况。目前较常用的P03收银系统主要有两种:

(1)电子收银机+扫描器——主档控制器+电脑。该系统一般适用于规模较大,收银台数铰多的超级市场。主档控制器可储存商品的主档资料,以批次方式将商品销售资料传至后台电脑,它可缓和后台电脑的工作负荷。

(2)电脑收银机+扫描器。该系统较适用于规模较小的超级市场,电脑收银机兼具收银机及存取电脑内商品异动档之功能。扫描器也称商品条码阅读机,它是POS收银机的重要组成部分。扫描器的原理是利用光线反射来读取条码反射回来的光源,再转译成可辨认之数字,以确认是否为建档之商品代号。目前POS收银机的扫描器一般有三种类型:一种是光笔,一种是手握式扫描器,一种是固定式扫描器。前两种扫描器的优点:一是价格便宜,二是较适用于商品较重条码位置不易看到的商品等,缺点是扫描感应较差,扫描动作常需重复多次才有感应。后一种扫描器与前两种优缺点正好相反。

3.后台电脑。

POS系统要能正常运转,还要靠后台电脑建立起商品主档资料。当扫描器接收了商品条码资讯后,就要到后台电脑寻找商品主档资料以辨识商品代号是否正确,然后接受该商品售价,并记录下该种商品销售数量。由此可知后台电脑是一个商品的资讯库,也是对前台POS收银机的控制中心。因此,每一种商品在第一次进入超级市场销售时,一定要依据规定的格式,将有关该商品的基本资料输人后台电脑,这时该种商品才可进入销售。商品主档资料建立的权力在商品采购人员,当电脑人员接到采购人员的指令后,才可将商品主档资讯资料输入后台电脑。对连锁超市公司来说,商品主档资料建立由总部采购部进行,如电脑联网的话,可传输各超市门店后台电脑,如不联网的话则可以将磁卡送至各门店,再输人至后台电脑建档。

(二)POS作业系统主要的作业与管理功能

美国零售业协会曾对零售业运用POS系统作过一项调查,该调查显示,有80%的零售业者认为“POS系统是零售业唯一的方向”。由此可见,现代的零售业离不开POS,超级市场经营管理更离不开POS系统的运用,这是因为POS系统的作业功能和管理功能为超级市场带来了巨大的利益。

1.POS系统的作业功能

POS系统的作业功能主要有以下几项:

(1)超级市场在进行收银结算时,POS收银机会自动记录商品销售的原始资料和其它相关的资料,并根据电脑程式设计要求,有一段时间的保证记录期。

(2)POS收银机会自动储存、整理所记录的全日的销售资料,可以反映每一个时点、时段和即时的销售资讯,作为提供给后台电脑处理的依据。

(3)POS收银机上的小型印表机可打印出各种收银报表、读帐、清帐、和时段部门帐。

(4)超市连锁公司总部的中央电脑可利用通讯联网系统向每一家超市门店输送下达管理指令、商品价格变动、商品配送等资料。

(5)中央电脑还可统计分析出每个门店的营业资料,产生总部各部门所需要的管理资讯资料,作为总部决策的依据。

(6)POS系统能迅速而准确地完成前台收银的工作,同时能储存完整的记录。

2.POS系统的管理功能。

(1)POS系统能准确、迅速地获得商品销售资讯,在商品管理上有助于调整进货和商品结构,减少营业损失,抓住营业机会;

(2)可作为商品价格带管理,作为促进销售和进货最有力的依据;

(3)可作为消费物件管理,做为有的放矢的商品进货和销售;

(4)可作为营业时间带管理,以合理地配备营业人员,节省人工费用;

(5)大大节省营业人员编制报表的时间,有益于现场实际销售作业。

(6)POS系统可分类别地对商品进行ABC分析,也可根据营业资料做超级市场与上周、上月和上年同期增加的比较分析,经营者据此可制定出企业发展的营业计划等。

1.运用POS系统这一现代科学的管理手段,将为超级市场提供更迅速、更精确、更有用的资讯资料,为决策提供可靠的依据.我们说超级市场在流通中市场独立地位的确立,也是离不开POS系统的,超级市场对消费趋势的把握,对新消费需求的创造也更离不开POS系统。超级市场就是凭借POS系统所把握的消费未来,主动地引导工业的生产。

2.运用POS系统会大大降低超级市场的库存和提高销售的能力,大大提高商品的周转率和毛利率。由于运用POS系统可以准确地把握投向市场的商品种类、数量和价格,再加之商品采购和配送系统的配合,商品周转率和毛利率的提高、商品库存量和商品降价量的减少就成为是当然之事。

3.我国的零售业正经历著一场革命,零售业正向规模化,连锁化和顾客导向化的经营方式发展,传统的零售业管理方式已无法适应这种发展的需要,作为商业自动化的一种现代管理手段,其作用和带给超级市场及其他零售业的利益将是十分巨大的。

用什么超市POS系统好?

如果是小型超市或士多店,淘宝上搜“超市收银机”(不方便直接说,免得被人以为做广告),就能看到你要的产品了,一般都是1000多到2000多一套,选个离你城市比较近的,一般都可以到你店里免费做一个简单培训。如果你对电脑不熟悉,可能要多花点钱请他们做多些维护。

注意便宜的印表机用的是热敏纸,不能双层印表机的,如果需要双层列印,记得买针式印表机。国产便宜些,进口如EPSON的贵一些,如TM-U220就要1500~1600元左右

下列哪些属于pos系统的功能

银商,三德,银达比如有银商P80 P60 P90等等,

还有三德100等等

POS系统的管理?

在商场或者连锁超市的POS维护人员的工作是不同的,关键要看企业中资讯部门是怎么定义的。

商场:

1、负责pos机的软、硬体的正常运转

2、负责pos网路的正常运转

3、收银员培训

4、盘点

5、工作站的日常维护

你在这上面你根本没有机会接触不到什么所谓机密资料(除非你故意),你能接触到的大都为硬体装置,所谓的机密资料是由MIS维护人员接触的。

连锁:

1、负责pos机的软、硬体的正常运转

2、负责pos网路的正常运转

3、收银员培训

4、盘点

5、门店资料备份

6、门店工作站、伺服器的日常维护

在连锁中你就有机会接触到一些机密资料。

总之作为资讯维护人员只有一个要求:不该看的不看,不该说的不说。这样才是一个好的资讯维护人员。

帮忙福州地区超市POS系统的厂商

易通时代科技,电话:87555216,提供全系列的商业装置。另外大利嘉也有很多家店有卖。

满意请采纳

谁知道超市POS系统的运作流程

要求开启伺服器后,才可以开启POS机,在POS机上启动收银系统时,会把各模组如售价、会员、当日特价等资讯下载到POS上的临时资料库,完成后收银员输入工号进行收银。每收一次钱产生一个流水。

在收银员完成一天工作后,资讯部在伺服器上处理流水,发现异常的话比如有一条收不到,要在POS机上传送到伺服器。完成后,关闭POS机。资讯部备份档案,然后关闭伺服器。

POS系统的原始码

你看的是什么版本的核心? 在最新的linux核心中已经没有这么用了,我查了一下老版本的核心(0.11),才找到你问的问题。

#define BLOCK_SIZE 1024

#define BLOCK_SIZE_BITS 10

所以 *pos (32bit) 的组成是 低10位是偏移量。这是因为 BLOCK_SIZE=1024=0x400 所以 BLOCK_SIZE-1=1023=0x3FF,所以

int offset = *pos &(BLOCK_SIZE-1)

所以offset = *pos &0x3FF, 相当于取 *pos的低10位。

而*pos的高 22 位则是块序号,这很好理解

int block = *pos >>BLOCK_SIZE_BITS就是将 *pos右移10位,那么就只剩高22位了,所以说高22位是块序号,低10位是在块内的偏移量.

POS系统与ERP的关系

据我所理解来说。erp应该包含了pos系统

erp是整个企业的进销存管理。pos只是销售管理的一部分。

做pos系统前一定要先咨询erp开发公司的意见。一般他们都有一些对应的企业做开发或者自己开发。没有他们的帮助,你自己基本上说没有办法做的。

超市POS系统与超市进存销管理系统是一样的吗?

不一样,POS系统只管理收银前台的工作。

进销存系统要管理超市商品的进货、销售、库存情况,其中包括POS系统。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8690594.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存