Πώς τα επίπεδα προγραμμάτων οδήγησης HAL, BSP και MCAL διατηρούν φορητό το υλικολογισμικό των στυλό ανάγνωσης 11 SKU, με πίνακες μεταφοράς, διαγράμματα pin-mux και οδηγίες προσαρμογής OEM.

Δημοσιεύτηκε στις: Ιουλ 15, 2020 - 68 Προβολές

Αρχιτεκτονική Προγραμμάτων Οδήγησης Στυλό Ανάγνωσης: HAL, BSP και Φορητό Επίπεδο Προγραμμάτων Οδήγησης σε 11 SKU

Κοινό: Αυτός ο οδηγός απευθύνεται σε αρχιτέκτονες firmware, υπεύθυνους μηχανικούς ODM και διαχειριστές προγραμμάτων OEM που θέλουν να κατανοήσουν πώς είναι δομημένο το firmware των reading pen μας, ώστε να μπορούν να το μεταφέρουν σε νέο SoC, να αλλάξουν προμηθευτή αισθητήρα ή να ελέγξουν τη φορητότητα ενός codebase που αγοράζουν. Θεωρείται ότι είστε εξοικειωμένοι με C, έννοιες embedded RTOS και βασικά datasheets SoC.

Η μέρα που ένας αγοραστής ρωτάει «μπορούμε να επανατοποθετήσουμε το firmware σας σε διαφορετικό αισθητήρα OID;» ή «μπορούμε να το επανασχεδιάσουμε για Rockchip SoC αντί για Allwinner;» είναι η μέρα που δοκιμάζεται η αρχιτεκτονική του firmware. Εάν οι drivers είναι μπλεγμένοι με τον κώδικα εφαρμογής, η απάντηση είναι «όχι, έξι μήνες». Εάν οι drivers είναι σωστά δομημένοι σε επίπεδα, η απάντηση είναι «ναι, δύο έως τέσσερις εβδομάδες». Η σειρά μας 11-SKU reading pen (B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2, Y6) είναι δομημένη ώστε η δεύτερη απάντηση να είναι η ειλικρινής.

Αυτό το άρθρο σας καθοδηγεί στα τρία επίπεδα driver — HAL, BSP και το driver shim σε επίπεδο εφαρμογής — εξηγεί τους κανόνες εξάρτησης μεταξύ τους και δίνει συγκεκριμένα παραδείγματα κόστους μεταφοράς σε τρεις πραγματικές μετεγκαταστάσεις που παραδώσαμε το 2024–2025.

1. Τι Εννοούμε με HAL, BSP και Driver Shims

Η ορολογία διαφέρει μεταξύ του κλάδου. Εμείς χρησιμοποιούμε:

  • BSP (Board Support Package) — ο κώδικας που γνωρίζει ένα συγκεκριμένο PCB. Pin mux, αντιστοιχίσεις GPIO, αριθμοί διαύλου I²C, αλληλουχία PMIC, προφίλ φορτιστή μπαταρίας. Βρίσκεται στο bsp/<sku>/.
  • HAL (Hardware Abstraction Layer) — ο κώδικας που ενσωματώνει ένα περιφερειακό SoC σε ένα vendor-neutral API. SPI master, I²C slave, DMA, ADC, audio DAC. Βρίσκεται στο hal/<vendor>/<soc>/.
  • Ενδιάμεσο πρόγραμμα οδήγησης (Driver shim) — ο κώδικας που προσαρμόζει ένα vendor-neutral API περιφερειακού σε ένα συγκεκριμένο IC OID/audio/power. Βρίσκεται στο drivers/<component>/.
  • MCAL (Microcontroller Abstraction Layer) — ο όρος στυλ AUTOSAR που χρησιμοποιούμε για το HAL στα SKU Cortex-M (B1, B2, K7, KF1, P2, Q6, Q8).

