RDK Resources
[*RDK Preferred*]
Code Management Facility
RDK Forums
[RDK Conferences]
RDK Support
Archives
Papers & Presentations Archive
...
Bananapi r4 follows a atf (arm-trusted firmware) flow for device bootup, by default flash memory is present in the device which will be loaded with BL1 and BL1 will be having bl2 address to load bl2 and make device up.
Device bootup flow as mentioned
...
below.
draw.io Diagram | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
a)BL1: Bootloader one which will be part of flash memory of bpir4 , it will be holding address for bl2.
b)BL2: Bootloader two need to be generated and loaded in a specified sector so that bl1 can load bl2.
c)fip: Firmware image Package which contains firmware components eg bl31.
d)Kernel: Layer which will be acting between hardware and OS.
e)RDKB : RDKB stack or RDKB OS for user interaction.
"Kernel and rdkb rootfs will be generated as part BPIR4 build instructions"
Used below mentioned git repo for generating bl2.img and fip.bin file.
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 cloned mentioned git code "https://github.com/frank-w/u-boot/tree/2024-04-bpi" , and made below mentioned changes in u-boot env file to make boot-loader compatible in loading kernel and rdkb os at initial boot-up itself.
...
After making changes just executed executed build.sh script file. After complete execution of this script file, we can see u-boot.* files will be generated in specific folder.
...
heam@Dell-OptiPlex-9020:~/bootloader/atf/u-boot/build/mt7988/release$ ls
bl2 bl2.bin bl2.img bl31 bl31.bin fdts fip.bin lib libc libfdt libwrapper romlib
Generated bl2.img and fip.bin files need to be include in meta-cmf-bananapi layer.
Code Block | ||||||
---|---|---|---|---|---|---|
collapse
| ||||||
repo init -u https://code.rdkcentral.com/r/manifests -b kirkstone -m rdkb-bpi-extsrc.xml repo sync -j `nproc` --no-clone-bundle --no-tags MACHINE=bananapi4-rdk-broadband BPI_IMG_TYPE=sdmmc source meta-cmf-bananapi/setup-environment-refboard-rdkb bitbake rdk-generic-broadband-image |
Image generating steps for BPIR4.
After completion of build go to deploy folder and execute "bpir4_sd_image_creater.sh" script file, to generate final sdcard image.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
#!/bin/bash
board="bpi-r4"
device="sdmmc"
OS="rdk-broadband-image"
IMGDIR=.
IMGNAME=${board}_${device}_${OS} --> Image name format
LDEV=`sudo losetup -f` --> Command to find available loob device in pc.
REALSIZE=7456
echo "create $IMGNAME.img"
dd if=/dev/zero of=$IMGDIR/$IMGNAME.img bs=1M count=$REALSIZE 1> /dev/null 2>&1
LDEV=`sudo losetup -f`
DEV=`echo $LDEV | cut -d "/" -f 3` #mount image to loop device
echo "run losetup to assign image $IMGNAME.img to loopdev $LDEV ($DEV)"
sudo losetup $LDEV $IMGDIR/$IMGNAME.img 1> /dev/null #2>&1
bootstart=17408
bootsize=100
rootsize=6600
bootend=$(( ${bootstart}+(${bootsize}*1024*2)-1 ))
rootstart=$(( ${bootend}+1 ))
rootend=$(( ${rootstart} + (${rootsize}*1024*2) ))
sudo sgdisk -o ${LDEV}
sudo sgdisk -a 1 -n 1:34:8191 -A 1:set:2 -t 1:8300 -c 1:"bl2" ${LDEV}
sudo sgdisk -a 1 -n 2:13312:17407 -A 2:set:63 -t 2:8300 -c 2:"fip" ${LDEV}
sudo sgdisk -a 1024 -n 3:17408:${bootend} -t 3:8300 -c 3:"boot" ${LDEV}
sudo sgdisk -a 1024 -n 4:${rootstart}:${rootend} -t 4:8300 -c 4:"rootfs" ${LDEV}
sudo losetup -d $LDEV
sudo losetup -P $LDEV $IMGDIR/$IMGNAME.img 1> /dev/null #2>&1
sudo dd if=atf/bpi-r4_sdmmc_bl2.img of=${LDEV}p1 conv=notrunc,fsync #1> /dev/null 2>&1
sudo dd if=atf/bpi-r4_sdmmc_fip.bin of=${LDEV}p2 conv=notrunc,fsync #1> /dev/null 2>&1
sudo mkfs.vfat "${LDEV}p3" -n BPI-BOOT #1> /dev/null 2>&1
sudo mkfs.ext4 -O ^metadata_csum,^64bit "${LDEV}p4" -L BPI-ROOT #1> /dev/null 2>&1
sudo mount "${LDEV}p3" /mnt/
sudo cp fitImage /mnt/
sudo cp mt7988a-bananapi-bpi-r4-sd.dtb /mnt/
sudo umount "${LDEV}p3"
sudo dd if=rdk-generic-broadband-image-bananapi4-rdk-broadband.ext4 of=${LDEV}p4
sudo losetup -d $LDEV
echo "packing image..."
gzip $IMGDIR/$IMGNAME.img
|
Info regarding
script executionCode Block | ||||||
---|---|---|---|---|---|---|
| ||||||
bananapi4-rdk-broadband$ ./bpir4_sd_image_creater.sh create bpi-r4_sdmmc_rdk-broadband-image.img run losetup to assign image bpi-r4_sdmmc_rdk-broadband-image.img to loopdev /dev/loop24 (loop24) Creating new GPT entries in memory. Warning: The kernel is still using the old partition table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) The operation has completed successfully. Setting name! partNum is 0 Warning: The kernel is still using the old partition table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) The operation has completed successfully. Setting name! partNum is 1 Warning: The kernel is still using the old partition table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) The operation has completed successfully. Setting name! partNum is 2 Warning: The kernel is still using the old partition table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) The operation has completed successfully. Setting name! partNum is 3 Warning: The kernel is still using the old partition table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) The operation has completed successfully. 480+1 records in 480+1 records out 246069 bytes (246 kB, 240 KiB) copied, 0.165271 s, 1.5 MB/s 562+1 records in 562+1 records out 288153 bytes (288 kB, 281 KiB) copied, 0.0626902 s, 4.6 MB/s mkfs.fat 4.2 (2021-01-31) mke2fs 1.46.5 (30-Dec-2021) Discarding device blocks: done Creating filesystem with 1689600 4k blocks and 422656 inodes Filesystem UUID: 2ec68480-e1a2-4c40-aadb-b739a3edf4af Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done 539116+0 records in 539116+0 records out 276027392 bytes (276 MB, 263 MiB) copied, 2.14511 s, 129 MB/s packing image... heam@Dell-OptiPlex-9020:~/Downloads/BPIR4_latest_23_oct/bananapi4-rdk-broadband$ ls atf bpir4_sd_image_creater.sh bpi-r4_sdmmc_rdk-broadband-image.img.gz fitImage fitImage-1-5.4.271+git0+feeb59687b_3fec063b05-r0-bananapi4-rdk-broadband-20241023065547.bin fitImage-bananapi4-rdk-broadband.bin fitImage-its-1-5.4.271+git0+feeb59687b_3fec063b05-r0-bananapi4-rdk-broadband-20241023065547.its fitImage-its-bananapi4-rdk-broadband fitImage-linux.bin-1-5.4.271+git0+feeb59687b_3fec063b05-r0-bananapi4-rdk-broadband-20241023065547.bin fitImage-linux.bin-bananapi4-rdk-broadband hash-summary modules-1-5.4.271+git0+feeb59687b_3fec063b05-r0-bananapi4-rdk-broadband-20241023065547.tgz modules-bananapi4-rdk-broadband.tgz mt7988a-bananapi-bpi-r4-sd-1-5.4.271+git0+feeb59687b_3fec063b05-r0-bananapi4-rdk-broadband-20241023065547.dtb mt7988a-bananapi-bpi-r4-sd-bananapi4-rdk-broadband.dtb mt7988a-bananapi-bpi-r4-sd.dtb rdkb-generic-broadband-image_rdk-next_20241023114221.bin.ext4 rdkb-generic-broadband-image_rdk-next_20241023114221.bin.manifest rdkb-generic-broadband-image_rdk-next_20241023114221.bin.squashfs-xz rdkb-generic-broadband-image_rdk-next_20241023114221.testdata.json rdk-generic-broadband-image-bananapi4-rdk-broadband.ext4 rdk-generic-broadband-image-bananapi4-rdk-broadband.manifest rdk-generic-broadband-image-bananapi4-rdk-broadband.squashfs-xz rdk-generic-broadband-image-bananapi4-rdk-broadband-sysupgrade.bin rdk-generic-broadband-image-bananapi4-rdk-broadband.testdata.json heam@Dell-OptiPlex-9020:~/Downloads/BPIR4_latest_23_oct/bananapi4-rdk-broadband$ |
...
Image can be flashed to sdcard using dd command or balenaEtcher.
1)Image generated after execution of script "bpi-r4_sdmmc_rdk-broadband-image.img.gz"can be flashed directly to sdcard using dd command or balenaEtcher.
2)For 2nd time flashing you can follow below mentioned flashing instructions instead if executing script,but use existing sdcard only.
...