本文來源電子發(fā)燒友社區(qū),作者:HonestQiao, 帖子地址:https://bbs.elecfans.com/jishu_2280585_1_1.html
拿到昉·星光RISC-V單板計算機后,我們可以從官方直接下載對應(yīng)的鏡像文件,進行燒錄。但是我們往往想稍微挑戰(zhàn)一下,從頭開始構(gòu)建系統(tǒng)。
零、學習參考網(wǎng)址:
- VisionFive技術(shù)文檔 (webfoss.com)
- VisionFive Single Board Computer Software Technical Reference Manual
- StarFive 40-Pin GPIO Header User Guide | RVspace
- RISC-V64 open***i啟動過程
- 過程記錄:編譯一個 RISC-V U-BOOT
- 在VisionFive上安裝OpenEuler (By Samuel)
- Latest 昉·星光 (中文論壇)
- kprasadvnsi/JH71xx-tools: Bootloader recovery and updater tool for StarFive JH71x0 SoCs. (github.com)
- Linux & Python on RISC-V using QEMU from scratch - embeddedinn
- Has anyone got python/micropython on RISC-V working? : RISCV (reddit.com)
一、需構(gòu)建部分說明:
通過《昉·星光單板計算機快速入門指南》,我們可以了解到,需要進行如下部分的構(gòu)建:
下面,我們就一步一步,來進行每個部分的構(gòu)建。
二、編譯環(huán)境基礎(chǔ)系統(tǒng)準備:
為了順利構(gòu)建上面的各個部分,我們需要在Ubuntu操作系統(tǒng)下進行各項操作。
官方推薦的是Ubuntu 18.04 LTS。雖然Canonical官方把Ubuntu 18.04 LTS的支持結(jié)束日期從2023年5月延長到2028年5月,但我選擇的是主流的版本的Ubuntu 20.04 LTS。
你可以在電腦上安裝Ubuntu 20.04 LTS,或者在虛擬機里面安裝Ubuntu 20.04 LTS(Vmware或者VirtualBox等);如果你熟悉WSL2,那么也可以在WSL2中運行Ubuntu 20.04 LTS。
我使用的是運行Docker中的Ubuntu 20.04 LTS,可以在10秒鐘之內(nèi)啟動Ubuntu 20.04 LTS基礎(chǔ)環(huán)境。
% docker run -it --name ubuntu ubuntu /bin/bash
進入Ubuntu 20.04 LTS基礎(chǔ)環(huán)境后,我們需要安裝下面的基礎(chǔ)組件:
# 可以執(zhí)行sudo指令,如果沒有安裝,則先安裝,否則可以跳過install sudo % apt update % apt install -y sudo % sudo apt update % sudo apt upgrade # 安裝后續(xù)操作過程中,需要的軟件 % sudo apt install -y wget % sudo apt install -y git git-lfs subversion % sudo apt install -y vim % sudo apt install -y make gcc % sudo apt install -y bison flex % sudo apt install -y gcc-riscv64-linux-gnu % sudo apt install -y libssl-dev pkg-config libncurses-dev # 設(shè)置bash為默認shell:選擇No即可 sudo dpkg-reconfigure dash # 如果沒有生成過id_rsa,則使用下面指令,并將生成的pub填寫到github對應(yīng)設(shè)置中;否則不用: % ssh-keygen -t rsa
三、跨平臺預編譯環(huán)境準備:
進入Ubuntu 20.04 LTS基礎(chǔ)環(huán)境后,我們需要首先安裝跨平臺預編譯環(huán)境,官方提供了對應(yīng)文件的下載地址: https://github.com/sifive/freedom-tools/releases/tag/v2020.12.0
從以上地址,下載如下三個壓縮包:
- riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14.tar.gz
- riscv-openocd-0.10.0-2020.12.1-x86_64-linux-ubuntu14.tar.gz
- sdk-utilities-1.0.1-2020.12.1-x86_64-linux-ubuntu14.tar.gz
具體操作如下:
% mkdir ~/VisionFive/freedom-tools % cd ~/VisionFive/freedom-tools % wget https://static.dev.sifive.com/dev-tools/freedom-tools/v2020.12/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14.tar.gz % wget https://static.dev.sifive.com/dev-tools/freedom-tools/v2020.12/riscv-openocd-0.10.0-2020.12.1-x86_64-linux-ubuntu14.tar.gz % wget https://static.dev.sifive.com/dev-tools/freedom-tools/v2020.12/sdk-utilities-1.0.1-2020.12.1-x86_64-linux-ubuntu14.tar.gz
下載完成后,我們需要解壓,并設(shè)置對應(yīng)的PATH,以備被后續(xù)操作調(diào)用:
% tar xzvf riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14.tar.gz % tar xzvf riscv-openocd-0.10.0-2020.12.1-x86_64-linux-ubuntu14.tar.gz % tar xzvf sdk-utilities-1.0.1-2020.12.1-x86_64-linux-ubuntu14.tar.gz % echo "$(pwd)/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14/bin:$(pwd):riscv-openocd-0.10.0-2020.12.1-x86_64-linux-ubuntu14/bin:$(pwd)/sdk-utilities-1.0.1-2020.12.1-x86_64-linux-ubuntu14/bin" # 將以上的部分的部分,按照如下設(shè)置,注意最好的:$PATH % export PATH=/root/VisionFive/freedom-tools/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14/bin:/root/VisionFive/freedom-tools:riscv-openocd-0.10.0-2020.12.1-x86_64-linux-ubuntu14/bin:/root/VisionFive/freedom-tools/sdk-utilities-1.0.1-2020.12.1-x86_64-linux-ubuntu14/bin:$PATH # 并將上一條語句,添加到~/.bashrc的最后 % riscv64-unknown-elf-gcc -v ... gcc version 10.2.0 (SiFive GCC-Metal 10.2.0-2020.12.8)
riscv64-unknown-elf-gcc能夠成功運行,說明跨平臺預編譯設(shè)置正確,可以開始后續(xù)的操作了。
四、Boot_recovery編譯:
代碼網(wǎng)址:starfive-tech/bootloader_recovery (github.com)
# 獲取Boot_recovery對應(yīng)的代碼: % cd ~/VisionFive % git clone git@github.com:starfive-tech/bootloader_recovery.git % cd bootloader_recovery % make ... Finished building target: debug/jh7100_recovery_boot.elf
顯示以上最后一條信息,表示編譯成功,debug/jh7100_recovery_boot.bin即為編譯得到的Boot_recovery文件
五、secondboot編譯:
代碼網(wǎng)址:starfive-tech/JH7100_secondBoot (github.com)
% cd ~/VisionFive % git clone https://github.com/starfive-tech/JH7100_secondBoot.git % cd JH7100_secondBoot/build % make ... riscv64-unknown-elf-objdump -S bootloader-JH7100-220515.elf > bootloader-JH7100-220515.asm
顯示以上最后一條信息,表示編譯成功,bootloader-JH7100-220515.bin.out即為編譯得到的secondboot文件。
六、ddrinit編譯:
代碼網(wǎng)址:starfive-tech/JH7100_ddrinit (github.com)
% cd ~/VisionFive % git clone https://github.com/starfive-tech/JH7100_ddrinit.git % cd JH7100_ddrinit/build % make ... riscv64-unknown-elf-objdump -S ddrinit-2133-220515.elf > ddrinit-2133-220515.asm
顯示以上最后一條信息,表示編譯成功,ddrinit-2133-220515.bin.out即為編譯得到的ddrinit文件。
七、u-boot編譯:
代碼網(wǎng)址:starfive-tech/u-boot (github.com)
# 首先檢查riscv64-linux-gnu-gcc能否正常運行 顯示以上最后一條信息,表示能夠正常運行,可以繼續(xù)操作了。 % cd ~/VisionFive % git clone https://github.com/starfive-tech/u-boot % cd u-boot % make starfive_jh7100_visionfive_smode_defconfig ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- % make u-boot.bin u-boot.dtb ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- ... CAT u-boot-dtb.bin COPY u-boot.bin
顯示以上最后兩條信息,表示編譯成功,u-boot.dtb、u-boot.bin即為編譯得到的u-boot文件,將會用于后續(xù)的OpenSBI編譯。
八、OpenBSI編譯:
代碼地址:riscv-software-src/open***i: RISC-V Open Source Supervisor Binary Interface (github.com)
% cd ~/VisionFive % git clone https://github.com/riscv/open***i.git % make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- PLATFORM=generic FW_PAYLOAD_PATH=~/VisionFive/u-boot/u-boot.bin FW_FDT_PATH=~/VisionFive/u-boot/u-boot.dtb ... OBJCOPY platform/generic/firmware/fw_payload.bin
顯示以上最后一條信息,表示編譯成功,build/platform/generic/firmware/fw_payload.bin即為編譯得到的openbsi文件。
但是這個文件大于2M,還需要進行一些處理,才可以使用,具體操作如下:
% mkdir ~/VisionFive/payload % cp -a build/platform/generic/firmware/fw_payload.bin ~/VisionFive/payload/ % cd ~/VisionFive/payload % svn export https://github.com/starfive-tech/freelight-u-sdk.git/branches/starfive/fsz.sh % chmod +x fsz.sh % ./fsz.sh fw_payload.bin fw_payload.bin.out inFile: fw_payload.bin inSize: 3022552 (0x002e1ed8, LE:0xd81e2e00) outFile: fw_payload.bin.out outSize: 3022556 (0x002e1edc)
調(diào)用fsz.sh處理fw_payload.bin后,顯示如上信息,表示處理成功,fw_payload.bin.out即為實際需要使用的文件。
九、編譯Linux 內(nèi)核:
代碼網(wǎng)址:starfive-tech/linux (github.com)
% cd ~/VisionFive % git clone https://github.com/starfive-tech/linux % cd linux % make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv visionfive_defconfig % make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv menuconfig % make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv -j2 ... Kernel: arch/riscv/boot/Image.gz is ready
顯示以上最后三條信息,表示編譯成功,arch/riscv/boot/Image.gz即為內(nèi)核文件,arch/riscv/boot/dts/starfive/jh7100-starfive-visionfive-v1.dtd即為需要的dtb文件。
十、使用:
通過以上的步驟,我們就能夠編譯得到所需要的如下文件:
-
賽昉科技 固件:
- Boot_recovery:用于恢復 SPI flash 的二進制文件
- secondboot:第一階段 bootloader
- ddrinit:第一階段 ddrinit
- Bootloader:u-boot,通用Bootloader
- OpenBSI:RISC-V SBI
- Kernel:Linux內(nèi)核
recovery_boot、secondboot、ddrinit的燒錄,可以使用JH7100-tools進行。該工具需要在Linux上使用。
cd ~/VisionFive git clone git@github.com:kprasadvnsi/JH71xx-tools.git cd JH71xx-tools gcc -o jh7100-recover jh7100-recover.c ./jh7100-recover Need serial device path. Usage: ./jh7100-recover [OPTION]... -D, --device : Serial tty device path. -r, --recovery : Bootloader recovery firmware. -b, --bootloader : Second stage bootloader. -d, --ddrinit : DRAM initialization firmware. -h, --help : Show this help.
編譯成功后,將會生成jh7100-recover,該工具將會用于recovery_boot、secondboot、ddrinit的燒錄。
其調(diào)用參數(shù)如下:
- -D 指定串口設(shè)備,使用USB轉(zhuǎn)串口轉(zhuǎn)換器的跳線連接到昉·星光的 40-Pin GPIO Header 上
- -r Boot_recovery編譯結(jié)果文件
- -b secondboot編譯結(jié)果文件
- -d ddrinit編譯結(jié)果文件
# 將之前生成的文件集中到一起 mkdir ~/VisionFive/images cp -a ~/VisionFive/debug/jh7100_recovery_boot.bin ~/VisionFive/images/ cp -a ~/VisionFive/JH7100_secondBoot/build/bootloader-JH7100-220515.bin.out ~/VisionFive/images/ cp -a ~/VisionFive/JH7100_ddrinit/build/ddrinit-2133-220515.bin.out ~/VisionFive/images/ # 更新第一階段 bootloader ./jh7100-recover -D /dev/ttyUSB0 -r ~/VisionFive/images/jh7100_recovery_boot.bin -b ~/VisionFive/images/bootloader-JH7100-220515.bin.out # 更新DRAM初始化固件 ./jh7100-recover -D /dev/ttyUSB0 -r ~/VisionFive/images/jh7100_recovery_boot.bin -d ~/VisionFive/images/ddrinit-2133-buildroot.bin.out # 同時更新第二階段引導加載程序和DRAM初始化固件 ./jh7100-recover -D /dev/ttyUSB0 -r ~/VisionFive/images/jh7100_recovery_boot.bin -b ~/VisionFive/images/bootloader-JH7100-220515.bin.out -d ~/VisionFive/images/ddrinit-2133-220515.bin.out
以上的具體操作,可參考:《昉·星光單板計算機快速入門指南》。如果Bootlaber不慎損壞,我們也可以參考《昉·星光單板計算機快速入門指南》進行Boot_recovery恢復了。 參考《昉·星光單板計算機軟件技術(shù)參考手冊》,我們可以更新Kernel以及內(nèi)核模塊了!
-
RISC-V
+關(guān)注
關(guān)注
44文章
2204瀏覽量
45959 -
賽昉科技
+關(guān)注
關(guān)注
3文章
145瀏覽量
14246
發(fā)布評論請先 登錄
相關(guān)推薦
評論