Linux设备驱动动态插入内核与直接集成到内核方式的利弊分析

Linux设备驱动动态插入内核与直接集成到内核方式的利弊分析

引子:公司做了一款基于Linux的以太网接口板,目前由我来进行维护,该板主CPU采用PowerPC,运行Linux系统,外接两块DPRAM,DPRAM是用字符设备驱动程序的方式写的,直接集成在了内核源代码中,通过和内核一块编译来进行烧录,接手该板的相关程序后,我和同事探讨了一下将DPRAM的驱动为什么采用集成到内核随内核整体编译而么有采用单独编译动态加载的方式的问题,今天自己又简单的总结了一下,于是有了此篇BOLG。

正文:

  在Linux环境开发设备驱动程序,要使驱动能共正常工作,主要有两种方式,

  第一种是集成到内核,随内核一起编译。即将开发完的设备驱动程序文件(C、H文件)直接放在Linux内核源代码的相关目录下(比如开发的网络设备驱动程序,可以放在/net目录下),在编译内核的时候直接随内核一块编译。

  第二种是单独编译,动态插入内核。即将开发完成的设备驱动程序文件(C、H文件)直接用gcc工具(或交叉工具链)进行编译,然后通过insmod(插入内核)或者(rmmod)从内核卸载的方式进行使用或删除,在做最后的产品时,一般会通过写一个脚本文件,使得系统在上电的时候能够自动的insmod相关驱动程序。

  好了,介绍完了Linux设备驱动程序常见的两种开发、加载方式,下面对这两种方式进行一下对比,还是采用表格的形式吧,更加直观明了。

方式 优点 缺点
集成到内核

1、直接随内核一块编译,过程相对简单,可以通过Linux的menuconfig进行配置。

2、不需要写初始化脚本。

3、对于开发完成的比较稳定的设备驱动程序,可以随内核编译成一个内核文件,便于量产时的烧录。

1、对Linux内核进行了一定的修改,使得系统的不稳定性增加。

2、每次设备驱动程序发生改变后都要重新编译内核,效率较低,不适合开发、调试阶段。

动态插入到内核

1、设备驱动程序可以动态的插入、卸载,一旦驱动程序出现问题,方便了驱动程序的调试。

2、没有改变内核的配置文件,对系统的稳定性影响较小。

1、需要对设备驱动程序进行单独编译,还要写系统上电的初始化脚本,工作量较大。

2、在实际的生产过程中,除了要烧录Linux内核文件外,还要单独烧录设备驱动程序文件,工序复杂,不适合量产。

  以上就是我自己对这两种方式的一点总结,初学设备驱动程序,有不对的地方还望各位大牛指正,多谢:)

 
 
分类: Linux开发
原文地址:https://www.cnblogs.com/Leo_wl/p/3015985.html