RDK Resources
[*RDK Preferred*]
Code Management Facility
RDK Forums
[RDK Conferences]
RDK Support
Archives
Papers & Presentations Archive
Dependencies for sdcard flashing.
1)bootloader:
Bananapi r4 follows a atf(arm-trusted firmware) flow for device bootup, by default flash memory is present in the device (BL1), and bl1 is depended on bl2 address which flow is mentiond below.
draw.io Diagram | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
1)BL1: Bootloader one which will be part of flash memory of bpir4 , it will be holding address for bl2.
2)BL2: Bootloader two need to be generated and loaded in a specified sector so that bl1 can load bl2.
3)fip: Firmware image Package which contains firmware components eg bl31.
4)Kernel: Layer which will be acting between hardware and OS.
5)RDKB : RDKB stack or RDKB OS for user interaction.
Bootloader file generation
For generated bl2.img and fip.bin i used below mentioned git repo.
1) https://github.com/frank-w/u-boot/tree/2024-04-bpi → for generating uboot.bin files .
2) https://github.com/frank-w/u-boot/tree/mtk-atf → for generating atf flow bootloader files (bl2.img and fip.bin)
At initial i cloned mentioned git code https://github.com/frank-w/u-boot/tree/2024-04-bpi , and made below mentioned changes in uboot env file to make bootloader to load kernel and rdkb rootfs at initial bootup itself.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
heam@Dell-OptiPlex-9020:~/bootloader/u-boot$ git diff
diff --git a/build.conf b/build.conf
index 217679e5393..d1ebe634a3f 100644
--- a/build.conf
+++ b/build.conf
@@ -2,12 +2,12 @@ uploaduser=$USER
uploadserver=r2
uploaddir=/var/lib/tftp
-board=bpi-r2
+#board=bpi-r2
#board=bpi-r64
#board=bpi-r2pro
#board=bpi-r3
#board=bpi-r3mini
-#board=bpi-r4
+board=bpi-r4
#device=emmc
#device=spi-nand
diff --git a/uEnv_r4.txt b/uEnv_r4.txt
index dc60a382cd2..0ca9b61df4a 100644
--- a/uEnv_r4.txt
+++ b/uEnv_r4.txt
@@ -1,82 +1,19 @@
board=bpi-r4
device=mmc
-partition=0:5
+partition_boot=0:3
bootenv=uEnv.txt
bootdevice=sd
-
-fit=bpi-r4.itb
-#bootconf="#conf-2"
-#initrd=rootfs.cpio.zst
-
-loadaddr=0x46000000
-uaddr=0x41e00000
kaddr=0x46000000
-rdaddr=0x48000000
-
-root=/dev/mmcblk0p6 rootfstype=ext4 rootwait
-console=ttyS0,115200n1 earlycon=uart8250,mmio32,0x11000000
-bootopts=debug=7 mem=3G
-
-#version=-v0
-wifi_en=0
-sata_en=0
-
-usb_part=0:1
-
-nvme_boot=0:1
-nvme_root=/dev/nvme0n1p2
-
-#netboot
-ipaddr=192.168.0.19
-netmask=255.255.255.0
-serverip=192.168.0.10
-
-lstftp=if tftp ${loadaddr} ${serverip}:r4-itbfiles.lst;then setexpr listend ${loadaddr} + ${filesize};mw.b ${listend} 00 2;strings ${loadaddr};else echo "tftp download failed";fi
-askkernel=askenv kernelinput "enter kernel-name:";
-askbootnetfit=run lstftp askkernel;if printenv kernelinput; then setenv bootfile "${kernelinput}"; run bootnetfit;fi
-
-askbootnvme=run usenvme; if test "$device" = "nvme"; then run askkernel;if printenv kernelinput; then setenv fit $kernelinput;run newboot;fi;fi
-
-bootnetfit=run buildargs;if tftp $kaddr ${bootfile}; then bootm $kaddr;fi
-bootfile=bpi-r4.itb
-
-checkenv=test -e ${device} ${partition} ${bootenv}
-loadenvfile=if fatload ${device} ${partition} ${loadaddr} ${bootenv};then env import -t ${loadaddr} ${filesize};else echo "fatload (${bootenv}) failed";fi
-loadenv=if run checkenv;then run loadenvfile;fi
-resetenv=env default -a;printenv;
-
-loadkernel=fatload $device $partition $kaddr ${kernel}
-buildargs=setenv bootargs "board=${board} console=${console} root=${root} ${bootopts}
-
-useusb=if usb info; then usb reset;else usb start;fi; if ls usb $usb_part $usb_path; then setenv device usb;setenv partition $usb_part;fi
-usenvme=pci enum; nvme scan;nvme info; if ls nvme $nvme_boot;then setenv device "nvme";setenv partition $nvme_boot;setenv root $nvme_root;else echo "nvme partition not found";fi
-
-useinitrd=setenv bootopts "${bootopts} initrd=${rdaddr},100M";
-checkrd=if printenv initrd;then if fatload ${device} ${partition} ${rdaddr} ${initrd};then run useinitrd;fi;fi
-
-newboot=run checkrd; run setbootconf; run buildargs;if printenv fit;then setenv kernel ${fit};if run loadkernel; then bootm ${kaddr}${bootconf}; fi;fi;
-bootnetfit=run checkrd; run setbootconf;run buildargs;if tftp $kaddr ${bootfile}; then bootm ${kaddr}${bootconf};fi
-
-checkmmc=if mmc partconf 0; then echo "emmc available";mmcdev="emmc";else echo "sd available";mmcdev="sd";fi
-checksata=if test -n "$sata_en" && test $sata_en -eq 1;then setenv satacfg "#sata"; fi
-checkwifi=if test -n "$wifi_en" && test $wifi_en -eq 1;then setenv wificfg "#wifi"; fi
-setbootconf=run checkmmc checksata checkwifi;setenv bootconf "#conf-$mmcdev$version$wificfg$satacfg";printenv bootconf
-
-wrspimnand=if printenv bl2file;then if fatload $device $partition $loadaddr $bl2file;then mtd erase spi-nand0 0x0 0x100000;mtd write spi-nand0 $loadaddr 0x0 0x100000;else echo "loading bl2 $bl2file failed";fi;else echo "bl2file not defined";fi;if printenv fipfile;then if fatload $device $partition $loadaddr $fipfile;then mtd erase spi-nand0 0x580000 0x200000;mtd write spi-nand0 $loadaddr 0x580000 0x200000;else echo "loading fip $fipfile failed";fi;else echo "fipfile not defined";fi
-wremmc=if printenv bl2file;then mmc partconf 0 1 1 1;if fatload $device $partition $loadaddr $bl2file;then mmc erase 0x0 0x400;mmc write ${loadaddr} 0x0 0x400;else echo "loading bl2 $bl2file failed";fi;else echo "bl2file not defined";fi;mmc partconf 0 1 1 0;if printenv fipfile;then if fatload $device $partition $loadaddr $fipfile;then mmc erase 0x3400 0x1000;mmc write ${loadaddr} 0x3400 0x1000;else echo "loading fip $fipfile failed";fi;else echo "fipfile not defined";fi
-
-bootdelay=0
-bootcmd=setenv bootdelay 3; run loadenv;bootmenu;
-
-lskernel=ls ${device} ${partition};
-askkernel=askenv kernelinput "enter kernel name:";
-
-boot0=run lskernel;run askkernel;if printenv kernelinput ;then setenv fit ${kernelinput}; run newboot; fi;
-
-bootmenu_0=1. Enter kernel-name to boot from SD/EMMC.=run boot0
-bootmenu_1=2. Boot kernel from TFTP.=run askbootnetfit
-bootmenu_2=3. Boot from SD/EMMC.=run newboot
-bootmenu_3=4. Boot kernel from NVME.=run askbootnvme
+loadaddr=0x60000000
+bootenv=uEnv.txt
+kernel=fitImage
+fit=mt7988a-bananapi-bpi-r4-sd.dtb
-bootmenu_default=2
+bootmenu_0=1. Load image from sdcard .=run rdkb_bpir4
+bootargs=earlycon console=ttyS0,115200 root=/dev/mmcblk0p4 rootfstype=ext4 rw rootwait debug=7
+rdkb_bpir4=run rdkb-kernel ;run rdkb-dtb ;run rdkb-run
+rdkb-dtb=fatload mmc 0\:3 ${loadaddr} ${fit}
+rdkb-kernel=fatload mmc 0\:3 ${kaddr} ${kernel}
+rdkb-run=bootm ${kaddr} - ${loadaddr}
+bootcmd=setenv bootdelay 3 ;bootmenu;
|
After making changes just executed build.sh file, after complete execution of this script file. We can see u-boot.* files will be generated in specific folder.
Code Block | ||||
---|---|---|---|---|
| ||||
heam@Dell-OptiPlex-9020:~/bootloader/u-boot$ ls
api build.conf common doc examples include Licenses post System.map u-boot.bin u-boot.lds u-boot.srec uEnv_r3.txt
arch build.log config.mk drivers files Kbuild MAINTAINERS README test u-boot.cfg u-boot.map u-boot.sym uEnv_r4.txt
board build.sh configs dts fs Kconfig Makefile README.md tools u-boot.dtb u-boot-mtk.bin uEnv_r2pro.txt uEnv_r4.txt.old
boot cmd disk env generated_defconfig lib net scripts u-boot u-boot-dtb.bin u-boot-nodtb.bin uEnv_r2.txt uEnv_r64.txt
|
In other terminal clone https://github.com/frank-w/u-boot/tree/mtk-atf, and copy all u-boot.* files from existing generated folder to this specific folder and then execute build.sh script.
Build instructions for SD image for BPIR4.
...