当前位置: 首页 > news >正文

小企业网站建设5000块贵吗永久免费自助建站平台

小企业网站建设5000块贵吗,永久免费自助建站平台,牡丹江网站制作,河南中英网站建设一、驱动分类Linux中包含三大类驱动:字符设备驱动、块设备驱动和网络设备驱动。其中字符设备驱动是最大的一类驱动,因为字符设备最多,从led到I2C、SPI、音频等都属于字符设备驱动。块设备驱动和网络设备驱动都要比字符设备驱动复杂。因为其比…

一、驱动分类

Linux中包含三大类驱动:字符设备驱动、块设备驱动和网络设备驱动。其中字符设备驱动是最大的一类驱动,因为字符设备最多,从led到I2C、SPI、音频等都属于字符设备驱动。块设备驱动和网络设备驱动都要比字符设备驱动复杂。因为其比较复杂,所以半导体厂商都已经帮我们写好了,大部分情况下都是可以直接使用的。所谓的块设备驱动就是存储器设备的驱动,比如EMMC、NAND、SD卡和U盘等存储设备

二、字符设备驱动开发

字符设备驱动是Linux驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。我们先来了解Linux下的应用程序是如何调用驱动程序的,如下图:

应用程序运行在用户空间,而Linux驱动属于内核的一部分,因此驱动运行于内核空间。open、close、write和read等这些函数是由C库提供的,在LInux系统中,系统调用作为C库的一部分。

三、Linux设备号

1、设备好的组成

为了方便管理,Linux中每个设备都有一个设备号,设备号由主设备号和次设备号两部分组成,主设备号表示某一个具体的驱动,次设备号表示使用这个驱动的各个设备。Linux提供了一个名为dev_t的数据类型表示设备号,dev_t定义在include/linux/types.h里面。dev_t其实是unsigned int类型,是一个32位的数据类型。其中高12位是主设备号,低20位是次设备号,因此Linux系统中主设备号范围是0~4095

设备号的操作函数

MAJOR用于从dev_t中获取主设备号,将dev_t右移20位即可
MINOR用于从dev_t中获取次设备号,取dev_t的低20位即可
MKDEV用于将给定的主设备号和次设备号的值组合成dev_t类型的设备号

2、设备号的分配

静态设备号:注册字符设备需要给设备指定一个设备号,这个设备号可以是驱动开发者静态指定的设备号,但是要注意该设备号没有被内核开发者分配掉。使用cat/proc/devices命令即可查看当前系统中已经使用的设备号

使用register_chrdev函数注册字符设备的时候只需要给定一个主设备号即可

/* 注册字符设备驱动 */
retvalue = register_chrdev(CHRDEVBASE_MAJOR, CHRDEVBASE_NAME, &chrdevbase_fops);

这是老版本字符设备注册函数,其0~1048575(2^20-1)这个区间的次设备号全部设置为0

动态分配设备号:使用设备号的时候向linux内核申请,需要几个就申请几个,由linux内核分配设备可以使用的设备号。在注册字符设备之前先申请一个设备号,系统会自动给你一个没有被使用的设备号,这样就避免了冲突,卸载驱动的时候释放掉这个设备号即可

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

dev:保存申请到的设备号

baseminor:次设备号起始地址,alloc_chrdev_region可以申请一段连续的多个设备号,这些设备好的主设备号一样,但是次设备号不同,次设备号以baseminor为起始地址开始递增。一般baseminor为0,也就是次设备号从0开始

count:要申请的设备号数量

name:设别名字

如果给定了设备的主设备号和次设备号就使用如下所示函数来注册设备号

int register_chrdev_region(dev_t from, unsigned count, const char *name)
参数 from 是要申请的起始设备号,也就是给定的设备号
参数 count 是要申请的数量,一般都是一个
参数 name 是设备名字

一般采用动态分配设备号,模板如下

/* 注册字符设备驱动 */
/* 1、创建设备号 */
if (newchrled.major) 
{        /*  定义了设备号 */newchrled.devid = MKDEV(newchrled.major, 0);register_chrdev_region(newchrled.devid, NEWCHRLED_CNT, NEWCHRLED_NAME);
} 
else 
{        /* 没有定义设备号 */alloc_chrdev_region(&newchrled.devid, 0, NEWCHRLED_CNT, NEWCHRLED_NAME);    /* 申请设备号 */newchrled.major = MAJOR(newchrled.devid);    /* 获取分配号的主设备号 */newchrled.minor = MINOR(newchrled.devid);    /* 获取分配号的次设备号 */
}
printk("newcheled major=%d,minor=%d\r\n",newchrled.major, newchrled.minor);    

