Linux驱动开发学习记录系列(1)-初探Linux驱动开发
初衷:
想撰写本系列文章的主要原因是自己想学Linux驱动很久了,恰好手头一个项目需要用到Linux开发,乘此机会进行系统化学习,本系列主要记录实际开发时Linux驱动相关的整个流程和有趣的技术点。后续随着项目深入可能会更新其他知识,在以保证职业道德为前提的情况下尽可能记录更多的技术开发流程,供自己加深记忆以及共同学习。
系列文章中,将会以第一视角由浅入深进行学习,博主本身具有一些嵌入式开发工作经验,对C和Python有一定开发经验,了解过Makefile,shell等一些基础知识。对Linux底层开发接触较少,系列文章中也是属于遇山拆山,遇河搭桥,边做边学,参考网上各路前辈和大佬的文章,。
正文:
物理设备:暂用不到
开发环境:Ubuntu虚拟机
目前购买的开发板还没有到货,在Windows10下安装Ubuntu虚拟机作为简单入门,一些基础的知识在网上都可以找到,主要包括以下几点:
Linux驱动加载有两种方式:
动态加载:在系统运行的情况下直接调试运行,速度快,哪里不对改哪里,本章节例程就使用动态加载;
静态加载:将模块写入内核,每次修改都要重新编译,重新下载,一般是动态调试没问题后写入到内核。
Linux将所有设备都分为:
字符设备:可以按照顺序读写,比如键盘,鼠标等实时输入输出设备,LED;
块设备:可以按照数据块的方式随机读写,比如硬盘,flash;
网络设备:特殊设备,基于套接字机制。
第一个例程永远是Hello World
在进行例程前需要确保系统有内核树,确保在/lib/modules/目录下有generic结尾的文件夹&#