第2章 你好!内核源码(iTOP-RK3568开发板驱动开发指南 )

发布于:2023-09-09 ⋅ 阅读:(175) ⋅ 点赞:(0)

本章我们来认识Linux内核源码,开始真正进入到驱动的世界里面,不知道各位小伙伴们有没有做好准备呢?

2.1 初识内核源码

Linux内核源码的官方网站为https://www.kernel.org/,可以在该网站下载最新的Linux内核源码。进入该网站之后如下图(图2-1)所示:

img

图 2-1

从上图(图1)可以看到多个版本的内核分支,分别为主线版本(mainline)、稳定版本(stable)和长期支持版本(longterm)。以上各个支线和主线是由linus torvalds(Linux之父)所领导。半导体厂商和一些内核爱好者会在官网下载相应版本的内核源码,对该源码进行打补丁等操作。以此让官网的内核源码可以在半导体厂家设计的主控(CPU)上跑起来,所以在开发和学习的过程中,我们并不会直接去Linux内核官网下去下载源码,而且是使用半导体厂家提供的源码包。

但是不论是Linux官网的内核源码还是半导体厂家提供的内核源码不影响我们来看它的庐山真面目!作者下载了Linux官方网站的4.19.262分支源码,下载好的源码存放在“iTOP-RK3568开发板【底板V1.7版本】\03_【iTOP-RK3568开发板】指南教程\02_Linux驱动配套资料\01_Linux内核官方源码”如下图(图2-2)所示:

img

图 2-2

将Linux内核官方源码拷贝到虚拟机ubuntu上如下图(图2-3)所示:

img

图 2-3

使用以下命令对内核官方源码进行解压,解压完成如下图(图2-4)所示:

sudo tar -vxf linux-4.19.262.tar.xz 

img

图 2-4

解压完成后我们会看到非常多的文件夹,这些文件夹放的就是Linux内核源码,在下一小节中作者来介绍Linux内核源码的结构和每个目录的作用。

2.2 内核源码结构

上一小节解压的目录下的内核源码目录都是用来做什么的呢?如下图(图2-5)所示:

img

图 2-5

目录的内容如下表(表2-6)所示:

目录 内容
arch 存放不同平台体系相关代码
block 存放块设备相关代码
crypto 存放加密、压缩、CRC校验等算法相关代码
Documentation 存放相关说明文档,很多实用文档,包括驱动编写等
drivers 存放Linux 内核设备驱动程序源码。该目录包含众多驱动,目录按照设备类别进行分类,如 char、block 、input、i2c、spi、pci、usb等。
firmware 存放处理器相关的一些特殊固件
fs 存放虚拟文件系统代码
include 存放内核所需、与平台无关的头文件
init Linux系统启动初始化相关的代码
ipc 存放进程间通信代码
kernel Linux内核的核心代码,包含了进程调度子系统,以及和进程调度相关的模块。
lib 库文件代码, 实现需要在内核中使用的库函数,例如CRC、FIFO、list、MD5等。
mm 实现存放内存管理代码
net 存放网络相关代码
samples 存放提供的一些内核编程范例
scripts 存放一些脚本文件
security 存放系统安全性相关代码
sound 存放声音、声卡相关驱动
tools 一些常用工具,如性能剖析、自测试等
usr 用于生成initramfs的代码。
virt 提供虚拟机技术(KVM等)的支持

表 2-6

2.3 编译内核源码

本小节使用的内核源码是半导体厂家提供的内核源码,是我们学习和开发要使用的内核源码。在进行驱动学习之前需要将此内核源码编译成功。

内核源码存放路径为“iTOP-RK3568开发板【底板V1.7版本】\03_【iTOP-RK3568开发板】指南教程\02_Linux驱动配套资料\02_Linux_SDK源码”,将对应目录下的内核源码拷贝到虚拟机ubuntu目录下,如下图(图2-7)所示:

img

图 2-7

注:编译环境使用的是迅为搭建好的编译环境,迅为的环境经过测试在不进行修改的前提下,可以直接将内核源码编译通过。

使用以下命令对内核源码的进行解压,解压完成如下图(图2-8)所示:

tar -vxf linux_sdk.tar.gz

img

图 1-8

使用“cd linux_sdk”命令进入内核源码目录,如下图(图2-9)所示:

img

图 2-9

使用命令“./build.sh kernel”进行内核源码的编译,编译过程如下图(图2-10)所示:

img

图 2-10

编译时间和电脑虚拟机配置相关,编译完成如下图(图2-11)所示:

img

图 2-11

通过对内核源码官网的探索,内核源码的目录结构讲解以及内核源码的编译。我相信大家对Linux内核源码应该有了一个初步的认识了。下一章我们来学习第一个驱动helloworld。

【最新驱动资料(文档+例程)】

链接 https://pan.baidu.com/s/1M4smUG2vw_hnn0Hye-tkog

提取码:hbh6

【B 站配套视频】

https://b23.tv/XqYa6Hm

【RK3568 购买链接】

https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-2245

提取码:hbh6

【B 站配套视频】

https://b23.tv/XqYa6Hm

【RK3568 购买链接】

https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-2245

2452613.11.2fec74a6elWNeA&id=669939423234

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到