全志F1C200S
零、预备知识
TINY200官网:MangoPi | mangopi_r
工具链
1 | sudo apt install arm-linux-gnueabihf-gcc |
烧录方法
工具安装
sunxi-tools:一款全志官方出品的调试SOC命令行工具集合,支持sun4i、sun5i…等处理器。这里下载固件需要用到这个工具
1 | # 安装依赖 |
- 注意:用官方原版的sunxi-tools或者ubuntu仓库中的sunxi-tools,都是不支持F1C200S的
DKTool F1C100s/F1C200s专用工具:针对上面工具集的Windows界面封装
使用方法
全志进入fel 模式的条件(三种方式):
-
TF卡和 spi flash 同时没有可启动镜像
即不插卡,且焊接的是新的或者没有有效镜像的spi flash,上电就会自动进入fel下载模式。
-
TF卡中有进入fel模式的特殊固件 fel-sdboot.sunxi
如果spi flash已经有了启动镜像,那么需要在TF卡中烧入一个sunxi提供的启动工具(一般在sunxi-tools/bin/下) , 那么插入该TF卡启动会进入fel模式;
命令:dd if=fel-sdboot.sunxi of=/dev/mmcblk0 bs=1024 seek=8
-
上电时SPI_MISO拉低到地
该引脚为boot引脚,上电时如果为低电平即会进入fel下载模式。
检测是否连接:
1 | # 列出所有芯片的信息: |
程序下载到RAM:
1 | # 加载并执行uboot的spl |
- -p:写命令增加进度条
程序下载到spi flash:
1 | # 显示spiflash的信息 |
uboot
初始化流程
适用于SPL与UBOOT本身:
- 从架构相关的汇编文件
start.S
开始启动,如:arch/arm/cpu/armv7/start.S
arch/powerpc/cpu/mpc83xx/start.S
arch/mips/cpu/start.S
lowlevel_init()
:- 基本的初始化,为后面做准备
- 没有global_data与BSS段
- 没有栈
- 不会设置SDRAM与使用控制台
board_init_f()
:- global_data可用
- 清楚BSS段,但是BSS段仍不可用
- 不能使用全局、static变量,只能使用栈中的临时变量与global_data
- 需要初始化SDRAM,并在SDRAM中启用栈
- 串口初始化
board_init_r()
:- BSS段可用,所有的static与全局变量可用
- 控制台初始化
- 最终调用
main_loop
参考文档:global_data介绍
添加新的硬件
- 增加新的代码到新目录
/board/
中,并添加对应的Makefile - 创建新的配置文件
include/configs/<board>.h
- 如果是新的cpu(新架构),也需要创建新的目录来增加特定的代码
make <board>_defconfig
make all
一、编译最新uboot
去U-Boot官网找到最新的relase版本,下载即可。这里用的是u-boot-v2021.07
注意:到目前为止,官网最新uboot还未支持F1C200S的suniv系列处理器,看到了全志有提交但是貌似还未合并
所以改用非官方的:u-boot at f1c100s-spiflash
1 | # 配置环境变量 |
-
可以在make时设置KCPPFLAGS、KAFLAGS和KCFLAGS标志修改编译器的CPPFLAGS、AFLAGS和CFLAGS参数
1
make KCFLAGS=-Werror
-
默认在当前目录下生成bin文件,通过以下方法之一可以修改生成目录:
-
添加
O=
参数1
2
3make O=/tmp/build distclean
make O=/tmp/build NAME_defconfig
make O=/tmp/build all -
设置
KBUILD_OUTPUT
环境变量1
2
3
4export KBUILD_OUTPUT=/tmp/build
make distclean
make NAME_defconfig
make all
-
烧写:
1 | sudo sunxi-fel -l |