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

做外贸网站平台有哪些内容做a 视频在线观看网站

做外贸网站平台有哪些内容,做a 视频在线观看网站,云南大学网站建设,百度投诉电话人工服务总部1.模块化 1.1.模块化的基本概念: 模块化是指将特定的功能或组件独立出来,以便于开发、测试和维护。在Linux设备驱动中,模块化允许将驱动程序作为内核模块动态加载到系统中,从而提高了系统的灵活性和可扩展性。 1.2.Linux内核模…

1.模块化

1.1.模块化的基本概念:

  • 模块化是指将特定的功能或组件独立出来,以便于开发、测试和维护。在Linux设备驱动中,模块化允许将驱动程序作为内核模块动态加载到系统中,从而提高了系统的灵活性和可扩展性。

1.2.Linux内核模块的特点

  • 动态加载和卸载:内核模块可以在系统运行时被动态加载或卸载,而无需重新编译整个内核。
  • 更好的扩展性:系统可以根据需要加载或卸载模块,从而避免资源的浪费。
  • 易于管理和维护:模块化的设计使得驱动程序的开发、测试和部署更加便捷

 1.3.模块化的好处

  • 独立:模块之间可以独立开发。
  • 隔离:驱动模块与内核隔离,不需要改内核源码,不然来一个需求改一次内核源码,风险增加,而且编译内核,换内核都是相对麻烦(当然使用ftp导入内核没什么)。

 1.4.驱动模块主要由以下几个部分组成:

模块加载函数(必须:当通过insmod命令加载内核模块时,模块的加载函数会自动被内核执行,完成本模块相关初始化工作;
模块卸载函数(必须):当通过rmmod命令卸载模块时,模块的卸载函数会自动被内核执行,完成与模块加载函数相反的功能;
模块许可证声明(必须):模块许可证(LICENCE)声明描述内核模块的许可权限,如果不声明LICENCE,模块被加载时将收到内核被污染的警告。大多数
模块参数(可选):模块参数是模块被加载的时候可以被传递给他的值,它本身对应模块内部的全局变量;
模块导出符号(可选):内核模块可以导出符号(symbol,对应于函数或变量),这样其他模块可以使用本模块中的变量或函数;
模块作者等信息声明(可选)。

2.驱动模块的相应接口

module_init(xxx_init);                           //注册模块加载函数
module_exit(xxx_exit);                         //注册模块卸载函数
MODULE_LICENSE( "GPL" )                 //添加模块 LICENSE 信息
MODULE_AUTHOR( "你的名字" )         //添加模块作者信息
module_param(name,type,perm)         //给模块传递参数
参数:
@name用来接收参数的变量名
@type参数的数据类型
@perm指定参数访问权限。
module_param_named(name_out,name_in,type,perm)   //给模块传递参数
参数:
@name_out在加载模块时,参数的名字
@name_in模块内部变量的名字
@type 参数类型
@perm 访问权限
MODULE_PARM_DESC(name,describe);          //给模块里面参数的变量指定一个描述信息,通过modinfo可以查看到
                参数
                    @name 变量名
                    @describe描述信息的字符串
EXPORT_SYMBOL(name);        //导出符号
EXPORT_SYMBOL_GPL(name);
参数类型:
MODULE_LICENSE("GPL");          
// "GPL" 是指明了 这是GNU General Public License的任意版本
                // “GPL v2” 是指明 这仅声明为GPL的第二版本
               // "GPL and addtional"
               // "Dual BSD/GPL"
               // "Dual MPL/GPL"
              // "Proprietary"  私有的
注意:除非你的模块显式地声明一个开源版本,否则内核会默认你这是一个私有的模块(Proprietary)。

 其他接口:

MODULE_DESCRIPTION("描述")         // 对这个模块作一个简单的描述,modinfo可以查看
MODULE_VERSION                  // 这个模块的版本
MODULE_ALIAS                    // 这个模块的别名
MODULE_DEVICE_TABLE             // 告诉用户空间这个模块支持什么样的设备,当系统检测到匹配这些ID设备时,就可以自动加载这个模块

3.测试以及测试解释

3.1.模块化接口测试

该测试用例没有加模块协议,运行会报“模块许可证“未指定”污染内核”,所以该加还是加上。

3.2.参数传递

#include <linux/init.h>
#include <linux/module.h>
static unsigned int var=0;
module_param(var,uint,0664);static char *string;
module_param(string,charp,0444);
MODULE_PARM_DESC(var, "int value");
MODULE_PARM_DESC(string, "str value");static int hello_init(void)
{printk("hello my drivce \r\n");printk("int value %u \r\n", var);printk("str value %s \r\n", string);return 0;
}
static void hello_exit(void)
{printk("hello_exit \r\n");printk("int value %u \r\n", var);printk("str value %s \r\n", string);return;
}MODULE_AUTHOR("seven");
MODULE_LICENSE("GPL");
module_init(hello_init);
module_exit(hello_exit);
MODULE_DESCRIPTION("module test.");

测试:

加载驱动可以传递参数如:(insmod 01_module_test.ko string="seven" var=10),这里初始化的时候不设置参数,通过修改 /sys/module/01_module_test/parameters/变量名 这个文件去修改对应的值,然后卸载程序的时候打印出来看看。

 3.3.符号导出

a驱动代码(a驱动导出符号给b驱动使用)

#include <linux/init.h>
#include <linux/module.h>
static int global_var = 100;
static void show(void)
{printk("a module show():  global_var =%d \n",global_var);
}
static int hello_init(void)
{printk("a module export :global_var=%d\n",global_var);return 0;
}
static void hello_exit(void)
{printk("hello_exit \n");return;
}EXPORT_SYMBOL(global_var);
EXPORT_SYMBOL(show);
MODULE_AUTHOR("seven");
MODULE_LICENSE("GPL");
module_init(hello_init);
module_exit(hello_exit);

b驱动代码:

#include <linux/module.h>extern int global_var;
extern  void show(void);
static int hello_init(void)
{printk("module b: global_var= %d\n",global_var);global_var--;show();printk("module b: global_var= %d\n",global_var);global_var--;show();return 0;
}
static void hello_exit(void)
{printk("hello_exit \n");return;
}
MODULE_AUTHOR("seven");
MODULE_LICENSE("GPL");
module_init(hello_init);
module_exit(hello_exit);

 运行时候

3.3.1.b驱动的注意事项

b驱动编译需要依赖 a驱动的符号表(Module.symvers),解决这种问题,目前知道两种办法:

方法1:将a驱动下面的Module.symvers拷贝到b驱动构建目录下面,再进行编译

方法2:makefile里面加上,KBUILD_EXTMOD=构建a驱动的绝对路径

模块编译时,寻找使用的符号

  • a.在本模块中符号表中,寻找符号(函数或变量实现)
  • b.在内核全局符号表中寻找
  • c.在模块目录下的Module.symvers文件中寻找 

参考:

手把手教Linux驱动1-模块化编程_要求:掌握linux模块编程技术,了解linux驱动编程与编译。 内容: 第一步(必做):在li-CSDN博客

手把手教Linux驱动2-之模块参数和符号导出_linux 引用其他模块导出来的符号-CSDN博客

 内核Module.symvers文件揭秘 - Linux内核编程 | 宅学部落 (zhaixue.cc)

Linux设备驱动的模块化之路-CSDN博客

linux 内核模块声明 MODULE_LICENSE_module liciense-CSDN博客

http://www.yayakq.cn/news/607278/

相关文章:

  • 上海网站建设品南宁住房和城乡建设局网站
  • 网站建设公司联系电话做网站必要性
  • 网站建设百度资源成都定制网站建设地址
  • 返利网站开发一般要多少钱创意设计英文翻译
  • 提供手机网站怎么做软件跟网站开发的区别
  • dedecms 网站地图xml官网设计报价
  • 怎么利用360域名做网站无锡网站制作8
  • 在线看seo网站创建公司官网
  • 做网店的网站两个路由器做双网站
  • 网站建设的公司都有哪些企业网站设计开题报告
  • 网站建设公司网站源码网站集约化建设的建议
  • 网站建设估价个人免费网站平台哪个好
  • 大连网站建设比较好的公司建行移动门户官网
  • 网站怎么做交易公众号里链接的网站怎么做的
  • dedecms 网站首页标签react可以做门户网站么
  • 网站建设公司熊掌号怎么做漫画网站
  • 网站开发流程及顺序is_category wordpress
  • 福建有没有网站做鞋子一件代发网站排名查询alexa
  • 网站建站方案书国内使用wordpress
  • 视频直播点播网站建设胶州网站搭建公司
  • 面包屑导航的网站制作网页需要学什么语言
  • 上海有哪些网站设计公司芜湖龙湖建设工程有限公司网站
  • 大连模板做网站家庭带宽100m做网站
  • 上海专业的网站建设公司排名咨询网站公司建设计划书
  • 东莞网站建设推广公司公司流程建设的意义
  • 展览会网站建设做网站需要的素材资料
  • 化妆品网站建设预算明细表王野天图片
  • mvc 做网站网站备案 接入商名称
  • 公司创建一个网站需要多少钱电商app制作平台
  • 常见的网站开发工具网站内部服务器错误