Starting HAL daemon:[FAILED]

本文介绍了解决RHEL6系统中鼠标和键盘无法使用的问题。故障原因为关闭了messagebus服务,导致HAL守护进程启动失败。通过手动启动messagebus服务解决了该问题。

因为优化系统关闭了一些服务,导致RHEL6系统在图形界面中鼠标和键盘不能使用,并且提示Starting HAL daemon:[FAILED]

haldaemon:接受由udev通过D-BUS传递来的消息后调fstab-sync修改 fstab文档,动态创建/media目录下的子目录作为挂载点

经过排查得知是messagebus服务没有开启,而开启haldaemon必须开启messagebus

messagebus:这是 Linux 的 IPC(Interprocess Communication,进程间通讯)服务。确切地说,它与 DBUS 交互,是重要的系统服务

在单用户或者init 3模式下,开启messagebus服务在3/5级别自动启动,之后鼠标和键盘就恢复正常了

# chkconfig --level 2345 messagebus on

03-27 08:29:05.043 1 1 I init : starting service 'android.hardware.ebsw.algorithmsdk-service'... 03-27 08:29:05.054 1 1 I init : ... started service 'android.hardware.ebsw.algorithmsdk-service' has pid 4860 03-27 08:29:05.054 2366 2384 W com.skg.writer: ApkAssets: Deleting an ApkAssets object '<empty> and /product/app/WebViewGoogle64/WebViewGoogle64.apk' with 2 weak references 03-27 08:29:05.052 355 355 W hdcp2_tx_rx: type=1400 audit(0.0:2143): avc: denied { open } for path="/dev/block/mmcblk0boot0" dev="tmpfs" ino=986 scontext=u:r:hdcp2:s0 tcontext=u:object_r:uboot_block_device:s0 tclass=blk_file permissive=0 03-27 08:29:05.060 4860 4860 W ProcessState: Extra binder thread started, but 0 threads requested. Do not use *startThreadPool when zero threads are requested. 03-27 08:29:05.062 4860 4860 E android.hardware.ebsw.algorithmsdk-service: Failed to register IebswTest service 03-27 08:29:05.073 310 310 E SELinux : avc: denied { add } for pid=4860 uid=0 name=android.hardware.ebsw.algorithmsdk.IEbswTest/default scontext=u:r:hal_ebsw_algorithmsdk:s0 tcontext=u:object_r:default_android_service:s0 tclass=service_manager permissive=0 03-27 08:29:05.075 1 1 I init : Service 'android.hardware.ebsw.algorithmsdk-service' (pid 4860) exited with status 255 03-27 08:29:05.075 1 1 I init : Sending signal 9 to service 'android.hardware.ebsw.algorithmsdk-service' (pid 4860) process group... 03-27 08:29:05.076 1 1 I libprocessgroup: Removed cgroup /sys/fs/cgroup/uid_0/pid_4860 03-27 08:29:05.076 1 1 E init : process with updatable components 'android.hardware.ebsw.algorithmsdk-service' exited 4 times in 4 minutes 03-27 08:29:05.078 1 1 I init : processing action (sys.init.updatable_crashing=1) from (/system/etc/init/flags_health_check.rc:10) 03-27 08:29:05.079 1 1 I init : starting service 'exec 26 (/system/bin/flags_health_check UPDATABLE_CRASHING)'... 03-27 08:29:05.087 1
03-29
### Android系统中Wi-Fi Vendor HAL启动失败的错误原因及解决方案 Wi-Fi Vendor HAL(硬件抽象层)是Android系统中Wi-Fi功能的核心组件之一,负责与底层芯片驱动进行通信。当系统启动时,`android.hardware.wifi@1.0-service-lazy` 服务会尝试加载对应的HAL实现。如果启动失败,通常会表现为无法启用Wi-Fi功能、系统日志中出现“Failed to start vendor HAL”等错误信息。 #### 常见错误原因 1. **HAL模块未正确实现或缺失** 每个芯片厂商需要提供符合AOSP接口规范的HAL实现。如果HAL模块未正确编译或未放置在系统指定路径 `/vendor/lib/hw/` 下,系统将无法加载该模块,导致启动失败。 ```bash ls /vendor/lib/hw/ | grep "android.hardware.wifi@1.0-impl" ``` 若该路径下不存在对应模块,则说明HAL未正确打包进镜像中。 2. **芯片驱动未加载或初始化失败** HAL依赖于底层芯片驱动的正常运行。如果内核模块(如 `wlan.ko`)未加载,或者驱动初始化失败,HAL将无法正常启动。 检查驱动加载状态: ```bash lsmod | grep wlan ``` 若未加载,可尝试手动加载: ```bash modprobe wlan ``` 3. **权限或SELinux策略限制** HAL服务运行在特定的SELinux上下文中,若SELinux策略未正确配置,可能导致服务无法访问必要的资源。例如,服务可能无法访问 `/vendor/etc/wifi/` 目录下的配置文件。 查看日志中的权限拒绝信息: ```bash dmesg | grep "avc: denied" ``` 可通过修改 `sepolicy` 文件添加相应的权限规则。 4. **配置文件路径或内容错误** HAL依赖多个配置文件,如 `wpa_supplicant.conf`、`p2p_supplicant.conf` 等。若这些文件缺失或配置错误,HAL将无法完成初始化。 配置文件通常位于: ``` /vendor/etc/wifi/ /data/misc/wifi/ ``` 5. **HAL接口版本不匹配** Android系统要求HAL接口版本与框架层兼容。例如,若系统期望 `android.hardware.wifi@1.0` 接口,但HAL实现的是 `@1.1` 或 `@1.2`,将导致加载失败。 可通过以下命令查看HAL模块支持的接口版本: ```bash strings /vendor/lib/hwbinder/libandroid.hardware.wifi@1.0.so | grep "interface" ``` 6. **系统镜像未包含必要的库文件** HAL模块依赖多个共享库(如 `libwifi-hal.so`、`libhardware.so` 等)。若这些库未打包进系统镜像,HAL将无法链接并启动。 检查依赖库是否存在: ```bash ldd /vendor/lib/hw/android.hardware.wifi@1.0-impl.so ``` #### 解决方案 - **确保HAL模块正确构建并部署** 检查Android构建配置(如 `Android.mk` 或 `Android.bp`)是否包含正确的HAL实现模块,并确保其被正确打包进 `/vendor` 分区。 示例 `Android.bp` 配置: ```starlark android_vendor_hal { name: "android.hardware.wifi@1.0-impl", srcs: ["impl.cpp"], vendor: true, } ``` - **验证驱动和HAL初始化流程** 在系统启动过程中,通过 `logcat` 查看HAL初始化日志: ```bash logcat -b main | grep "Wifi" ``` 若日志中提示“Failed to start vendor HAL”,需进一步查看具体错误信息,例如是否加载了驱动、是否打开权限等。 - **修复SELinux策略限制** 在 `sepolicy` 中添加对HAL服务访问 `/vendor/etc/wifi/` 的权限: ```te allow hal_wifi_default vendor_file:file { read }; ``` 然后重新编译并刷入系统镜像。 - **验证配置文件路径和内容** 确保 `/vendor/etc/wifi/` 目录下存在 `wpa_supplicant_overlay.conf` 和 `p2p_supplicant_overlay.conf` 文件,并检查其内容是否符合芯片厂商要求。 - **使用 `dumpsys wifi` 检查HAL状态** 执行以下命令查看Wi-Fi HAL的运行状态: ```bash dumpsys wifi ``` 若HAL未启动,输出中可能包含“HAL not started”等提示。 - **调试HAL接口调用** 可通过调用 `IWifi` 接口中的 `getChipModel()` 方法获取芯片型号,并确认HAL是否成功加载: ```cpp sp<IWifi> wifi = IWifi::getService(); string model; wifi->getChipModel(&model); ALOGD("Chip model: %s", model.c_str()); ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值