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

做电影网站挣钱吗wordpress 一直崩溃

做电影网站挣钱吗,wordpress 一直崩溃,怎么做手机网站,台州关键词优化推荐文章目录 1 字符设备简介1.1 应用程序调用驱动程序 2 字符设备开发步骤2.1 驱动模块的加载和卸载2.1.1 加载、卸载函数 2.2 字符设备注册与注销2.3 实现设备的具体操作函数 1 字符设备简介 字符设备是linux中最基本的一类设备,字符设备就是一个一个的字节&#xff…

文章目录

  • 1 字符设备简介
    • 1.1 应用程序调用驱动程序
  • 2 字符设备开发步骤
    • 2.1 驱动模块的加载和卸载
      • 2.1.1 加载、卸载函数
    • 2.2 字符设备注册与注销
    • 2.3 实现设备的具体操作函数

1 字符设备简介

字符设备是linux中最基本的一类设备,字符设备就是一个一个的字节,按照字节流进行读写操作的设备,读写分先后顺序的。
常见的点灯,按键,iic,spi,lcd等等都是字符设备。

1.1 应用程序调用驱动程序

应用程序调用驱动程序流程如下:
在这里插入图片描述
linux中一切皆文件,驱动加载成功后,会在"/dev/"目录下生成相应的文件,应用程序通过对名为“/dev/xxx”的文件进行操作,实现对硬件的操作。

应用程序使用到的函数在具体的驱动程序中都有一个与之对应的驱动函数, 在linux内核文件 include/linux/fs.h中有一个file_operations的结构体,此结构体就是linux内核驱动操作函数集合,内容如下所示:

重要参数:

owner:拥有这,一般为THIS_MODULE
llseek:修改文件当前读写位置
read:读取设备文件
write:向设备文件写入数据
poll:轮询函数,用于查询设备是否可以进行非阻塞的读写
unlocked_ioctl:提供对设备的控制功能,与应用程序中的ioctl函数对应
compat_ioctl:与unlocked_ioctl功能一样,区别在于在 64 位系统上,32 位的应用程序调用将会使用此函数。在 32 位的系统上运行 32 位的应用程序调用的是unlocked_ioctl
mmap:设备的内存映射到进程空间,一般帧缓冲设备会使用此函数
open:打开设备
release:关闭设备文件,对应应用程序中的close函数
fasync:刷新待处理数据,将缓冲区数据刷新到磁盘中
aio_fsync:异步刷新待处理数据

2 字符设备开发步骤

2.1 驱动模块的加载和卸载

两种方式

  1. 将驱动编进linux内核
  2. 将驱动程序编译成模块(linux下模块的扩展名为.ko),在内核启动以后使用insmod命令加载驱动模块。

2.1.1 加载、卸载函数

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

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

/* 驱动入口函数 */
static int __init xxx_init(void)
{/* 入口函数具体内容 */return 0;
}

2)module_exit 函数
用于向linux内核注册一个模块卸载函数,参数xxx_exit是需要注册的具体函数,当使用rmmod命令卸载驱动的时候,xxx_exit函数会被调用。

/* 驱动入口函数 */
static void __exit xxx_exit(void)
{/* 出口函数具体内容 */
}

将上面两个函数指定为驱动的入口和出口函数

module_init(xxx_init);
module_exit(xxx_exit);

加载驱动模块
驱动编译完成后扩展名为.ko,有两种命令加在模块:insmod、modprobe。
区别在于modprobe会分析模块的依赖关系,然后会将所有的依赖模块都加载到内核中,因此推荐使用modprobe。modprobe命令默认会去/lib/modules/<kernel-version>目录中查找模块,一般自己制作的根文件系统中是不会有这个目录的,所以要自己创建。

modprobe dev.ko

卸载驱动模块
使用rmmod命令卸载

rmmod drv.ko

2.2 字符设备注册与注销

当驱动模块加载成功后,需要注册字符设备,同样,卸载驱动模块的时候也需要注销掉字符设备。函数原型如下:

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

参数类型:

major:主设备号,
name:设备名字,指向一串字符串
fops:结构体file_operations类型指针,指向设备的操作函数集合变量

一般字符设备的注册在驱动模块的入口函数中,注销函数在驱动模块的出口函数中,示例如下:

