如何在linux中添加新的kernel module

该SOP针对客户如何添加一个kernel module,并把生成的.ko打包进system.img的过程。

解决方案

L版本(version>=5.0)支持编译为内核moudle(.ko文件)的config选项默认是关闭的。

因此,如在L版本上编译.ko文件,需先在项目defconfig文件中打开内核配置选项CONFIG_MODULES。

(一)准备module的C文件,如下为一个示例:

(二)把准备好的C 文件放置到alps/kernel的适当路径下,如下的路径为一个示例:

(三)修改源码所在的上一级目录中的Makefile文件,如下示例为./kernel/drivers/ 路径下的Makefile:

(四)在源码所在路径下,创建新的Makefile文件,如下为一个示例:

obj-m 目标中的-m参数表明所添加模块为动态加载模块,即.ko类型。

(五)快速编译所添加的模块

L之前版本参考命令如下:

编译完成后,会在./kernel/drivers/testmod/路径下,生成helloworld.ko文件:

如果在./kernel/drivers/testmod/路径下,没有helloworld.ko文件,可能是因为不同的工程设置,编译的.o文件位置不同,可以在alps路径下执行 find ./kernel/out -name xxx.ko。

L及之后版本:

(1)可以通过编译kernel或boot.img时生成.ko,参考命令make bootimage ,生成文件将在out 下的KERNEL_OBJ对应driver目录下。

(2)也可以采用build module的方式,方法请参考FAQ13428,不过在编译时需要加modules 参数。如:

make ARCH=arm64 -j8 O=out drivers/misc/mediatek/eccci/    modules

(六)快速打包所生成的模块

6-1 把生成的.ko文件拷贝到./out/target/product/$(PROJECT)/system/lib/modules

6-2 执行打包命令

L之前版本参考以下命令;

L版本打包system.img的命令为:

make snod 或make systemimage-nodeps.

则helloworld.ko将被打包进system.img

Android 驱动(17)---如何在linux中添加新的kernel module相关推荐

  1. linux 添加新的系统调用,如何在Linux中添加新的系统调用

    如何在Linux中添加新的系统调用 2010-01-29 eNet&Ciweek #define __NR_mycall 191 系统调用号为191,之所以系统调用号是191,是因为Linux ...

  2. ubuntu添加路由_如何在Ubuntu,Linux中添加新路由?

    ubuntu添加路由 I have a box with Ubuntu Linux and I want to add a new route to my box. Because I want to ...

  3. wordpress添加媒体_如何在WordPress中添加新帖子并利用所有功能

    wordpress添加媒体 Are you trying to create a new post in WordPress? Do you want to learn about all the W ...

  4. 如何在OpenWrt中添加新的profile【以百度音乐盒为例】

    一个profile包含了一个或者多个路由器型号,一般来说,同一个厂家的路由器定义,会放在同一个profile中. 下面就以添加百度音乐盒为例: 添加一个baidu.mk文件,路径如下图: 里面的内容如 ...

  5. 怎么给当前计算机添加一个用户,如何在win7中添加新账户 2种创建win7新用户方法总结...

    对于很多家庭电脑或者共用电脑用户来说,往往会在电脑中创建多个登录用户,以满足不同用户不同桌面需求.那么在日常电脑使用过程中,我们应该如何计算机添加新账户呢?接下来脚本之家编辑针对时下最流行的Win7系 ...

  6. 怎样在linux中创建硬盘,在linux中添加新硬盘并创建LVM组

    1.以虚拟机为例,给虚拟机添加一块新硬盘,并创建LVM组,将新硬盘用于存放oracle数据库文件. 2.fdisk -ll查看新添加的硬盘是否被识别,如图已经识别出sdb. 3.# pvcreate ...

  7. 如何在xcode中添加新字体【ttf】

    1. 将你的font的ttf文件导入到项目里. 2. 找到项目的info.plist文件. 如果你没有手动修改过上述的文件,它的默认名字应该是[项目名]-info.plist 3. 在该plist里添 ...

  8. OBS 基础 16 如何在CMake中添加新的lib库、头文件等

    目录 一.OBS项目 1.新增的.h  .cpp文件 .h .cpp .ui 2 新增 的 include路径 3 新增的li

  9. linux上无法发送163邮件,如何在linux中发送邮件,使用163邮箱发信。

    linux中,可以使用mail命令往外发送邮件,在使用前,只需要指定如下简单配置即可,这里演示用  163.com    邮箱发送至 qq.com 编辑 /etc/mail.rc,写入下方的参数 se ...

最新文章

  1. poj1905(二分查找)
  2. 设计模式(访问者模式)
  3. java 基于tcp客户端服务端发送接收数据
  4. 大数据系列文章-Hadoop的HDFS读写流程(二)
  5. html叠加层,JavaScript实现多个重叠层点击切换效果的方法
  6. 学习日常笔记day12jsp基础
  7. java消除整型数组中重复的元素,排序后输出新数组
  8. ngx-bootstrap使用04 carousel组件
  9. 查看php-fpm进程数_查看php-fpm开启的进程数以及每个进程的内存限制
  10. python列表姓氏,Python程序可以打印完整姓氏的名字的缩写吗?
  11. 无Xaml的WPF展示
  12. Waymo已经开始绘制亚特兰大地图数据,自动驾驶汽车路测地点又添新城
  13. 俄罗斯方块c语言教程codeblocks,C语言俄罗斯方块修改结尾
  14. 手机抢答器正在替代传统抢答器
  15. C语言链表与指针的知识点,C/C++知识点之C语言链表详解
  16. UMTS基础知识汇总
  17. 怎么能快速学会计算机,初学者怎样学习电脑能够快速入门(免费科普电脑基础知识)...
  18. qq第三方登录所需appid
  19. 从事互联网经营就要办理icp许可证吗
  20. 用Wireshark抓包分析协议 计算机网络

热门文章

  1. mysql报错注入实战_手工注入——MySQL手工注入实战和分析
  2. Linux GPIO
  3. STM32学习——GPIO的操作
  4. XXX.C(261): error C100: unprintable character 0xA1/3 skipped
  5. 用anaconda保证64位和32位的python共存
  6. QT5开发及实例学习之十二Qt5图像坐标变换
  7. java面试中mysql_面试官:Mysql 中主库跑太快,从库追不上怎么整?
  8. 云端服务器怎么维护,云端服务器怎么维护
  9. c语言ics什么意思,[转载]C网来话筛选(ICS)业务及实现
  10. linux虚拟机备份树莓派,为树莓派做系统备份镜像(for Linux #038; Mac),