瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568 支持安卓 11 和 linux 系统,主要面向物联网网关、NVR 存储、工控平板、工业检测、工控盒、卡拉 OK、云终端、车载中控等行业。
【公众号】迅为电子
【粉丝群】824412014(加群获取驱动文档+例程)
【视频观看】嵌入式学习之Linux驱动(第一篇 驱动基础_全新升级)_基于RK3568
【购买链接】迅为RK3568开发板瑞芯微Linux安卓鸿蒙ARM核心板人工智能AI主板
第2章 你好!内核源码
本章我们来认识Linux内核源码,开始真正进入到驱动的世界里面,不知道各位小伙伴们有没有做好准备呢?
2.1 初识内核源码
Linux内核源码的官方网站为https://www.kernel.org/,可以在该网站下载最新的Linux内核源码。进入该网站之后如下图(图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)所示:
将Linux内核官方源码拷贝到虚拟机ubuntu上如下图(图2-3)所示:
使用以下命令对内核官方源码进行解压,解压完成如下图(图2-4)所示:
sudo tar -vxf linux-4.19.262.tar.xz
解压完成后我们会看到非常多的文件夹,这些文件夹放的就是Linux内核源码,在下一小节中作者来介绍Linux内核源码的结构和每个目录的作用。
2.2 内核源码结构
上一小节解压的目录下的内核源码目录都是用来做什么的呢?如下图(图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)所示:
注:编译环境使用的是迅为搭建好的编译环境,迅为的环境经过测试在不进行修改的前提下,可以直接将内核源码编译通过。
使用以下命令对内核源码的进行解压,解压完成如下图(图2-8)所示:
tar -vxf linux_sdk.tar.gz
使用“cd linux_sdk”命令进入内核源码目录,如下图(图2-9)所示:
使用命令“./build.sh kernel”进行内核源码的编译,编译过程如下图(图2-10)所示:
编译时间和电脑虚拟机配置相关,编译完成如下图(图2-11)所示:
通过对内核源码官网的探索,内核源码的目录结构讲解以及内核源码的编译。我相信大家对Linux内核源码应该有了一个初步的认识了。下一章我们来学习第一个驱动helloworld。