不知道有没有人和我一样,一开始对Linux驱动和Linux应用概念模糊,现在明确了。
- 单片机的编程属于裸机,是直接在硬件上运行的程序,不需要操作系统支持,包括之前基于的I.MX6ULL编程都是如此
- Linux驱动负责将应用程序的请求转化为硬件可以理解的指令,并将硬件的响应传递给应用程序。在Linux中,驱动程序通常以内核模块的形式存在,它们被加载到内核中以支持特定的硬件设备。驱动会调用内核接口提供的API完成设备驱动的注册
- Linux应用编程是指开发运行在Linux操作系统上的应用程序。可以这么理解,Linux应用就是我们熟悉的windows应用程序,而Linux驱动是windows底层的那些设备驱动,例如声卡驱动,网卡驱动等等。驱动和硬件打交道,应用则不需要
- Linux开发其实就是这两个方向,驱动和应用。Linux应用使用
Qt creator
比较多,类似于C#的Winform
- 接下去的学习就是Linux驱动,即和硬件(设备)打交道,同时也会有一些基于命令行的Linux应用开发作为驱动的测试。
最开始要明确的概念是用户态和内核态,即user和kernel。写了Linux驱动后需要用应用(App)来操作内核,App属于用户态,和内核是隔绝开的。
Linux中一切都是文件,驱动加载成功后会在/dev生成一个相应的文件,例如/dev/DCmotor,就是直流电机的文件。对该文件进行相应的操作即实现对硬件的操作。
使用open
, close
, write
, read
几个函数实现打开设备,关闭设备,向设备写数据实现操作和读取设备状态等功能。这些实现硬件操作的函数集合可以参考include/linux/fs.h
中的file_operation结构体。字符设备驱动开发