From 3b42c7c6d52057cb644864992e93f29d254a25e6 Mon Sep 17 00:00:00 2001 From: sun_fan Date: Thu, 14 Oct 2021 22:53:23 +0800 Subject: [PATCH] device_hisilicon_third_party_uboot: add ramdisk Signed-off-by: sun_fan --- .../board/hisilicon/hi3516dv300/hi3516dv300.c | 25 ++++++++------ u-boot-2020.01/common/image.c | 33 +++++++++++++++++++ 2 files changed, 48 insertions(+), 10 deletions(-) diff --git a/u-boot-2020.01/board/hisilicon/hi3516dv300/hi3516dv300.c b/u-boot-2020.01/board/hisilicon/hi3516dv300/hi3516dv300.c index ad645a12d6..318fd1cefa 100755 --- a/u-boot-2020.01/board/hisilicon/hi3516dv300/hi3516dv300.c +++ b/u-boot-2020.01/board/hisilicon/hi3516dv300/hi3516dv300.c @@ -438,6 +438,7 @@ static int g_isRecovery = 0; #define ARG_SZ 1000 #define MMC_LENGTH 7 #define UPDATE_BOOT_LENGTH 12 +#define FLASH_BOOT_LENGTH 10 #define MIN_BOOTARGS_LENGTH 10 #define PARTITION_INFO_POS 1144 #define PARTITION_INFO_MAX_LENGTH 256 @@ -465,22 +466,22 @@ static void ChangeBootArgs(void) // get bootargs from emmc } } -static int EmmcInitParam(void) // get "boot_updater" string in misc,then set env +int EmmcInitParam(void) // get "boot_updater" string in misc,then set env { const char rebootHead[] = "mem=640M console=ttyAMA0,115200 mmz=anonymous,0,0xA8000000,384M " - "clk_ignore_unused androidboot.selinux=permissive skip_initramfs rootdelay=10 init=/init " - "root=/dev/mmcblk0p5 rootfstype=ext4 ro blkdevparts="; + "clk_ignore_unused androidboot.selinux=permissive skip_initramfs rootdelay=10 hardware=Hi3516DV300 init=/init " + "root=/dev/ram0 blkdevparts="; const char defaultRebootStr[] = "mem=640M console=ttyAMA0,115200 mmz=anonymous,0,0xA8000000,384M " - "clk_ignore_unused androidboot.selinux=permissive skip_initramfs rootdelay=10 init=/init root=/dev/mmcblk0p5 " - "rootfstype=ext4 ro blkdevparts=mmcblk0:1M(boot),15M(kernel),20M(updater)," + "clk_ignore_unused androidboot.selinux=permissive skip_initramfs rootdelay=10 hardware=Hi3516DV300 init=/init " + "root=/dev/ram0 blkdevparts=mmcblk0:1M(boot),15M(kernel),20M(updater)," "1M(misc),3307M(system),256M(vendor),-(userdata)"; const char updaterHead[] = "mem=640M console=ttyAMA0,115200 mmz=anonymous,0,0xA8000000,384M clk_ignore_unused " "androidboot.selinux=permissive skip_initramfs " - "rootdelay=10 init=/init root=/dev/mmcblk0p3 rootfstype=ext4 rw blkdevparts="; + "rootdelay=10 hardware=Hi3516DV300 init=/init root=/dev/mmcblk0p3 rootfstype=ext4 rw blkdevparts="; const char defaultUpdaterStr[] = "mem=640M console=ttyAMA0,115200 mmz=anonymous,0,0xA8000000,384M " - "clk_ignore_unused androidboot.selinux=permissive skip_initramfs " - "rootdelay=10 init=/init root=/dev/mmcblk0p3 rootfstype=ext4 rw blkdevparts=mmcblk0:1M(boot)," - "15M(kernel),20M(updater),1M(misc),3307M(system),256M(vendor),-(userdata)"; + "clk_ignore_unused androidboot.selinux=permissive skip_initramfs rootdelay=10 hardware=Hi3516DV300 init=/init " + "root=/dev/mmcblk0p3 rootfstype=ext4 rw blkdevparts=mmcblk0:1M(boot),15M(kernel),20M(updater)," + "1M(misc),3307M(system),256M(vendor),-(userdata)"; char block2[EMMC_SECTOR_SIZE*EMMC_SECTOR_CNT]; if (BlkDevRead(block2, MISC_LOCATION*(M_1/EMMC_SECTOR_SIZE), EMMC_SECTOR_CNT) < 0) { return -1; @@ -494,7 +495,11 @@ static int EmmcInitParam(void) // get "boot_updater" string in misc block2[PARTITION_INFO_POS] = block2[PARTITION_INFO_POS] == (char)-1 ? 0 : block2[PARTITION_INFO_POS]; block2[PARTITION_INFO_POS + PARTITION_INFO_MAX_LENGTH] = 0; - g_isRecovery = memcmp(p->command, "boot_updater", UPDATE_BOOT_LENGTH) ? 0 : 1; + g_isRecovery = 0; + if ((memcmp(p->command, "boot_updater", UPDATE_BOOT_LENGTH) == 0) + || (memcmp(p->command, "boot_flash", FLASH_BOOT_LENGTH) == 0)) { + g_isRecovery = 1; + } unsigned int partitionStrLen = strlen(&block2[PARTITION_INFO_POS]); if (memcmp(&block2[PARTITION_INFO_POS], "mmcblk0", MMC_LENGTH)) { diff --git a/u-boot-2020.01/common/image.c b/u-boot-2020.01/common/image.c index eb626dcac9..617f5f7164 100644 --- a/u-boot-2020.01/common/image.c +++ b/u-boot-2020.01/common/image.c @@ -1025,6 +1025,34 @@ int genimg_has_config(bootm_headers_t *images) return 0; } +extern int EmmcInitParam(); + +static int fit_change_bootargs(ulong rd_data, ulong rd_len) +{ + int len = 0; + char *bootargs; + char *newbootargs; + char str[30]; + + sprintf(str, " initrd=0x%lx,0x%lx", rd_data , rd_len); + bootargs = env_get("bootargs"); + if (bootargs) + len += strlen(bootargs); + + newbootargs = malloc(len + sizeof(str)); + if (!newbootargs) { + puts("Error: malloc in newbootargs failed!\n"); + return -ENOMEM; + } + + if (bootargs) { + strcpy(newbootargs, bootargs); + strcat(newbootargs, str); + } + env_set("bootargs", newbootargs); + return 0; +} + /** * boot_get_ramdisk - main ramdisk handling routine * @argc: command argument count @@ -1176,6 +1204,11 @@ int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images, images->fit_hdr_rd = map_sysmem(rd_addr, 0); images->fit_uname_rd = fit_uname_ramdisk; images->fit_noffset_rd = rd_noffset; + + if (!EmmcInitParam()){ + if(fit_change_bootargs(rd_data, rd_len)) + printf("Error additional bootargs fail!\n"); + } break; #endif #ifdef CONFIG_ANDROID_BOOT_IMAGE -- Gitee