D1s RDC2022 纪念版 运行Linux

D1s RDC2022 纪念版 运行Linux

背景

​ 2022年底线上参加了RT-Thread举办的开发者大会,非常幸运地抽中了一块开发板,非常开心,年前有事回老家比较早,年后工作很忙,只有在晚上下班和周末调试下,终于到了3月份,linux系统移植完了,外设也适配了,写这篇文章总结移植过程。

​ 移植的目标是把uboot、内核集成到buildroot中,最终一键编译。

准备工作:

D1s RDC2022 纪念版

usb typec * 2

usb转串口模块

w5500 spi eth模块

lcd显示屏,40pin rgb 800*480 + 6pin gt911 电容触摸

PC系统:Ubuntu 18.04

安装编译kernel、rootfs必要的软件。

高版本的Ubuntu需要改代码,网上有相关的博客。

https://gitee.com/GloomyGhost/Buildroot-YuzukiSBC.git

https://gitee.com/weidongshan/neza-d1-buildroot.git

全志在线开发者社区 - 主页 (aw-ol.com)

启动顺序

bootrom->boot0_sdcard.fex->boot_package.cfg->boot.img

boot0_sdcard.fex是全志tina-d1-h/lichee/brandy-2.0/spl编译出来的,主要是初始化ddr和加载uboot;

boot_package.cfg包含opensbi、uboot、dtb、env;

boot.img是内核镜像,uboot仅需加载这一个文件。

1、下载官方代码,访问全志开发者社区下载tina-d1-h源码,根据提示操作,下载完成后,开始编译。(主要目的是编译出boot0_sdcard.fex,后面会用到。)

yd@seehi-omv:~/rtt/tina-d1-h$ source build/envsetup.sh
Setup env done! Please run lunch next.
yd@seehi-omv:~/rtt/tina-d1-h$ lunch

You're building on Linux

Lunch menu... pick a combo:
     1. d1-h_nezha_min-tina
     2. d1-h_nezha-tina
     3. d1s_nezha-tina

Which would you like? [Default d1s_nezha]: 3
============================================
TINA_BUILD_TOP=/home/yd/rtt/tina-d1-h
TINA_TARGET_ARCH=riscv
TARGET_PRODUCT=d1s_nezha
TARGET_PLATFORM=d1s
TARGET_BOARD=d1s-nezha
TARGET_PLAN=nezha
TARGET_BUILD_VARIANT=tina
TARGET_BUILD_TYPE=release
TARGET_KERNEL_VERSION=5.4
TARGET_UBOOT=u-boot-2018
TARGET_CHIP=sun20iw1p1
============================================
no buildserver to clean
[1] 671413
yd@seehi-omv:~/rtt/tina-d1-h$make -j32 && pack

编译成功后,开始修改代码。

改动tina-d1-h/device/config/chips/d1s/configs/nezha/configs/nezha/sys_config.fex,修改调试串口以及启动介质

diff --git a/configs/nezha/sys_config.fex b/configs/nezha/sys_config.fex
index ffa2925..372650b 100755
--- a/configs/nezha/sys_config.fex
+++ b/configs/nezha/sys_config.fex
@@ -24,7 +24,7 @@ debug_mode  = 8
 ;----------------------------------------------------------------------------------
 [target]
 boot_clock     = 720
-storage_type    = 5
+storage_type    = 1
 nand_use_ubi   = 1

 [spinor_para]
@@ -196,8 +196,8 @@ twi_sda  = port:PG15<3><1><default><default>
 ;----------------------------------------------------------------------------------
 [uart_para]
 uart_debug_port = 3
-uart_debug_tx   = port:PB6<7><1><default><default>
-uart_debug_rx   = port:PB7<7><1><default><default>
+uart_debug_tx   = port:PG8<5><1><default><default>
+uart_debug_rx   = port:PG9<5><1><default><default>

 ;----------------------------------------------------------------------------------
 ;dram_region_mbytes :设置drm大小以bytes为单位

改动tina-d1-h/lichee/brandy-2.0/spl/include/spare_head.h,修改boot_package.cfg存放位置;此步骤可选,主要是原厂的boot0_sdcard.fex会到16400K的位置加载boot_package.cfg,接近10M的空间浪费了。

diff --git a/include/spare_head.h b/include/spare_head.h
index 90040bc..f7579e3 100644
--- a/include/spare_head.h
+++ b/include/spare_head.h
@@ -62,7 +62,10 @@
 #define BOOT0_EMMC3_BACKUP_START_ADDR           (512)


