顺德网站建设服务平台,网站加载效果怎么做的,做app网站公司哪家好,丹东信息TinyVision 使用 SyterKit 启动 Linux 6.7 主线内核
SyterKit
SyterKit 是一个纯裸机框架#xff0c;用于 TinyVision 或者其他 v851se/v851s/v851s3/v853 等芯片的开发板#xff0c;SyterKit 使用 CMake 作为构建系统构建#xff0c;支持多种应用与多种外设驱动。同时 Sy…TinyVision 使用 SyterKit 启动 Linux 6.7 主线内核
SyterKit
SyterKit 是一个纯裸机框架用于 TinyVision 或者其他 v851se/v851s/v851s3/v853 等芯片的开发板SyterKit 使用 CMake 作为构建系统构建支持多种应用与多种外设驱动。同时 SyterKit 也具有启动引导的功能可以替代 U-Boot 实现快速启动
获取 SyterKit 源码
SyterKit 源码位于GitHub可以前往下载。
git clone https://github.com/YuzukiHD/SyterKit.git从零构建 SyterKit
构建 SyterKit 非常简单只需要在 Linux 操作系统中安装配置环境即可编译。SyterKit 需要的软件包有
gcc-arm-none-eabiCMake
对于常用的 Ubuntu 系统可以通过如下命令安装
sudo apt-get update
sudo apt-get install gcc-arm-none-eabi cmake build-essential -y然后新建一个文件夹存放编译的输出文件并且进入这个文件夹
mkdir build
cd build然后运行命令编译 SyterKit
cmake ..
make编译后的可执行文件位于 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 下载 下载后解压缩
tar xvf linux-6.7-rc5.tar.gz进入 linux 6.7 目录开始移植相关驱动。
搭建 Kernel 相关环境
Kernel 编译需要一些软件包需要提前安装。
sudo apt-get update sudo apt-get install -y gcc-arm-none-eabi gcc-arm-linux-gnueabihf g-arm-linux-gnueabihf build-essential libncurses5-dev zlib1g-dev gawk flex bison quilt libssl-dev xsltproc libxml-parser-perl mercurial bzr ecj cvs unzip lsof安装完成后可以尝试编译一下看看能不能编译通过先应用配置文件
CROSS_COMPILEarm-linux-gnueabihf- make ARCHarm sunxi_defconfig然后尝试编译
CROSS_COMPILEarm-linux-gnueabihf- make ARCHarm可以用 -j32 来加速编译32 指的是使用32线程编译一般cpu有几个核心就设置几线程
CROSS_COMPILEarm-linux-gnueabihf- make ARCHarm -j32正常编译 移植 clk 驱动
这里提供已经适配修改后的驱动https://github.com/YuzukiHD/TinyVision/tree/main/kernel/linux-6.7-driver 可以直接使用。
也可以参考 https://github.com/YuzukiHD/TinyVision/tree/main/kernel/bsp/drivers/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 打开芯片数据手册V851SX_Datasheet_V1.2.pdf找到 CCU 章节 对照手册编写驱动文件适配 V851se 平台。
然后找到 drivers/clk/sunxi-ng/Kconfig 文件增加刚才编写的驱动的 Kconfig 说明 config SUN8I_V851SE_CCUtristate Support for the Allwinner V851se CCUdefault ydepends on MACH_SUN8I || COMPILE_TEST同时打开 drivers/clk/sunxi-ng/Makefile obj-$(CONFIG_SUN8I_V851SE_CCU) sun8i-v851se-ccu.osun8i-v851se-ccu-y ccu-sun8i-v851se.o来检查一下是否移植成功先查看 menuconfig找到 Device Drivers Common Clock Framework查看是否有 V851se 平台选项出现
CROSS_COMPILEarm-linux-gnueabihf- make ARCHarm menuconfig编译测试有几处未使用的变量的警告无视即可。
CROSS_COMPILEarm-linux-gnueabihf- make ARCHarm 正常编译成功
移植 pinctrl 驱动
这里提供已经适配修改后的驱动https://github.com/YuzukiHD/TinyVision/tree/main/kernel/linux-6.7-driver 可以直接使用。
前往drivers/pinctrl/sunxi/ 新建文件 pinctrl-sun8i-v851se.c 打开 V851SE_PINOUT_V1.0.xlsx 对照填入PIN的值与功能。 同样的修改 drivers/pinctrl/sunxi/Kconfig 增加选项 修改 drivers/pinctrl/sunxi/Makefile 增加路径 来检查一下是否移植成功先查看 menuconfig找到 Device Drivers Pin controllers查看是否有 V851se 平台选项出现
CROSS_COMPILEarm-linux-gnueabihf- make ARCHarm menuconfig编译测试编译通过
CROSS_COMPILEarm-linux-gnueabihf- make ARCHarm 编写设备树
这里提供已经适配修改后的驱动https://github.com/YuzukiHD/TinyVision/tree/main/kernel/linux-6.7-driver/dts 可以直接使用。 这部分直接给结果了把上面适配的设备树放到/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 sun8i-v851se-tinyvision.dtb生成刷机镜像
编译内核后可以在文件夹 arch/arm/boot/dts/allwinner 生成sun8i-v851se-tinyvision.dtb 在文件夹arch/arm/boot 生成 zImage 把他们拷贝出来。 然后将 sun8i-v851se-tinyvision.dtb 改名为 sunxi.dtb 这个设备树名称是定义在 SyterKit 源码中的如果之前修改了 SyterKit 的源码需要修改到对应的名称SyterKit 会去读取这个设备树。
然后编写一个 config.txt 作为配置文件
[configs]
bootargscma4M root/dev/mmcblk0p2 init/sbin/init consolettyS0,115200 earlyprintksunxi-uart,0x02500000 rootwait clk_ignore_unused
mac_addr4a:13:e4:f9:79:75
bootdelay3安装 genimage
这里我们使用 genimage 作为打包工具
sudo apt-get install libconfuse-dev #安装genimage依赖库
sudo apt-get install genext2fs # 制作镜像时genimage将会用到
git clone https://github.com/pengutronix/genimage.git
cd genimage
./autogen.sh # 配置生成configure
./configure # 配置生成makefile
make
sudo make install编译后运行试一试这里正常 使用 genimage 打包固件
编写 genimage.cfg 作为打包的配置
image boot.vfat {vfat {files {zImage,sunxi.dtb,config.txt}}size 8M
}image sdcard.img {hdimage {}partition boot0 {in-partition-table noimage syter_boot_bin_card.binoffset 8K}partition boot0-gpt {in-partition-table noimage syter_boot_bin_card.binoffset 128K}partition kernel {partition-type 0xCbootable trueimage boot.vfat}
}由于genimage的脚本比较复杂所以编写一个 genimage.sh 作为简易使用的工具
#!/usr/bin/env bashdie() {cat EOF 2
Error: $Usage: ${0} -c GENIMAGE_CONFIG_FILE
EOFexit 1
}# Parse arguments and put into argument list of the script
opts$(getopt -n ${0##*/} -o c: -- $) || exit $?
eval set -- $optsGENIMAGE_TMP${BUILD_DIR}/genimage.tmpwhile true ; docase $1 in-c)GENIMAGE_CFG${2};shift 2 ;;--) # Discard all non-option parametersshift 1;break ;;*)die unknown option ${1} ;;esac
done[ -n ${GENIMAGE_CFG} ] || die Missing argument# Pass an empty rootpath. genimage makes a full copy of the given rootpath to
# ${GENIMAGE_TMP}/root so passing TARGET_DIR would be a waste of time and disk
# space. We dont rely on genimage to build the rootfs image, just to insert a
# pre-built one in the disk image.trap rm -rf ${ROOTPATH_TMP} EXIT
ROOTPATH_TMP$(mktemp -d)
GENIMAGE_TMP$(mktemp -d)
rm -rf ${GENIMAGE_TMP}genimage \--rootpath ${ROOTPATH_TMP} \--tmppath ${GENIMAGE_TMP} \--inputpath ${BINARIES_DIR} \--outputpath ${BINARIES_DIR} \--config ${GENIMAGE_CFG}准备完成文件如下所示 运行命令进行打包
chmod 777 genimage.sh
./genimage.sh -c genimage.cfg打包完成可以找到 sdcard.img 使用软件烧录固件到TF卡上 测试
插卡上电成功启动系统 可以看到 Linux 版本是 6.7.0