Η πειθαρχία είναι μονοκατευθυντική: application → driver shim → HAL → BSP. Τίποτα στο HAL δεν επιτρέπεται να περιλαμβάνει header από το BSP· τίποτα στο driver shim δεν επιτρέπεται να περιλαμβάνει header από το application. Το επιβάλλουμε με ένα script που εκτελείται στο CI και αποτυγχάνει το build εάν εντοπιστεί απαγορευμένο include.

2. Η Στοίβα 4 Επιπέδων σε ένα Reading Pen

Κάθε firmware reading pen ακολουθεί την ίδια δομή 4 επιπέδων, ανεξάρτητα από SKU ή λειτουργικό:

Επίπεδο Παραδείγματα αρχείων Γραμμές κώδικα (τυπικό)
Εφαρμογή app/oid_decode.c, app/audio_player.c 8.000–18.000
Ενδιάμεσο πρόγραμμα οδήγησης (Driver shim) drivers/oid_sensor/, drivers/audio_dac/ 4.000–9.000
HAL hal/spi_master.c, hal/i2c_slave.c, hal/dma.c 6.000–14.000
BSP bsp/<sku>/pinmux.c, bsp/<sku>/pmic_seq.c 1.500–4.500

Τα SKU Linux (F8, L5, T2, Y6) χωρίζουν το HAL σε δύο μέρη: kernel-space και user-space. Το HAL σε kernel-space είναι ο driver συσκευής Linux· το HAL σε user-space ενσωματώνει ALSA, PulseAudio ή τον δικό μας audio daemon. Ισχύει ο ίδιος μονοκατευθυντικός κανόνας.

3. Ο Χάρτης HAL/BSP για τα 11 SKU

SKU Προμηθευτής SoC Θέση HAL Μέγεθος BSP Ενδιάμεσα προγράμματα οδήγησης (Driver shims) Εφαρμογή
B1 STM32F4 (Cortex-M4) hal/stm32f4/ 1.800 ΓΡΑ Αισθητήρας OID, audio DAC, μετρητής μπαταρίας Εφαρμογή FreeRTOS
B2 STM32F4 (Cortex-M4) hal/stm32f4/ 2.100 ΓΡΑ Αισθητήρας OID, audio DAC, μετρητής μπαταρίας Εφαρμογή FreeRTOS
F8 Allwinner A64 (Cortex-A53) hal/allwinner/a64/ (πυρήνας) + hal/user/audio.c 4.200 ΓΡΑ Αισθητήρας OID, μετατροπέας ψηφιακού σε αναλογικό σήμα ήχου (DAC), Wi-Fi/BT, μηχανή ASR Linux Buildroot
K7 Nordic nRF5340 (Cortex-M33) hal/nordic/nrf53/ 2.400 ΓΡΑ Αισθητήρας OID, μετατροπέας ψηφιακού σε αναλογικό σήμα ήχου (DAC), BLE, TrustZone-M Εφαρμογή Zephyr
KF1 Nordic nRF5340 (Cortex-M33) hal/nordic/nrf53/ 2.400 ΓΡΑ Αισθητήρας OID, μετατροπέας ψηφιακού σε αναλογικό σήμα ήχου (DAC), BLE, TrustZone-M Εφαρμογή Zephyr
L5 NXP i.MX 8M (Cortex-A53) hal/nxp/imx8m/ (πυρήνας) + hal/user/audio.c 4.800 ΓΡΑ Αισθητήρας OID, μετατροπέας ψηφιακού σε αναλογικό σήμα ήχου (DAC), Wi-Fi/BT, ASR, βίντεο Linux Yocto
P2 STM32G0 (Cortex-M0+) hal/stm32g0/ 1.500 ΓΡΑ Αισθητήρας OID, μετατροπέας ψηφιακού σε αναλογικό σήμα ήχου (DAC) Εφαρμογή FreeRTOS
Q6 GD32F450 (Cortex-M4) hal/gd32/f450/ 2.000 ΓΡΑ Αισθητήρας OID, μετατροπέας ψηφιακού σε αναλογικό σήμα ήχου (DAC), μετρητής μπαταρίας AliOS Things
Q8 GD32F450 (Cortex-M4) hal/gd32/f450/ 2.000 ΓΡΑ Αισθητήρας OID, μετατροπέας ψηφιακού σε αναλογικό σήμα ήχου (DAC), μετρητής μπαταρίας AliOS Things
T2 NXP i.MX 8M Plus (Cortex-A53) hal/nxp/imx8mp/ (πυρήνας) + hal/user/audio.c 5.200 ΓΡΑ Αισθητήρας OID, μετατροπέας ψηφιακού σε αναλογικό σήμα ήχου (DAC), Wi-Fi/BT, ASR, βίντεο Linux Yocto
Y6 Allwinner A64 (Cortex-A53) hal/allwinner/a64/ (πυρήνας) + hal/user/audio.c 4.400 ΓΡΑ Αισθητήρας OID, DAC ήχου, Wi-Fi/BT, ASR Linux Buildroot

