linux驱动内核哪个文件夹,Linux驱动的两种载入方式过程分析

一、概念简述

在Linux下能够通过两种方式载入驱动程序:静态载入和动态载入。

静态载入就是把驱动程序直接编译进内核。系统启动后能够直接调用。静态载入的缺点是调试起来比較麻烦,每次改动一个地方都要又一次编译和下载内核,效率较低。

若採用静态载入的驱动较多,会导致内核容量非常大,浪费存储空间。

动态载入利用了Linux的module特性,能够在系统启动后用insmod命令加入模块(.ko),在不须要的时候用rmmod命令卸载模块,採用这样的动态载入的方式便于驱动程序的调试,同一时候能够针对产品的功能需求。进行内核的裁剪,将不须要的驱动去除。大大减小了内核的存储容量。

在台式机上,一般採用动态载入的方式;在嵌入式产品里。能够先採用动态载入的方式进行调试,调试成功后再编译进内核。

二、实例分析

以下以Linux下音频驱动的载入为例,分析两种方式的载入过程。

1、静态载入

1)解压内核,改动硬件架构和编译器;

将内核压缩文件linux-2.6.8.1-zzm.tar.bz2解压到/home/sxy/文件夹下,命令是

093c18ef28fc387375f77eb40abb3b1c.png。解压后得到内核源代码文件夹文件linux-2.6.8.1-zzm,进入该文件夹,编辑Makefile文件,将ARCH改为arm。CROSS_CPMPILE改为arm-linux-,例如以下图所看到的:

729f91d48ef8d2e289551f2a6a1283f3.png

保存后退出。

2)配置内核;

在内核源代码树文件夹下,输入make menuconfig命令,进入内核配置界面,进入“Load an Alternate Configuration File”选项,载入配置文件kernel_2410.cfg,保存退出。步骤例如以下图所看到的:

1828bc19d3594d00a5e367aaf8c53aa6.png

4f2178d4d19cc2febe182966aba8563f.png

4c73782b4fabea1c34a6bd806494884d.png

再次输入make menuconfig命令,编辑sound选项,将其编译进内核(*)。结果例如以下图所看到的。最后保存配置,退出。

352c74cd68a2307b31b32e6164ff4dc9.png

3)编译内核。

在源代码树文件夹下输入make zImage命令。编译完毕后能够在/arch/arm/boot/文件夹下生成zImage镜像文件。

4)下载内核

将内核镜像文件zImage下载到开发板上。当串口终端显演示样例如以下信息时,表示驱动载入成功。

2c03d99775b7d1cdab5fa37be50d7983.png

2、动态载入

1)解压内核,过程与静态编译时一样,略。

2) 配置内核,前面过程与静态编译时一样,再次输入命令make menuconfig,配置sound选项时,将其编译成模块(M),结果例如以下图所看到的。最后保存配置,退出;

98fd10e41c6cf2b847cb66247d7b8097.png

这样就将声卡驱动编译成模块,能够动态选择是否载入到内核中。

3)下载内核

将内核镜像文件zImage下载到开发板上,验证是否能驱动声卡的步骤例如以下:

cc742399440c0b2fd8d9050dd2effc42.png

说明:首先。将虚拟机下的/home/文件夹挂载到开发板上的/tmp/文件夹下。然后先后载入soundcore.ko和

s3c2410-oss.ko两个模块。最后通过lsmod命令查看是否载入上声卡驱动,结果显示载入成功,这样就能够在应用空间编程,实现音频的录放等操作。

PS:①採用make menuconfig命令时,选项*代表Y,表示将驱动编译进内核;M表示将驱动编译成模块;空代表N。表示不编译;

②内核文件与模块两者有非常多东西必须匹配,编译器版本号、源代码版本号、编译时的配置等。所以当内核文件改动了,譬如改动了驱动的编译选项(Y、M、N),那么就必须又一次编译和下载内核,否则会出错。

三、遇到的问题

问题:动态载入过程中,出现以下错误:

3daa0a3739ea820731afb6617776a2ee.png

错误:注冊和注销设备的符号未知。

解决方法:寻找依赖关系。查看几个符号的定义。发如今soundcore.c文件里定义了以上几个函数,同一时候导出了符号,以register_sound_dsp为例,例如以下图所看到的:

17d99086120966c9053895b8a9b53a0e.png

所以应该先载入soundcore.ko,后载入s3c2410-oss.ko。

注意:在Kconfig和Makefile文件里定义了依赖关系,也能够查找到问题的解决办法。

2014年6月21日星期六11时25分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值