Linux驱动的两种安装⽅式小昭寺
Linux驱动的两种安装⽅式
⼀、概念简述
在下可以通过两种⽅式加载驱动程序:静态加载和动态加载。
高铁乘务员静态加载就是把驱动程序直接编译进内核,启动后可以直接调⽤。静态加载的缺点是调试起来⽐较⿇烦,每次修改⼀个地⽅都要重新编译和内核,效率较低。若采⽤静态加载的驱动较多,会导致内核容量很⼤,浪费存储空间。
动态加载利⽤了Linux的module特性,可以在系统启动后⽤insmod命令添加模块(.ko),在不需要的时候⽤rmmod命令卸载模块,采⽤这种动态加载的⽅式便于驱动程序的调试,同时可以针对产品的功能需求,进⾏内核的裁剪,将不需要的驱动去除,⼤⼤减⼩了内核的存储容量。
在台式机上,⼀般采⽤动态加载的⽅式;在嵌⼊式产品⾥,可以先采⽤动态加载的⽅式进⾏调试,调试成功后再编译进内核。
⼆、实例分析
下⾯以Linux下⾳频驱动的加载为例,分析两种⽅式的加载过程。
如何下载网页视频1、静态加载
中国与俄罗斯的时差1)解压内核,修改硬件架构和编译器;
保存后退出。
2)配置内核;
在内核源码树⽬录下,输⼊make menuconfig命令,进⼊内核配置界⾯,进⼊“Load an Alternate Configuration File”选项,载⼊配置⽂件kernel_2410.cfg,保存退出,过程如下图所⽰:
再次输⼊make menuconfig命令,编辑sound选项,将其编译进内核(*),结果如下图所⽰,最后保存配置,退出。
3)编译内核;
在源码树⽬录下输⼊make zImage命令,编译完成后可以在/arch/arm/boot/⽬录下⽣成zImage镜像⽂件。
4)下载内核
将内核镜像⽂件zImage下载到开发板上,当串⼝终端显⽰如下信息时,表⽰驱动加载成功。
2、动态加载
1)解压内核,过程与静态编译时⼀样,略;
2)配置内核,前⾯过程与静态编译时⼀样,再次输⼊命令make menuconfig,配置sound选项时,将其编译成模块(M),结果如下图所⽰,最后保存配置,退出;
这样就将声卡驱动编译成模块,可以动态选择是否加载到内核中。
3)下载内核
将内核镜像⽂件zImage下载到开发板上,验证能否驱动声卡的过程如下:
火炬之光2冰法师加点说明:⾸先,将虚拟机下的/home/⽬录挂载到开发板上的/tmp/⽬录下,然后先后加载soundcore.ko和 s3c2410-oss.ko两个模块,最后通过lsmod命令查看是否加载上声卡驱动,结果显⽰加载成功,这样就可以在应⽤空间编程,实现⾳频的录放等操作。
PS:①采⽤make menuconfig命令时,选项*代表Y,表⽰将驱动编译进内核;M表⽰将驱动编译成模块;空代表N,表⽰不编译;
②内核⽂件与模块两者有很多东西必须匹配,编译器版本、源码版本、编译时的配置等,所以当内核⽂件修改了,譬如修改了驱动的编译选项(Y、M、N),那么就必须重新编译和下载内核,否则会出错。
三、遇到的问题
问题:动态加载过程中,出现下⾯错误:
错误:注册和注销设备的符号未知。笔记本的触摸板失灵
解决⽅法:寻依赖关系,查看⼏个符号的定义,发现在soundcore.c⽂件中定义了以上⼏个函数,同时导出了符号,以register_sound_dsp为例,如下图所⽰:
所以应该先加载soundcore.ko,后加载s3c2410-oss.ko。
注意:在Kconfig和Makefile⽂件中定义了依赖关系,也可以查到问题的原因。
2016年10⽉17⽇星期⼀12时22分
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论