Το HAL είναι το πιο ακριβό επίπεδο για αλλαγή. Ένας νέος προμηθευτής SoC σημαίνει περίπου 4.800–6.500 LOC εργασίας HAL. Μια νέα πλακέτα PCB στο ίδιο SoC σημαίνει 1.500–2.800 LOC εργασίας BSP. Ένας νέος προμηθευτής αισθητήρα OID σημαίνει 600–1.200 LOC εργασίας driver shim. Το επίπεδο εφαρμογής ιδανικά δεν θα πρέπει να χρειάζεται αλλαγές.

4. Το συμβόλαιο του ενδιάμεσου προγράμματος οδήγησης (Driver Shim Contract)

Κάθε driver shim υλοποιεί μια σταθερή σύμβαση. Για παράδειγμα, το audio DAC shim σε κάθε SKU εκθέτει:

audio_err_t audio_dac_init(const audio_config_t *cfg);
audio_err_t audio_dac_start(audio_stream_t *stream);
audio_err_t audio_dac_stop(void);
audio_err_t audio_dac_set_volume(uint8_t pct);
audio_err_t audio_dac_get_status(audio_status_t *status);

Το struct audio_config_t περιέχει ρυθμό δειγματοληψίας, βάθος bit, αριθμό καναλιών και δείκτη buffer DMA. Το HAL υλοποιεί τις κλήσεις σε επίπεδο καταχωρητών I²S ή TDM. Το BSP ρυθμίζει το pin mux για το I²S0 και τις ράγες PMIC. Η εφαρμογή δεν αγγίζει ποτέ απευθείας κανέναν καταχωρητή.

Αυτή η σύμβαση μας επιτρέπει να αλλάξουμε τον προμηθευτή audio DAC (έχουμε παραδώσει με Maxim MAX98357A, Texas Instruments TLV320AIC23 και AKM AK4633 τους τελευταίους 24 μήνες) χωρίς να αλλάξουμε ούτε μία γραμμή κώδικα εφαρμογής.

5. Σταθερότητα και Έκδοση του HAL API

Το HAL API εκδίδεται με σημασιολογική εκδοχοποίηση (semantic versioning): MAJOR.MINOR.PATCH. Μια αλλαγή MAJOR σημαίνει σπάσιμο συμβατότητας· η MINOR προσθέτει νέα API· η PATCH είναι μόνο διορθώσεις σφαλμάτων. Ο κώδικας εφαρμογής είναι καρφιτσωμένος σε μια MAJOR έκδοση του HAL. Οι τρέχουσες εκδόσεις HAL είναι:

