mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 15:58:43 +00:00
Search for subhal .so files in additional directories
Fixes: 154634207 Test: Load onto flame and confirm that subhal .so android.hardware.sensors@2.X-fakesubhal-config3.so loads when it is living in the /vendor/lib64/hw directory using adb shell lshal debug android.hardware.sensors@2.0::ISensors/default Change-Id: I8a676b97f6f6992e8937ecf31c3b7af06e676ebb Merged-In: I8a676b97f6f6992e8937ecf31c3b7af06e676ebb
This commit is contained in:
@@ -360,7 +360,7 @@ void HalProxy::initializeSubHalListFromConfigFile(const char* configFileName) {
|
|||||||
} else {
|
} else {
|
||||||
std::string subHalLibraryFile;
|
std::string subHalLibraryFile;
|
||||||
while (subHalConfigStream >> subHalLibraryFile) {
|
while (subHalConfigStream >> subHalLibraryFile) {
|
||||||
void* handle = dlopen(subHalLibraryFile.c_str(), RTLD_NOW);
|
void* handle = getHandleForSubHalSharedObject(subHalLibraryFile);
|
||||||
if (handle == nullptr) {
|
if (handle == nullptr) {
|
||||||
ALOGE("dlopen failed for library: %s", subHalLibraryFile.c_str());
|
ALOGE("dlopen failed for library: %s", subHalLibraryFile.c_str());
|
||||||
} else {
|
} else {
|
||||||
@@ -415,6 +415,25 @@ void HalProxy::initializeSensorList() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void* HalProxy::getHandleForSubHalSharedObject(const std::string& filename) {
|
||||||
|
static const std::string kSubHalShareObjectLocations[] = {
|
||||||
|
"", // Default locations will be searched
|
||||||
|
#ifdef __LP64__
|
||||||
|
"/vendor/lib64/hw/", "/odm/lib64/", "/odm/lib64/hw/"
|
||||||
|
#else
|
||||||
|
"/vendor/lib/hw/", "/odm/lib/", "/odm/lib/hw/"
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
for (const std::string& dir : kSubHalShareObjectLocations) {
|
||||||
|
void* handle = dlopen((dir + filename).c_str(), RTLD_NOW);
|
||||||
|
if (handle != nullptr) {
|
||||||
|
return handle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
void HalProxy::init() {
|
void HalProxy::init() {
|
||||||
initializeSubHalCallbacks();
|
initializeSubHalCallbacks();
|
||||||
initializeSensorList();
|
initializeSensorList();
|
||||||
|
|||||||
@@ -261,6 +261,16 @@ class HalProxy : public ISensors, public IScopedWakelockRefCounter {
|
|||||||
*/
|
*/
|
||||||
void initializeSensorList();
|
void initializeSensorList();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try using the default include directories as well as the directories defined in
|
||||||
|
* kSubHalShareObjectLocations to get a handle for dlsym for a subhal.
|
||||||
|
*
|
||||||
|
* @param filename The file name to search for.
|
||||||
|
*
|
||||||
|
* @return The handle or nullptr if search failed.
|
||||||
|
*/
|
||||||
|
void* getHandleForSubHalSharedObject(const std::string& filename);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calls the helper methods that all ctors use.
|
* Calls the helper methods that all ctors use.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user