linux系统把驱动编译成.ko模块 insmod动态加载
介绍:
Linux 驱动有两种运行方式,第一种就是将驱动编译进 Linux 内核中,这样当 Linux 内核启动的时候就会自动运行驱动程序。第二种就是将驱动编译成模块(Linux 下模块扩展名为.ko),在Linux 内核启动以后使用“insmod”命令加载驱动模块。在调试驱动的时候一般都选择将其编译为模块,这样我们修改驱动以后只需要编译一下驱动代码即可,不需要编译整个 Linux 代码。而且在调试的时候只需要加载或者卸载驱动模块即可,不需要重启整个系统。总之,将驱动编译为模块最大的好处就是方便开发,当驱动开发完成,确定没有问题以后就可以将驱动编译进Linux 内核中,当然也可以不编译进 Linux 内核中,具体看自己的需求。
在SDX12系统中,音频是分为很多模块然后以模块加载的形式来,跟MDM9X07架构区别很大,所以要注意boot和system要用同一目录生成的文件,否则会出现boot和system不匹配的现象,造成audio模块加载失败。因为模块的地址变了
查看系统已经加载了哪些模块?
lsmod
/ # lsmod
lsmod
Module Size Used by
machine_dlkm 36864 0
snd_soc_nau8810 32768 0
snd_soc_rt5616 40960 0
snd_soc_rl6231 16384 1 snd_soc_rt5616
wsa881x_dlkm 45056 0
wcd9335_dlkm 290816 0
swr_ctrl_dlkm 24576 1 wcd9335_dlkm
wcd9xxx_dlkm 49152 1 wcd9335_dlkm
mbhc_dlkm 36864 1 wcd9335_dlkm
wcd_core_dlkm 118784 4 wcd9xxx_dlkm,machine_dlkm,wsa881x_dlkm,wcd9335_dlkm
stub_dlkm 16384 1
swr_dlkm 24576 2 swr_ctrl_dlkm,wsa881x_dlkm
platform_dlkm 1339392 21
r8168 196608 0
r8125 131072 0
q6_dlkm 741376 6 wcd9xxx_dlkm,machine_dlkm,platform_dlkm,swr_ctrl_dlkm
adsp_loader_dlkm 16384 0
apr_dlkm 131072 4 q6_dlkm,platform_dlkm,adsp_loader_dlkm,wcd9335_dlkm
snd_event_dlkm 16384 4 q6_dlkm,machine_dlkm,apr_dlkm,wcd9335_dlkm
q6_notifier_dlkm 16384 1 apr_dlkm
wlan_sdio 4612096 0
rmnet_core 159744 1
查看本地有哪些模块
find -name *.ko
/ # find -name *.ko
find -name *.ko
./usr/lib/modules/3.18.120-perf/kernel/net/key/af_key.ko
./usr/lib/modules/3.18.120-perf/kernel/net/netfilter/xt_physdev.ko
./usr/lib/modules/3.18.120-perf/kernel/block/test-iosched.ko
./usr/lib/modules/3.18.120-perf/kernel/crypto/ansi_cprng.ko
./usr/lib/modules/3.18.120-perf/kernel/drivers/mmc/card/mmc_test.ko
./usr/lib/modules/3.18.120-perf/kernel/drivers/mmc/card/mmc_block_test.ko
./usr/lib/modules/3.18.120-perf/kernel/drivers/net/phy/at803x.ko
./usr/lib/modules/3.18.120-perf/kernel/drivers/net/phy/qca8337.ko
./usr/lib/modules/3.18.120-perf/kernel/drivers/net/phy/bcm898xx.ko
./usr/lib/modules/3.18.120-perf/kernel/drivers/net/ethernet/qualcomm/emac/qcom_emac.ko
./usr/lib/modules/3.18.120-perf/kernel/drivers/net/nf_conntrack_rtsp.ko
./usr/lib/modules/3.18.120-perf/kernel/drivers/net/nf_nat_rtsp.ko
./usr/lib/modules/3.18.120-perf/kernel/drivers/spi/spi-multi-chn.ko
./usr/lib/modules/3.18.120-perf/kernel/drivers/spi/spidev.ko/ # insmod ./usr/lib/modules/3.18.120-perf/kernel/drivers/spi/spi-multi-chn.ko
insmod ./usr/lib/modules/3.18.120-perf/kernel/drivers/spi/spi-multi-chn.ko
加载模块
insmod drv.ko
insmod 命令不能解决模块的依赖关系,比如 drv.ko 依赖 first.ko 这个模块,就必须先使用insmod 命令加载 first.ko 这个模块,然后再加载 drv.ko 这个模块。但是 modprobe 就不会存在这个问题, modprobe 会分析模块的依赖关系,然后会将所有的依赖模块都加载到内核中,因此modprobe 命令相比 insmod 要智能一些。 modprobe 命令主要智能在提供了模块的依赖性分析、错误检查、错误报告等功能,推荐使用 modprobe 命令来加载驱动。
modprobe -r drv.ko
卸载模块
rmmod drv
linux系统把驱动编译成.ko模块 insmod动态加载相关推荐
- Linux 2.6内核的编译步骤及模块的动态加载
本文是基于2.6的内核,也建议各位可以先看一下<Linux内核设计与实现(第二版)>作为一个基础知识的铺垫.当然,从实践角度来看,只要按着以下的步骤去做也应该可以实现成功编译内核及加载模块 ...
- linux ko模块插入自加载方法
在1804上验证成功 主要是usb无线网卡等希望插上去能自动加载驱动. 方法很简单: 将编译好的(驱动)ko 拷到 /lib/modules/<your kernel version>/k ...
- android 模块自动加载,Android 之ko模块的自动加载
最近在做一个触摸式遥控器,以控制Android TV,供应商提供了触摸板驱动的source code,我将其编译生成一个适合我们平台的ko模块.但是有个问题,每次用时,必须手动insmod进去,很麻烦 ...
- linux系统css样式加载不出,Linux系统虚拟主机网站访问页面css样式文件加载失败或图片无法显示的分析解决...
问题场景:客户使用Linux系统虚拟主机,网站程序上传之后访问发现页面排版有问题,css样式文件加载失败,部分图片显示不出来,以织梦CMS程序为例,如下图所所示: 问题原因: 1.Linux系统虚拟主 ...
- Linux系统下iso文件的制作和解压以及加载
linux下iso文件的制做和解压 1. 制作ISO镜像文件 切换为root账户,执行命令 1 cp /dev/cdrom XXXXX.iso XXXXX.iso即为需要命名的ISO文件名.执行之后, ...
- Extjs创建多个application实现多模块MVC动态加载。。
这几天用extjs4.1做项目,有很多功能模块,使用mvc开发,系统有很多功能模块.如果用一个application进行开发,那么所有功能模块的js都得全部加载....很恐怖.. 例如: 图片 Ext ...
- Linux系统 安装飞桨PaddleHub+LAC实现词法分析 实现加载自定义词典分词 (解决Lac服务启动报错问题、解决自定义词典空格无法分词问题)
1.先上链接:飞桨PaddlePaddle-源于产业实践的开源深度学习平台 2.LAC模型简介:Lexical Analysis of Chinese,简称 LAC,是一个联合的词法分析模型,能整体性 ...
- 【游戏逆向】FPS游戏自瞄透视模块动态加载分析
用OD附加游戏进程, 进入OD主界面以后,我们CTRL+G 跳转到地址00401000(系统默认通常游戏领空的起始地址)的时候发现了错误. 也就是说代码段不在这了, 那跑哪去了? 为什么会有这样的错误 ...
- react 动态修改路由_升级到 React Router 4 并实现动态加载和模块热替换
这篇文章是升级到Webpack2坑--模块热替换失效页面不自动刷新?的后续.那篇文章主要说明了,升级到 Webpack 2 之后,通过升级webpack-dev-server和react-hot-lo ...
最新文章
- 安卓webview子线程网络请求,怎么获得结果?
- 十三、开多线程,咱们一起来斗图
- iPhone Safari下iframe不显示滚动条无法滚动的解决方法
- Java黑皮书课后题第7章:*7.1(指定等级)编写一个程序读入学生成绩,得到最高分best,然后根据下面的规则给出等级值。程序提示用户输入学生总数,然后提示用户输入所有的分数,最后显示等级给出结论
- xshell链接kali
- UGUI 下拉滚动框
- 跟计算机断层扫描相关的技术,计算机断层扫描技术(简称PET)
- python菱形画法解释_用Python画棱形
- 鸿蒙有安卓内核吗,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪
- jest 单元测试模拟模块设置动态值
- JavaScript学习笔记之DOM篇,带你全面了解什么是DOM
- 分布式一致性算法2PC和3PC
- python怎么调用函数的返回值_python函数的返回值是什么
- Qt QImage实现频谱图绘制
- 《操作系统真象还原》第十三章 ---- 编写硬盘驱动软件 行百里者半九十终成时喜悦溢于言表
- Typora+smms+picGo(app) 图床使用办法
- Android N 截图曝光,手机也能同屏多任务了!
- mysql 主从复制 error 1677
- php足疗预约,足浴养生管理系统轻松实现各种线上预约功能?
- 2017年做微商如何赚钱
热门文章
- ResultTransformer deprecated 替代方案及HQL无法使用子查询解决
- 微信小程序+.NET(十四) 悦听小说小程序(待续)
- 云管升级助力海格通信创新之路提速-嘉为案例
- MySQL连接数据库url的参数characterEncoding=UTF-8
- 读《人体使用手册》(吴清忠 著)有感
- igrimaceV8.0.0 IG 一键新机 陌陌 Uber优步打针 平安易贷 滴滴 一号专车 饿了么 ios8 V8 ZTN(插件安装方式)
- TextView行间距设置
- pikachu靶场暴力破解专题
- c语言fscanf读取结构体变量,怎样用fscanf读入结构体变量
- 基于PLC数控钻床控制系统设计(说明书+开题报告+CAD 接线图 梯形图 原理图)