HAL Έκδοση API Τελευταία αλλαγή
hal/stm32f4/ 3.2.0 2025-04
hal/stm32g0/ 1.4.2 2025-08
hal/gd32/f450/ 2.5.1 2025-03
hal/nordic/nrf53/ 4.1.0 2025-06
hal/allwinner/a64/ 6.0.0 2025-09
hal/nxp/imx8m/ 7.2.1 2025-10
hal/nxp/imx8mp/ 7.2.1 2025-10

Οι αλλαγές MAJOR του HAL είναι σπάνιες — κατά μέσο όρο μία κάθε 18 μήνες. Το HAL είναι το κομμάτι κώδικα με τη μεγαλύτερη διάρκεια ζωής στο αποθετήριο firmware μας. Ο κώδικας εφαρμογής στο B2 δεν χρειάστηκε να αλλάξει από το firmware 2.4.0, επειδή το HAL API παρέμεινε σταθερό.

6. Μετανάστευση BSP το 2024–2025: Τρία Πραγματικά Περιστατικά

Μεταναστεύσαμε τρία SKU πέρα από το όριο του BSP τους τελευταίους 18 μήνες. Το κόστος σε κάθε περίπτωση:

Μετανάστευση Επίπτωση HAL Επίπτωση BSP Επίπτωση εφαρμογής Εβδομάδες ημερολογίου Κόστος
F8 v2 → v3 (εναλλαγή αισθητήρα) 0 ΓΡΑ 1.400 ΓΡΑ 80 LOC (ρυθμίσεις) 6 $11.200
L5 → T2 (εναλλαγή DAC ήχου) 200 ΓΡΑ 2.100 ΓΡΑ 0 ΓΡΑ 4 $9.600
Q6 → Q8 (εναλλαγή μετρητή μπαταρίας) 0 ΓΡΑ 600 ΓΡΑ 0 ΓΡΑ 2 4.400 $

Η πρώτη περίπτωση ήταν ένας διαγωνισμός λιανοπωλητή από χώρα του Κόλπου που απαιτούσε αισθητήρα OID υψηλότερης ανάλυσης. Αντικαταστήσαμε τον αισθητήρα στο επίπεδο BSP (1.400 γραμμές κώδικα pin-mux και διαμόρφωσης διαύλου I²C), κάναμε μια μικρή αλλαγή στη μορφή του πίνακα αποκωδικοποιητή OID (80 γραμμές κώδικα στην εφαρμογή) και παραδώσαμε σε 6 εβδομάδες.

Η δεύτερη περίπτωση ήταν μια ευρωπαϊκή σχολική περιφέρεια που ήθελε πιο δυνατό ηχείο (5 W αντί για 3 W) στην πλατφόρμα L5. Μεταβαίνοντας σε νέο audio DAC, χρειάστηκε να αλλάξουν μόνο 200 γραμμές κώδικα HAL, επειδή ο νέος DAC μοιραζόταν την περιφερειακή I²S. Ο κώδικας της εφαρμογής δεν επηρεάστηκε καθόλου.

Η τρίτη περίπτωση ήταν ένας πελάτης B2B που επέμενε σε συγκεκριμένο ολοκληρωμένο κύκλωμα μέτρησης μπαταρίας. Αντικαταστήσαμε το τσιπ μέτρησης στο PCB του Q6 ώστε να ταιριάζει με το υλικό του Q8. Το HAL ήταν πανομοιότυπο (ίδια οικογένεια προμηθευτή), επομένως η μόνη εργασία ήταν στο BSP.

Reading pen firmware layered architecture (one-directional dependencies)

7. Πού επιτρέπεται να φτάσει το επίπεδο εφαρμογής

Το επίπεδο εφαρμογής επιτρέπεται να καλεί shim προγραμμάτων οδήγησης και API λειτουργικού συστήματος (ουρές FreeRTOS, work items Zephyr, pthreads Linux, ALSA). Απαγορεύεται να καλεί απευθείας το HAL. Το επιβάλλουμε με έναν κανόνα CI lint στον γράφο των include. Μια υποχώρηση που κάνει import το hal/spi_master.h από το app/audio_player.c αποτυγχάνει στο build.

