当前位置: 首页 > 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

相关文章:

  • STM32基础教程——PWM驱动舵机
  • Maya到SubstancePainter再到UE5
  • Android电话监听器的设计与实现:深入解析Service与TelephonyManager
  • 细胞内与细胞间网络整合分析!神经网络+细胞通讯,这个单细胞分析工具一箭双雕了(scTenifoldXct)
  • [ ] 前后端连接 结合常见故障场景和解决
  • 【区块链 + 文化版权】精灵高中 IP 服务项目 | FISCO BCOS 应用案例
  • 大模型适配昇腾300I DUO服务器出现的错误
  • 【BFS染色问题】P1162填涂颜色例题+核心逻辑
  • 企业级基于SpringBoot的MQTT的构建和使用
  • Qt开发:QFontDialog的使用
  • Android开发BasePagerAdapter
  • 第四章:优化字符串的使用:案例研究_《C++性能优化指南》notes
  • springboot整合couchbase(集群)
  • 3. 轴指令(omron 机器自动化控制器)——>MC_GearOut
  • 计算机二级WPS Office第七套WPS演示
  • C++vector常用接口和模拟实现
  • 缺省路由配置出接口不能ping通对面路由器的环回接口,但是配置下一跳可以的原因
  • 【Hugging Face 开源库】Diffusers 库 —— 扩散模型
  • 消息队列保证最终一致性的优势
  • Rust 学习笔记(一)
  • 中信银行:拟出资100亿元全资设立信银金融资产投资有限公司
  • 优化网络营商环境,上海严厉打击涉企网络谣言、黑灰产等违法犯罪
  • 上海如何为街镇营商环境赋能?送政策、配资源、解难题、强活力
  • 上海:5月8日起5年以上首套个人住房公积金贷款利率下调至2.6%
  • 古龙逝世四十周年|中国武侠文学学会与多所高校联合发起学术纪念活动
  • 【社论】跑赢12级狂风,敦煌做对了什么