add ota rollbak,open security flags, update nvram and readme, add interprocess protocol

This commit is contained in:
Yunlong Xiao 2022-07-04 20:41:51 +08:00
parent 91c0610adc
commit 357941534f
22 changed files with 200 additions and 26 deletions

View File

@ -38,5 +38,6 @@ use usb burn all image
1. cd build/tmp/deploy/images/aud8516p1v2-consys-slc-128
2. sudo python flashimage.py -t
2. sudo python flashimage.py -t(erase sn)
sudo python flashimage.py(dont erase sn)
3. press v- key and plugin usb

View File

@ -23,7 +23,7 @@ QEMU_TARGETS = "arm aarch64 i386 x86_64"
# BB_NO_NETWORK = "${@int(os.path.isdir('${DL_DIR}/.git') == True)}"
BB_NO_NETWORK = "0"
LICENSE_FLAGS_WHITELIST = "commercial"
LICENSE_FLAGS_FFMPEG="yes"
LICENSE_FLAGS_FFMPEG="no"
LICENSE_FLAGS_GMRENDER="yes"
BB_NUMBER_THREADS = "12"

View File

@ -14,22 +14,22 @@ SYSTEMD_PACKAGES = "${PN}"
SYSTEMD_SERVICE_${PN} = "${@base_contains('BT_LAUNCHER_SUFFIX', '7668_', 'appmainprog_7668.service', 'appmainprog.service' ,d)}"
FILES_${PN} += "${@base_contains('BT_LAUNCHER_SUFFIX', '7668_', '${systemd_unitdir}/system/appmainprog_7668.service', '${systemd_unitdir}/system/appmainprog.service' ,d)}"
do_compile() {
cd ${S}/progs/app_cli && make
cd ${S}/progs/nvram_save && make
cd ${S}/progs/factoryrf && make
#do_compile() {
# cd ${S}/progs/app_cli && make
# cd ${S}/progs/nvram_save && make
# cd ${S}/progs/factoryrf && make
# cd ${S}/library/webrtc_aec && make
cd ${S}/progs/uart_control && make
}
# cd ${S}/progs/uart_control && make
#}
do_install() {
install -d ${D}/${libdir}
install -d ${D}${bindir}
install -d ${D}/etc
install -m 755 ${S}progs/app_cli/app_cli ${D}${bindir}
install -m 755 ${S}progs/nvram_save/nvram_save ${D}${bindir}
install -m 755 ${S}progs/factoryrf/factory_rf ${D}${bindir}
install -m 755 ${S}progs/uart_control/uart_control ${D}${bindir}
# install -m 755 ${S}progs/app_cli/app_cli ${D}${bindir}
# install -m 755 ${S}progs/nvram_save/nvram_save ${D}${bindir}
# install -m 755 ${S}progs/factoryrf/factory_rf ${D}${bindir}
# install -m 755 ${S}progs/uart_control/uart_control ${D}${bindir}
install -d ${D}${systemd_unitdir}/system
install -m 755 ${S}service/appmainprog.sh ${D}${bindir}
if test "${COMBO_CHIP_ID}" = "mt7668"; then

View File

@ -1,6 +1,6 @@
DESCRIPTION = "config-app"
LICENSE = "MediaTekProprietary"
DEPENDS+="bluetooth openssl libev json-c alsa-lib curl"
DEPENDS+="bluetooth openssl libev json-c"
APPS_SRC = "${TOPDIR}/../src/apps/aud-base/config_app"
inherit workonsrc systemd

View File

@ -1,7 +1,8 @@
#!/usr/bin/python
import os
procedures = {
#procedures = {
testprocedures = {
# product : fastboot args
'DEFAULT' : [['daWait'],
['fbWait'],
@ -35,7 +36,8 @@ bootprocedures = {
['fastboot', 'flash', 'USRDATA', 'userdata.ubi'] ]
}
testprocedures = {
#testprocedures = {
procedures = {
# product : fastboot args
'DEFAULT' : [['daWait'],
['fbWait'],

View File

@ -88,6 +88,9 @@ SECURITY_CFLAGS_pn-uclibc = ""
SECURITY_CFLAGS_pn-uclibc-initial = ""
SECURITY_CFLAGS_pn-valgrind = ""
SECURITY_CFLAGS_pn-zlib = "${SECURITY_NO_PIE_CFLAGS}"
SECURITY_CFLAGS_pn-config-app = "${SECURITY_NO_PIE_CFLAGS}"
SECURITY_CFLAGS_pn-appmainprog = ""
SECURITY_CFLAGS_pn-bluetooth = ""
SECURITY_CFLAGS_pn-zeromq = "${SECURITY_NO_PIE_CFLAGS}"
SECURITY_CFLAGS_pn-softhsm2 += " -fPIC"

View File

@ -38,11 +38,11 @@ config_app启动后的log实时保存在/tmp/config.log可实时查看
1:adb push nvram_helper.bin /tmp/
2:write key:
dev1:
adb shell /tmp/nvram_helper.bin -w robosen RBS1234567890124,FC:A4:7A:E0:4E:73,FC:A4:7A:E0:4E:74,66d79ee5-e553-4615-b03c-ac013fb58a56,35e6d575-e607-43ed-a26b-6d56fdf9a46acbc9bf46-c3ca-48d2-98aa-d91d9d6142c0
adb shell /tmp/nvram_helper.bin -w robosen RBS1234567890124,101001,FC:A4:7A:E0:4E:73,FC:A4:7A:E0:4E:74,66d79ee5-e553-4615-b03c-ac013fb58a56,35e6d575-e607-43ed-a26b-6d56fdf9a46acbc9bf46-c3ca-48d2-98aa-d91d9d6142c0
dev2:
adb shell /tmp/nvram_helper.bin -w robosen RBS1234567890125,FC:A4:7A:E0:4E:74,FC:A4:7A:E0:4E:75,abad1041-8723-4baf-af6f-8f68c7b5689d,3db4d740-356f-46a8-b122-7cb016a1039ec678e9dd-6092-4bb1-8a43-1d87d7b3b2ab
adb shell /tmp/nvram_helper.bin -w robosen RBS1234567890125,101001,FC:A4:7A:E0:4E:74,FC:A4:7A:E0:4E:75,abad1041-8723-4baf-af6f-8f68c7b5689d,3db4d740-356f-46a8-b122-7cb016a1039ec678e9dd-6092-4bb1-8a43-1d87d7b3b2ab
dev3:
adb shell /tmp/nvram_helper.bin -w robosen RBS1234567890126,FC:A4:7A:E0:4E:75,FC:A4:7A:E0:4E:76,dea3057f-6f11-480d-a937-a9f3a11cfad8,fb6212be-1155-4629-a158-ae33fe72736e33ccb202-4339-4cd5-8bb5-092dbedf4b82
adb shell /tmp/nvram_helper.bin -w robosen RBS1234567890126,101001,FC:A4:7A:E0:4E:75,FC:A4:7A:E0:4E:76,dea3057f-6f11-480d-a937-a9f3a11cfad8,fb6212be-1155-4629-a158-ae33fe72736e33ccb202-4339-4cd5-8bb5-092dbedf4b82
dev4:
adb shell /tmp/nvram_helper.bin -w robosen RBS1234567890127,FC:A4:7A:E0:4E:76,FC:A4:7A:E0:4E:77,80a7aae0-bc18-4774-8e38-d53738497b8e,ebd83f2f-7bd0-4f14-9e34-30c931f2cbdd95e0cc43-7649-43b8-82d5-1a49f6a522a5
adb shell /tmp/nvram_helper.bin -w robosen RBS1234567890127,101001,FC:A4:7A:E0:4E:76,FC:A4:7A:E0:4E:77,80a7aae0-bc18-4774-8e38-d53738497b8e,ebd83f2f-7bd0-4f14-9e34-30c931f2cbdd95e0cc43-7649-43b8-82d5-1a49f6a522a5
3:reboot

View File

@ -72,11 +72,12 @@ struct boot_flag
unsigned int usea;
unsigned int useb;
unsigned int current;
unsigned int secver;
};
extern int errno;
u32 set_currently_boot_flag(int last_flag, u32 current_flag, const char *part_name)
u32 set_currently_boot_flag(int last_flag, u32 current_flag, u32 def_ver,const char *part_name)
{
int ret = 0;
long len = 0;
@ -106,6 +107,9 @@ u32 set_currently_boot_flag(int last_flag, u32 current_flag, const char *part_na
set_flag.current = current_flag;
set_flag.usea = -1;
set_flag.useb = -1;
if(def_ver>0){
set_flag.secver = def_ver;
}
memset(buf, 0, writesize);
memcpy(buf, (void*)&set_flag, sizeof(boot_flag));
@ -118,7 +122,7 @@ u32 set_currently_boot_flag(int last_flag, u32 current_flag, const char *part_na
ret = -1;
goto err;
}
dprintf(CRITICAL, "set flag: lastboot = %d, use A = %d, use B = %d, current = %d\n", set_flag.lastboot, set_flag.usea, set_flag.useb, set_flag.current);
dprintf(CRITICAL, "set flag: lastboot = %d, use A = %d, use B = %d, current = %d secver = %d\n", set_flag.lastboot, set_flag.usea, set_flag.useb, set_flag.current,set_flag.secver);
if (buf) {
free(buf);
buf = NULL;
@ -132,11 +136,47 @@ err:
return ret;
}
u32 updata_secver(boot_flag set_flag)
{
int ret = 0;
long len = 0;
u32 writesize = 2048;
int index = -1;
unsigned long long ptn = 0;
unsigned long long size = 0;
char *buf;
buf = malloc(writesize);
memset(buf, 0, writesize);
memcpy(buf, (void*)&set_flag, sizeof(boot_flag));
/* read partition */
struct bdev *nand_MISC = bio_open_by_label("MISC");
/* write buf to offset 0, which size is 2048 */
len = bio_write(nand_MISC, (char*)buf, 0, (u32)writesize);
if (len <= 0) {
dprintf(CRITICAL, "nand write fail, return : %d, error: \n",len, strerror(errno));
dprintf(CRITICAL, "buf: %s\n", buf);
ret = -1;
goto err;
}
dprintf(CRITICAL, "update set flag: lastboot = %d, use A = %d, use B = %d, current = %d secver = %d\n", set_flag.lastboot, set_flag.usea, set_flag.useb, set_flag.current,set_flag.secver);
if (buf) {
free(buf);
buf = NULL;
}
return 0;
err:
if (buf) {
free(buf);
buf = NULL;
}
return ret;
}
u32 check_boot_partition(const char *part_name)
{
int ret = 0;
boot_flag flag;
u32 boot = 0;
u32 defver = 0;
struct bdev *nand_MISC = bio_open_by_label("MISC");
int len = -1;
@ -186,12 +226,13 @@ u32 check_boot_partition(const char *part_name)
} else {
dprintf(CRITICAL, "boot flag is not match, use default boot partition\n");
boot = 0;
defver = 101001;
}
if ((flag.current != boot) || (flag.usea == UPG_SUCCEED) || (flag.useb == UPG_SUCCEED)) {
ret = bio_erase(nand_MISC, 0, 0x20000); //erase one block
printf("bio erase ret %d\n", ret);
ret = set_currently_boot_flag(flag.lastboot, boot, part_name);
ret = set_currently_boot_flag(flag.lastboot, boot,defver , part_name);
if(ret!=0)
dprintf(CRITICAL, "set flags fail. LINE: %d\n", __LINE__);
}
@ -202,6 +243,74 @@ u32 check_boot_partition(const char *part_name)
return boot;
}
u32 rollback_check_secure_ver()
{
u32 nvdataver = 0;
struct bdev *nand_NVRAM = bio_open_by_label("NVRAM");
int len = -1;
//char *buf;
if (!nand_NVRAM) {
printf("failed to open NVRAM\n");//todo
return 0;//open error
}
printf("open NVRAM successfully\n");
/* read partition */
len = bio_read(nand_NVRAM, &nvdataver, 0x2026A, sizeof(nvdataver));
if (len < 0) {
dprintf(CRITICAL, " nvdataver read error. LINE: %d\n", __LINE__);
return 0;//Minimum Version
}
if(nvdataver > 101001 && nvdataver < 999999)
{
printf("read nvram ver fine:%d \n",nvdataver);
}else if(nvdataver == 0 || nvdataver == 0xFFFFFFFF)
{
dprintf(CRITICAL, " nvdataver empty. LINE: %d\n", __LINE__);
return 100000;//Minimum Version
}else{
dprintf(CRITICAL, " nvdataver error %d. LINE: %d\n",nvdataver, __LINE__);
return 0;
}
printf("read nvram ver:%d \n",nvdataver);
return nvdataver;
}
void rollback_check_update_secure_ver(u32 firmver)
{
;
}
int rollback_check(unsigned int firmver)
{
int ret = 0;
u32 secver = 0;
if(firmver == 0 ){
printf("firmver failed \n");
return -1;
}
secver = rollback_check_secure_ver();
printf("rollback check secver:%d firmver %d \n",secver,firmver);
if(secver == 0 ){
printf("read secver failed \n");
return -1;
}
if(firmver<secver){
printf("ERROR:rollback check this is low version, boot failed \n");
return -1;
}else if(firmver>=secver){
printf("rollback check ok\n");
rollback_check_update_secure_ver(firmver);
}
return 0;
}
U32 swapInt32( U32 value )
{
return ((value & 0x000000FF) << 24) |
@ -421,6 +530,25 @@ static int cmdlineoverlay(void* boot_dtb, char* cmdline, int len)
return 0;
}
static unsigned int get_firmware_version(void* boot_dtb, char* cmdline, int len)
{
int version_node_offset = 0;
int ret = -1;
ret = extract_fdt(boot_dtb, MAX_DTB_SIZE);
if (ret != 0) {
dprintf(CRITICAL, "extract_fdt error.\n");
return 0;
}
version_node_offset = fdt_path_offset(boot_dtb, "/version");
char *ver_read;
int lenth;
ver_read = fdt_getprop(boot_dtb, version_node_offset, "ver", &lenth);
unsigned int ver = atoi(ver_read);
dprintf(CRITICAL, "dtsi cmdline: %s ,lenth:%d ,ver:%d\n", ver_read, strlen(ver_read),ver);
return ver;
}
static bool download_check(void)
{
@ -530,6 +658,7 @@ static void fitboot_task(const struct app_descriptor *app, void *args)
thread_t *tz_t, *bootimg_t;
int ret_tz, ret_bootimg;
int ret;
unsigned int firmware_version;
u32 boot_mode = NORMAL_BOOT;
uint bl33[] = { 0xea000005, /* b BL33_32_ENTRY | ands x5, x0, x0 */
@ -644,6 +773,14 @@ static void fitboot_task(const struct app_descriptor *app, void *args)
if (cmd_ret)
emmc_cmdlineoverlay((void *)bootimg.dtb_load, NULL, 0); //from b partition,need to set
}
#if 1//ENABLE_ROLLBACK_CHECK
firmware_version = get_firmware_version((void *)bootimg.dtb_load, NULL, 0);
ret = rollback_check(firmware_version);
if (ret==-1) {
dprintf(CRITICAL, "check_version failed\n");
return;
}
#endif
/* check if dtbo is existed */
ret = fit_get_image(DTBO_PART_NAME, &fit, dtbo_buf);
if (ret == 0) {
@ -679,6 +816,7 @@ static void fitboot_task(const struct app_descriptor *app, void *args)
}
}
/* load bl33 for tz to jump*/
extern __WEAK paddr_t kvaddr_to_paddr(void *ptr);
addr_t fdt_pa = kvaddr_to_paddr?kvaddr_to_paddr((void *)bootimg.dtb_load):bootimg.dtb_load;

View File

@ -27,3 +27,6 @@ $(MAKECMDGOALS) _top:
@$(MAKE) -C $(LKMAKEROOT) -rR -f $(LKROOT)/engine.mk $(addprefix -I,$(LKINC)) $(MAKECMDGOALS)
.PHONY: _top
clean:
find . -name "*.o"

View File

@ -40,6 +40,9 @@
chosen {
bootargs = "console=tty0 console=ttyS0,921600n1 earlycon=uart8250,mmio32,0x11005000 ubi.mtd=8 root=ubi0:aud8516p1v2-consys-slc-128-rootfs rootfstype=ubifs vmalloc=496M androidboot.hardware=aud8516p1_linux";
};
version {
ver= "101001";
};
/* sensor standardization */
cust_accel@0 {
@ -464,6 +467,12 @@
default-brightness-level = <100>;
status = "okay";
};
ms1112_dev@48 {
compatible = "relmon,ms1112";
reg = <0x48>;
status = "ok";
};
};

View File

@ -2,7 +2,7 @@
#define _CFG_CUSTOM1_D_H
File_Custom1_Struct stCustom1Default = {
1
0x35,0x35,0x35,0x35,0x35,0x35,0x00,
};
#endif

View File

@ -51,7 +51,7 @@ PRODUCT_INFO stPRODUCT_INFOConfigDefault = {
/*{*/0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0/*}*/,0x0,0x0,
/*{*/0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0/*}*/,0x0,0x0/*}*/,
/* reserved */
/*{*/0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*1*/
/*{*/0x000000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*1*/
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

View File

@ -2,7 +2,7 @@
#define _CFG_CUSTOM1_FILE_H
typedef struct {
unsigned int Array[1];
char Array[7];
} File_Custom1_Struct;
#define CFG_FILE_CUSTOM1_REC_SIZE sizeof(File_Custom1_Struct)

View File

@ -46,7 +46,8 @@ typedef struct {
typedef struct {
unsigned char barcode[64];
nvram_ef_imei_imeisv_struct IMEI[4];
unsigned char reserved[1024-40-64];
unsigned int version;
unsigned char reserved[1024-40-64-4];
} PRODUCT_INFO;
//the record size and number of PRODUCT_INFO nvram file

View File

@ -50,6 +50,8 @@
#include "../cfgdefault/CFG_XoCap_Default.h"
#include "../cfgfileinc/CFG_Ethernet_File.h"
#include "../cfgdefault/CFG_Ethernet_Default.h"
#include "../cfgfileinc/CFG_Custom1_File.h"
#include "../cfgdefault/CFG_Custom1_Default.h"
#include <stdio.h>
#ifdef __cplusplus
extern "C"
@ -170,6 +172,11 @@ const TCFG_FILE g_akCFG_File_Custom[]= {
"/data/nvram/APCFG/APRDEB/ETHERNET", VER(AP_CFG_RDED_ETHERNET_CUSTOM_LID), CFG_FILE_ETHERNET_REC_SIZE,
CFG_FILE_ETHERNET_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stEthernetDefault, DataReset , NULL
},
{
"/data/nvram/APCFG/APRDEB/FILE_CUSTOM1", VER(AP_CFG_CUSTOM_FILE_CUSTOM1_LID), CFG_FILE_CUSTOM1_REC_SIZE,
CFG_FILE_CUSTOM1_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stCustom1Default, DataReset , NULL
},
};
int iNvRamFileMaxLID=AP_CFG_CUSTOM_FILE_MAX_LID;

View File

@ -99,6 +99,7 @@ typedef enum {
AP_CFG_RDCL_FILE_AUDIO_HAC_PARAM_LID,
AP_CFG_CUSTOM_FILE_XOCAP_LID,
AP_CFG_RDED_ETHERNET_CUSTOM_LID,
AP_CFG_CUSTOM_FILE_CUSTOM1_LID,
AP_CFG_CUSTOM_FILE_MAX_LID,
} CUSTOM_CFG_FILE_LID;

View File

@ -180,6 +180,12 @@ LID_BIT VER_LID(AP_CFG_RDED_ETHERNET_CUSTOM_LID)
File_Ethernet_Struct *CFG_FILE_ETHERNET_REC_TOTAL {
};
LID_BIT VER_LID(AP_CFG_CUSTOM_FILE_CUSTOM1_LID)
File_Custom1_Struct *CFG_FILE_CUSTOM1_REC_TOTAL {
};
END_NVRAM_DATA
#endif /* CUSTOM_NVRAM_DATA_ITEM_H */

View File

@ -285,6 +285,9 @@ FileName aBackupToBinRegion[]= {
#endif
{"XOCAP", AP_CFG_CUSTOM_FILE_XOCAP_LID},
{"ETHERNET", AP_CFG_RDED_ETHERNET_CUSTOM_LID},
#if 1
{"CUSTOM1", AP_CFG_CUSTOM_FILE_CUSTOM1_LID},
#endif
};
FileName aPerformance[]= {
{"CAMERA_Para",AP_CFG_RDCL_CAMERA_PARA_LID},

Binary file not shown.