avatar

松果工作室

欢迎光临

  • 首页
  • freeRTOS
  • ESP
  • 开发手册
  • 快速笔记
  • 个人收藏
  • 工具
Home F1C200S (二) Uboot
文章

F1C200S (二) Uboot

Posted 2024-05-13 Updated 2024-05- 18
By YCP
8~11 min read

交叉编译工具链

F1C200s内核ARM9 使用 ARMv5 架构,因此支持 ARMv5 的工具链都能编译,一般使用arm-linux-gnueabi-
开发环境使用 Ubuntu16.04

  1. 解压编译器到/usr/local/arm-linux-gcc/
  2. 添加环境变量nano /etc/profile
  3. 添加内容路径PATH=$PATH:/usr/local/arm-linux-gcc/bin
  4. 使得路径生效source /etc/profile

编译 Uboot

BootLoader引导程序可以采用U-boot X-boot Rt-Thread

  1. 为了方便,直接使用荔枝派的 Uboot
    git clone https://github.com/Lichee-Pi/u-boot.git -b nano-v2018.01
  2. 查看分支git branch -a
    切换到 nano 分支git checkout nano-v2018.01u-boot
  3. 指定 Uboot 交叉工具链和架构,修改Makefile第249 行
     ARCH=arm
     CROSS_COMPILE=arm-linux-gnueabi-
    
  4. 查看配置文件cd config && ls,可以看到荔枝派的 Uboot 文件中包含了 nano 的配置文件
  5. 回到 Uboot 文件夹,配置make menuconfig
    483434-20210928151406633-1920865408.png
  6. 按图配置bootargs
    console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw
  7. 配置bootcmd
    load mmc 0:1 0x80008000 zImage;load mmc 0:1 0x80c08000 suniv-f1c100s-licheepi-nano.dtb;bootz 0x80008000 - 0x80c08000;
  8. 编译make -j4,编译完成后会在当前目录生成u-boot-sunxi-with-spl.bin烧录文件
  9. 烧录到 SD 卡sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8
    bs bytes:同时设置读入/输出的块大小为bytes个字节。
    seek blocks:从输出文件开头跳过blocks个块后再开始复制。

注解

bootcmd 启动内核

load mmc 0:1 0x80008000 zImage;load mmc 0:1 0x80c08000 suniv-f1c100s-licheepi-nano.dtb;bootz 0x80008000 - 0x80c08000;

  1. load mmc 0:1 0x80008000 zImage: 即上面的命令意思是将mmc的0:1 分区中的zImage复制到内存中的0x80008000地址处。这里的zimage就是Linux内核,后续会提到该文件编译,0:1这个可以这样理解0表示TF卡(TF卡属于mmc存储器的一种),1这表示TF卡的第一个分区(boot分区)后面会提到。
    而对于内存位置 0x80008000 地址位置,将其理解为默认值就行了。这样完成了zImage的加载。
  2. load mmc 0:1 0x80c08000 suniv-f1c100s-licheepi-nano.dtb:将mmc的0:1分区中的suniv-f1c100s-licheepi-nano.dtb文件加载到内存中的0x80c08000地址处。对于suniv-f1c100s-licheepi-nano.dtb 这个文件,叫做设备树文件,简单来说就是当前开发板上面所有外设备描述文件,这部分将会在后续内核编译部分进行详细说明。
  3. bootz 0x80008000 - 0x80c08000:告诉内核镜像的起始地址为0x80008000,加载的设备树地址为0x80c08000。这里是告诉cpu从这里开始启动Linux, bootz命令的格式是:bootz空格0x80008000空格-空格0x80c08000,注意-左右有空格。

bootargs 启动根文件系统

console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw
这部分配置信息是由u-boot 直接按照参数字符串方式提供给Linux内核,然后由Linux内核进行执行的,这也说明里为什么格式与bootcmd配置方式不一致。

  1. console=ttyS0,115200: 终端为ttyS0即串口0,波特率为115200
  2. panic=5:当Linux卡住5秒后仍未成功就会执行Linux恐慌异常的一些操作
  3. rootwait:告诉内核挂在文件系统之前需要先加载相关驱动,一般bootargs中都要加上这个参数
  4. root=/dev/mmcblk0p2 :根文件系统的位置在mmc的0:2分区处,/dev是设备文件夹,内核在加载mmc中的时候就会在根文件系统中生成mmcblk0p2设备文件,这个设备文件其实就是mmc的0:2分区(这里对应TF卡的第二个分区:rootfs),这样内核对文件系统的读写操作方式本质上就是读写/dev/mmcblk0p2该设备文件。
  5. earlyprintk:参数是指在内核加载的过程中打印输出信息,这样内核在加载的时候终端就会输出相应的启动信息。rw表示文件系统的操作属性,此处rw表示可读可写。
坑和笔记
Linux
License:  CC BY 4.0
Share

Further Reading

Dec 23, 2024

其他笔记

EC800K AT连接移远云 配置过程 # 配置产品信息(初次连接需配置) AT+QIOTCFG="productinfo","pxxxxt","cDVTxxxxxxxxWGVB" # 连接开发者中心 AT+QIOTREG=1 # 查询当前连接状态(+QIOTSTATE: 8为正常) AT+QI

Jun 21, 2024

环形滤波算法

#include <stdio.h> #include <stdlib.h> #define BUFFER_SIZE 10 // 缓冲区大小 #define THRESHOLD 180

Jun 17, 2024

STM32 ADC采集的三种方式

采样周期 单个采集模式 ADC_Settings: 程序使用 uint16_t ADC_Read(

OLDER

F1C200s (一) 硬件原理图

NEWER

ESP32(一) GPIO

Recently Updated

  • ESP32(八) 简单的webserver
  • ESP32(七) NVS
  • ESP32(四) STA & AP
  • 多级菜单
  • ESP32(五) ESP32 OTA

Trending Tags

WCH Linux Elec freeRTOS STM ESP Flutter Others SwiftUI

Contents

©2025 松果工作室. Some rights reserved.

Using the Halo theme Chirpy