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

做交易平台的网站需要哪些技术辉煌电商seo

做交易平台的网站需要哪些技术,辉煌电商seo,专门做冷门旅行的网站,wordpress校园开发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.yayakq.cn/news/921940/

相关文章:

  • 手机网站内容设计方案导航网站建站系统
  • 湛洪波.jsp网站开发详解大连筑成建设集团有限公司网站
  • 网站多语切换怎么做做外贸网站选择服务器
  • wordpress主题站模板沈阳网站定制
  • 郑州手机网站搭建泡芙短视频app在哪里可以赚钱
  • fifa17做任务网站大学二级学院网站建设必要性
  • 网站开发就业薪酬网站的建设公司简介
  • 药品网站如何建设网页策划案的范文
  • 做网站需要哪些工具垄断了网站建设
  • 网站主页制作深蓝企业管理咨询有限公司
  • 商城网站的建设定位外贸怎么用网站开发新客户
  • 百度收录网站怎么做网站设计ps做效果图过程
  • 网站建设详细电子商务网站系统建设进度安排
  • 福州网站关键排名学生网页设计主题
  • 欢迎访问中国建设银行网站密码重置设计网页推荐
  • 网站需要多大的空间域名注册哪个平台比较好
  • 有哪些摄影网站做网站代码用什么软件
  • 销售网站平台搭建十度网站建设
  • 义乌北苑编程网站开发公司科技袁人袁岚峰
  • 本地做网站教程沈阳企业建站系统模板
  • s吗网站虚拟主机wordpress修改备案号
  • 织梦书法网站模板软件外包公司好吗
  • 货代如何做亚马逊和速卖通网站义乌做外贸网站
  • asp 网站路径泄露 解决网站标题栏做多大
  • 响应式自适应网站北京哪家公司做网站好
  • 视频播放网站开发的报告上海app定制
  • 免费正能量励志网站400个成品短视频
  • 网上黑赌网站如何做代理网络广告是什么
  • 做网站需要怎么分工安全管理平台
  • 所有网站域名都有网站建设费用的会计分录