[RK356x] [Firefly-Linux] 10min带你获取了解与编译Kernel源代码
Posted Neutionwei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[RK356x] [Firefly-Linux] 10min带你获取了解与编译Kernel源代码相关的知识,希望对你有一定的参考价值。
🍇 博主主页:Systemcall小酒屋
🍇 博主简介:Neutionwei,C站嵌入式领域新星创作者之一,一枚热爱开源技术、喜欢分享技术心得的极客,注重简约风格,热衷于用简单的案例讲述复杂的技术,“假传万卷书,真传一案例”,这是厦大一位教数学的院士说过的一句话,另外“成就是最好的老师”,技术既要沉淀,也得分享,成就感的正反馈是支持我持续耕耘的动力!
🍇 专栏目录:Firefly-RK356x板卡
🍇 专栏说明:本专栏主要基于Firefly旗下的RK356x板卡进行入门篇讲述,欢迎订阅,博主会持续更新!
一、Kernel获取
RK356x平台Kernel源代码获取的方式有两种,第一是直接下载Firefly官方SDK并同步即自动生成Kernel目录,第二是在代码托管仓库GitHub或者GitLab抓取,第三种是使用repo抓取rk356x_linux_bsp_release.xml
!
第一种方式可以参考以下文章:
第二种方式:
# 从 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根目录如下:
以下是各个子目录或文件的介绍!
2.1 Documentation/
Documentation/
是内核文档手册相关目录,大部分软件框架的介绍都有相关说明,但是更新比较慢:
2.1 arch/
芯片架构文件相关目录,RK356x属于arm64
架构:
以下设备树dts
相关目录,RK356x的dts
文件存放于rockchip/
目录:
以下RK356x相关dts
文件:
以下config
配置文件:
2.2 block/
block/
是块设备相关目录,像 SD 卡、EMMC、NAND、SSD等存储设备属于块设备,目录中存放着管理块设备的相关文件:
2.3 boot.its
boot.its
是属于 Fit 打包格式描述文件,描述Kernel固件如何打包。
2.4 drivers/
drivers/
是设备驱动相关目录,根据驱动类型的不同,分门别类进行整理,比如 drivers/i2c
就是 I2C 相关驱动目录:
2.5 firmware/
固件相关目录,默认只有一个 Makefile
文件:
2.6 fs/
文件系统相关目录,存放文件系统,比如 fs/ext2
、fs/ext4
、fs/f2fs
等,分别是 ext2
、ext4
和 f2fs
等文件系统:
2.7 include/
头文件相关目录,#include <xxx.h>
包含就是这个目录下的头文件:
2.8 init/
初始化相关目录,存放 Linux 内核启动的时候初始化代码:
2.9 ipc/
进程间通信相关目录,存放进程间通信的具体实现代码:
2.10 kernel/
内核相关目录:
2.11 lib/
库相关目录,都是一些公用的库:
2.12 logo.bmp、logo_kernel.bmp
内核加载过程显示 logo 的 bmp
格式文件:
2.13 mm/
mm/
是内存管理相关目录:
2.14 net/
网络相关目录:
2.15 ramdisk.img
ramdisk.img
是 Firefly 提供的 initramfs
,在根文件系统损坏的情况下会进入这个文件系统(如果没有initramfs
,Kernel 找不到根文件系统默认会出错)。
2.16 samples/
例程相关目录:
2.17 scripts/
脚本相关目录,编译的时候会用到很多脚本文件,这些脚本文件就保存在此目录中:
2.18 sound/
音频处理相关目录:
2.19 tools/
工具相关目录:
2.20 usr/
与 initramfs
相关的目录,用于生成 initramfs
:
2.21 virt/
virt/
目录提供虚拟机技术支持 (KVM):
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/
3.3 假设编译roc-rk3568-pc-ubuntu
$ ./build.sh roc-rk3568-pc-ubuntu.mk
$ ./build.sh kernel
编译完成:
3.4 编译后文件
目录/文件 | 描述 |
---|---|
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源代码的主要内容,如果未能解决你的问题,请参考以下文章
[RK356x] [Firefly-Linux] 一节课间时间带你了解Ubuntu固件各个分区
[RK356x] [Firefly-Linux] 一节课间时间带你了解Linux_SDK
[RK356x] [Firefly-Linux] 10min带你获取了解与编译Kernel源代码
[RK356x] [Firefly-Linux] 一节课间时间教你单独更新Kernel到Ubuntu系统的boot分区