零、预备知识

TINY200官网:MangoPi | mangopi_r

DFR0780 MangoPi R3 产品资料 使用教程

工具链

1
sudo apt install arm-linux-gnueabihf-gcc

烧录方法

工具安装

sunxi-tools:一款全志官方出品的调试SOC命令行工具集合,支持sun4i、sun5i…等处理器。这里下载固件需要用到这个工具

1
2
3
4
5
6
7
8
# 安装依赖
sudo apt-get install pkg-config pkgconf zlib1g-dev libusb-1.0-0-dev
# f1c100s-spiflash 分支
git clone -b f1c100s-spiflash https://github.com/Icenowy/sunxi-tools.git
# 进入源码文件夹
cd sunxi-tools
# 编译和安装
make && sudo make install
  • 注意:用官方原版的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
2
3
4
5
6
# 列出所有芯片的信息:
sudo sunxi-fel -l
sudo sunxi-fel --list
# 查看芯片信息:
sudo sunxi-fel ver
sudo sunxi-fel --verbose

程序下载到RAM:

1
2
3
4
5
6
7
# 加载并执行uboot的spl
sudo sunxi-fel spl 文件名
# 加载并执行完整的uboot
sudo sunxi-fel uboot uboot镜像
# 烧录到ram中目的地址并执行
sudo sunxi-fel -p write 0x40000000 u-boot-sunxi-with-spl.bin
sudo sunxi-fel exec 0x40000000
  • -p:写命令增加进度条

程序下载到spi flash:

1
2
3
4
5
6
# 显示spiflash的信息
sudo sunxi-fel spiflash-info
# 读取spiflash指定地址的数据并写入到文件
sudo sunxi-fel spiflash-read 地址 长度 存放数据的文件路径
# 将指定文件的内容写入到spiflash的指定地址
sudo sunxi-fel spiflash-write 地址 指定文件

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介绍

添加新的硬件

  1. 增加新的代码到新目录/board/中,并添加对应的Makefile
  2. 创建新的配置文件include/configs/<board>.h
  3. 如果是新的cpu(新架构),也需要创建新的目录来增加特定的代码
  4. make <board>_defconfig
  5. make all

一、编译最新uboot

U-Boot官网找到最新的relase版本,下载即可。这里用的是u-boot-v2021.07

注意:到目前为止,官网最新uboot还未支持F1C200S的suniv系列处理器,看到了全志有提交但是貌似还未合并

所以改用非官方的:u-boot at f1c100s-spiflash

1
2
3
4
5
6
7
# 配置环境变量
export ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
# 采用默认配置(在configs/*_defconfig)
make NAME_defconfig
make menuconfig
# 编译
make all
  • 可以在make时设置KCPPFLAGS、KAFLAGS和KCFLAGS标志修改编译器的CPPFLAGS、AFLAGS和CFLAGS参数

    1
    make KCFLAGS=-Werror
  • 默认在当前目录下生成bin文件,通过以下方法之一可以修改生成目录:

    1. 添加O=参数

      1
      2
      3
      make O=/tmp/build distclean
      make O=/tmp/build NAME_defconfig
      make O=/tmp/build all
    2. 设置KBUILD_OUTPUT环境变量

      1
      2
      3
      4
      export KBUILD_OUTPUT=/tmp/build
      make distclean
      make NAME_defconfig
      make all

烧写:

1
2
3
4
5
6
7
8
9
10
11
12
13
sudo sunxi-fel -l
sudo sunxi-fel ver
# 烧录到RAM中去执行,以 uboot file-with-spl形式进行(单次运行,测试时个人推荐)
# -p 显示进度条
sudo sunxi-fel -p uboot u-boot-sunxi-with-spl.bin

# 烧写到sd卡
# 创建一个文件,大小为512K,从8k开始写入
sudo dd if=/dev/zero of=$1 bs=1024 seek=8 count=512 &&\
# 从8k开始写入文件
sudo dd if=$_UBOOT_FILE of=$1 bs=1024 seek=8 &&\
# 数据同步
sync