鸿蒙南向开发:LiteOS-M内核支持musl与newlib平滑切换方案

背景

当前M核编译时上层组件与内核统一使用musl-C,位于//third_party/musl/porting/liteos_m/kernel/,内核当前的内部实现也是主要适配musl的结构体定义,但社区及三方厂商开发多使用公版工具链arm-none-eabi-gcc加上私有定制优化进行编译,考虑我们内核的易用性提升,故支持公版arm-none-eabi-gccC库编译内核运行。

Newlib

  1. newlib是小型C库,针对posix接口涉及系统调用的部分,newlib提供一些需要系统适配的钩子函数,例如_exit()_open()_close()_gettimeofday()等,操作系统适配这些钩子,就可以使用公版newlib工具链编译运行程序。

  2. 公版arm-none-eabi-工具链中带有通用newlib的C库头文件,在一份通用的C库头文件中,使用不同的宏开关来控制一些 宏、类型、结构体、函数的声明或者定义。这些宏有以下几种:

    1> 根据posix标准划分,例如:_POSIX_TIMERS,_POSIX_CPUTIME,_POSIX_THREADS等。

    2> 根据已支持的系统,例如:__CYGWIN____rtems____unix__等。

    3> 根据C库不同版本,例如:_GNU_SOURCE,_BSD_SOURCE 等。

方案

当前内核现状

  1. LiteOS-M不区分用户态内核态,上层组件与内核共用一套基于musl的C库,虽然编译时使用arm-none-eabi-gcc,但只使用其工具链的编译功能,通过加上-nostdinc-nostdlib强制使用我们自己改造后的musl-C。

  2. 内核提供了基于LOS_XXX适配实现pthread、mqeue、fs、semaphore、time等模块的posix接口(//kernel/liteos_m/kal/posix

  3. 内核提供的posix接口与musl中的标准C库接口共同组成LiteOS-M的LibC。

适配变更</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值