Υπάρχουν τρεις εξαιρέσεις:

  1. Ο χρόνος εκκίνησης bsp/<sku>/pinmux.c επιτρέπεται να καλεί απευθείας συναρτήσεις HAL, επειδή το pin mux είναι εγγενώς HAL-aware.
  2. Η κατάτμηση TEE του TrustZone σε SKU Linux επιτρέπεται να καλεί το HAL, επειδή πρόκειται για ξεχωριστή εικόνα firmware.
  3. Ο κώδικας διαχείρισης ενέργειας σε SKU RTOS επιτρέπεται να καλεί το HAL, επειδή διαχειρίζεται τα ρολόγια πυρήνα και τις λειτουργίες αδράνειας.

Αυτές οι εξαιρέσεις τεκμηριώνονται στο firmware README και ελέγχονται σε κάθε έκδοση.

8. Επιβολή μέσω CI και στατική ανάλυση

Το CI μας εκτελεί τέσσερις ελέγχους σε κάθε pull request:

  1. Έλεγχος γράφου include — επιβάλλει τον κανόνα μονοκατευθυντικής εξάρτησης.
  2. Έλεγχος σταθερότητας API HAL — αποτυγχάνει το build εάν αλλάξει μια υπογραφή HAL χωρίς αναβάθμιση MAJOR.
  3. Έλεγχος θύρας BSP — επαληθεύει ότι το BSP για ένα SKU-στόχο μεταγλωττίζεται αυτόνομα.
  4. Έλεγχος γραμμών κώδικα εφαρμογής — θέτει ανώτατο όριο αύξησης των LOC της εφαρμογής στο +10 % ανά έκδοση, ώστε να αποθαρρύνεται η εισχώρηση επιχειρηματικής λογικής σε λάθος επίπεδο.

Το CI εκτελείται στους self-hosted runners μας στο GitLab, σε Shenzhen και Yantai. Μια πλήρης επικύρωση διαρκεί 22 λεπτά για SKU RTOS και 48 λεπτά για SKU Linux.

9. Σημεία προσαρμογής OEM

Εάν είστε αγοραστής OEM, τα επίπεδα που συνήθως τροποποιείτε είναι:

  • BSP — pin mux, ανάθεση GPIO, μοτίβο LED, debounce κουμπιού.
  • Shim προγράμματος οδήγησης — εάν προσθέτετε δικό σας audio DAC, αισθητήρα OID ή τσιπ μέτρησης μπαταρίας.
  • Εφαρμογή — γλωσσικά πακέτα, φωνητικές προτροπές, λογότυπο OEM στην οθόνη εκκίνησης, προσαρμοσμένες βιβλιοθήκες OID.

Το HAL σπάνια τροποποιείται, εκτός εάν αλλάζετε προμηθευτή SoC. Έχουμε πραγματοποιήσει τρία ports HAL από το 2023 (Allwinner → NXP i.MX, STM32F4 → GD32, και μια πιλοτική Rockchip). Το καθένα διήρκεσε 16–22 εβδομάδες μηχανικής εργασίας.

Συμβουλή αγοραστή: Εάν ο διαγωνισμός σας απαιτεί συγκεκριμένο προμηθευτή SoC, ρωτήστε τον OEM εάν το επίπεδο HAL του είναι αφαιρετικό ή κωδικοποιημένο για έναν μόνο προμηθευτή. Το κωδικοποιημένο HAL σημαίνει 4–6 μήνες porting, ενώ το αφαιρετικό HAL σημαίνει 6–10 εβδομάδες.

10. Τι κερδίζετε από την αρχιτεκτονική