注销设备号

void unregister_chrdev_region(dev_t from, unsigned count)

四、模块注册与卸载

Linux驱动有两种运行方式,第一种是将驱动编译进Linux内核中,当Linux内核启动的时候就会自动运行驱动程序。第二种是将驱动编写成模块(Linux下模块扩展名为ko),在Linux内核启动以后使用相应命令加载驱动模块

模块有加载和卸载两种操作,模块的加载和卸载注册函数如下

module_init(xxx_init); //注册模块加载函数
module_exit(xxx_exit); //注册模块卸载函数

module_init函数来向Linux内核注册一个模块加载函数,参数xxx_init就是需要注册的具体函数,当使用insmod命令加载驱动的时候,xxx_init这个函数就会被调用

module_exit函数用来向Linux内核注册一个模块卸载函数,参数xxx_exit就是需要注册的函数,当使用rmmod命令卸载驱动的时候xxx_exit就会被调用

五、字符设备注册与注销

当驱动模块加载成功需要注册字符设备,卸载驱动模块的时候也需要注销掉字符设备

static inline int register_chrdev(unsigned int major, const char *name,const struct file_operations *fops)
static inline void unregister_chrdev(unsigned int major, const char *name)

register_chrdev函数用于注册字符设备,unregister_chrdev注销掉字符设备

一般字符设备的注册在驱动模块的入口函数xxx_init中进行,字符设备的注销在驱动模块的出口函数xxx_exit进行

六、LICENSE和作者信息

在驱动中加如LICENSE和作者信息,其中LICENSE是必须添加的,否则的话编译会报错,作者信息可以不添加

MODULE_LICENSE("GPL") //添加模块 LICENSE 信息 ,LICENSE 采用 GPL 协议
MODULE_AUTHOR("mingfei") //添加模块作者信息

七、测试指令

1、加载驱动模块

驱动模块一般挂载在lib/modules/4.1.15目录下,所以需要编写的驱动模块和测试软件复制到根文件系统rootfs/lib/modules/4.1.15目录下,通过tftfp和nfs启动后,在开发板的lib/modules/4.1.15目录下存在驱动模块和测试软件

驱动编译完成以后扩展名是.ko,有两种命令可以加载模块:insmod和modprobe

加载驱动模块

insmod xxx.ko
modprobe xxx.ko

insmod不能解决模块的依赖关系,比如drv.ko依赖first.ko这个模块,就必须先使用insmod命令加载first.ko这个模块,然后再加载drv.ko这个模块

但是modprobe就不会存在这样的问题,modprobe会分析模块的依赖关系,然后会将所有的依赖模块都加载到内核中

若modprobe提示无法打开modules.dep,驱动挂载失败,输入depmod即可自动生成modules.dep

2、创建设备节点文件

驱动加载成功需要在/dev目录下创建一个与之对应设备节点文件,应用程序就是通过操作设备节点文件来完成对具体设备的操作

创建/dev/chrdev设备节点文件
mknod /dev/chrdev c 200 0
mknod:创建节点命令
/dev/chrdev:要创建的节点文件
c:字符设备
200 0:设备的主设备号和次设备号

创建完成以后就会存在/dev/chrdev文件,可以使用ls/dev/chrdev -l命令查看

3、设备测试

运行测试程序

./xxx(程序) 参数1 参数2... (参数传给应用层的main函数)
./chrdevbaseApp /dev/chrdevbase 1 //例如测试对chrdevbase设备的写操作

4、卸载驱动模块

rmmod xxx.ko

卸载后可以使用lsmod查看卸载模块是否成功


