全志V3S嵌入式linux系统初探

142次阅读
没有评论

全志 V3S

单核 Cortex-A7 @ 1.2GHz
内置 64MB 内存
看起来比较好焊接
支持 rgb 屏幕,内置 100M 以太网 PHY,内有 h264 编码器,但是调用起来很麻烦,全志没有给出完善的资料。
全志 V3S 嵌入式 linux 系统初探

嵌入式 linux

内存卡分区

让我们捋一捋内存卡里都存了什么,能看到的分区只有两个,实际还包含额外的信息。

  • mbr 分区表,512 字节,从 0 开始,描述了整个内存卡的两个分区
  • uboot,他是没有分区的,直接写入内存卡里的特定位置,在 mbr 后,在 boot 前,不会和它们冲突
  • boot 分区,fat16,里面存了 linux 内核和设备树
  • rootfs 分区,ext4

buildroot 构建

从上面得知,我们需要 uboot,linux,rootfs, 设备树等等东西,并且还要放到指定内存卡的指定位置,才能启动。
buildroot 就是帮我们做这件事的,他能根据配置,自动生成上面所有东西,并且组合成一个 img 镜像,直接 dd 进内存卡里就行了。

启动流程

v3s 启动后会去 uboot 的所在位置找 uboot, 这个位置是约定好的,写死在芯片里的。
由 uboot 启动 linux 内核,内核再去挂载 rootfs,之后就不懂了,反正启动了。

构建镜像

准备好一台 linux 机器,版本无所谓,不过需要装好 docker
我从网上找到两个适用于 v3s 的 linux 源码,他们各有优劣,当然也可能是我不会用。

方案一:荔枝派 Zero

https://github.com/Lichee-Pi/lichee-pi-zero
https://licheezero.readthedocs.io/zh/latest/index.html
荔枝派应该是最早做 v3s 开发板的人了,他们现在公司应该叫 sipeed,他们应该是和全志 py 了一波,得到了很多内部资料,才能让荔枝派跑的很顺畅。
不过,我用了他们的内核,虽然 rgb 屏跑的很好,但是以太网出不来
他们的网站上有比较详细的手动编译教程,可以去参考。
但这里尝试通过配置 buildroot,让 buildroot 去自动完成编译步骤,不过只是方便了编译,和手动编译理论上没区别。

创建一个 ubuntu 容器

创建一个 ubuntu 容器, 挂载当前目录下的 work 文件夹到容器里 /root 目录
用一个相对旧的 ubuntu 镜像,因为源码是比较旧的, 用新版本容易出 glibc 版本不兼容的问题。

docker run -it -v ./work:/root ubuntu:16.04

准备 buildroot

cd ~

# 安装所需软件包
apt update
apt install build-essential libncurses-dev git wget python file cpio unzip rsync bc

# 下载当前最新 lts 的 buildroot
wget https://buildroot.org/downloads/buildroot-2024.02.tar.gz
tar -xf buildroot-2024.02.tar.gz

# 应用自带的配置,以这个配置文件为模板
cd buildroot-2024.02
make sipeed_licheepi_zero_defconfig

# 进入 menuconfig
make menuconfig

配置编译器为 Linaro

全志 V3S 嵌入式 linux 系统初探

配置 Linux 内核

全志 V3S 嵌入式 linux 系统初探
配置 kernel 源码地址,不要用 github 仓库地址,因为他会从开天辟地下载代码。
而配置为 tarball,他只会拉下来最新的代码,不会下载历史修改记录。
https://github.com/Lichee-Pi/linux/archive/refs/heads/zero-5.2.y.tar.gz

修改图中 defconfig 为 licheepi_zero

配置 uboot

全志 V3S 嵌入式 linux 系统初探
配置 BootLoader->u-boot 源码地址为
https://github.com/Lichee-Pi/u-boot/archive/refs/heads/v3s-current.tar.gz

修改图中 defconfig, 可从下面三个中选,他们的差别只是带不带 rgb 屏。

LicheePi_Zero_480x272LCD_defconfig
LicheePi_Zero_800x480LCD_defconfig
LicheePi_Zero_defconfig

编译

# 如果需要修改配置在这里改,不改跳过
make menuconfig
make linux-menuconfig
make uboot-menuconfig
make busybox-menuconfig

# 下载所有源码
make source

# 构建
make all

# 最终的镜像在 output/images/sdcard.img

方案二:V3S3 项目

github 上有一个项目,为 buildroot 添加了一份芯片的定义,实测以太网是好用的。
此外他还有 h264 编码器的应用示例
不过我无法用它点亮 rgb 屏
https://github.com/Unturned3/v3s3
这里列出编译步骤

创建一个 ubuntu 容器

创建一个 ubuntu 容器, 挂载当前目录下的 work 文件夹到容器里 /root 目录

docker run -it -v ./work:/root ubuntu:22.04

容器内构建

# 安装所需软件包
apt update
apt install build-essential libncurses-dev git wget python3 python-is-python3 file cpio unzip rsync bc

# 克隆 V3S3 项目
cd ~
git clone https://github.com/Unturned3/v3s3

# 下载解压 buildroot
wget https://buildroot.org/downloads/buildroot-2022.05.1.tar.gz
tar -xf buildroot-2022.05.1.tar.gz

# 应用配置文件
cd buildroot-2022.05.1
make BR2_EXTERNAL=../v3s3 licheepi_zero_defconfig

# 如果需要修改配置在这里改,不改跳过
make menuconfig
make linux-menuconfig
make uboot-menuconfig
make busybox-menuconfig

# 下载所有源码
make source

# 构建
make all

# 最终的镜像在 output/images/sdcard.img

后记

镜像烧录工具:https://etcher.balena.io/

正文完
 0
评论(没有评论)