谈谈感受。
近乎完善的POSIX标准,但是驱动质量比较low,包括设备驱动框架,但是呢对一些细节反而扣的很细。
举一些例子。
stm32的驱动具体实现中有以下代码:
[C] 纯文本查看 复制代码 #if !defined(CONFIG_NETDEV_LATEINIT)
void arm_netinitialize(void)
{
#ifdef CONFIG_STM32H7_FDCAN1
stm32_fdcansockinitialize(0);
#endif
#ifdef CONFIG_STM32H7_FDCAN2
stm32_fdcansockinitialize(1);
#endif
#ifdef CONFIG_STM32H7_FDCAN3
stm32_fdcansockinitialize(2);
#endif
}
#endif
这个代码位于stm32_fdcan_sock.c中,这个函数会被平台初始化函数up_initialize调用,其中up_initialize函数还会调用一些USB啥的,看样子是arm_netinitialize ,就是但是他就初始化了CAN,那万一有人想用以太网呢?
实际上NUTTX的网络初始化net_initialize中明确已经预留了can_initialize这样的接口。
在举一个:
sdmmc在枚举阶段 也就是和存储芯片通讯阶段 用的DMA,不是传输扇区哈,然后由于枚举交互命令字节很小,导致DMA不对齐,按道理 自然而然的设计是用CPU直接读写寄存器枚举完成才对。人家linux也都是这样的。
但是社区的那些人反而对一些细节扣得很细,比如写成这样:
if(condition1)
if(condition2)
他们就会问,为什么不写成if(condition1 && condition2) ,然后不通过PR的情况
反而他们对这个设计并没有很看重。一个良好的系统,设计是远远大于实现的,所以我觉得社区的追求有点本末倒置了。
|