在全志V851SE开发板TinyVision上 使用 SyterKit 启动 Linux 6.7 主线内核
[复制链接]
TinyVision 使用 SyterKit 启动 Linux 6.7 主线内核
SyterKit
SyterKit 是一个纯裸机框架,用于 TinyVision 或者其他 v851se/v851s/v851s3/v853 等芯片的开发板,SyterKit 使用 CMake 作为构建系统构建,支持多种应用与多种外设驱动。同时 SyterKit 也具有启动引导的功能,可以替代 U-Boot 实现快速启动
获取 SyterKit 源码
SyterKit 源码位于GitHub,可以前往下载。
git clone
从零构建 SyterKit
构建 SyterKit 非常简单,只需要在 Linux 操作系统中安装配置环境即可编译。SyterKit 需要的软件包有:
对于常用的 Ubuntu 系统,可以通过如下命令安装
然后新建一个文件夹存放编译的输出文件,并且进入这个文件夹
然后运行命令编译 SyterKit
编译后的可执行文件位于 build/app 中,这里包括 SyterKit 的多种APP可供使用。
这里我们使用的是 syter_boot 作为启动引导。进入 syter_boot 文件夹,可以看到这些文件
由于 TinyVision 是 TF 卡启动,所以我们需要用到 syter_boot_bin_card.bin
移植 Linux 6.7 主线
有了启动引导,接下来是移植 Linux 6.7 主线,前往 https://kernel.org/ 找到 Linux 6.7,选择 tarball 下载
下载后解压缩
进入 linux 6.7 目录,开始移植相关驱动。
搭建 Kernel 相关环境
Kernel 编译需要一些软件包,需要提前安装。
安装完成后可以尝试编译一下,看看能不能编译通过,先应用配置文件
然后尝试编译
可以用 -j32 来加速编译,32 指的是使用32线程编译,一般cpu有几个核心就设置几线程
正常编译
移植 clk 驱动
这里提供已经适配修改后的驱动: 可以直接使用。
也可以参考 中的驱动移植。
进入文件夹 include/dt-bindings/clock/ 新建文件 sun8i-v851se-ccu.h ,将 CLK 填入
进入 include/dt-bindings/reset 新建文件 sun8i-v851se-ccu.h 将 RST 填入
进入 drivers/clk/sunxi-ng 找到 sunxi-ng clk 驱动,复制文件ccu-sun20i-d1.c 和 ccu-sun20i-d1.h 文件并改名为 ccu-sun8i-v851se.c ,ccu-sun8i-v851se.h 作为模板。
将文件中的 SUN20I_D1 改为 SUN8I_V851SE
打开芯片数据手册 ,找到 CCU 章节
对照手册编写驱动文件适配 V851se 平台。
然后找到 drivers/clk/sunxi-ng/Kconfig 文件,增加刚才编写的驱动的 Kconfig 说明
同时打开 drivers/clk/sunxi-ng/Makefile
来检查一下是否移植成功,先查看 menuconfig,找到 Device Drivers > Common Clock Framework,查看是否有 V851se 平台选项出现
编译测试,有几处未使用的变量的警告,无视即可。
CROSS_COMPILE=arm-linux-gnueabihf- make ARCH=arm
正常编译成功
移植 pinctrl 驱动
这里提供已经适配修改后的驱动: 可以直接使用。
前往drivers/pinctrl/sunxi/ 新建文件 pinctrl-sun8i-v851se.c
打开 对照填入PIN的值与功能。
同样的,修改 drivers/pinctrl/sunxi/Kconfig 增加选项
修改 drivers/pinctrl/sunxi/Makefile 增加路径
来检查一下是否移植成功,先查看 menuconfig,找到 > Device Drivers > Pin controllers,查看是否有 V851se 平台选项出现
编译测试,编译通过
CROSS_COMPILE=arm-linux-gnueabihf- make ARCH=arm
编写设备树
这里提供已经适配修改后的驱动: 可以直接使用。
这部分直接给结果了,把上面适配的设备树放到/home/yuzuki/WorkSpace/aa/linux-6.7-rc5/arch/arm/boot/dts/allwinner/ ,修改 /home/yuzuki/WorkSpace/aa/linux-6.7-rc5/arch/arm/boot/dts/allwinner/Makefile
生成刷机镜像
编译内核后,可以在文件夹 arch/arm/boot/dts/allwinner 生成sun8i-v851se-tinyvision.dtb ,在文件夹arch/arm/boot 生成 zImage ,把他们拷贝出来。
然后将 sun8i-v851se-tinyvision.dtb 改名为 sunxi.dtb ,这个设备树名称是定义在 SyterKit 源码中的,如果之前修改了 SyterKit 的源码需要修改到对应的名称,SyterKit 会去读取这个设备树。
然后编写一个 config.txt 作为配置文件
安装 genimageEEWORLDLINKTK7
这里我们使用 genimage 作为打包工具
编译后运行试一试,这里正常
EEWORLDIMGTK21
使用 genimage 打包固件EEWORLDLINKTK8
编写 genimage.cfg 作为打包的配置
由于genimage的脚本比较复杂,所以编写一个 genimage.sh 作为简易使用的工具
准备完成,文件如下所示
运行命令进行打包
打包完成,可以找到 sdcard.img
使用软件烧录固件到TF卡上
测试
插卡,上电,成功启动系统
可以看到 Linux 版本是 6.7.0
|