Μια καλά δομημένη αρχιτεκτονική firmware σας προσφέρει τρία πράγματα:

  1. Φορητότητα — μπορείτε να μεταβείτε σε νέο SoC, αισθητήρα ή DAC σε εβδομάδες, όχι σε μήνες.
  2. Ελεγξιμότητα — η ομάδα συμμόρφωσής σας μπορεί να ελέγξει ένα επίπεδο κάθε φορά.
  3. Δυνατότητα ελέγχου — τα shim προγραμμάτων οδήγησης μπορούν να ελεγχθούν μοναδιαία με mocks, χωρίς να χρειάζεται πραγματικό υλικό.

Η σειρά των 11 SKU που παραδίδουμε σήμερα αποτελεί την απόδειξη. Έχουμε μεταφέρει 6 από τα 11 SKU τουλάχιστον μία φορά από το 2023 χωρίς επανεγγραφές στο επίπεδο εφαρμογής, και το μέσο κόστος porting είναι πλέον 4–8 εβδομάδες μηχανικής εργασίας σε γνωστό κόστος.

Εάν έχετε μια ερώτηση porting, στείλτε μας τα SKU προέλευσης και στόχου και θα σας απαντήσουμε με μια προσφορά σταθερής τιμής εντός 48 ωρών.

11. Πραγματικά παραδείγματα shim προγραμμάτων οδήγησης

Για να γίνουν τα αφηρημένα επίπεδα συγκεκριμένα, παραθέτουμε τέσσερα πραγματικά shim προγραμμάτων οδήγησης που περιλαμβάνονται στο υπάρχον υλικό firmware παραγωγής μας.

Shim αισθητήρα OID. Κάθε SKU χρησιμοποιεί το ίδιο API oid_sensor_read_page() ανεξάρτητα από το αν ο αισθητήρας είναι OID2000, κάμερα βασισμένη σε CMOS ή μονάδα ToF. Το shim μεταφράζει το API στις I²C συναλλαγές του προμηθευτή. Το B2 χρησιμοποιεί ριπή 12 καρέ στα 30 fps, το L5 χρησιμοποιεί ένα μεμονωμένο καρέ 720p, το T2 χρησιμοποιεί καρέ με σχολιασμό βάθους ToF στα 60 fps. Και τα τρία καλούν το ίδιο shim, το οποίο αναλαμβάνει τη μετάφραση.

Ενδιάμεσο πρόγραμμα οδήγησης (shim) για τον DAC ήχου. Το shim του audio DAC διαχειρίζεται τη μετατροπή ρυθμού δειγματοληψίας, τη ράμπα έντασης και τη σίγαση. Στο B2 firmware 2.4.7 παραδίδουμε MAX98357A, στο L5 firmware 4.2.0 παραδίδουμε TLV320AIC23. Η συνάρτηση audio_dac_set_volume() του shim υλοποιεί λογαριθμική ράμπα σε 40 ms για την αποφυγή θορύβου zipper. Η εφαρμογή δεν βλέπει ποτέ εγγραφή καταχωρητή.

Shim συνύπαρξης Wi-Fi/BT. Στα F8, L5, T2 και Y6, το Wi-Fi/BT shim επιλύει την πρόσβαση στην κεραία μεταξύ του ραδιοφώνου Wi-Fi και του ραδιοφώνου BLE. Το shim είναι χτισμένο πάνω στη διεπαφή Packet Traffic Arbitration (PTA) του προτύπου LTE. Το HAL υλοποιεί τα 4 καλώδια PTA. Η εφαρμογή βλέπει μία μόνο κλήσηwireless_tx_request().

Shim μετρητή μπαταρίας. Τα Q6, Q8, K7, KF1, L5, T2 και Y6 διαθέτουν μετρητή καυσίμου TI BQ27426 ή BQ40Z50. Το shim εκθέτει τα battery_get_soc_pct(), battery_get_temperature_c(), battery_get_voltage_mv() και battery_get_health(). Το shim αποθηκεύει προσωρινά τις μετρήσεις για 1 δευτερόλεπτο, ώστε να μην ενεργοποιείται ο μετρητής περισσότερο από μία φορά ανά κύκλο.

