android平台驱动开发(一)

news/2024/11/23 1:45:18/

驱动开发

hello world


文章目录

  • 驱动开发
  • 前言
  • 一、代码添加
  • 二、编译
  • 三、 验证
  • 总结


前言

最简单的hello world 驱动


一、代码添加

在AU_LINUX_ANDROID_LA.VENDOR.1.0\kernel_platform\msm-kernel\drivers\misc\目录下新建hello_world文件夹
并创建hello_world.c

#include <linux/init.h>
#include <linux/kernel.h>  
#include <linux/module.h>static int hello_init(void)
{ printk(KERN_ERR"Hello! This is the helloworld module!\n");return 0;
} static void hello_exit(void)
{printk(KERN_ERR"Module exit! Bye Bye!\n");return;
}module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");

hello_world文件夹下新建Makefile

obj-m	+= hello_world.o

修改misc目录下的Makefile
AU_LINUX_ANDROID_LA.VENDOR.1.0\kernel_platform\msm-kernel\drivers\misc\Makefile

+obj-m	+= hello_world/

注:obj-m最好是以宏控的方式控制,当然也可以以obj-y的方式编译进内核,后续详细介绍

二、编译

以骁龙8 gen1 plus平台为例
在AU_LINUX_ANDROID_LA.VENDOR.1.0目录下执行:

xxxx@u99:~/AU_LINUX_ANDROID_LA.VENDOR.1.0$bash kernel_platform/qcom/proprietary/prebuilt_HY11/vendorsetup.shxxxx@u99:~/AU_LINUX_ANDROID_LA.VENDOR.1.0$cd kernel_platform/xxxx@u99:~/AU_LINUX_ANDROID_LA.VENDOR.1.0/kernel_platform$BUILD_CONFIG=./common/build.config.msm.waipio ./build/all-variants.sh "./build/build.sh"

如上编译完成后AU_LINUX_ANDROID_LA.VENDOR.1.0\kernel_platform\out\msm-waipio-waipio-consolidate\dist\目录下会生成hello_world.ko;push到设备中验证即可。

三、 验证

在这里插入图片描述

C:\Users\Admin>adb push   AU_LINUX_ANDROID_LA.VENDOR.1.0\kernel_platform\out\msm-waipio-waipio-consolidate\dist\hello_world.ko /vendor/lib/modules/
\\192.168.0.56\home1\luhuan\zhanghong\SM8475\AU_LINUX_ANDR...world.ko: 1 file pushed. 3.0 MB/s (136104 bytes in 0.043s)C:\Users\Admin>adb shell
taro:/ # insmod ve
vendor/        vendor_dlkm/
taro:/ # insmod vendor/lib
lib/    lib64/
taro:/ # insmod vendor/lib/modules/he
heap_mem_ext_v01.ko     hello_world.ko
taro:/ # insmod vendor/lib/modules/hello_world.ko
taro:/ # dmesg |grep hello
[  167.180876] Hello! This is the helloworld module!
taro:/ #
taro:/ #
taro:/ # lsmod |grep hello
hello_world            16384  0
taro:/ # rmmod hello_world
taro:/ # dmesg |grep Bye
[  193.670479] Module exit! Bye Bye!
taro:/ #

总结

module init 优先级

#define pure_initcall(fn)       __define_initcall(fn, 0)  #define core_initcall(fn)       __define_initcall(fn, 1)  
#define core_initcall_sync(fn)      __define_initcall(fn, 1s)  
#define postcore_initcall(fn)       __define_initcall(fn, 2)  
#define postcore_initcall_sync(fn)  __define_initcall(fn, 2s)  
#define arch_initcall(fn)       __define_initcall(fn, 3)  
#define arch_initcall_sync(fn)      __define_initcall(fn, 3s)  
#define subsys_initcall(fn)     __define_initcall(fn, 4)  
#define subsys_initcall_sync(fn)    __define_initcall(fn, 4s)  
#define fs_initcall(fn)         __define_initcall(fn, 5)  
#define fs_initcall_sync(fn)        __define_initcall(fn, 5s)  
#define rootfs_initcall(fn)     __define_initcall(fn, rootfs)  
#define device_initcall(fn)     __define_initcall(fn, 6)  
#define device_initcall_sync(fn)    __define_initcall(fn, 6s)  
#define late_initcall(fn)       __define_initcall(fn, 7)  
#define late_initcall_sync(fn)      __define_initcall(fn, 7s)  #define __initcall(fn) device_initcall(fn)  

http://www.ppmy.cn/news/371048.html

相关文章

android平台驱动开发(三)--设备类节点实现重启功能

驱动开发 如何创建设备类属性节点 文章目录 驱动开发前言一、代码添加二、编译三、 验证总结 前言 最简单的设备属性累节点创建以及实现底层的重启功能 一、代码添加 在AU_LINUX_ANDROID_LA.VENDOR.1.0\kernel_platform\msm-kernel\drivers\misc\目录下新建test_reboot.c #…

PostgreSQL 15:新特性预告

PostgreSQL 15 版本正在开发中&#xff0c;不远的将来就会与大家见面&#xff0c;所以是时候看看未来的一些新功能吧&#xff01; 1.删除public 模式的创建权限 直到今天&#xff0c;使用 PostgreSQL 14&#xff0c;每个人都可以默认写入public 模式。使用 PostgreSQL 15&…

python中文编码与处理详解(个人认为比较全面详细了)

注意&#xff1a;本文只是针对 python 2&#xff0c;在 python 3 中&#xff0c;编码方式与处理技巧有些许变化&#xff0c;具体请参考&#xff1a; Python 2 与 Python 3 的差异对比&#xff1a; http://my.oschina.net/leejun2005/blog/173553 一、使用中文字符 在pytho…

python unicode编码转换中文_python unicode转中文及转换默认编码

原博文 2016-11-16 22:20 − 一、   在爬虫抓取网页信息时常需要将类似"\u4eba\u751f\u82e6\u77ed\uff0cpy\u662f\u5cb8"转换为中文,实际上这是unicode的中文编码。可用以下方法转换: 1、 1 >>> s = u\u4eba\u751f\u82e6\u77ed... 相关推荐 2019-12…

Linux下安装JDK 及 OpenJDK的卸载

今日发现我Linux系统中安装的JDK是1.8的版本&#xff0c;但是在查询时候竟然是1.7的版本&#xff0c;因为我目前从事大数据方向的开发&#xff0c;这对于当前很多流行的技术不是很友好&#xff0c;故解决此问题&#xff0c;也让各位同仁不必再为此烦恼。 1、查询JDK版本 [roo…

centos7 搭建oracle11g rac

一、部分理论 RAC&#xff0c;全称real application clusters&#xff0c; 译为“实时应用集群”&#xff0c;是Oracle新版数据库中采用的一项新技术&#xff0c;是高可用性的一-种&#xff0c;也是Oracle 数据库支持网格计算环境的核心技术。 ●VIP -虚拟IP地址(Virtual IP)。…

移动端页面px布局适配方案(viewport)

通过 <meta name"viewport"> 给视口设置固定的宽度&#xff0c;浏览器对页面自动缩放来实现页面的适配效果 可配合移动端手机网页适配iPad与折叠屏设备实现多平台兼容 简单描述下实现原理&#xff1a; 浏览器的宽度与取决于 <meta name"viewport"…

java jdk 8u111_8u111-jdk-alpine在java开发中的NullPointerException错误解决方案

问题描述 在部署一个验证码服务的容器服务时遇到了一个空指针错误,错误代码为: java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264) at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219) at s…