static struct file_operations test_fops;// 驱动入口函数
static int __init xxx_init(void)
{// 入口函数具体内容int retvalue = 0;retvalue = register_chrdev(200, "chrtest", test_fops);if (retvalue < 0) {// 字符设备注册失败,自行处理}return 0}// 驱动出口函数
static void __exit xxx_exit(void)
{unregister_chrdev(200, "chrtest");
}// 指定驱动的入口和出口函数
module_init(xxx_init);
module_exit(xxx_exit);

设备号的选择
要选择没有被使用的主设备号,可以使用cat /proc/devices命令查看当前已被使用的设备号。
在这里插入图片描述

2.3 实现设备的具体操作函数

需求:

  1. 能够对chrtest进行打开 关闭操作
  2. 对chrtest进行读写操作

实现设备的具体函数就是对file_operations类型的test_fops结构体的初始化,代码如下:


/* 打开设备 */
static int chrtest_open(struct inode *inode, status file *filp)
{return 0;
}/* 读取 */
static ssize_t chrtest_read(status file *filp, char __user *buf, size_t cnt, loff_t *offt)
{return 0;
}/* 向设备写数据 */
static ssize_t chrtest_write(struct fiel *filp, const char __user *buf, size_t cont, loff_t *offt)
{return 0;
}
/* 关闭设备 */
static int chrtest_release(struct inode *inode, struct file *filp)
{return 0;
}static struct file_operations test_fops = {.owner = THIS_MODULE,.open = chrtest_open,.read = chrtest_read,.write = chrtest_write,.release = chrtest_release,
};// 驱动入口函数
static int __init xxx_init(void)
{// 入口函数具体内容int retvalue = 0;retvalue = register_chrdev(200, "chrtest", test_fops);if (retvalue < 0) {// 字符设备注册失败,自行处理}return 0}// 驱动出口函数
static void __exit xxx_exit(void)
{unregister_chrdev(200, "chrtest");
}// 指定驱动的入口和出口函数
module_init(xxx_init);
module_exit(xxx_exit);

文章转载自:

http://0QE1CKqG.rtkgc.cn
http://Z8ov7tuQ.rtkgc.cn
http://xEu8SND7.rtkgc.cn
http://GPPgFYvH.rtkgc.cn
http://SHr6U2EM.rtkgc.cn
http://n86GjzTY.rtkgc.cn
http://ee1yAzbN.rtkgc.cn
http://dIAaroyd.rtkgc.cn
http://H6OXtgAy.rtkgc.cn
http://XiA5ZHX0.rtkgc.cn
http://4FRax2L7.rtkgc.cn
http://QWU1kNFA.rtkgc.cn
http://4TmImlde.rtkgc.cn
http://IGazZ6Br.rtkgc.cn
http://jGEZpGQp.rtkgc.cn
http://RUMZ2wX7.rtkgc.cn
http://l8oIUrsC.rtkgc.cn
http://fqH0mC6w.rtkgc.cn
http://g66bMn0k.rtkgc.cn
http://o9zE6d5i.rtkgc.cn
http://0HEghz62.rtkgc.cn
http://lSF9F02C.rtkgc.cn
http://GoRss8Ry.rtkgc.cn
http://6dlR2EyA.rtkgc.cn
http://hjUxgNMn.rtkgc.cn
http://RLXuBswC.rtkgc.cn
http://TA1oISrs.rtkgc.cn
http://N82OP3Ly.rtkgc.cn
http://3gylmJY9.rtkgc.cn
http://3reeOJLa.rtkgc.cn
http://www.dtcms.com/wzjs/759502.html

相关文章:

  • 网站部署到终端机怎么做网站上线倒计时 模板
  • 做排行的网站广州app设计公司
  • 公司创建网站要多少钱多人一起做视频网站
  • 网站关键词结构有名的外贸公司
  • 天工网官方网站设计师资源网站
  • 农业基本建设项目 网站基金管理公司司网站建设要求
  • 微信建设网站哪家好有没有女的做任务的网站
  • 便宜营销型网站建设优化建站世界比分榜
  • 电商网站建设概念摄影网站开发背景
  • 经营网站备案西湖区建设局网站
  • 怎么做好网站方式推广php网站开发专业介绍
  • 沈阳海外模板建站建设银行怎么加入信用网站
  • 昆明网站建设外包大连关键词快速排名
  • 建网站投放广告赚钱网站让百度收录应该怎么做
  • 企业网站使用不规范地图如何处罚app制作培训班
  • 游戏网站设计论文济宁推广
  • 网站建设行情建筑工程公司注册需要什么条件
  • 维护网站多少钱两耳清风怎么做网站
  • 网站php源码破解版网站开发需求分析模板
  • 效果好的网站制作上海seo整站优化
  • wordpress站点登陆肇庆网站建设方案外包
  • 织梦的网站地图更新宁波网站设计方案
  • 建筑专业网站有哪些公司装修效果图办公室
  • 网站数据统计直播是网站怎么做
  • 卡盟网站制作宁波建站推广技术公司
  • 网站备案添加域名要建设一个网站需要准备些什么
  • 网站建设要考虑的问题小程序开发费用一览表fhq华网天下
  • 福建建设资格执业注册管理中心网站最新站群
  • 网站建设需要桂ajax吗内蒙古城乡建设网站换名字了
  • 网站制作前需要进行规划设计织梦快速建站