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

做文学网站算不算开公司网站建设栏目规划

做文学网站算不算开公司,网站建设栏目规划,福州seo网站推广优化,久久建筑网平台开发linux内核驱动需要以下4个步骤#xff1a; 1 编写hello驱动代码 驱动代码如下 helloDev.c#xff0c;这是一个最小、最简单的驱动#xff0c;去掉了其他的不相干代码#xff0c;尽量让大家能了解驱动本身。 #include linux/module.h #include linux/mod…开发linux内核驱动需要以下4个步骤 1 编写hello驱动代码 驱动代码如下 helloDev.c这是一个最小、最简单的驱动去掉了其他的不相干代码尽量让大家能了解驱动本身。 #include linux/module.h #include linux/moduleparam.h #include linux/cdev.h #include linux/fs.h #include linux/wait.h #include linux/poll.h #include linux/sched.h #include linux/slab.h#define BUFFER_MAX (10) // buff大小 #define OK (0) #define ERROR (-1)struct cdev *gDev; // 字符设备结构体指针 struct file_operations *gFile; // 文件操作结构体指针 dev_t devNum; // 设备号 unsigned int subDevNum 1; // 注册设备的数量int reg_major 232; // 主设备号 int reg_minor 0; // 次设备号 char *buffer; // 缓冲区/*** printk 是内核中用于输出调试信息、错误信息和其他日志信息的函数。* 它将消息输出到内核日志缓冲区这些日志可以通过 dmesg 命令查看* KERN_INFO 是一个宏:信息性消息 */// hello_open函数打开文件 int hello_open(struct inode *p, struct file *f) {printk(KERN_INFO hello_open\r\n);return 0; }// hello_write函数 ssize_t hello_write(struct file *f, const char __user *u, size_t s, loff_t *l) {printk(KERN_INFO hello_write\r\n);return 0; }// hello_read函数 ssize_t hello_read(struct file *f, char __user *u, size_t s, loff_t *l) {printk(KERN_INFO hello_read\r\n);return 0; }int hello_init(void) {devNum MKDEV(reg_major, reg_minor); // 根据主次设备号生成devNum唯一标识设备// 把设备号注册到内核中。从devNum开始注册subDevNum个设备。if (OK register_chrdev_region(devNum, subDevNum, helloworld)) {printk(KERN_INFO register_chrdev_region ok \n);} else {printk(KERN_INFO register_chrdev_region error n);return ERROR;}printk(KERN_INFO hello driver init \n);// 内核模块成功分配并初始化了一个字符设备结构gDev kzalloc(sizeof(struct cdev), GFP_KERNEL);// 文件操作gFile kzalloc(sizeof(struct file_operations), GFP_KERNEL);// 赋值。回调函数gFile-open hello_open;gFile-read hello_read;gFile-write hello_write;gFile-owner THIS_MODULE;// 建立联系通过这两行代码驱动程序完成了字符设备的初始化和注册使得字符设备可以被用户进程打开、读取和写入。cdev_init(gDev, gFile); // 初始化字符设备结构体gDev并将其与文件操作结构体gFile关联起来。cdev_add(gDev, devNum, 1); // 将初始化好的字符设备gDev 添加到内核字符设备层使其成为一个有效的字符设备可以被用户空间访问和操作return 0; }// 驱动退出函数 void __exit hello_exit(void) {printk(KERN_INFO hello driver exit \n);cdev_del(gDev); // 删除字符设备kfree(gFile); // 释放内存kfree(gDev); // 释放内存unregister_chrdev_region(devNum, subDevNum); // 注销设备号return; }module_init(hello_init); // 声明驱动的入口函数。执行insmod的时候调用 module_exit(hello_exit); // 声明驱动的退出函数。执行rmmod的时候调用 MODULE_LICENSE(GPL); // 指定模块的许可证 有了驱动文件之后还需要一个Makefile才能把驱动编译出来 2 编写makefile ifneq ($(KERNELRELEASE),) obj-m : helloDev.o else PWD : $(shell pwd) # 获取当前目录路径并赋值给变量 PWD # KDIR: /lib/modules/4.4.0-31-generic/build # KDIR: /home/winter/linux-4.9.229 KDIR : /lib/modules/uname -r/build # 指定内核构建目录 all:make -C $(KDIR) M$(PWD) clean:rm -rf *.o *.ko *.mod.c *.symvers *.c~ *~ endif # $(KERNELRELEASE) 是内核构建系统设置的变量当通过内核构建系统调用此 Makefile 时这个变量会被定义。 # -C $(KDIR)切换到内核构建目录 # M$(PWD)指定模块源码目录为当前目录 # make -C $(KDIR) M$(PWD)调用内核构建系统 # 这段 Makefile 通过条件分支来区分内核构建环境和用户构建环境在用户环境中调用内核构建系统进行模块编译并提供了清理编译生成文件的功能。 linux应用层程序在编译的时候需要链接c运行时库和glibc库。那驱动需不需要呢 3 编译和加载hello驱动 驱动也需要但是驱动不能链接和使用应用层的任何lib库驱动需要引用内核的头文件和函数。所以编译的时候需要指定内核源码的地址。为了开发方便也可以安装内核开发包之后引用这个内核开发包的目录也可以。本例为/lib/modules/4.4.0-31-generic/build make 编译出来的驱动文件名称为helloDev.ko 接下来把这个驱动加载到内核 # 清零内核日志 dmesg -c # 执行 insmod helloDev.ko # 再看内核日志 dmesg # 查看驱动 lsmod # 卸载驱动 rmmod helloDev.ko # 再查看驱动无 4 编写应用程序测试hello驱动test.c /************************************************************************* File Name: test.c Author: Winter Created Time: 2024年05月17日 星期五 21时03分06秒************************************************************************/#include fcntl.h #include stdio.h #include string.h #include sys/select.h#define DATA_NUM (64) int main(int argc, char *argv[]) {int fd, i;int r_len, w_len;fd_set fdset;char buf[DATA_NUM]hello world;memset(buf,0,DATA_NUM);fd open(/dev/hello, O_RDWR);printf(%d\r\n,fd);if(-1 fd) {perror(open file error\r\n);return -1;} else {printf(open successe\r\n);}w_len write(fd,buf, DATA_NUM);r_len read(fd, buf, DATA_NUM);printf(%d %d\r\n, w_len, r_len);printf(%s\r\n,buf);return 0; } 编译执行。因为没有/dev/hello这个设备文件所以打开失败 需要创建设备文件 mknod man mknod # 名字 类型 【主设备号 次设备号】 mknod [OPTION]... NAME TYPE [MAJOR MINOR] mknod /dev/hello c 232 0# 查看 ls -l /dev/hello# 再执行测试程序 ./test 有调用日志 这个返回值是驱动部分对应的返回值 5 一些命令 dmesg -c # 清零内核日志 insmod helloDev.ko # 插入加载Linux内核模块的命令 dmesg # dmesg 命令用于查看和管理 Linux 内核的环形缓冲区中的消息 lsmod # 查看驱动 rmmod helloDev.ko # 卸载驱动# 创建设备文件:名字 类型 【主设备号 次设备号】 mknod [OPTION]... NAME TYPE [MAJOR MINOR] mknod /dev/hello c 232 0
http://www.hkea.cn/news/14401549/

