博主主页:Systemcall小酒屋
博主简介:Neutionwei,C站嵌入式领域新星创作者之一,一枚热爱开源技术、喜欢分享技术心得的极客,注重简约风格,热衷于用简单的案例讲述复杂的技术,“假传万卷书,真传一案例”,这是厦大一位教数学的院士说过的一句话,另外“成就是最好的老师”,技术既要沉淀,也得分享,成就感的正反馈是支持我持续耕耘的动力!
专栏目录:Firefly-RK356x板卡
专栏说明:本专栏主要基于Firefly旗下的RK356x板卡进行入门篇讲述,欢迎订阅,博主会持续更新!
RK356x平台Kernel源代码获取的方式有两种,第一是直接下载Firefly官方SDK并同步即自动生成Kernel目录,第二是在代码托管仓库GitHub或者GitLab抓取,第三种是使用repo抓取rk356x_linux_bsp_release.xml
!
第一种方式可以参考以下文章:
https://blog.csdn.net/Neutionwei/article/details/121638947
第二种方式:
# 从 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
RK356x平台Kernel根目录如下:
以下是各个子目录或文件的介绍!
Documentation/
是内核文档手册相关目录,大部分软件框架的介绍都有相关说明,但是更新比较慢:
芯片架构文件相关目录,RK356x属于arm64
架构:
以下设备树dts
相关目录,RK356x的dts
文件存放于rockchip/
目录:
block/
是块设备相关目录,像 SD 卡、EMMC、NAND、SSD等存储设备属于块设备,目录中存放着管理块设备的相关文件:
boot.its
是属于 Fit 打包格式描述文件,描述Kernel固件如何打包。
drivers/
是设备驱动相关目录,根据驱动类型的不同,分门别类进行整理,比如 drivers/i2c
就是 I2C 相关驱动目录:
文件系统相关目录,存放文件系统,比如 fs/ext2
、fs/ext4
、fs/f2fs
等,分别是 ext2
、ext4
和 f2fs
等文件系统:
头文件相关目录,#include
包含就是这个目录下的头文件:
初始化相关目录,存放 Linux 内核启动的时候初始化代码:
内核加载过程显示 logo 的 bmp
格式文件:
ramdisk.img
是 Firefly 提供的 initramfs
,在根文件系统损坏的情况下会进入这个文件系统(如果没有initramfs
,Kernel 找不到根文件系统默认会出错)。
脚本相关目录,编译的时候会用到很多脚本文件,这些脚本文件就保存在此目录中:
与 initramfs
相关的目录,用于生成 initramfs
:
这四个文件配合script/
目录一起配置与编译使用。
目录/文件 | 描述 |
---|---|
COPYING | 版权声明 |
CREDITS | Linux 贡献者 |
LICENSES/ | 开源许可 |
MAINTAINERS | 维护者名单 |
OWNERS | android 主线 OWNERS |
README | Linux 描述文件 |
android/ | 安卓相关目录 |
build.config.* | 安卓相关编译配置文件 |
certs/ | 签名检查证书相关目录 |
crypto/ | 加密相关目录,存放着加密算法文件,比如常见的 crc、crc32、md4、md5、hash 等加密算法 |
security/ | 安全相关目录 |
$ 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
$ ls device/rockchip/rk356x/
$ ./build.sh roc-rk3568-pc-ubuntu.mk
$ ./build.sh kernel
编译完成:
目录/文件 | 描述 |
---|---|
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 打包而成 |