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

一个网站怎样做两个后台石家庄网站制作找谁

一个网站怎样做两个后台,石家庄网站制作找谁,云建站自动建站系统源码,谷歌推广app一、背景 在内核模块开发时#xff0c;多个不同的内核模块#xff0c;有时候可能需要都共用一些公共的函数#xff0c;比如申请一些平台性的公共资源。但是#xff0c;这些公共的函数又不方便去加入到内核镜像里#xff0c;这时候就需要把这些各个内核模块需要用到的一些…一、背景 在内核模块开发时多个不同的内核模块有时候可能需要都共用一些公共的函数比如申请一些平台性的公共资源。但是这些公共的函数又不方便去加入到内核镜像里这时候就需要把这些各个内核模块需要用到的一些公共的函数做到一个ko里先insmod这样后insmod的内核模块就可以使用这些公共的函数。 需求已经说清楚了我们直接看代码。 二、内核模块公共api的需求实现的demo例子 我们创建一个moduleapitest文件夹来做这个demo这个文件夹里有两个子文件夹一个是apiko文件夹是模拟实现公共api的一个koapi.ko在使用时早于其他的ko先insmod还有一个是使用api.ko里函数的ko我们叫useapi.ko对应的目录叫useapiko。 下图中红色框出的是需要编写的文件 先看一下apiko目录下的api.c和Makefile #include linux/module.h #include linux/kernel.hMODULE_LICENSE(GPL); MODULE_AUTHOR(zhaoxin); MODULE_DESCRIPTION(A simple Linux kernel module define api...); MODULE_VERSION(1.0);void test_api_log(void) {printk(KERN_INFO test_api_log output.\n); } EXPORT_SYMBOL_GPL(test_api_log);static int __init api_init(void) {printk(KERN_INFO api_init: Module loaded.\n);return 0; }static void __exit api_exit(void) {printk(KERN_INFO api_exit: Module unloaded.\n); }module_init(api_init); module_exit(api_exit);上图中可以看到我们定义了一个api叫test_api_log里面进行了一句打印记得要EXPORT_SYMBOL或者EXPORT_SYMBOL_GPL一下 apiko里的Makefile文件如下 obj-m api.oall:make -C /lib/modules/$(shell uname -r)/build M$(PWD) modulesclean:make -C /lib/modules/$(shell uname -r)/build M$(PWD) clean 在编译时这个提供api的ko需要先进行编译因为编译生成的Module.symvers我们需要用 关键是看useapi怎么才能使用到这个symbol useapi.c的源文件 #include linux/module.h #include linux/kernel.hMODULE_LICENSE(GPL); MODULE_AUTHOR(zhaoxin); MODULE_DESCRIPTION(A simple Linux kernel module using api...); MODULE_VERSION(1.0);extern void test_api_log(void);static int __init useapi_init(void) {test_api_log();printk(KERN_INFO useapi_init: Module loaded.\n);return 0; }static void __exit useapi_exit(void) {printk(KERN_INFO useapi_exit: Module unloaded.\n); }module_init(useapi_init); module_exit(useapi_exit);可以看到useapi.c源文件里的初始化函数里使用了test_api_log 再看一下useapi的Makefile也就是这个功能的核心 obj-m useapi.oTEST_DIR $(CURDIR)/../KBUILD_EXTRA_SYMBOLS $(TEST_DIR)/apiko/Module.symvers export KBUILD_EXTRA_SYMBOLSall:make -C /lib/modules/$(shell uname -r)/build M$(PWD) TEST_DIR$(TEST_DIR) modulesclean:make -C /lib/modules/$(shell uname -r)/build M$(PWD) TEST_DIR$(TEST_DIR) clean 上面Makefile里有两处关键 1定义KBUILD_EXTRA_SYMBOLS为提供公共api的编译产出物Module.symvers 2注意目录如果要用当前目录这个Makefile的内置变量$(CURDIR)的话得多用一个变量来使用它上面例子里就是TEST_DIR然后再把TEST_DIR传给make的编译语句 否则Makefile在执行时$(CURDIR)会被解释成-C后面的目录所指向的路径 而/home/zhaoxin/code/git/los/code/test/linux-6.5这个目录作为$(CURDIR)的话就和你在写Makefile时认为的当前目录不一致了造成找不到这个Module.symvers的编译错误 另外如果遇到如下的编译错误 大概率是因为你没有把公共函数的api进行EXPORT_SYMBOL 实验验证 如果不先insmod api.ko的话直接insmod useapi.ko的话会出现如下错误 这也是符合预期因为这个symbol依赖api.ko的插入才存在。 下面是先insmod api.ko再insmod useapi.ko的dmesg输出 可以看到useapi.ko能使用api.ko里的EXPORT_SYMBOL的符号 三、有哪些应用场景 我们可以定义一些内核模块统一用到的一些日志函数当然可以使用原生的printk但是有时候还是使用自己写的东西拓展功能起来方便一些。比如我们可以定义一些模式全局一块大buffer还是分线程独立的buffer还是分进程独立的buffer还是按照模块独立的buffer这些需求用自己写的一套公共的api来给各个内核模块调用后续日志的功能改变后各个内核模块也不用去修改各自的代码我们可以迭代公共api的这个ko即可。 还比如说我们可以定义一些公共的内存申请的函数和一些traceid跟踪的函数等等可以想到进行抽象出来定义的api还有很多。
http://www.w-s-a.com/news/191817/

相关文章:

  • 网站什么做才会更吸引客户楚雄网站开发rewlkj
  • 电商网站构建预算方案视频制作网站怎么做
  • 包装设计灵感网站ps软件下载电脑版多少钱
  • 手机网站图片做多大原网站开发新功能
  • 网站设计培训成都陕西网站建设公司哪有
  • expedia电子商务网站建设辽宁网站设计
  • 深圳网站建设网站运营绥芬河市建设局网站
  • 家政服务网站做推广有效果吗做图软件ps下载网站有哪些
  • 北京市建设教育协会网站flash网站制作单选框和复选框ui组件
  • 国外有没有做问卷调查的网站网站网页怎么做
  • 简单个人网站模板下载网站建设整体情况介绍
  • 网站建设做到哪些内容荆门网站建设电话咨询
  • 玉树网站建设公司双11主机 wordpress 2015
  • dw做网站背景图片设置汕头seo管理
  • 个人又什么办法做企业网站唐山哪里建轻轨和地铁
  • 手机网站404页面室内设计公司排名前100
  • 做民宿需要和多家网站合作吗创建软件的步骤
  • 网站导航栏设计要求辽宁省住房和城乡建设厅
  • 海外网站平台腾讯营销平台
  • 东道网站建设良品铺子网络营销案例
  • 免费企业查询软件优化模型
  • 兰亭集势的网站平台建设凡科网站免费版怎么做
  • 在网站做推广要钱吗网站根目录是哪个文件夹
  • 网站建设如何弄链接海外vps一键配置WordPress
  • 1个ip可以做几个网站吗动画制作可以自学吗
  • 顺德建设局网站如何搭建网站
  • 精品网站建设费用 干净磐石网络网页制作简单作业
  • 网站建设需要用软件群晖怎样做网站
  • 网站建设公司有哪博客网站建设方案书
  • 服装商城的网站建设宿迁论坛