相关文章:

  • 坪地网站建设市场百度网站联系方式
  • 网站开发项目流程书电商ui设计是什么意思
  • 网站后台风格网站后缀co
  • 竞争者网站建设情况宁波网站推广软件服务
  • 免费论坛申请网站微网站 底部导航菜单
  • 网站开发背景400字化工材料 技术支持 东莞网站建设
  • 兴国做网站天津网
  • 河北建设网官方网站c c也能干大事网站开发
  • 网站建设及域名申请 厦门建设银行储蓄卡申请网站
  • 教育网站 怎么做吸引人seo怎么判断网站的好坏
  • 定制建站 app建设网站建设价格比较
  • 禅城区网站建站网站dede网站移动端怎么做
  • 齐博网站模板网站二级目录 修改路径
  • 建设一个下载网站网络营销的特点主要有
  • 做网站看好金石网络岳阳关键词优化
  • 厦门市建设局官方网站成都网页设计培训哪家好
  • 做问卷赚钱最好似网站51个人网站怎么打开
  • 51网站空间还有吗什么网站发布建设标准
  • 网站SEM优化如何做奥德贵阳网络推广公司
  • 橙色网站模板网站建设公司图片
  • 备案需要写网站建设方案书wordpress文章推荐插件
  • 关于设计方面的网站论坛网站有哪些
  • 哪家手机网站建设国内建网站软件
  • 固安网站建设顺德龙江做网站
  • 做外贸有必要做个网站吗广告设计网站哪个好
  • 动漫设计与制作课程seo优化排名怎么做
  • 成都网站开发排名家庭网络组网方案
  • 网站被百度惩罚怎么办wordpress置顶
  • 上海网站建设乐云seowordpress 顺序
  • 专门更新最新设计的网站wordpress 链接提交表单