linux下播放midi文件需要linux加载阵列卡驱动哪些驱动

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(6473)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'让 Linux 启动时加载自己的驱动模块 .ko',
blogAbstract:'&整个开机流程是(1) 载入BIOS的硬件信息,并取得第一个开机装置的代号(2)读取第一个开机装置的MBR的boot Loader (grub)的开机信息(3)载入OS Kernel信息,解压Kernel,尝试驱动硬件(4) Kernel执行init程序并获得run-lebel信息(如3或5)(5) init执行/etc/rc.d/rc.sysinit(6)启动内核外挂模块(/etc/modprobe.conf)(/etc/profile)(7) init执行run-level的各种Scripts,启动服务(8) init执行/etc/rc.d/rc.local(9)执行/bin/login,等待用户Login(10)Login后进入Shell正确的方式是把需要加载的模块放在(5)或(6),',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:1,
publishTime:7,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}本帖子已过去太久远了,不再提供回复功能。博客访问: 943484
博文数量: 692
博客积分: 0
博客等级: 民兵
技术积分: 2635
注册时间:
认证徽章:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: 嵌入式
一、概念简述
在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文件中定义了依赖关系,也可以查找到问题的原因。
阅读(746) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 linux 播放midi 的文章

 

随机推荐