Linux内核中的红黑树可以在Linux以外的编译环境使用吗?

A.1.1 前言

笔者多年前受另一工程师启发,开始尝试在各种软件开发环境中使用Linux提供的数据结构实现机制,最常用的就是Linux中的链表实现。这样做的优点是可以直接使用各种强大的API对数据结构进行高效操作,因为是Linux的API操作也非常顺手。缺点是Linux是GPL协议限制的软件,使用其程序需要注意开发项目的性质。

本文简单探讨是否可以将Linux内核中的红黑树提取出Linux内核,在诸如用户程序开发,各种MCU开发等非Linux内核开发环境中使用。

本文基于5.15.133版本讨论,仅仅讨论可行性,成果非工程应用等级。

A.1.2 分析

简单分析一下。Linux内核中涉及到红黑树的文件有如下文件:

编号

文件

目录

1

rbtree.c

lib/

2

rbtree_types.h

include/linux/

3

rbtree.h

4

rbtree_augmented.h

5

compiler_types.h

可能涉及的修改。

  1. 去掉EXPORT_SYMBOL。
  2. 拿掉RCU相关代码,在相关实现中不会很多。
  3. 去掉likely/unlikely宏定义的使用。
  4. 可能会有一些其他宏定义需要复制过来,比如container_of,对于rb_entry等函数的实现是必要的。

A.1.3 实现

分文件来分析一下涉及的修改。这些修改均为简单尝试可行性,无法上升到工程层面。如果想在自己的工程中实现,需要更精细的修改和更严密的测试。

A.1.3.1 rbtree.c

将WRITE_ONCE的定义迁移进来。

拿掉EXPORT_SYMBOL。

注释掉rb_replace_node_rcu函数的定义。

A.1.3.2 rbtree.h

迁移container_of的实现。

注意,container_of的宏定义中是有BUG_ON的判断的,这里为了方便验证被我拿掉了。

引入Bool值类型的定义。

注释掉RCU相关的定义。

A.1.3.3 rbtree_augmented.h

头文件引用处理一下。

注释掉RCU相关内容。

A.1.3.4 其他文件

        直接引用即可。

A.1.4 测试

编写下列用户程序。

  1. #include <stdio.h>  
  2. #include 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值