Android 驱动编译后不自动创建节点解决
1、Android 将第三方驱动编译到内核
我这里使用的是一个第三方的usb摄像头硬件 需要将官方给的驱动文件(一般是.c和.h文件)放入到Android源码中内核的源码文件kernel/driver/usb/misc文件夹/下面(这个是官网文档上建议的 驱动编译还可以直接在driver目录下创建我们自定义的文档)。
然后按照官方的文档配置MakeFile和Kconfig这两个文件
image.png
其中第4步的操作 意思是如果你之前就编译过内核镜像 会在kernel文件下面有一个.config文件 这个时候你可以打开这个.config文件 然后添加CONFIG_WHOIS_USB_CAMERA=y这句话。保存之后打开终端进入到kernel根目录下面,然后make menuconfig 这个时候回弹出驱动配置的弹框,在弹框里面Device Drivers -> USB support -> 如果有 whois usb camera support 操作看看结果 ,一般没什么大问题。
最后编译内核,这里可以只编译内核镜像就可以。
2、烧录到开发板上面查看驱动是否编译到内核
将编译好报的kernel.img烧录到开发板。然后查看驱动安装成功状态
adb shell 然后 dmesg 查看打印信息中是否有:
whois USB camera now attached to whoiscam198 说明设备已成功连接。
3 查看是否有对应的驱动节点
adb shell
ls /dev/whoiscam0 (这里的whoiscam0使我们的驱动节点名)
我第一次发现是没有这个文件节点的
然后按照官方的推荐 手动创建节点
mknod whoiscam0 c 180 198 (PS 需要到dev目录下去执行)
如果提及权限问题 可以su之后再创建
这个时候节点手动创建成功,然后还需要修改节点文件的权限
chmod 777 /dev/whoiscam0
OK 现在驱动节点创建成功了 我的usb摄像头设备也可以正常被app调用了,但是我这个时候将开发板重启之后发现设备又不能使用了,然后我又adb查看节点文件发现不见了,懵逼了!!!
操作几次之后发现手动创建节点不行,所以就开始查看很多关于Android自动创建节点的资料。
4 驱动编译到内核成功之后自动创建节点
参考文章
https://blog.csdn.net/u013686019/article/details/50165059?locationNum=3&fps=1
http://blog.sina.com.cn/s/blog_4c73bcc80101262o.html
1、修改Android源码中system/core/init/device.c文件
找到handle_generic_device_event的方法
添加打印
image.png