-#define UBOOT_START_SECTOR_IN_SDMMC             (32800)
+// #define UBOOT_START_SECTOR_IN_SDMMC             (32800)
+// #define UBOOT_BACKUP_START_SECTOR_IN_SDMMC      (24576)
+
+#define UBOOT_START_SECTOR_IN_SDMMC             (200)
 #define UBOOT_BACKUP_START_SECTOR_IN_SDMMC      (24576)

修改完后,手动删除/home/yd/rtt/tina-d1-h/lichee/brandy-2.0/spl/nboot/目录下boot0_sdcard.bin文件,之后执行make && pack命令。

需要的目标文件在tina-d1-h/out/d1s-nezha/image/boot0_sdcard.fex。

编译文件系统

为什么不用tiny sdk?

个人不喜欢全志sdk的编译方式,修改完配置,重新编译可能不会生效,软件包受限制等等,反正不喜欢。

buildroot测试了百问网官方d1s的仓库和YuzukiSBC小哥的仓库,最终使用后者,韦东山老师的仓库编译出来有些许问题。

克隆仓库:https://gitee.com/GloomyGhost/Buildroot-YuzukiSBC.git

仓库使用的内核为全志在github维护的uboot、kenrel,

主要修改点:

uboot:

修改调试串口为uart3

关闭显示:这处有个坑,uboot设备树显示相关的节点如果和内核不一致,就会导致内核使用uboot传参的参数去初始化显示参数。

内核:

添加几项配置

修改设备树

环境变量:

波特率设置在1500000,进入系统后,部分信息会丢失,调小到115200就恢复了,可能是我的usb模块有问题。

具体细节不太想写了,只补充下问题和解决方法

如何烧录

使用xfel工具,xboot官方的不支持sd卡烧录,使用晕哥编出来就行,下载可以去rt-thread论坛或者挖坑网、全志开发者社区,新板子必须使用xfel烧写整个镜像。

更新内核

可以直接启动linux系统后,挂载fat分区替换,不会出问题。

更新设备树

使用xfel工具把boot_package.fex烧录到sd卡中,

使用我提供的boot0_sdcard.fex烧录到偏移0x19000的位置,使用官方的需要烧录到偏移0x1004000的位置

更新文件系统

默认文件系统放在板载128MB的sd nand中,更新需要重新烧写整个镜像。如果需要频繁更新,则可以把文件系统烧录到sd卡中,插入到板子的sd卡槽,修改uboot环境变量,指定root分区为mmc1即可。


最后把仓库集成到了个人维护的buildroot仓库,编译出来的镜像可以支持的设备如下:

key、led、w5500 spi wifi、i2c GT911、uart3(console)、40pin lcd、sd卡(1width)。

由于仓库包含不便公开的信息,所以把生成的patch文件放在这里,我使用的buildroot版本为:2022.02.9, released January 18th, 2023,

直接下载官方仓库,打上patch应该就可以使用了。

遇到的问题:

1、lvgl显示异常,画面被分为两部分,镜像的显示在屏幕左右两侧?

lvgl 显存分配较小,最小应该为分辨率:x * 。

2、烧录失败问题?

镜像总大小为80MB左右,使用xfel工具需要耗时6分钟左右,如果接上spi wifi,就有可能烧录完成后,启动不了系统。

做过测试,同一份镜像,接上外设、不接外设都有可能失败,也有可能成功,不接外设成功的几率很大。

3、显示闪烁?

查看官方显示的文档,重新配置设备树节点,注意clk不要配置最大值,稍微配置小点。

4、使用tiny sdk

一开始我使用的就是官方sdk,默认打印串口为uart0,修改了配置也能启动了,但是官方的镜像需要使用特定工具才能烧写,这个暂时有问题,所以转到了buildroot。

5、xfel烧录速率达不到200KB/s ?

拔掉uart0的连接,速率会变快。

附件:
0001-add-doc.patch

0001-fix-uboot-uart-config.patch

0001-push-code.patch

0001-support-RDC2022-D1s-board.patch

0001-update-boot_package.fex.patch

压缩包:https://files.cnblogs.com/files/yddeboke/D1s-RDC2022-纪念版-运行Linux.tar?t=1678244239

posted @   goodboyyd  阅读(556)  评论(4编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示