字符设备驱动在Ubuntu生成/dev节点,原生Linux无对应节点求助
字符设备驱动/dev节点未生成排查方向
你的驱动代码逻辑无异常,
/sys/dev/char下已存在对应设备号节点说明device_create已完成内核态设备注册,/dev节点由用户空间设备管理组件(devtmpfs/udev)负责生成,两个环境的差异来自用户空间配置区别。
- 检查devtmpfs挂载状态
执行命令mount | grep devtmpfs,确认是否有挂载到/dev目录的devtmpfs文件系统。如果无输出,执行mount -t devtmpfs devtmpfs /dev手动挂载后重新加载驱动验证节点是否生成。 - 检查udev服务运行状态与规则
Ubuntu 20.04默认运行systemd-udevd负责动态管理/dev节点,原生Linux环境可能未安装udev包,或未启动udev服务。执行ps aux | grep udev确认udev进程是否存在,无对应进程则启动udev服务或安装udev包后重试。
若udev正常运行,执行journalctl -u systemd-udevd查看udev日志是否有设备创建相关的报错,同时检查/etc/udev/rules.d/下的自定义规则是否拦截了非预置设备的节点创建。 - 验证内核配置是否支持热插拔与设备管理
查看内核编译配置文件(通常为/boot/config-$(uname -r)),确认以下选项已开启:
以上是devtmpfs和udev运行依赖的内核配置,未开启的话重新编译内核勾选对应选项即可。CONFIG_DEVTMPFS=y CONFIG_HOTPLUG=y CONFIG_UEVENT_HELPER=y CONFIG_INOTIFY_USER=y - 手动触发udev设备事件
执行命令udevadm trigger强制udev重新扫描所有设备,查看是否生成目标节点。如果触发后节点生成,说明内核热插拔事件未正常传递到用户空间,可检查/proc/sys/kernel/hotplug是否配置了正确的udev helper路径。 - 临时验证方案
执行命令mknod /dev/axpu_device c 236 0手动创建设备节点,若节点可正常读写访问,可完全确认驱动逻辑无问题,仅为用户空间设备管理配置异常。
内容的提问来源于stack exchange,提问作者Chan Kim
相关产品推荐
相关产品推荐

