Hoe een LED-apparaat toe te voegen - van driver naar hal, JNI, Android - Breadboard Community

2022-05-29 09:20:06 By : Mr. Tom Jiang

1) Apparaatboombestand (kernel/arch/arm64/boot/dts/rockchip/rk3399-nanopi4-common.dtsi)2) Stuurprogrammabestand (kernel/drivers/gpio/gpio-testled.c)3) Makefile (kernel/stuurprogramma's/gpio/Makefile)4) Kconfig-bestand (kernel/drivers/gpio/Kconfig)5) Configuratiebestand stuurprogramma (kernel/arch/arm64/configs/nanopi4_nougat_defconfig)6) Wijzig knooppuntrechten (device/rockchip/common/ueventd.rockchip.rc)2) Vanuit commercieel oogpunt kunnen hardwarefabrikanten enkele kernalgoritmen, foutopsporingsparameters, implementatielogica, enz. op de HAL-laag plaatsen in plaats van op de kenellaag. De kenellaag werkt gewoon samen met de hardware.Het voordeel hiervan is dat u uw eigen bedrijfsgeheimen kunt beschermen zonder de Linux GPL open source-overeenkomst te volgen.Moduletype structuur hw_module_t, apparaattype structuur hw_device_t,Raadpleeg het broncodepad voor details over de twee structuren: /hardware/libhardware/include/hardware/hardware.h.Het belangrijkste werk van de ontwikkeling van HAL-lagen is het opzetten van een aangepaste structuur en het implementeren van verschillende sleutelfuncties binnen hw_device_t.Headerbestand hardware/libhardware/include/hardware/testled_hal.hHet headerbestand declareert twee sleutelstructuren van led, testled_module_t en testled_device_t, en de implementatie van de structuur staat in het c-bestand.2) c bestand hardware/libhardware/modules/testled/testled_hal.cHet implementeert voornamelijk de close-, open- en control-functies in de hal-structuur en geeft de functies door aan de led_dev-structuur.Android.mk hardware/libhardware/modules/testled/Android.mkVoeg testled toe aan hardware/libhardware/modules/Android.mkmmm hardware/libhardware/modules/testledGenereer test_led_hal.default.so in de map out/target/product/nanopc-t4/system/lib/hw/Na alle compilatie bevindt test_led_hal.default.so zich in het /system/lib/hw-pad van het apparaat. Wanneer de JNI in de Android-frameworks het led-apparaat aanroept, roept het de functies in de bibliotheek aan via een reeks conversies, waardoor het mobiliseren van de onderliggende led-aandrijving.1.frameworks/base/services/core/jni/com_android_server_TestLedService.cpp2.frameworks/base/services/core/jni/onload.cppPad: frameworks/base/services/core/java/com/android/server/TestLedService.javaTestLedService implementeert twee led-controlefuncties, SetLed1 zet led1 aan en uit, en setLed2 stelt de flikkerfrequentie van led2 in.De functies setled1_native en setled2_native van JNI worden respectievelijk aangeroepen.Pad: frameworks/base/core/java/android/app/TestLedManager.javaDe Manager is de brug tussen de APP en de dienst Via de systeeminterface getSystemService verkrijgt de APP de Manager van de dienst.In TestLedManager wordt de in de service geïmplementeerde functie-interface opnieuw verpakt.Pad: frameworks/base/core/java/android/app/ITestLedService.aidlPad: frameworks/base/core/java/android/content/Context.javaopenbare statische finale String TestLed_SERVICE="TestLed";Pad: frameworks/base/core/java/android/app/SystemServiceRegistry.javaPad: frameworks/base/services/java/com/android/server/SystemServer.javatype TestLed_service, system_api_service, system_server_service, service_manager_type;TestLed u:object_r:TestLed_service:s0Er wordt een fout gerapporteerd tijdens het compilatieproces. U heeft geprobeerd de API te wijzigen van wat eerder is goedgekeurd. Dit komt omdat de systeem-api-functie is toegevoegd. U kunt het opnieuw compileren nadat u update -api hebt gemaakt.Na het inbranden van het apparaat en het starten van adb shell-servicelijst | grep TestLed *, kunt u zien dat de nieuw toegevoegde service al actief is, wat betekent dat deze succesvol is.