12. Χάρτες Μνήμης και Σενάρια Σύνδεσης ανά Επίπεδο

Κάθε επίπεδο έχει περιορισμένο χάρτη μνήμης. Κατανέμουμε προϋπολογισμούς RAM και Flash ανά επίπεδο και τους επιβάλλουμε με σενάρια σύνδεσης. Ο προϋπολογισμός για το firmware 2.4.7 του B2 έχει ως εξής:

Ενότητα Επίπεδο Μέγεθος Σκοπός
.bss HAL 8 KB Ρυθμιστικοί χώροι DMA, κυκλικοί ρυθμιστικοί χώροι
.bss Ενδιάμεσο πρόγραμμα οδήγησης (Driver shim) 4 KB Προσωρινή μνήμη ροής ήχου
.bss Εφαρμογή 12 KB Προσωρινή μνήμη πίνακα αναζήτησης OID
.text HAL 14 KB Υλοποίηση HAL
.text Ενδιάμεσο πρόγραμμα οδήγησης (Driver shim) 6 KB Υλοποίηση driver shim
.text Εφαρμογή 22 KB Αποκωδικοποιητής OID + αναπαραγωγέας ήχου
.rodata Ενδιάμεσο πρόγραμμα οδήγησης (Driver shim) 22 KB Μεταδεδομένα βιβλιοθήκης OID
.rodata Εφαρμογή 38 KB Φωνητικές οδηγίες + πίνακες αναζήτησης
Δεσμευμένο TrustZone-M 4 KB Ασφαλής αποθήκη κλειδιών
Δεσμευμένο Στάδιο OTA 256 KB Εικόνα OTA

Το συνολικό αποτύπωμα Flash στο firmware 2.4.7 του B2 είναι 1,4 MB· το συνολικό αποτύπωμα RAM είναι 64 KB. Τα SKU Linux έχουν μεγαλύτερους προϋπολογισμούς — το firmware 4.2.0 του L5 δεσμεύει 140 MB για την εφαρμογή, 28 MB για το HAL και 12 MB για τα driver shim.

13. Πώς να Ελέγξετε ένα Firmware Στυλό Ανάγνωσης για Φορητότητα

Εάν είστε υπεύθυνος συμμόρφωσης ή αγοραστής OEM που αξιολογεί ένα firmware τρίτου κατασκευαστή, ορίστε ο έλεγχος 12 ερωτήσεων που μπορείτε να εκτελέσετε σε 2 ώρες:

  1. Μπορεί ο κώδικας της εφαρμογής να μεταγλωττιστεί χωρίς τις κεφαλίδες HAL να είναι διαθέσιμες;
  2. Μεταγλωττίζεται το επίπεδο BSP αυτόνομα;
  3. Υπάρχει τεκμηριωμένος κανόνας μονόδρομης εξάρτησης;
  4. Επιβάλλει το CI τον κανόνα εξάρτησης;
  5. Έχει εκδοθεί έκδοση για το API του HAL;
  6. Παραμένει το LOC της εφαρμογής εντός προϋπολογισμού αύξησης 10 % ανά έκδοση;
  7. Τα ενδιάμεσα προγράμματα οδήγησης (driver shims) υποβάλλονται σε δοκιμές μονάδας με mocks;
  8. Το μέγεθος του BSP τεκμηριώνεται ανά SKU;
  9. Υπάρχει αριθμομηχανή κόστους μεταφοράς HAL;
  10. Ελέγχεται η σταθερότητα του HAL στο CI;
  11. Τεκμηριώνονται οι εξαιρέσεις στον κανόνα εξάρτησης;
  12. Είναι το script του linker ανά επίπεδο;

Εάν η απάντηση και στα 12 είναι ναι, το firmware είναι φορητό. Εάν λιγότερα από 8 είναι ναι, αντιμετωπίστε τη βάση κώδικα ως υποχρέωση ενός SKU.