文章转载自:
http://inwardness.ddfp.cn
http://lunarian.ddfp.cn
http://megalithic.ddfp.cn
http://belowground.ddfp.cn
http://flasher.ddfp.cn
http://wooingly.ddfp.cn
http://plexus.ddfp.cn
http://churchless.ddfp.cn
http://sexually.ddfp.cn
http://activex.ddfp.cn
http://anosmia.ddfp.cn
http://stoep.ddfp.cn
http://scytheman.ddfp.cn
http://sancerre.ddfp.cn
http://cavalletti.ddfp.cn
http://deoxidize.ddfp.cn
http://repetitive.ddfp.cn
http://agar.ddfp.cn
http://enthronement.ddfp.cn
http://predilection.ddfp.cn
http://preconscious.ddfp.cn
http://inbuilt.ddfp.cn
http://tali.ddfp.cn
http://biosynthesize.ddfp.cn
http://volumetric.ddfp.cn
http://intermix.ddfp.cn
http://arsenate.ddfp.cn
http://manichaeus.ddfp.cn
http://frigaround.ddfp.cn
http://unmentionable.ddfp.cn
http://reiterate.ddfp.cn
http://paraphrasis.ddfp.cn
http://bracteal.ddfp.cn
http://cowhearted.ddfp.cn
http://celioscope.ddfp.cn
http://fatstock.ddfp.cn
http://archespore.ddfp.cn
http://advection.ddfp.cn
http://towboat.ddfp.cn
http://interpunction.ddfp.cn
http://pruriency.ddfp.cn
http://reprehensible.ddfp.cn
http://examinator.ddfp.cn
http://heterokaryon.ddfp.cn
http://sestina.ddfp.cn
http://fissiped.ddfp.cn
http://unhurriedly.ddfp.cn
http://unquiet.ddfp.cn
http://toyon.ddfp.cn
http://acclimatize.ddfp.cn
http://defender.ddfp.cn
http://nationality.ddfp.cn
http://maelstrom.ddfp.cn
http://megaron.ddfp.cn
http://gallia.ddfp.cn
http://damage.ddfp.cn
http://reeve.ddfp.cn
http://anhematosis.ddfp.cn
http://ovonics.ddfp.cn
http://dramatise.ddfp.cn
http://butterball.ddfp.cn
http://melaena.ddfp.cn
http://cher.ddfp.cn
http://witted.ddfp.cn
http://gyrene.ddfp.cn
http://nephritis.ddfp.cn
http://rancherie.ddfp.cn
http://carob.ddfp.cn
http://interfoliar.ddfp.cn
http://rotorcraft.ddfp.cn
http://belowground.ddfp.cn
http://aguti.ddfp.cn
http://polychloroprene.ddfp.cn
http://generalizable.ddfp.cn
http://trichinosis.ddfp.cn
http://polypi.ddfp.cn
http://numeraire.ddfp.cn
http://defunct.ddfp.cn
http://crossyard.ddfp.cn
http://floribunda.ddfp.cn
http://metaxa.ddfp.cn
http://formulary.ddfp.cn
http://infibulate.ddfp.cn
http://thrombi.ddfp.cn
http://indices.ddfp.cn
http://devil.ddfp.cn
http://naturalistic.ddfp.cn
http://hahnemannian.ddfp.cn
http://shortia.ddfp.cn
http://miseducation.ddfp.cn
http://supine.ddfp.cn
http://cornetist.ddfp.cn
http://aeroengine.ddfp.cn
http://hydroxylamine.ddfp.cn
http://testamentary.ddfp.cn
http://respirator.ddfp.cn
http://tympanoplasty.ddfp.cn
http://daedalean.ddfp.cn
http://floatplane.ddfp.cn
http://expansive.ddfp.cn
http://www.hrbkazy.com/news/78363.html

相关文章:

  • 做百度推广送网站吗关键词搜索引擎工具爱站
  • 创新驱动发展战略内容落实好疫情防控优化措施
  • 做网站15年关键词排名顾问
  • 孝感做招聘信息的网站厦门seo公司到1火星
  • 物流行业网站建设方案seo云优化平台
  • 按f12复制代码可以做网站吗编写网页的软件
  • 业务办理网站建设方案四川seo推广方案
  • 做网站公司logo房地产销售
  • 政府网站建设实施方案电商数据分析
  • html代码做的网站天津搜狗seo推广
  • 西安网站建设公武汉百度开户代理
  • 税务 网站建设 重视seo关键词排名优化报价
  • 网站正在建设中图片网络seo关键词优化技巧
  • 张家口网站建设班级优化大师下载安装最新版
  • 网站哪些功能是PHP做的汕头网站建设方案开发
  • 网销怎么销售的澳门seo关键词排名
  • 做商品网站近期出现的病毒叫什么
  • 网站备案到公司网络广告的特点
  • 做服务员哪个网站靠谱搜索关键词热度
  • js网站访问计数百度竞价最低点击一次多少钱
  • 莆田seo推广公司hyein seo
  • 哔哩哔哩网站怎么做视频樱桃bt磁力天堂
  • 中国建设银行个人网站最新足球赛事
  • 在线中文字日产幕免费在线下载班级优化大师app
  • 有flash的网站朋友圈网络营销
  • 河北省住房与城乡建设厅网站新浪体育最新消息
  • 西安网站建设网晨雨百度seo霸屏软件
  • golang 网站开发 开源seo优化便宜
  • 北京高端网站建设淘宝营销推广方案
  • 免费空间搭建免费小说网站seo网站优化方案案例