Linux驱动的两种载入方式过程分析
一、概念简述
在Linux下能够通过两种方式载入驱动程序:静态载入和动态载入。
静态载入就是把驱动程序直接编译进内核。系统启动后能够直接调用。静态载入的缺点是调试起来比較麻烦,每次改动一个地方都要又一次编译和下载内核,效率较低。
若採用静态载入的驱动较多,会导致内核容量非常大,浪费存储空间。
动态载入利用了Linux的module特性,能够在系统启动后用insmod命令加入模块(.ko),在不须要的时候用rmmod命令卸载模块,採用这样的动态载入的方式便于驱动程序的调试,同一时候能够针对产品的功能需求。进行内核的裁剪,将不须要的驱动去除。大大减小了内核的存储容量。
在台式机上,一般採用动态载入的方式;在嵌入式产品里。能够先採用动态载入的方式进行调试,调试成功后再编译进内核。
二、实例分析
以下以Linux下音频驱动的载入为例,分析两种方式的载入过程。
1、静态载入
1)解压内核,改动硬件架构和编译器;
将内核压缩文件linux-2.6.8.1-zzm.tar.bz2解压到/home/sxy/文件夹下,命令是。解压后得到内核源代码文件夹文件linux-2.6.8.1-zzm,进入该文件夹,编辑Makefile文件,将ARCH改为arm。CROSS_CPMPILE改为arm-linux-,例如以下图所看到的:
保存后退出。
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下载到开发板上,验证是否能驱动声卡的步骤例如以下:
说明:首先。将虚拟机下的/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文件里定义了依赖关系,也能够查找到问题的解决办法。
2014年6月21日星期六11时25分
Linux驱动的两种载入方式过程分析的更多相关文章
- Linux驱动的两种加载方式过程分析
一.概念简述 在Linux下可以通过两种方式加载驱动程序:静态加载和动态加载. 静态加载就是把驱动程序直接编译进内核,系统启动后可以直接调用.静态加载的缺点是调试起来比较麻烦,每次修改一个地方都要重新 ...
- TQ2440学习笔记——Linux上I2C驱动的两种实现方法(1)
作者:彭东林 邮箱:pengdonglin137@163.com 内核版本:Linux-3.14 u-boot版本:U-Boot 2015.04 硬件:TQ2440 (NorFlash:2M Na ...
- Linux中的两种守护进程stand alone和xinetd
Linux中的两种守护进程stand alone和xinetd --http://www.cnblogs.com/itech/archive/2010/12/27/1914846.html#top 一 ...
- Linux共享库两种加载方式简述
Linux共享库两种加载方式简述 动态库技术通常能减少程序的大小,节省空间,提高效率,具有很高的灵活性,对于升级软件版本也更加容易.与静态库不同,动态库里面的函数不是执行程序本身 的一部分,而是 ...
- Linux 服务管理两种方式service和systemctl
Linux 服务管理两种方式service和systemctl 1.service命令 service命令其实是去/etc/init.d目录下,去执行相关程序 # service命令启动redis脚本 ...
- python执行linux命令的两种方法
python执行linux命令有两种方法: 在此以Linux常用的ls命令为例: 方法一:使用os模块 1 2 3 shell# python >> import os >> ...
- Mac Item2 SSH免密登录Linux 服务器的两种方式
转自http://blog.csdn.net/jobschen/article/details/52823980 mac ssh登录linux服务器 的两种方式: 个人推荐第二种,zsh方式,只需要把 ...
- Linux以下的两种文件锁
文件锁是一种文件读写机制.在不论什么特定的时间仅仅同意一个进程訪问一个文件. 利用这样的机制可以使读写单个文件的过程变得更安全. 在这篇文章中.我们将探讨Linux中不同类型的文件锁,并通过演示样例程 ...
- Linux 下的两种分层存储方案
背景介绍 随着固态存储技术 (SSD),SAS 技术的不断进步和普及,存储介质的种类更加多样,采用不同存储介质和接口的存储设备的性能出现了很大差异.SSD 相较于传统的机械硬盘,由于没有磁盘的机械转动 ...
随机推荐
- bootstrap3中container与container_fluid的区别
.container与.container_fluid是bootstrap中的两种不同类型的外层容器,按照官方的说法,这两者的区别是: .container 类用于固定宽度并支持响应式布局的容器. . ...
- webpack4打包报错:WARNING in configuration The 'mode' option has not been set, webpack will fallback to 'production' for this value. Set 'mode' option to 'development' or 'production' to enable defaults fo
运行命令webpack ./src/main.js ./dist/murenziwei.js后,目录上神马动静都没有,你以为在dist文件夹上会有murenziwei.js吗?毛都没有 警告和错误倒是 ...
- python的Web框架,html分页
使用简单的算法得出页码数,然后在html中获取即可.仅供参考. views的写法 def crm_stu(request): section = '教师后台管理页' search = request. ...
- 【学习笔记】深入理解async/await
参考资料:理解javaScript中的async/await,感谢原文作者的总结,本文在理解的基础上做了一点小小的修改,主要为了加深自己的知识点掌握 学完了Promise,我们知道可以用then链来解 ...
- 菜鸟入门【ASP.NET Core】13:Individual authentication 模板、EF Core Migration
Individual authentication 模板 我们首先用VSCode新建一个mvc的网站,这个网站创立的时候回自动为我们创建Identuty Core以及EF Core的代码示例,我们可以 ...
- ajax 跨域----好用的解决方案
一.前言 跨域这个词就一直以很高的频率在身边重复出现,一直到现在,已经调试过N个跨域相关的问题了! 但是感觉还是差了点什么,于是现在重新梳理了一下.个人见识有限,如有差错,请多多见谅 二.前言 关于跨 ...
- [android] 手机卫士自定义组合控件
设置中心 新建SettingActivity 设置GridView条目的点击事件 调用GridView对象的setOnItemClickListenner()方法,参数:OnItemClickList ...
- java_有秒计时的数字时钟
题目内容: 这一周的编程题是需要你在课程所给的时钟程序的基础上修改而成.但是我们并不直接给你时钟程序的代码,请根据视频自己输入时钟程序的Display和Clock类的代码,然后来做这个题目. 我们需要 ...
- HDU5887(SummerTrainingDay01-D)
Herbs Gathering Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- canvas-color的几种设置
#ffff #642 = #664422 rgb(255,128,0) rgba(100,100,100,0.8) hsl(20,62%,28%) hsla(40,82%,33%,0.6) red