学习的困惑
记得以前我在开始学习驱动开发的时候,找来很多文章、资料来学习,但是总是觉得缺少了点全局视角。
就好像:我想看清一座山的全貌,但总是被困在一个、又一个山谷中一样。
主要的困惑有 3 点:
每一篇文章的介绍都是正确的,但是如果把很多文章放在一起看,就会发现怎么说的都不一样啊?
有些文章注重函数的介绍,但是缺乏一个全局的视角,从整体上来观察驱动程序的结构;
对于一个新手来说,能够边学习、边实践,这是最好的学习方式,但是很多文章不会注意这方面。虽然文章内容很漂亮,但是不知道怎么去实践、验证。
因此,这几篇文章我们就从最简单的驱动模块编译开始,然后介绍字符设备驱动程序。
在这部分,会以 GPIO 为例子,重点描述其中的关键节点。
最后再介绍在中断处理程序中,如何利用信号量、小任务、工作队列,把内核事件传递到应用层来处理。
作为第一个开篇文章,从最简单的内核编译开始。
实际操作一下:如何把一个最简单的驱动程序(hello
),按照 2 种方式进行编译:
编译进内核;
编译为一个独立的驱动模块;
实践环境
为了便于测试,以下操作都是在 Ubuntu16.04 操作系统里完成的。
编译Linux
驱动程序,肯定需要内核源码,这里选择的是 linux-4.15 版本,可以在官网下载。
文末有下载方式。
下载之后,把linux-4.15.tar.gz
解压到Ubuntu
中任意目录即可,例如:解压到~/tmp/
目录下:
$ tar -zxvf linux-4.15.tar.gz -C ~/tmp/
编译进内核
创建驱动程序目录
linux
中的驱动,一般都放在 linux-4.15/drivers/ 目录下,因此在这个目录中创建一个hello
文件夹。
$ mkdir linux-4.15/drivers/hello
对于一个驱动来说,最重要的就是3
个文件:
源代码
Kconfig
Makefile文章来源:https://www.toymoban.com/news/detail-423658.html
只要按照固定的格式来编写这文章来源地址https://www.toymoban.com/news/detail-423658.html
到了这里,关于Linux驱动实践:带你一步一步编译内核驱动程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!