基于社区最新开源仓库(Opensbi、Linux)构建nezha - d1开发环境
-
一、 本文目的
介绍如何基于NEZHA-D1平台搭建社区最新的opensbi和Linux最小系统。
启动分为两大阶段:
第一阶段brom->boot0->uboot,该阶段固件烧写在nand flash。
第二阶段:opensbi->kernel->rootfs,该阶段固件存储在TF卡上。TF卡实现2个分区,分区1为FAT文件系统,方便开发者拷贝linux、dtb、opensbi等固件,分区2为EXT4的rootfs。二、实验准备
硬件:nezha开发板+电源线+串口线+TF卡
软件:github仓库:https://github.com/chinchilla222/nezha-d1.gitnezha-d1仓库简要说明:
├── build.sh -> scripts/build.sh -- 编译脚本
├── HOW-TO-CN.txt -- 说明文档
├── README.md
├── resource -- 代码资源
│ ├── linux -- 存放最小系统必要的patch
│ │ ├── 0001-riscv-pgtable.h-Fixup-_PAGE_CHG_MASK-usage.patch
│ │ ├── 0002-riscv-Add-DMA_COHERENT-for-custom-PTE-attributes.patch
│ │ ├── 0003-riscv-Add-SYNC_DMA_FOR_CPU-DEVICE-for-DMA_COHERENT.patch
│ │ ├── 0004-dt-bindings-clk-sunxi-ccu-add-compatible-string-for-.patch
│ │ ├── 0005-clk-sunxi-ng-add-support-for-the-Allwinner-D1-CCU.patch
│ │ ├── 0006-dt-bindings-pinctrl-sunxi-Add-D1-pinctrl-bindings.patch
│ │ ├── 0007-pinctrl-sunxi-add-support-for-the-Allwinner-D1-pin-c.patch
│ │ ├── 0008-rv64-allwinner-d1-add-the-basical-d1-dtsi-file.patch
│ │ ├── 0009-rv64-allwinner-D1-add-support-for-Allwinner-nezha-bo.patch
│ │ ├── 0010-mmc-sunxi-mmc-add-mmc0-support-on-d1-and-fix-clk-set.patch
│ │ ├── 0011-riscv-d1-nezha-default-config.patch
│ │ ├── 0012-rv64-allwinner-d1-support-card-boot-ext4-file-system.patch
│ │ └── useless-patch -- 暂时无用
│ │ ├── 0001-dump_reg-support-interface-to-Read-Write-IO.patch
│ │ ├── 0001-riscv-pgtable.h-Fixup-_PAGE_CHG_MASK-usage.patch
│ │ ├── 0002-gmac-support-temporary-driver.patch
│ │ ├── 0002-riscv-Add-DMA_COHERENT-for-custom-PTE-attributes.patch
│ │ ├── 0003-riscv-Add-SYNC_DMA_FOR_CPU-DEVICE-for-DMA_COHERENT.patch
│ │ └── 0004-drivers-ccu-pinctrl-uart-gmac-mmc-driver-support.patch
│ ├── opensbi -- 社区最新opensbi源码
│ │ └── opensbi-master.zip
│ ├── rootfs -- 编译好根文件系统
│ │ └── rootfs.tar.gz
│ └── tools -- 存放开发需要的工具
│ ├── make_ext4fs
│ ├── mkbootimg
│ └── toolchain -- 存放PTG工具链
│ ├── riscv64-glibc-gcc-thead_20200702.tar.xz.00
│ ├── riscv64-glibc-gcc-thead_20200702.tar.xz.01
│ └── riscv64-glibc-gcc-thead_20200702.tar.xz.02
├── scripts
│ ├── build.sh
│ └── gdbinit
└── tina-d1-open -- 存放基于tina-d1-open仓库编译好的固件(更改了启动顺序)
├── 0001-d1-add-new-board-nezha_debug.patch
├── 0001-uboot-nezha-suport-boot0-uboot-opensbi-kernel-startu.patch
└── tina_d1-nezha_debug_uart0.img三、 搭建环境
1、下载nezha-d1仓库
git clone https://github.com/chinchilla222/nezha-d1.git 由于仓库中包含交叉编译工具,下载速度会受影响,请大家耐心等待。
2、烧写固件:nezha-d1/tina-d1-open/tina_d1-nezha_debug_uart0.img
tina_d1-nezha_debug_uart0.img固件同tina-d1-open源码仓库编译打包的原生固件区别在于修改了启动顺序,并且在uboot阶段修改直接引导TF卡中opensbi、kernel的功能。(原流程:brom->boot0->opensbi->uboot->kernel,改后:brom->boot0->uboot->opensbi->kernel)
3、编译opensbi/kernel/dtb
3.1、自动编译
执行scripts/build.sh脚本,生成的目标文件输出至build/debug目录。3.2、手动编译 - 下文中提到的命令为示意性命令,请大家根据实际的目录结构使用。已经执行了build.sh脚本的同学忽略3.2,以及第4/5节的操作
(1)创建临时目录:mkdir build
(2)准备工具链:tar xvf resource/tools/riscv64-glibc-gcc-thead_20200702.tar.xz -C build/
(3)编译linux
-
解压:tar xzvf resource/linux/linux-5.13-rc3.tar.gz -C build/
-
打补丁:cd nezha-d1/build/linux-5.13-rc3;git init; git add ./; git commit -s -m "init version";git am *.patch
-
编译:
make ARCH=riscv CROSS_COMPILE=../riscv64-glibc-gcc-thead_20200702/bin/riscv64-unknown-linux-gnu- d1_nezha_defconfig
make ARCH=riscv CROSS_COMPILE=../riscv64-glibc-gcc-thead_20200702/bin/riscv64-unknown-linux-gnu- all -j32 -
生成boot.img:./mkbootimg --kernel Image --board sun20i_riscv --base 0x40200000 --kernel_offset 0 -o boot.img
4、编译opensbi
(1)解压:unzip resource/opensbi/opensbi-master.zip -d build/
(2)编译:make PLATFORM=generic CROSS_COMPILE=../riscv64-glibc-gcc-thead_20200702/bin/riscv64-unknown-linux-gnu-
5、制作EXT4根文件系统*
(1)tar -xzvf resource/rootfs/rootfs.tar.gz -C build/
(2)make_ext4fs -l 256M roofs.ext4 rootfs/
6、 制作启动卡
(1)制作GPT分区,工具:parted,举例:分区1 - 1G到12G 区间,分区2 - 12G至25G区间
- parted -s /dev/sdb mklabel gpt
- parted -s /dev/sdb unit GB mkpart primary 1 12
- parted -s /dev/sdb unit GB mkpart primary 12 25
- parted -s /dev/sdb print
(2)格式化分区1,工具:mkfs.fat,举例:mkfs.fat /dev/sdb1。将boot.img,d1.dtb,d1.dtb拷贝到TF卡的分区1中。
(3)烧写分区2,工具:dd,举例:dd if=./build/rootfs.ext4 of=/dev/sdb2
7.将TF卡插入开发板,上电启动,大功告成。
-
-
分开也有分开的优势,这种复合型的可定制化程度没有单独的方便。
-
@aiminick 在 基于社区最新开源仓库(Opensbi、Linux)构建nezha - d1开发环境 中说:
分开也有分开的优势,这种复合型的可定制化程度没有单独的方便。
没有理解你的意思,可以描述的再详细一点吗? -
@damon 其实就是没有SDK 整编来的快 没有SDK make 设置来的方便
-
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号