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
- CV500 + CV300 — Already work on any kernel. Just build and test.
- hi3519v101 — 2 shim functions for 6.6+. Near-zero effort.
- AV100 — 3 shim functions for 5.x–6.6. Best non-OSAL candidate.
- CV200 — Same shims as AV100, but ARM926 limits long-term upstream support.
- 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.
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
Per-Platform Issues
kernel_compat.hregister_sysctl_table(2 blobs) +init_timer_key(1 blob) bypass OSALdo_gettimeofday(10),init_timer_key(3),register_sysctl_table(2)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.
Dangerous API Summary
Direct kernel calls in blobs (not via OSAL)
create_proc_entry()__arm_ioremap()arm926_flush_kern_*do_mmap_pgoff()filp_open()strlcpy()do_gettimeofday()init_timer_key()register_sysctl_table()rtc_time_to_tm()OSAL advantage (CV500, CV300, hi3519v101)
These platforms' blobs call
osal_*wrapper functions. Since OSAL is source-compiled withkernel_compat.hforce-included, all API changes are handled at compile time. CV300 and CV500 have zero blobs bypassing OSAL; hi3519v101 has only 3.Recommended Priority
Implementation Approach
OSAL platforms (CV500, CV300): Just recompile OSAL against new kernel —
kernel_compat.hhandles 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.koloaded before blob modules, exporting old API names forwarding to new implementations.CV100: Not feasible beyond 3.9 due to
create_proc_entrystruct layout changes in 23+ blobs.