Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] 优化 cvitek 固件打包的处理 #9060

Open
unicornx opened this issue Jun 13, 2024 · 4 comments
Open

[Feature] 优化 cvitek 固件打包的处理 #9060

unicornx opened this issue Jun 13, 2024 · 4 comments

Comments

@unicornx
Copy link
Contributor

unicornx commented Jun 13, 2024

Describe problem solved by the proposed feature

目前针对 bsp/cvitek 的固件 (fip.bin) 制作过程中,第一次编译时会下载大量的来自 sophgo 的仓库到本地 RTT 仓库中,包括:

rt-thread/bsp/cvitek/cvitek_bootloader$ ls -l
total 40
drwxrwxr-x  8 u u 4096 6月  12 08:56 build
-rwxrwxr-x  1 u u  350 5月   8 15:48 build.sh
drwxrwxr-x 10 u u 4096 5月   8 15:48 device
-rw-rw-r--  1 u u 4728 5月   8 15:48 env.sh
drwxrwxr-x  8 u u 4096 5月   8 15:51 fsbl
drwxrwxr-x  3 u u 4096 3月   7  2023 host-tools
drwxrwxr-x  4 u u 4096 5月   9 16:30 install
drwxrwxr-x  9 u u 4096 5月  10 21:44 opensbi
drwxrwxr-x 24 u u 4096 5月   8 15:51 u-boot-2021.10

然后从源码开始制作所有的相关模块,

这个操作存在以下缺点:

  • 过程比较漫长,特别是网络不好时对用户并不友好
  • 目前这些目录都放在 RTT 仓库目录下,污染了 RTT 仓库,对代码搜索等操作不友好。

建议改进

Describe your preferred solution

No response

Describe possible alternatives

No response

@unicornx
Copy link
Contributor Author

unicornx commented Jun 13, 2024

可能的解决方案:

  • 方案1 :将生成 fip.bin / boot.sd 的过程和脚本独立到 RTT 工程之外维护,RTT 这边只负责生成 rtthread.bin。好处是不放到 RTT 的仓库代码树下,避免污染工作目录,但这些 sophgo 的组件源码比较多,如果用户的网络不好体验不好。

  • 方案2 : 制作 fip.bin 需要 sophgo 的 bl2,fsbl,opensbi, u-boot 等组件,但这些组件对于我们来说是固定的,RTT 的代码不会修改这些内容,所以这些内容可以以 prebuild 的方式做好后放在 RTT 的 bsp/cvitek 下,size 都不大,虽然可能针对不同的 board,需要各提供一份。目前采用这种方式的可以参考 https://github.com/unicornx/riscv-operating-system-mooc/tree/rvos4duo/code/os, 以及相关文章介绍:"将 RVOS 移植到 MilkV-Duo 上"。和方案 1 比较,对 RTT 源码树污染不大,用户只要能下载 RTT 源码就能很快构建 fip 等固件文件。

@flyingcys
Copy link
Contributor

之前采用源码在打包阶段自动下载并编译主要考虑到有定制bootloader需求,如果没有定制需求可以采用方案2

@unicornx
Copy link
Contributor Author

之前采用源码在打包阶段自动下载并编译主要考虑到有定制bootloader需求,如果没有定制需求可以采用方案2

即使有定制 bootloader 的需求,建议最好把 cvitek_bootloader 这种目录放在 RTT 仓库之外维护,有时候看见有人会删掉原来的 RTT 仓库重新 clone,如果用户不知道我们会下载一个 cvitek_bootloader 目录那么每次 clone 后就需要再重新下载一次 cvitek_bootloader。 有些人知道 cvitek_bootloader 这个目录后,为了避免反复下载(可能是网络不好的原因)会将这个目录复制出来,然后重新 clone 后再复制回去,这些操作看上去挺别扭的。感觉把 RTT 仓库和 sophgo 的这些仓库给耦合在一起了,所以放在外面维护就是希望解耦。

再说,定制 bootloader 的需求应该不多吧?

@BernardXiong
Copy link
Member

BernardXiong commented Jun 15, 2024

可以考虑方案2的,而且关于额外的文件可以放入到软件包中,单独来进行维护。

软件包部分可以是纯文件(包括二进制文件),因为软件包也会做自动镜像,在国内可以加速。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants