本SDK在以下环境中进行过编译测试:
Ubuntu 18.04
Ubuntu 20.04
Ubuntu 22.04
Ubuntu 23.04
获取SDK
如果是以git方式下载SDK,则直接执行:
git clone xxxxx/sdk.git --recurse-submodules
cd sdk
git submodule update --init --recursive
如果获取到的源代码为压缩包形式,则为SDK创建一个新的目录,并进入该目录:
mkdir sdk
cd sdk
解压缩SDK软件包到当前目录:
tar -xzvf sdk.tar.gz
SDK压缩包中并未包含工具链,相应工具链需要单独获取。
如果是通过git方式下载的SDK源代码,并且源代码目录下已经存在toolchains/setup.sh脚本,则在编译sdk时会自动进行toolchain的setup,无需再进行工具链配置。
否则需要在SDK目录下创建toolchains目录,并确保:
arm64 linux的编译器位于路径:"toolchains/aarch64-linux/bin/aarch64-linux-gnu-gcc";
arm64 baremetal的编译器位于路径:"toolchains/aarch64-bm/bin/aarch64-none-elf-gcc";
riscv64 linux的编译器位于路径:"toolchains/riscv64-linux/bin/riscv64-unknown-linux-gnu-gcc";
riscv64 baremetal的编译器位于路径:"toolchains/riscv64-bm/bin/riscv64-unknown-elf-gcc"。
如果是首次编译,需要执行这两个命令安装编译环境所需的软件(针对ubuntu):
sudo apt-get update
sudo apt-get install make gcc g++ flex bison u-boot-tools liblz4-tool libncurses5-dev
执行下面的命令,选择您的芯片型号,例如"1. anlogic_dr1m90":
source ./envsetup.sh
如果该SDK软件包只支持一个芯片型号时,将不会打印菜单供您选择,系统会直接使用该芯片型号。
执行下面的命令,选择您所需的Board配置,例如"ad101v20_ad103v20-tf-openamp-rtlinux":
./build.sh lunch
执行下面的命令,编译固件:
./build.sh all
编译生成的固件在"device/output/anlogic_dr1m90/image/"目录下;需要烧到flash的image文件在"device/output/anlogic_dr1m90/genimage/"目录下。
如果需要编译32位用户空间系统,需要确保arm32 linux的编译器位于路径:"toolchains/aarch32-linux/bin/arm-linux-gnueabihf-gcc";并修改对应板级配置文件中的"ANLOGIC_BUILDROOT_DEFCONFIG",例如device/anlogic_dr1m90/BoardConfig-ad101v20_ad103v20-tf.mk,修改为:
export ANLOGIC_BUILDROOT_DEFCONFIG=anlogic_dr1m90_linux32_defconfig
如果已经编译过64位系统,则需先运行./build.sh cleanbuildroot
,然后按上面的步骤正常编译。
执行下面的命令,选择您的芯片型号,例如"1. anlogic_dr1m90":
source ./envsetup.sh
执行下面的命令,选择您所需的Board配置,例如"ad101v20_ad103v20-tf":
./build.sh lunch
将TD生成的bit文件保存到device/anlogic_dr1m90/bitfiles目录下,例如demo_20240820.bit
打开Bootgen配置文件device/anlogic_dr1m90/bif/boot-apu-evb.bif,确保load pl段未被注释
打开Board配置文件device/anlogic_dr1m90/BoardConfig-ad101v20_ad103v20-tf.mk,将变量"ANLOGIC_BIT_IMAGE"改成相应的bit名,例如:
export ANLOGIC_BIT_IMAGE=device/anlogic_dr1m90/bitfiles/demo_20240820.bit
如采用hpf中的bitstream,则注释该变量,例如:
#export ANLOGIC_BIT_IMAGE=device/anlogic_dr1m90/bitfiles/demo_20240820.bit
如果不想使用任何bitstream,则可以设置:
export ANLOGIC_BIT_IMAGE=NO
执行下面的命令,生成BOOT.bin:
./build.sh bootgen
生成的BOOT.bin在device/output/anlogic_dr1m90/image/目录下。
执行下面的命令,选择您的芯片型号,例如"1. anlogic_dr1m90":
source ./envsetup.sh
执行下面的命令,选择您所需的Board配置,例如"ad101v20_ad103v20-tf":
./build.sh lunch
执行下面的命令,生成固件:
./build.sh all
生成的固件在device/output/anlogic_dr1m90/image/目录下
将sd卡格式化fat32,将image下固件复制进sd卡
插入sd卡,系统启动
执行下面的命令,选择您的芯片型号,例如"1. anlogic_dr1m90":
source ./envsetup.sh
执行下面的命令,选择您所需的Board配置,例如"ad101v10-nor-16MB":
./build.sh lunch
执行下面的命令,生成镜像:
./build.sh all
生成的镜像在device/output/anlogic_dr1m90/genimage/目录下。
通过openocd将镜像烧录进nor flash,系统启动
flash默认布局如下:
mtdparts=alspinor:4M(boot),128k(scr),128k(env),128k(dtb),7M(kernel),-(rootfs)
0x000000 - 0x400000 4M BOOT.bin
0x400000 - 0x420000 128K scr
0x420000 - 0x440000 128K env
0x440000 - 0x460000 128K dtb
0x460000 - 0xB60000 7M kernel
0xB60000 - rootfs
如需调整flash布局,需要修改"BoardConfig-ad101v10-nor-16MB.mk"文件中ANLOGIC_UBCFG_MTDPARTS_DEFAULT和OFFSET选项,以及genimg_nor_16M.cfg配置文件。
执行下面的命令,选择您的芯片型号,例如"1. anlogic_dr1m90":
source ./envsetup.sh
执行下面的命令,选择您所需的Board配置,例如"ad101v20_ad103v20-nor-32MB":
./build.sh lunch
执行下面的命令,生成镜像:
./build.sh all
生成的镜像在device/output/anlogic_dr1m90/genimage/目录下。
通过openocd将镜像烧录进nor flash,系统启动
flash默认布局如下:
mtdparts=alspinor:8M(boot),128k(scr),128k(env),128k(dtb),8M(kernel),-(rootfs)
0x000000 - 0x800000 8M BOOT.bin
0x800000 - 0x820000 128K scr
0x820000 - 0x840000 128K env
0x840000 - 0x860000 128K dtb
0x860000 - 0x1060000 8M kernel
0x1060000 - rootfs
执行下面的命令,选择您的芯片型号,例如"1. anlogic_dr1m90":
source ./envsetup.sh
执行下面的命令,选择您所需的Board配置,例如"ad101v20_ad103v20-emmc1-fat":
./build.sh lunch
执行下面的命令,生成镜像:
./build.sh all
生成的镜像在device/output/anlogic_dr1m90/genimage/目录下。
通过openocd将镜像烧录进emmc,系统启动
emmc默认布局如下:
32k(分区表),32M(fat),128M(rootfs),-(usrfs)
0x000000 - 0x8000 32K 分区表信息
0x8000 - 0x2008000 32M BOOT.bin、dtb.bin、kernel.bin
0x2008000 - 0xA008000 128M rootfs(ext4)
0xA008000 - userfs(ext4)
将需要打包的文件放到一个目录中,目录内部的路径按照rootfs中期望的路径进行组织。
在板级配置文件例如"BoardConfig-ad101v10-tf.mk"中配置ANLOGIC_EXTRA_ROOTFS_DIR变量,指向需要打包的目录。指定的路径需要是绝对路径。
执行下面的命令,重新编译rootfs:
./build.sh buildroot
打包目录下的内容更新后,只需执行"./build.sh buildroot"即可,重新生成的rootfs会包含这些内容更新。
编写dts文件如下,例如文件名为test.dts。示例中的码流文件为led_cnt.bit,可以改成自己码流文件的名字。
/dts-v1/;
/plugin/;
/ {
fragment@0 {
target-path = "/soc/base_fpga_region";
#address-cells = <0x2>;
#size-cells = <0x2>;
__overlay__ {
#address-cells = <0x2>;
#size-cells = <0x2>;
firmware-name = "led_cnt.bit";
config-complete-timeout-us = <3000000000>;
};
};
};
运行如下命令,将会生成test.dtb文件:
dtc -I dts -O dtb -o test.dtb test.dts
如果没有dtc命令,则进行安装:
sudo apt-get install device-tree-compiler
执行如下命令进行fpga配置
mkdir -p /lib/firmware
cp -vf test.dtb /lib/firmware/
cp -vf led_cnt.bit /lib/firmware/
mount -t configfs none /sys/kernel/config
mkdir /sys/kernel/config/device-tree/overlays/0
echo test.dtb > /sys/kernel/config/device-tree/overlays/0/path
如果需要重新配置,则需先执行如下命令,然后再执行步骤3)
rmdir /sys/kernel/config/device-tree/overlays/0
如需对bit文件进行加密验签等,则需要制作一份bif文件,该bif文件只包括bit文件。加密验签的key必须和生成BOOT.bin时使用的key一致。然后运行下面的命令,生成加密或者签名后的bit文件:
./build.sh albg xxxx.bif
之后,再按前面的步骤进行PL bit下载。
以dr1m90为例,将hpf文件保存到device/anlogic_dr1m90/hpf/目录下
执行下面的命令,选择anlogic_dr1m90:
source ./envsetup.sh
执行下面的命令,选择所需的Board配置:
./build.sh lunch
修改对应的"BoardConfig-xxx.mk"中ANLOGIC_HPF变量内容为指定的hpf
注释对应的"BoardConfig-xxx.mk"中ANLOGIC_FSBL_IMAGE、ANLOGIC_BIT_IMAGE变量
打开Bootgen配置文件"device/anlogic_dr1m90/bif/boot-apu-evb.bif",确保load pl段未被注释
执行下面的命令,编译master_sdk中的fsbl工程:
./build.sh fsbl
执行下面的命令,生成BOOT.bin:
./build.sh bootgen
ANLOGIC_ARCH: 系统架构,riscv或者arm64
ANLOGIC_TARGET_PRODUCT: chip型号,例如:dr1m90和dr1v90
ANLOGIC_UBOOT_DEFCONFIG: uboot使用的defconfig文件名字
ANLOGIC_UBOOT_DTS: uboot使用的dts文件名字
ANLOGIC_UBOOT_IMG: 使用的uboot产生的image路径
ANLOGIC_KERNEL_DEFCONFIG: kernel使用的defconfig文件名字
ANLOGIC_KERNEL_DTS: kernel使用的dts文件名字
ANLOGIC_KERNEL_DTB: kernel使用的dtb文件路径
ANLOGIC_KERNEL_IMG: 使用的kernel image文件路径
ANLOGIC_BUILDROOT_DEFCONFIG: 编译buildroot使用的defconfig文件名
ANLOGIC_BUILDROOT_IMG: 使用的buildroot产生的rootfs镜像路径
ANLOGIC_BOOTSCR: uboot启动脚本路径
ANLOGIC_BOOTSCR_IMG: uboot启动脚本镜像存放路径
ANLOGIC_BOOTGEN_CONFIG: 打包生成BOOT.bin使用的配置文件路径
ANLOGIC_IMAGE_CONFIG: 生成烧录image使用的配置文件
ANLOGIC_BOOTPART_FILES: 从fat文件系统启动时,打包进fat文件系统的文件列表
ANLOGIC_IMAGE_EXTRA_FILES: 编译时copy镜像目录的其他文件列表
ANLOGIC_UBCFG_AN_BOOTARGS: kernel的启动参数
ANLOGIC_UBCFG_MTDIDS_DEFAULT: 默认的mtd id列表
ANLOGIC_UBCFG_MTDPARTS_DEFAULT: 默认的mtd分区参数
ANLOGIC_UBCFG_BOOT_SCRIPT_OFFSET: raw flash启动时启动脚本镜像在flash上的偏移
ANLOGIC_UBCFG_ENV_OFFSET: raw flash启动时uboot环境变量在flash上的偏移
ANLOGIC_OPENSBI: 指示是否需要编译opensbi,riscv时需要编译opensbi
ANLOGIC_OPENSBI_BASE: opensbi的执行地址
ANLOGIC_OPENSBI_JUMP: opensbi结束后的跳转地址
ANLOGIC_TOOLCHAIN: 编译SDK时使用的工具链的路径
ANLOGIC_TOOLCHAIN_FSBL: 编译fsbl时使用的工具链的路径
sd卡启动时,启动镜像生成在"device/output/chip型号/image/"路径下:
BOOT.bin: 启动文件,包含fsbl和uboot镜像,如果是riscv则还包含opensbi镜像
boot.scr: uboot启动脚本
kernel.bin: linux内核镜像文件
rootfs.bin: rootfs镜像文件
dtb.bin: linux内核的设备树镜像
如果是从nor/emmc/nand等flash启动,则会将这些镜像文件打包生成烧录镜像, 存放在"device/output/chip型号/genimage"路径下
例如:
mmc_fat_image.bin: 原始的烧录镜像文件
mmc_fat_sparse.bin: sparse格式的烧录镜像文件,相对原始烧录镜像尺寸会变小。
anlogic-dr1m90-ad101-v20.dts (针对ad101-v20板级dts,包含ddr、led、key、serial、i2c、usb、gbe等外设打开或关闭)
├── anlogic-dr1m90.dts (各外设clock等信息)
│ ├── anlogic-dr1m90.dtsi (各外设设备节点名称、基地址、中断号等信息)
│ └── anlogic-dr1m90-plat.h (默认参数配置)
│ └──anlogic-dr1m90-hpf.h (参数从hpf导入)
└── anlogic-dr1m90-softip.dts (softip相关dts配置,默认从hpf导入)
(如需自定义softip dts在device/anlogic_dr1m90/Config.mk中开打变量ANLOGIC_BIT_SOFTIP_DTS)
anlogic-dr1m90-ad101-v20-openamp.dts (openamp对应dts,包含openamp各memory信息)
└── anlogic-dr1m90-ad101-v20.dts
anlogic-dr1m90-ad101-v20-qt.dts (qt对应dts,包含hmdi、dma、i2c信息)
└── anlogic-dr1m90-ad101-v20.dts
soft reboot是在不reset hardware的情况下实现重新加载OS并重启的功能。
测试步骤如下:
修改dts,为u-boot保留内存。例如:
&reserved_memory {
ubmem: ubmem {
no-map;
reg = <0x0 0x200000 0x0 0x200000>;
};
};
修改dts,打开watchdog0,并且设置模式为irq模式,例如:
&watchdog0 {
status = "disabled";
rmod = <2>; // RMOD_RESET = 1, RMOD_IRQ = 2
status = "okay";
};
运行./build.sh kernelmenuconfig,打开CONFIG_ANLOGIC_SOFT_REBOOT
编译并启动linux,使用sdk/app目录下编译出的memtool工具将编译好的u-boot.bin加载到0x200000处,然后运行sdk/app目录下编译出的wdt_test程序。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。