当前位置: 首页 > news >正文

F1C200S编译

一、查看荔枝派Nano的分区内容

  1. 分成了两个分区
    在这里插入图片描述
  2. 将第一个分区通过mount进行挂载,查看到内容包括:主要是dtb设备树和zImage压缩的内核。由于u-boot不是是通过dd指令传输到指定的位置,因此这里不显示。还有一个scr,这是一个uboot启动时加载命令的提示,也需要放在第一个分区。
    在这里插入图片描述
  3. 将第二个分区挂载,查看内容:主要是linux的根文件。
    在这里插入图片描述

二、构建需要的文件并且烧录到SD卡

  1. 教程:主要参考荔枝派Nano
    uboot教程:https://wiki.sipeed.com/soft/Lichee/zh/Nano-Doc-Backup/get_started/first_eat.html
    boot.scr教程:https://wiki.sipeed.com/soft/Lichee/zh/Nano-Doc-Backup/build_sys/bootargs.html
    dtb和zImage教程:https://wiki.sipeed.com/soft/Lichee/zh/Nano-Doc-Backup/build_sys/kernel.html
    Linux根文件教程:https://wiki.sipeed.com/soft/Lichee/zh/Nano-Doc-Backup/build_sys/rootfs.html

  2. 格式化SD卡
    参考:https://wiki.sipeed.com/soft/Lichee/zh/Nano-Doc-Backup/build_sys/build_index.html
    通过fldisk /dev/sdb进行操作,第一个分区32M,并且进行格式化。

  3. 烧录uboot
    uboot通过dd指令进行烧录,uboot烧录教程:https://github.com/peng-zhihui/Planck-Pi。
    需要通过dd烧录到8k位置。

sudo dd if=./u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8 && 
sync
  1. 写入其他文件
    通过mount进行挂载,然后cp。
 sudo mount /dev/sdb1 /mnt/sdcard/cd /mnt/sdcard/
sudo cp ~/f1c200s/u-boot/tools/boot.scr /mnt/sdcard/
cd /home/tju/f1c200s/Linux/arch/arm/boot
sudo cp ./zImage /mnt/sdcard/
sudo cp ./dts/suniv-f1c100s-licheepi-nano.dtb /mnt/sdcard/
ls /mnt/sdcard/

三、问题

  1. 可以进入uboot,但是进入不了linux内核?
    **方法1:**手动加载内核和设备树
    在U-Boot命令行中,您可以手动加载内核和设备树文件,确保它们位于正确的内存地址。例如:
load mmc 0:1 0x80008000 zImage
load mmc 0:1 0x80C00000 suniv-f1c100s-licheepi-nano.dtb
bootz 0x80008000 - 0x80C00000

执行这些命令后,系统应该进入Linux内核。但是报错了.

  1. 继续解决,发现是没有配置串口登录,参考:https://wiki.sipeed.com/soft/Lichee/zh/Nano-Doc-Backup/build_sys/rootfs.html
    在烧录了之后,需要检查 rootfs文件下的 /etc/inittab 是否已有以下声明,一般来说没有,因此需要修改。之后按照上述手动加载就可以登录了。
ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL // 串口登录使能
  1. 为什么要手动加载,不能够自动加载进入linux内核吗?GPT的回答如下,通过在uboot中输入如下指令确实可以解决。

可能的原因:

  1. U-Boot 的 bootcmd 没有正确配置或保存
    在 U-Boot 中,bootcmd 环境变量指定了启动时自动执行的命令序列。如果这个变量没有正确设置或保存,U-Boot 就不会自动加载内核、设备树和根文件系统,而是等待手动输入命令。

  2. U-Boot 环境变量未保存
    如果您在 U-Boot 中设置了 bootcmd 环境变量,但没有保存(使用 saveenv),那么在重启 U-Boot 后这些设置会丢失,导致启动时不能自动执行。

  3. 启动命令配置不正确
    即使 bootcmd 被正确配置,可能在命令中存在错误,导致内核、设备树文件未能正确加载。

解决方法:

1. 检查并设置 bootcmd 环境变量

确保您在 U-Boot 中正确设置了 bootcmd 环境变量。这个变量应该包含加载内核和设备树、以及启动内核的命令。例如,假设您的内核镜像 zImage 和设备树文件 suniv-f1c100s-licheepi-nano.dtb 存在于第一个分区,并且根文件系统在第二个分区(mmcblk0p2)上,您可以将以下命令设置为 bootcmd

setenv bootcmd 'load mmc 0:1 0x80008000 zImage; load mmc 0:1 0x80C00000 suniv-f1c100s-licheepi-nano.dtb; bootz 0x80008000 - 0x80C00000'

这里的命令做了以下几件事:

  • 从 SD 卡的第一个分区(mmc 0:1)加载内核镜像 zImage 到内存地址 0x80008000
  • 从同一分区加载设备树文件 suniv-f1c100s-licheepi-nano.dtb 到内存地址 0x80C00000
  • 使用 bootz 命令启动内核。
2. 保存环境变量

设置完 bootcmd 后,您需要使用 saveenv 命令保存环境变量,这样它们在重启后才能生效:

saveenv
3. 重启 U-Boot

保存环境变量后,您可以使用以下命令重启系统:

reset

此时,U-Boot 应该会根据设置的 bootcmd 自动加载内核和设备树,启动 Linux 系统,而不需要手动执行命令。

  1. 重写boot.cmd,并替换原来的,看能否解决,相比于之前的去除了显示屏输出。
setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait rw
load mmc 0:1 0x80008000 zImage
load mmc 0:1 0x80C00000 suniv-f1c100s-licheepi-nano.dtb
bootz 0x80008000 - 0x80C00000

但还是不行!

  1. 先这样吧,尝试下一个步骤,添加一个led

http://www.mrgr.cn/news/96055.html

相关文章:

  • 【深度学习与实战】2.3、线性回归模型与梯度下降法先导案例--最小二乘法(向量形式求解)
  • Python 异常处理完全指南
  • Ardupilot开源无人机之Geek SDK进展2025Q2
  • ESP32驱动BMP280和MQ4传感器
  • javafx项目结构+代码规范
  • Tabby 一:如何在Mac配置保姆级教程(本地模型替换hugging face下载)
  • 【大模型系列篇】使用Python开发MCP Server及Inspector工具调试
  • 【docker】docker-compose安装RabbitMQ
  • 我的世界1.20.1forge模组开发进阶教程——序列化(1)
  • Python SciPy面试题及参考答案
  • NanoGraphrag原理和数据流讲解
  • Maya到SubstancePainter再到UE5
  • MQTT之重复消息产生
  • Android HAL 架构详解,底层开发不再难
  • idea 快捷键
  • AI 算力计算方式
  • 微信小程序登录和获取手机号
  • SSML(Speech Synthesis Markup Language)简介
  • 【C++指针】搭建起程序与内存深度交互的桥梁(下)
  • STM32 MODBUS-RTU主从站库移植