0
点赞
收藏
分享

微信扫一扫

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码


🍇 博主主页:​​Systemcall小酒屋​​
🍇 博主简介:Neutionwei,C站嵌入式领域新星创作者之一,一枚热爱开源技术、喜欢分享技术心得的极客,注重简约风格,热衷于用简单的案例讲述复杂的技术,“假传万卷书,真传一案例”,这是厦大一位教数学的院士说过的一句话,另外“成就是最好的老师”,技术既要沉淀,也得分享,成就感的正反馈是支持我持续耕耘的动力!
🍇 专栏目录:​​Firefly-RK356x板卡​​
🍇 专栏说明:本专栏主要基于Firefly旗下的RK356x板卡进行入门篇讲述,欢迎订阅,博主会持续更新!

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_内核

一、Kernel获取

RK356x平台Kernel源代码获取的方式有两种,第一是直接下载Firefly官方SDK并同步即自动生成Kernel目录,第二是在代码托管仓库GitHub或者GitLab抓取,第三种是使用repo抓取​​rk356x_linux_bsp_release.xml​​!

第一种方式可以参考以下文章:

​​javascript:void(0)​​

第二种方式:

# 从 GitLab 中抓取 Kernel 源代码
$ git clone https://gitlab.com/firefly-linux/kernel.git
# 切换为 RK356x 分支
$ git checkout -b rk356x/firefly remotes/origin/rk356x/firefly

# 从 GitLab 中抓取 tools
$ git clone https://gitlab.com/firefly-linux/tools.git
# 切换为 RK356x 分支
$ git checkout -b rk356x/firefly remotes/origin/rk356x/firefly

$ mkdir device
$ cd device
# 从 GitLab 中抓取 device/rockchip
$ git clone https://gitlab.com/firefly-linux/device/rockchip.git
# 切换为 RK356x 分支
$ git checkout -b rk356x/firefly remotes/origin/rk356x/firefly

第三种方式:

$ mkdir rk356x_linux_bsp
$ cd rk356x_linux_bsp
# BSP 包括 device/rockchip 、docs 、 kernel 、 u-boot 、 rkbin 、 tools 和交叉编译链
$ repo init --no-clone-bundle --repo-url https://gitlab.com/firefly-linux/git-repo.git -u \
https://gitlab.com/firefly-linux/manifests.git -b master -m rk356x_linux_bsp_release.xml
# 同步
$ .repo/repo/repo sync -l
$ .repo/repo/repo sync -c --no-tags
$ .repo/repo/repo start firefly --all

二、Kernel根目录

RK356x平台Kernel根目录如下:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_内核_02

以下是各个子目录或文件的介绍!

2.1 Documentation/

​Documentation/​​是内核文档手册相关目录,大部分软件框架的介绍都有相关说明,但是更新比较慢:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_rk356x_03

2.1 arch/

芯片架构文件相关目录,RK356x属于​​arm64​​架构:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_内核_04


以下设备树​​dts​​​相关目录,RK356x的​​dts​​​文件存放于​​rockchip/​​目录:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_Kernel_05

以下RK356x相关​​dts​​文件:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_Kernel_06

以下​​config​​配置文件:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_rk356x_07

2.2 block/

​block/​​是块设备相关目录,像 SD 卡、EMMC、NAND、SSD等存储设备属于块设备,目录中存放着管理块设备的相关文件:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_内核_08

2.3 boot.its

​boot.its​​是属于 Fit 打包格式描述文件,描述Kernel固件如何打包。

2.4 drivers/

​drivers/​​​是设备驱动相关目录,根据驱动类型的不同,分门别类进行整理,比如 ​​drivers/i2c​​ 就是 I2C 相关驱动目录:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_linux_09

2.5 firmware/

固件相关目录,默认只有一个 ​​Makefile​​文件:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_Kernel_10

2.6 fs/

文件系统相关目录,存放文件系统,比如 ​​fs/ext2​​​、​​fs/ext4​​​、​​fs/f2fs​​​ 等,分别是 ​​ext2​​​、​​ext4​​​ 和 ​​f2fs​​ 等文件系统:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_Kernel_11

2.7 include/

头文件相关目录,​​#include <xxx.h>​​包含就是这个目录下的头文件:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_rk356x_12

2.8 init/

初始化相关目录,存放 Linux 内核启动的时候初始化代码:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_linux_13

2.9 ipc/

进程间通信相关目录,存放进程间通信的具体实现代码:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_Kernel_14

2.10 kernel/

内核相关目录:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_Kernel_15

2.11 lib/

库相关目录,都是一些公用的库:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_Kernel_16

2.12 logo.bmp、logo_kernel.bmp

内核加载过程显示 logo 的 ​​bmp​​ 格式文件:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_linux_17

2.13 mm/

​mm/​​是内存管理相关目录:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_rk356x_18

2.14 net/

网络相关目录:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_linux_19

2.15 ramdisk.img

​ramdisk.img​​​是 Firefly 提供的 ​​initramfs​​​,在根文件系统损坏的情况下会进入这个文件系统(如果没有​​initramfs​​,Kernel 找不到根文件系统默认会出错)。

2.16 samples/

例程相关目录:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_嵌入式_20

2.17 scripts/

脚本相关目录,编译的时候会用到很多脚本文件,这些脚本文件就保存在此目录中:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_Kernel_21

2.18 sound/

音频处理相关目录:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_rk356x_22

2.19 tools/

工具相关目录:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_linux_23

2.20 usr/

与 ​​initramfs​​​ 相关的目录,用于生成 ​​initramfs​​:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_嵌入式_24

2.21 virt/

​virt/​​目录提供虚拟机技术支持 (KVM):

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_linux_25

2.22 Makefile、Kbuild、Kconfig、config.mk

这四个文件配合​​script/​​目录一起配置与编译使用。

2.23 其他(较少关心)

目录/文件

描述

COPYING

版权声明

CREDITS

Linux 贡献者

LICENSES/

开源许可

MAINTAINERS

维护者名单

OWNERS

android 主线 OWNERS

README

Linux 描述文件

android/

安卓相关目录

build.config.*

安卓相关编译配置文件

certs/

签名检查证书相关目录

crypto/

加密相关目录,存放着加密算法文件,比如常见的 crc、crc32、md4、md5、hash 等加密算法

security/

安全相关目录

三、编译Kernel

3.1 编译环境

$ sudo apt-get install repo git ssh make gcc libssl-dev liblz4-tool \
expect g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support \
qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-multilib \
unzip device-tree-compiler python-pip ncurses-dev python-pyelftools

3.2 查看配置文件

$ ls device/rockchip/rk356x/

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_rk356x_26

3.3 假设编译roc-rk3568-pc-ubuntu

$ ./build.sh roc-rk3568-pc-ubuntu.mk
$ ./build.sh kernel

编译完成:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_rk356x_27

3.4 编译后文件

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_linux_28

目录/文件

描述

Module.*

与模块有关一系列文件

System.map

符号表

boot.img

最终烧录 Kernel 文件(由 Image、ramdisk.img、resource.img 打包而成 )

kernel.img

由 Image 打包而成

resource.img

由设备树 DTB 与 logo 文件打包而成

vmlinux

编译出来的、未压缩的 ELF 格式 Linux 文件

vmlinux.o

编译生成的 vmlinux object文件

zboot.img

由 Image.lz4、ramdisk.img、resource.img 打包而成

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码_内核_29


举报

相关推荐

0 条评论