kfifo的移植
两个月前,我花了两天时间,查找Linux内核里kfifo的相关资料,将其从内核层移植到应用层,并成功应用于多线程CAN总线采集程序(一个线程接收/一个线程输出)。kfifo.c是从Linux 5.3 stable内核代码里复制出来的,路径是lib/kfifo,对应的kfifo.h路径是include/linux/kfifo.h。由于kfifo是内核里的代码,应用层无法直接使用,我做了如下修改:
-
注释掉无关的或不必要的代码,如对内核头文件的引用,如涉及dma、sgl的代码
-
重新实现某些功能,如采用SO上的代码取代了
roundup_pow_of_two
,用GCC内置函数__sync_synchronize
取代了smp_wmb
,重新定义了ARRAY_SIZE
代码仓库:https://github.com/liigo/kfifo
kfifo的使用
很简单就三点:用 DEFINE_KFIFO 定义变量并初始化,用