Linux 中的驱动开发的初学者体会

Linux 中的驱动开发的初学者体会

很多年前,心里就存下这样一个愿望。就是把Linux 的驱动开发搞清楚。

但是一开始上上这样的开发难度天大了,对着一堆的寄存器发愁。

于是就从简单的STM8,PIC16FXXX ,51 等板子入手开发一些单片机例程。一路上上做做小家电,而后从开发STM32下的开发。如今终于可以大阔步的学习Linux的驱动开发了。

其实Linux的驱动开发并没有想象的那么难,就是要耐心,耐心,再耐心。

51 或者 STM32 等。单片机开发很难接触到
更高层次的系统方面的知识,单片机开发由于工业上成本控制的原因,基本能跑裸机就裸机,上系统的,一般都是项目比较庞大,在通信领域的模组一般都会用到RTOS。

比如 UCOS、FreeRTOS 等等,这些
操作系统都是一个 kernel,如果需要网络、文件系统、GUI 等这些就需要开发者自行移植。而
移植又是非常痛苦的一件事情,而且移植完成以后的稳定性也无法保证。即使移植成功以后后
续的开发工作也比较繁琐,因为不同的组件其 API 操作函数都不同。

但是FREERTOS 等操作系统相比Liunx 开销少多了。多以对资源不丰富的硬件设备,还是需要用到FREERTOS的。

Linux 就是这样一个系统:具有统一的标
准;提供完善的多任务管理、存储管理、设备管理、文件管理和网络等。

强烈建议在学习嵌入式Linux 驱动开发之前一定要学一下 STM32 这种 Cortex-M 内核的 MCU,因为 STM32 这样的MCU 其内部资源基本和可以运行 Linux 的 CPU 差不多,如果会 STM32 的话上手 Linux 驱动开发就会容易很多。

STM32 学习者顺利的转入 Linux 驱动
开发的学习路径:

1、选取合适的 CPU

一款外设和 STM32H7 这样的 MCU 差不多的
CPU 就非常适合 Linux 入门,三星的 2440 就非常合适,但是 2440 早已停产了,学了以后工作上肯定又用不到了,又得学习其他的 CPU,有点浪费时间。作者花了不少时间终于找到了一款合适的 CPU,那就是 NXP 的 I.MX6UL!

2、开发环境讲解

是嵌入式 Linux 驱动开发需要的主机是 Linux 平台的,也就是你必须先在自己的电脑上安装
Linux 系统,Linux 系统发行版有 Ubuntu、CentOS、Fdeora、Debian 等等,选择一种一款如 Ubuntu操作系统就可。

3、合理的裸机例程

Linux 驱动开发非常庞大、繁琐。要想进行 Linux 驱动开发,必须要先移植Uboot、然后移植 Linux 系统和根文件系统到你的开发平台上。而 Uboot 又是一个超大的裸机综合例程,因此如果你没有学习过裸机例程那么 Uboot 移植将会有点困难,尤其是当要修改 Uboot代码的时候。

4、Uboot、Linux 和根文件系统移植

学习完裸机例程以后就是 Linux 驱动开发了,但是在进行 Linux 驱动开发之前要先在使用
的开发板平台上移植好 Uboot,Linux 和根文件系统。这是 Linux 驱动开发的第一个拦路虎。

5、嵌入式 Linux 驱动开发

当我们把 Uboot,Linux 和根文件系统都在开发板上移植好了以后就可以开始 Linux 驱动
开发了。Linux 驱动有三大类:字符设备驱动、块设备驱动和网络设备驱动。

总之,学习是一件痛苦地事情,尤其是找不到学习路径地时候,这时候有三点个人觉得很重要:
1、做好学习的规划
2、构建一个学习环境,软件开发环境+硬件(开发板)+ 学习资料。
3、做好阶段性的过程总结。

你可能感兴趣的:(嵌入式,驱动开发,linux)