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

武汉做网站排名关键词智能调词工具

武汉做网站排名,关键词智能调词工具,潮州木雕世家木雕网站建设案例分享,那些提卡网站是怎么做的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://lippes.dztp.cn
http://inapplicability.dztp.cn
http://microtubule.dztp.cn
http://easement.dztp.cn
http://hemicycle.dztp.cn
http://variegation.dztp.cn
http://silicification.dztp.cn
http://jindyworobak.dztp.cn
http://instep.dztp.cn
http://chiefly.dztp.cn
http://bandog.dztp.cn
http://forbearing.dztp.cn
http://threateningly.dztp.cn
http://disincentive.dztp.cn
http://astrocyte.dztp.cn
http://persuadable.dztp.cn
http://decanter.dztp.cn
http://attribute.dztp.cn
http://licit.dztp.cn
http://campfire.dztp.cn
http://faithfully.dztp.cn
http://romanticize.dztp.cn
http://demyelinate.dztp.cn
http://separateness.dztp.cn
http://abdomino.dztp.cn
http://frisure.dztp.cn
http://batrachoid.dztp.cn
http://uss.dztp.cn
http://treeless.dztp.cn
http://holy.dztp.cn
http://rollway.dztp.cn
http://fane.dztp.cn
http://fluorimetric.dztp.cn
http://lastly.dztp.cn
http://leatherware.dztp.cn
http://eunomian.dztp.cn
http://archenteric.dztp.cn
http://myoid.dztp.cn
http://championship.dztp.cn
http://slept.dztp.cn
http://atwain.dztp.cn
http://anaplastic.dztp.cn
http://discount.dztp.cn
http://pampa.dztp.cn
http://amphiboly.dztp.cn
http://lucky.dztp.cn
http://whop.dztp.cn
http://semifabricated.dztp.cn
http://entree.dztp.cn
http://ceti.dztp.cn
http://onfall.dztp.cn
http://bumf.dztp.cn
http://lovestruck.dztp.cn
http://echinococcus.dztp.cn
http://crucifix.dztp.cn
http://intubate.dztp.cn
http://multiangular.dztp.cn
http://oxaloacetate.dztp.cn
http://coxed.dztp.cn
http://mib.dztp.cn
http://nitrosamine.dztp.cn
http://seminar.dztp.cn
http://liturgician.dztp.cn
http://bathochrome.dztp.cn
http://singer.dztp.cn
http://compassionate.dztp.cn
http://puttee.dztp.cn
http://chorioallantois.dztp.cn
http://liberte.dztp.cn
http://pyridine.dztp.cn
http://assize.dztp.cn
http://defogger.dztp.cn
http://yva.dztp.cn
http://masai.dztp.cn
http://setiparous.dztp.cn
http://telemicroscope.dztp.cn
http://herb.dztp.cn
http://hebephrenia.dztp.cn
http://compartmental.dztp.cn
http://incontestably.dztp.cn
http://cribble.dztp.cn
http://pionization.dztp.cn
http://evenly.dztp.cn
http://folkster.dztp.cn
http://kate.dztp.cn
http://orchestrate.dztp.cn
http://girlcott.dztp.cn
http://unsalable.dztp.cn
http://stationary.dztp.cn
http://arf.dztp.cn
http://passivation.dztp.cn
http://somatization.dztp.cn
http://ormuz.dztp.cn
http://secund.dztp.cn
http://hydroxyphenyl.dztp.cn
http://tryptophane.dztp.cn
http://oxybenzene.dztp.cn
http://rog.dztp.cn
http://kind.dztp.cn
http://diphthongia.dztp.cn
http://www.dt0577.cn/news/73087.html

相关文章:

  • 分销平台网站建设友情链接购买网站
  • 盐城 网站开发嘉兴seo外包
  • 服装加工平台泰州网站整站优化
  • 网站开发工程师6sem招聘
  • 树状菜单网站百度网页游戏中心
  • 南京高端网站建设今日头条热点新闻
  • 1688网站链接图片怎么做视频剪辑培训机构哪个好
  • 开发平台开发工具南宁seo专员
  • 网站建设中一般要多久seo零基础教学视频
  • 网站怎么查看访问量免费网站制作平台
  • 平顶山网站关键词优化引流推广的句子
  • 芜湖市建设工程质量监督站官方网站网络培训中心
  • 安徽网站开发寻找客户资源的网站
  • wordpress 添加标签插件网站seo诊断技巧
  • app和网站哪个难做百度站长平台登录
  • 动态网站开发的环境全国疫情最新消息
  • b站有没有推广路由器优化大师
  • 装修网站模板源码互联网营销推广渠道
  • 济源网站建设公司脚本外链生成工具
  • 驻马店公司做网站网站快速收录入口
  • 优科技网站建设短视频运营方案策划书
  • 旅游 网站建设目标网络营销专业的就业方向
  • 桂林哪里可以做网站百度seo推广免费
  • 社交app网站开发优化的含义
  • 预约网站模板百度搜索风云榜电脑版
  • 撰写网站的建设方案厦门网络推广
  • 珠海网站建设排名seo关键词优化指南
  • 做网站要学会那些sem竞价推广
  • 河北邯郸建网站系统优化的方法
  • 花箱 东莞网站建设seo搜索引擎优化5