Skip to content

Kernel version independence: umbrella tracker for all legacy platforms #51

@widgetii

Description

@widgetii

Overview

Tracking kernel bump feasibility across all HiSilicon platforms that use binary blob modules. The approach differs based on whether blobs go through OSAL (recompilable abstraction layer) or call kernel APIs directly.

Platform Comparison

Platform Gen CPU Kernel OSAL Direct dangerous APIs Bump ceiling Effort
hi3516cv500 V3.5 Cortex-A7 4.9.37 Yes 0 Any Just recompile OSAL
hi3516cv300 V3 ARM926EJ-S 3.18.20 Yes 0 Any Just recompile OSAL
hi3519v101 V3A Cortex-A17+A7 3.18.20 Yes 2 (3 blobs) 6.6+ 2 shim functions
hi3516av100 V2A Cortex-A7 4.9.37 No 4 (13 blobs) 6.6+ ~100 lines of shims
hi3516cv200 V2 ARM926EJ-S 4.9.37 No 4 (~10 blobs) 5.x–6.x ~100 lines of shims
hi3516cv100 V1 ARM926EJ-S 3.0.8 No 18 (30 blobs) 3.0–3.9 Impractical beyond 3.10

Per-Platform Issues

Platform Issue Key finding
hi3516cv500 N/A Zero direct calls. OSAL handles everything via kernel_compat.h
hi3516cv300 #60 Zero direct calls. Same as CV500 — just recompile OSAL
hi3519v101 #57 register_sysctl_table (2 blobs) + init_timer_key (1 blob) bypass OSAL
hi3516av100 #50 do_gettimeofday (10), init_timer_key (3), register_sysctl_table (2)
hi3516cv200 #46 Same 4 APIs as AV100, same shim approach
hi3516cv100 #48 Blocked by create_proc_entry (5 blobs), __arm_ioremap (23 blobs)

Module Migration Status — Complete

All platforms have open_ modules wired into firmware, tested on real hardware, and shipping via official OpenIPC releases.

Platform openhisilicon PRs firmware PRs Hardware tested Sensor
hi3516cv500 (pre-existing) (pre-existing)
hi3516cv300 #59 #2014, #2016 hi3516cv300 IMX291
hi3519v101 — (no code changes) #2010 hi3516av200 IMX385
hi3516av100 #49 #2006 hi3516dv100 AR0237
hi3516cv200 #45 #2004, #2008, #2009 hi3518ev200 JXF22
hi3516cv100 #47, #52 #2005, #2008 hi3516cv100 IMX323

Dangerous API Summary

Direct kernel calls in blobs (not via OSAL)

API Removed in CV100 CV200 AV100 3519v101 CV300 CV500
create_proc_entry() 3.10 5
__arm_ioremap() ~3.13 23
arm926_flush_kern_* ARMv5 1
do_mmap_pgoff() 3.x→4.x 1
filp_open() restricted 5.10+ 1
strlcpy() 6.8 1 1
do_gettimeofday() 5.0 8 2 10
init_timer_key() 4.15 6 similar 3 1
register_sysctl_table() 6.6 1 1 2 2
rtc_time_to_tm() 5.6 1

OSAL advantage (CV500, CV300, hi3519v101)

These platforms' blobs call osal_* wrapper functions. Since OSAL is source-compiled with kernel_compat.h force-included, all API changes are handled at compile time. CV300 and CV500 have zero blobs bypassing OSAL; hi3519v101 has only 3.

Recommended Priority

  1. CV500 + CV300 — Already work on any kernel. Just build and test.
  2. hi3519v101 — 2 shim functions for 6.6+. Near-zero effort.
  3. AV100 — 3 shim functions for 5.x–6.6. Best non-OSAL candidate.
  4. CV200 — Same shims as AV100, but ARM926 limits long-term upstream support.
  5. CV100 — Locked to kernel 3.0–3.9 unless blobs are replaced with source.

Implementation Approach

OSAL platforms (CV500, CV300): Just recompile OSAL against new kernel — kernel_compat.h handles all API changes.

OSAL platforms with exceptions (hi3519v101): Recompile OSAL + add 2 shim exports for the 3 blobs that bypass OSAL.

Direct-call platforms (AV100, CV200): Create compat_shims.ko loaded before blob modules, exporting old API names forwarding to new implementations.

CV100: Not feasible beyond 3.9 due to create_proc_entry struct layout changes in 23+ blobs.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions