今天,分享一些快速入门linux驱动的路子。
起因
今天上班摸鱼看linux内核,感觉一下子就醒悟了,一下子就通透了,脑子里面终于有一种OS的感觉,资源的分配啊,线程管理,进程管理,内存管理的思路了。
OS
要知道OS是分等级的
1>.微内核 鸿蒙 QNX、Minix
2>.宏内核 linux windows
3>.混合内核 windows XNU内核
4>.rtos rt-thread freertos ucos
5>.裸坤
而且rtos也是有级别的
POSIX 的RTOS标准
PSE51, PSE52, PSE53, PSE54 共四个级别;
Minimal Real-time System Profile IEEE Std 1003.13 PSE51,基础 RTOS
Real-time Controller Profile IEEE Std 1003.13 PSE52,带有简单的文件系统…等
Dedicated Real-time Profile IEEE Std 1003.13 PSE53,拥有网络功能…等
Multi-Purpose Real-time Profile IEEE Std 1003.13 PSE54,完整的文件系统,带有 Shell 组件…等
1.最简单就是裸机编程了,就是顺序循环判断走下去就完事了。
2.然后就是freeRTOS和ucos了,这个就上一个台阶的难度,但是就是几个api用来用去,规划好每个任务的优先级和工作时间,利用好空闲任务,利用好内存资源,多线程就完事了
3.就是有点难度了,我这边建议学rtt了,因为rtt是仿照linux的,nano版本和标准版本是没有设备树这东西。首先呢,纯应用开发的话,和上面的rtos是差不多的。但是rtt有一个特殊的操作,就是命令行操作。没听错就是命令行,这个其实是uart串口,而且这些命令行没有linux那些的自带信号,比如CTRL+C CTRL+Z可能无法打断,需要手动添加接受结束才行,而且也是拥有驱动开发操作的。
4.linux了,这个就是在上面的基础上面多了一个设备树的东西和平台开发,其他的真差不多了,rtt也是有kconfig和menuconfig的。
5.后面那些就非常复杂了,其实学会linux,如果能够如火纯情,天下无敌
RTT的驱动开发和BSP
rtt标准和nano版本没有设备树,所以,所有功能实现都要依赖BSP,只有正确的驱动开发加上Kconfig,才能搞定BSP。搞stm32开发的时候一般是结合stm32Cube进行的开发,所以,实际上难的东西都没了,就是把那些gpio的复用功能再用init、open、write、read、control、callback、 close这几个函数进行封装。就是类似于linux的file_operations一样。但是这一步,你并没干啥,为什么这么说呢?因为代码是cube生成的,很多时候只要按照官网给的默认配置,进行cube生成代码,rtt就能进行编译,然后自动链接上去,就是rtt没有给你写这些驱动,他们自己以cube为模板进行驱动设计。只需要做的就是find设备,open init 调用那几个api即可,非常人性化。做BSP的就比较麻烦,大家得去gitee上面把rtt下载下来,里面就有一个BSP代码,然后跟着官方的教程走一遍就可以了,这里就不多赘述了。
这上面是硬件驱动,就是很底层基础,但明显不是我们想要的。比如我想要一个独立的led自定义驱动功能。首先,思路,使用了led,那么肯定就是占用一个gpio,那么就要产生依赖和绑定就是menuconfig中一定要有绑定关系。就需要在kconfig中设置一下关系。然后就是编写驱动程序,首先就申请设备,操作集,添加注册。使用的时候,就是find,open ,close,control就够了。编写一个驱动程序即可,使用时候遵循驱动指定的cmd指令就可以实现了。
一般使用rtt都是mcu版本,而且单核为主,多核也有,但是目前是支持多核同构。如果是异构的话,那么可以考虑使用freertos的方案就支持异构多核。如果是smart版本的话,其实就是和linux基本无异了,需要自己编写设备树,需要自己编写驱动代码。今天2024-04-10去到深圳参加了rt的线下会。主要就是为了解决异构问题还有linux与rtos之间的组合,就是大核是linux,小核心通过协议去接收来自大核心的任务和指令,就是dma那种操作。
驱动很多时候都是不需要做的,一般都是做了适配,就算添加,也只是添加一些硬件功能就ok了,也就是cube生成,kconfig修改就可以了。如果说新的国产平台rtt没有支持那么就难搞了,所有驱动和底层都要自己一个一个添加哦。rtt可以实现其他驱动,不过,需要根据范例进行模仿。
结语
加油兄弟们,千万不要呆在自己的舒适区中。不要自我感动和欺骗了。这样只是在加速淘汰自己,他人的堕落,正是推动你向成功的人前进的动力。