Σχετική Ανάγνωση

Αίτημα Προσφοράς — Λάβετε Γρήγορη Εργοστασιακή Απάντηση

Frequently Asked Questions

Ποια είναι η διαφορά μεταξύ HAL και BSP σε ένα reading pen;
Το HAL ενθυλακώνει ένα περιφερειακό του SoC (SPI, I2C, DMA, ήχος) σε ένα ουδέτερο ως προς τον κατασκευαστή API. Το BSP περιέχει κώδικα εξειδικευμένο για το board, όπως pin mux, αντιστοιχίσεις GPIO, αλληλουχία PMIC και προφίλ φορτιστή μπαταρίας. Το HAL είναι επαναχρησιμοποιήσιμο σε PCB που μοιράζονται το ίδιο SoC. Το BSP αλλάζει κάθε φορά που αλλάζει το PCB. Η γκάμα μας με 11 SKU χρησιμοποιεί 7 HAL και 11 BSP.
Πόσος χρόνος χρειάζεται για την προσαρμογή (porting) του firmware του reading pen σε ένα νέο SoC;
Η προσαρμογή του HAL σε μια νέα οικογένεια SoC διαρκεί 16–22 εβδομάδες για ένα SoC Cortex-A και 10–14 εβδομάδες για ένα SoC Cortex-M, με βάση τρία πραγματικά ports που παραδώσαμε από το 2023 (Allwinner προς NXP i.MX 8M, STM32F4 προς GD32F450, πιλοτικό Rockchip RK3308). Το κόστος είναι κατά προσέγγιση 40.000–72.000 δολάρια μηχανικής εργασίας, συν 6 εβδομάδες EVT και επικύρωσης.
Μπορεί το application layer να καλεί απευθείας συναρτήσεις του HAL;
Όχι. Ο κώδικας της εφαρμογής απαγορεύεται να καλεί το HAL απευθείας· πρέπει να περνά μέσα από ένα driver shim. Ο κανόνας CI lint αποτυγχάνει το build εάν ένα αρχείο εφαρμογής περιλαμβάνει header του HAL. Οι μόνες εξαιρέσεις είναι ο κώδικας pin-mux του BSP, η κατάτμηση TrustZone TEE σε SKU Linux και ο κώδικας διαχείρισης ενέργειας σε SKU RTOS.
Πώς διατηρείτε σταθερό το API του HAL μεταξύ των εκδόσεων;
Χρησιμοποιούμε semantic versioning στο HAL. Μια αύξηση MAJOR σηματοδοτεί μη συμβατή αλλαγή και υποχρεώνει όλο τον εξαρτημένο κώδικα εφαρμογής να μετεγκατασταθεί. Ο έλεγχος σταθερότητας HAL στο CI αποτυγχάνει το build εάν αλλάξει μια υπογραφή HAL χωρίς αύξηση MAJOR. Οι εκδόσεις HAL μας έχουν κατά μέσο όρο 0,67 αυξήσεις MAJOR ανά HAL ανά έτος από το 2023.
Ποιο είναι το τυπικό μέγεθος ενός BSP για ένα reading pen;
Τα BSP που βασίζονται σε RTOS (B1, B2, K7, KF1, P2, Q6, Q8) κυμαίνονται από 1.500 έως 2.400 γραμμές κώδικα. Τα BSP που βασίζονται σε Linux (F8, L5, T2, Y6) κυμαίνονται από 4.200 έως 5.200 γραμμές, επειδή περιλαμβάνουν τμήματα device-tree του kernel και αλληλουχία PMIC. Ένα νέο BSP στην ίδια οικογένεια SoC κοστίζει 4–8 εβδομάδες μηχανικής εργασίας.
Το Καλάθι σας
Η εμπειρία σας σε αυτόν τον ιστότοπο θα βελτιωθεί με την αποδοχή cookies. Πολιτική Cookies
Chat on WhatsApp