我觉得学习内核驱动时,最开始只需要 ‘Know what, not know how ’。 不用去探究细节,只需要知道整体的框架,知道有哪些需要我们重视的内容即可。
何为 Linux 内核开发?
首先,初步认识下 Linux kernel
![66c860ef6c7bcf9bd55405cd9a90d198.png](https://i-blog.csdnimg.cn/blog_migrate/904e032b6d3cdc9fc6502ccac2ee2f6f.jpeg)
- Linux 内核的框架如上图。
- 设备子系统负责和硬件打交道。
- 大部分工作集中在设备子系统部分。
内核开发是什么?
- 广义上讲,新增或修改上图中内核部分的所有子系统。
- 非 Linux 源码贡献者,一般来说只修改设备子系统部分。
接下来,简单聊聊初学者需要重点关注的三个部分:设备树,字符设备,平台设备驱动。
设备树(DTS)
设备树相当于一份软件中描述硬件结构的配置框图。假设下图为硬件框图:
![68b0d1028a5e5eab3d9f0dab9b1104d9.png](https://i-blog.csdnimg.cn/blog_migrate/eccf3c52382c267dab2ec94b08c8c3ff.png)
那么其软件描述的代码片段如下:
/ { // root node
model = "Qualcomm Technologies, Inc. SDM xxx";
compatible = "qcom,sdmxxx";
cpus {
...
cpu@0 {
...
};
cpu@1 {
...
};
};
usb@<address> {
...
};
serial@<address> {
...
};
gpio@<address> {