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

苏州吴中网站建设公司网红助手24小时自助下单app

苏州吴中网站建设公司,网红助手24小时自助下单app,网络广告怎么投放,代做土木工程专业毕业设计网站软件环境#xff1a;Ubuntu20.04 Linux内核源码#xff1a;3.4.39 硬件环境#xff1a;GEC6818 什么是驱动#xff1f;简单来说就是让硬件工作起来的程序代码。 Linux驱动模块加载有两种方式#xff1a; 1、把写好的驱动代码直接编译进内核。 2、把写好的驱动代码编…软件环境Ubuntu20.04 Linux内核源码3.4.39 硬件环境GEC6818 什么是驱动简单来说就是让硬件工作起来的程序代码。 Linux驱动模块加载有两种方式 1、把写好的驱动代码直接编译进内核。 2、把写好的驱动代码编译成一个可加载的模块然后再插入到内核中。 我们一般都是使用第二种方式需要时加载不需要时卸载这样方便修改调试。 写驱动程序和应用程序不一样应用程序出现了问题像数组越界会有系统报错该应用程序停止运行而驱动程序是要加载到内核中出现问题可能会导致整个系统崩溃。 1、内核模块编程注意事项 1不能使用C语言库和C语言标准头文件 C语言库和C语言标准头文件pirntf函数stdio头文件等是应用层才有的而驱动作为底层是没有的。 2没有内存保护机制 3不能处理浮点运算 2、内核模块的编写 #include linux/module.h #include linux/kernel.h //加载函数 int hello_init(void) {printk(Hello World!\n);return 0; }//卸载函数 void hello_exit(void) {printk(Bye!\n); }//声明模块的入口和出口 module_init(hello_init); module_exit(hello_exit);//GPL模块许可证 MODULE_LICENSE(GPL); //模块作者 MODULE_AUTHOR(xin);   //版本号 MODULE_VERSION(1.0); //描述信息 MODULE_DESCRIPTION(this is a test module!); 首先包含2个驱动必须要的头文件。 #include linux/module.h        #include linux/kernel.h         加载函数 加载函数是没有参数返回值为int的一个函数其中函数名只要不和其他函数名起冲突随便起此外返回0表示加载成功。加载模块时自动调用加载函数当我们把驱动程序加载到内核中第一个就会进入加载函数有点像应用程序中的main()函数相当于程序的入口。 //加载函数 int xxx(void)    {     return 0; } 卸载函数 卸载函数是没有参数没有返回值的一个函数函数名也是随便起。卸载模块时自动调用卸载函数当我们把驱动程序从内核中卸载时就会进入到卸载函数中。  //卸载函数 void yyy(void) { } 使用宏来修饰加载函数和卸载函数 一个驱动程序中会有多个和加载函数和卸载函数相同结构的函数怎么样区分呢就需要使用宏来修饰加载和卸载函数了只有经过宏修饰的函数才会被认作是加载函数和卸载函数。一个驱动程序中只能有一个加载和卸载函数。 //修饰加载函数 module_init(xxx); //修饰卸载函数 module_exit(yyy); 注意 printk()是内核中的打印函数不要和printf()等打印函数搞错了但两者用法几乎差不多。 //GPL模块许可证 MODULE_LICENSE(GPL); 在编写内核模块时必须加上模块许可证防止污染内核造成某些功能无法使用。 GPL 是指明了 这是GNU General Public License的任意版本。 //模块作者 MODULE_AUTHOR(xin);   //版本号 MODULE_VERSION(1.0); //描述信息 MODULE_DESCRIPTION(this is a test module!); 除了模块许可证以外还可以加上模块作者版本号描述信息等信息就不一一列举了。 3、内核模块的编译 内核模块编译要是用它对应内核的编译方法来进行编译。 就是说要使用开发板中的Linux系统内核来编译例如使用GEC6818开发板想要把写好的驱动程序加载到该开发板的内核中就必须使用GEC6818开发板中Linux系统的内核源码来编译可以把驱动程序放入开发板中进行编译也可以把相应的内核源码必须是编译过的内核放进Ubuntu中然后在Ubuntu中进行编译再把编译好的模块放进开发板中。 编写Makefile文件 为什么要写Makefile文件呢Makefile是Make读入的唯一配置文件而Make是一个工程管理器所谓工程管理器就指用来管理较多文件的。可以想象一下当有一上百个文件的代码构成的项目如果其中只有一个或少数几个文件进行了修改由于编译器不知道哪些文件是最近更新的只知道需要包含这些文件才能把源代码编译成可执行文件于是程序员就不得不重新输入数目如此庞大的文件名以完成最后的编译工作。 这样就有了Make工程管理器实际上就是个”自动编译管理器“这里的“自动”是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量同时通过读入Makefile文件的内容来执行大量的编译工作。用户只需编写一次简单的编译语句就可以了。他大大提高了实际项目的工作效率而且几乎所有Linux下的项目编程均会涉及它。 以上大概讲述Make的由来和工作原理已经和Makefile的关系。我们暂时还不能接触到这么大的项目所以我们的Makefile文件会简单很多。 看一个简单的Makefile文件。 ifeq ($(KERNELRELEASE),)#内核源代码路径 KERNELDIR : /lib/modules/$(shell uname -r)/build #模块源代码路径 PWD : $(shell pwd)default:$(MAKE) -C $(KERNELDIR) M$(PWD) modules clean:rm -rf *.o *.ko *.mod .*.cmd *.mod.* modules.order Module.symvers .tmp_versionselse #obj-m表示编译生成可加载模块obj-y表示直接将模块编译进内核。 obj-m : hello.oendif ifeq ($(KERNELRELEASE),)  判断变量KERNELRELEASE是否为空KERNELRELEASE是在内核源码的顶层Makefile中定义的一个变量在第一次读取执行此Makefile时KERNELRELEASE没有被定义所以执行下面的代码。 KERNELDIR : /lib/modules/$(shell uname -r)/build 定义一个变量KERNELDIR 来存放内核源码的路径其中$(shell uname -r)是使用shell命令来打印系统的内核版本号。 ​ 这样就有完整的路径找到系统内核源码。 ​ PWD : $(shell pwd)  定义一个变量PWD来存放当前模块代码的路径。 $(MAKE) -C $(KERNELDIR) M$(PWD) modules $(MAKE)就是make。 -C 参数告诉make把工作目录切换到 /lib/modules/$(shell uname -r)/build/目录然后首先解析该目录下的顶层makefile。这保证了当前编译的模块与内核是适配的——使用相同的编译连接参数同时KERNELRELEASE会被定义。 然后是M参数M$(PWD)内核使用这个变量来确定要构建的外部模块的目录完成内核的编译配置的读取后在这个目录里完成模块的编译。 其实在指令中module表明的意思是把驱动编译成模块 rm -rf *.o *.ko *.mod .*.cmd *.mod.* modules.order Module.symvers .tmp_versions 这就很好理解了就是把该目录里所有后缀名为o、ko、mod等文件删除。 obj-m : hello.o obj-m表示以内核模块的形式单独编译生成可加载模块最终出现hello.ko的驱动文件。 当使用make命令后面不带参数是执行default语句而make命令后面带有clean参数则是执行clean语句。Makefile还有许多的语法大家感兴趣可自行百度。 执行Makefile流程make 第一次进入Makefile文件判断KERNELRELEASE为空执行default语句会跳转到内核源码的目录解析该目录下的顶层文件同时KERNELRELEASE会被定义然后跳转到之前的目录第二次进入Makefile文件。此时KERNELRELEASE不为空进入else语句编译生成可加载模块.ko驱动文件。 执行Makefile流程make clean 进入Makefile文件判断KERNELRELEASE为空执行clean语句删除目录下带有指定后缀名的文件。 4、模块的使用和基本命令 make编译模块 make clean:删除指定后缀名文件 insmod加载模块 lsmod:列出内核已载入模块的状态  modinfo: 显示内核模块的信息 dmesg: 显示内核的相关信息 rmmod: 卸载内核中指定的模块 其中加载和卸载模块的指令需要root权限。 以上是最简单的驱动程序和Makefile的编写以及模块的使用和基本命令以后复杂的驱动程序都是在此基础上增加修改大家可以在自己Ubuntu上编写测试一下把该模块加载到开发板上应该会出问题因为使用的Ubuntu中的内核源码来编译可以加载到Ubuntu中内核测试一下后续会有加载到开发板上和驱动程序和Makefile文件的编写教程。
http://www.w-s-a.com/news/742477/

相关文章:

  • 阜阳做网站的公司阳江招聘网最新消息
  • 织梦可以做哪些类型型网站wordpress 融资
  • 建设银行手机银行官方网站下载安装腾讯企点账户中心
  • 品牌设计网站有哪些商务网站建设平台
  • 新增网站备案时间什么是软件外包产业
  • 张家界做网站买了网站模版怎么做
  • 六安品牌网站建设怎么样知名商城网站建设报价
  • 怎么上传自己做的网站杭州网站建设公司平台
  • 网站开发程序是什么知名的电子商务网站
  • 做pc端网站好么平台推广是什么意思
  • 农业信息网站建设意义淘宝官网首页网址
  • 重庆网站设计公司价格贵阳网站建设app开发
  • dw做网站怎么换图片编写网页所用的语言是
  • 外贸网站收录工具个人网站的备案
  • 正规的网站建设工作室海外高延迟服务器做网站
  • 网站设计确认函合肥做网站维护的公司
  • 小说网站推荐网站开发语言怎么查
  • 网页制作基础教程慕课版电子版那种登录才能查看的网站怎么做优化
  • 制作网站用的域名网站域名注册信息查询
  • 公司域名查询官方网站女教师遭网课入侵直播录屏曝
  • 网站开发社交网络功能的作用腾讯公司网站
  • 网站建设需要微信账号和密码网站建设工作汇报
  • 国家城乡住房和建设部网站西安私人网站
  • 天津高端网站定制seo实战教程
  • 网站文章怎么做才能被快速收录网站备案核验系统
  • 子网站建设方案l建设银行网站
  • 免费看舆情网站网站备案用户名忘了怎么办
  • 地方门户网站的分类网站的方案
  • 沧州哪里做网站网站的建设是什么
  • 设计公司海报秦皇岛seo网站推广