diff --git a/action_technology_sdk/hello_world/CMakeLists.txt b/action_technology_sdk/hello_world/CMakeLists.txt
new file mode 100644
index 00000000..767dbd87
--- /dev/null
+++ b/action_technology_sdk/hello_world/CMakeLists.txt
@@ -0,0 +1,10 @@
+cmake_minimum_required(VERSION 3.13.1)
+
+find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
+project(hello_world)
+
+add_subdirectory(src)
+
+if(CONFIG_STACK_CANARIES)
+ zephyr_library_compile_options(-DAPP_BT_WATCH -fstack-protector-all)
+endif()
diff --git a/action_technology_sdk/hello_world/Kconfig b/action_technology_sdk/hello_world/Kconfig
new file mode 100644
index 00000000..f78ee453
--- /dev/null
+++ b/action_technology_sdk/hello_world/Kconfig
@@ -0,0 +1,7 @@
+
+mainmenu "lvgl demo"
+
+source "Kconfig.zephyr"
+
+menu "App Configuration"
+endmenu
diff --git a/action_technology_sdk/hello_world/boards/ats3085e_dev_watch_ext_nor.conf b/action_technology_sdk/hello_world/boards/ats3085e_dev_watch_ext_nor.conf
new file mode 100644
index 00000000..66aa8b29
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3085e_dev_watch_ext_nor.conf
@@ -0,0 +1,36 @@
+CONFIG_LV_VDB_SIZE=36348
+CONFIG_UI_GUI_MEM_POOL_SIZE=391216
+CONFIG_UI_RES_MEM_POOL_SIZE=0
+#CONFIG_BITMAP_PER_FONT_CACHE_SIZE=16552
+CONFIG_BITMAP_FONT_CACHE_POOL_SIZE=0
+CONFIG_FREETYPE_FONT_BITMAP_BPP=2
+CONFIG_FREETYPE_PER_FONT_CACHE_SIZE=24576
+CONFIG_FREETYPE_FONT_ENABLE_MEMORY_FACE=y
+CONFIG_FREETYPE_FONT_MAX_FACES=2
+CONFIG_FREETYPE_FONT_MAX_SIZES=3
+CONFIG_FREETYPE_FONT_SHAPE_CACHE_SIZE=0
+
+CONFIG_SPINAND_ACTS=n
+CONFIG_SPINAND_LIB=n
+
+CONFIG_DISK_ACCESS_NOR=y
+
+CONFIG_IPMSG_BTC_FCC_NAME="/NOR:K/fcc.bin"
+
+CONFIG_USER_WORK_Q=y
+CONFIG_USER_WORK_Q_PRIORITY=8
+
+CONFIG_DVFS=y
+CONFIG_ACTS_DVFS_DYNAMIC_LEVEL=y
+
+CONFIG_SENSOR_ALGO_MOTION_CYWEE_IN_RAM=n
+
+CONFIG_USB_DEVICE=n
+CONFIG_USB_AOTG_OTG=n
+CONFIG_USB_AOTG_DC_ENABLED=n
+CONFIG_USB_AOTG_OTG_VERSION=0x551A24CF
+CONFIG_USB_DEVICE_DRIVER=n
+CONFIG_USB_DEVICE_STACK=n
+CONFIG_USB_MASS_STORAGE=n
+CONFIG_HAVE_CUSTOM_LINKER_SCRIPT=y
+CONFIG_CUSTOM_LINKER_SCRIPT="linker_no_psram.ld"
\ No newline at end of file
diff --git a/action_technology_sdk/hello_world/boards/ats3085s4_dev_watch_ext_nor.conf b/action_technology_sdk/hello_world/boards/ats3085s4_dev_watch_ext_nor.conf
new file mode 100644
index 00000000..3aae798f
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3085s4_dev_watch_ext_nor.conf
@@ -0,0 +1,45 @@
+CONFIG_LV_VDB_SIZE=108608
+CONFIG_UI_GUI_MEM_POOL_SIZE=49152
+CONFIG_UI_RES_MEM_POOL_SIZE=0
+#CONFIG_BITMAP_PER_FONT_CACHE_SIZE=16552
+CONFIG_BITMAP_FONT_CACHE_POOL_SIZE=180000
+CONFIG_FREETYPE_FONT_BITMAP_BPP=2
+CONFIG_FREETYPE_PER_FONT_CACHE_SIZE=40960
+CONFIG_FREETYPE_FONT_ENABLE_MEMORY_FACE=y
+CONFIG_FREETYPE_FONT_MAX_FACES=2
+CONFIG_FREETYPE_FONT_MAX_SIZES=3
+CONFIG_FREETYPE_FONT_SHAPE_CACHE_SIZE=120000
+
+
+CONFIG_SPINAND_ACTS=n
+CONFIG_SPINAND_LIB=n
+
+CONFIG_VG_LITE=y
+CONFIG_VG_LITE_K_MEM_POOL_SIZE=172032
+
+CONFIG_DISK_ACCESS_NOR=y
+
+CONFIG_IPMSG_BTC_FCC_NAME="/NOR:K/fcc.bin"
+
+CONFIG_USER_WORK_Q=y
+CONFIG_USER_WORK_Q_PRIORITY=8
+
+CONFIG_UI_MEM_VDB_SHARE_SURFACE_BUFFER=y
+
+CONFIG_DVFS=y
+CONFIG_ACTS_DVFS_DYNAMIC_LEVEL=y
+
+CONFIG_SENSOR_ALGO_MOTION_CYWEE_IN_RAM=n
+
+CONFIG_USB_DEVICE=n
+CONFIG_USB_AOTG_OTG=n
+CONFIG_USB_AOTG_DC_ENABLED=n
+CONFIG_USB_AOTG_OTG_VERSION=0x551A24CF
+CONFIG_USB_DEVICE_DRIVER=n
+CONFIG_USB_DEVICE_STACK=n
+CONFIG_USB_MASS_STORAGE=n
+
+CONFIG_HAVE_CUSTOM_LINKER_SCRIPT=y
+CONFIG_CUSTOM_LINKER_SCRIPT="linker_psram_4m.ld"
+
+
diff --git a/action_technology_sdk/hello_world/boards/ats3085s4_dev_watch_ext_nor/firmware.xml b/action_technology_sdk/hello_world/boards/ats3085s4_dev_watch_ext_nor/firmware.xml
new file mode 100644
index 00000000..ff2e67b5
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3085s4_dev_watch_ext_nor/firmware.xml
@@ -0,0 +1,356 @@
+
+
+ Firmware layout for leopard
+ 0x2000000
+
+
+ 0x10000
+ 0x10000
+ 1.00_$(build_time)
+
+
+
+
+
+ 0x0
+ 0x1000
+ BOOT
+ fw0_boot
+ 1
+ mbrec.bin
+ 0x0
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x1000
+ 0x1000
+ SYS_PARAM
+ fw0_param
+ 2
+ param.bin
+ 0x1000
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x2000
+ 0x1000
+ BOOT
+ fw1_boot
+ 1
+ 0x2000
+ false
+ false
+ false
+ false
+ false
+ 1
+
+
+
+ 0x3000
+ 0x1000
+ SYS_PARAM
+ fw1_param
+ 2
+ 0x3000
+ false
+ false
+ false
+ false
+ false
+ 1
+
+
+
+ 0x4000
+ 0x20000
+ RECOVERY
+ fw0_rec
+ 3
+ recovery.bin
+ 0x4000
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x24000
+ 0x1B7000
+ SYSTEM
+ fw0_sys
+ 4
+ app.bin
+ 0x24000
+ false
+ false
+ true
+ true
+ true
+ TEMP
+ 0
+ 0
+
+
+
+ 0x1db000
+ 0x10000
+ DATA
+ fw0_sdfs
+ 5
+ sdfs.bin
+ 0x1db000
+ false
+ false
+ true
+ true
+ true
+ TEMP
+ 0
+ 0
+
+
+
+ 0x1eb000
+ 0x1000
+ DATA
+ nvram_factory
+ 6
+ nvram.bin
+ 0x1eb000
+ false
+ false
+ false
+ true
+ true
+ 0
+
+
+
+ 0x1ec000
+ 0x2000
+ DATA
+ nvram_factory_rw
+ 7
+ 0x1ec000
+ false
+ false
+ false
+ false
+ false
+ 0
+
+
+ 0x1ee000
+ 0x2000
+ DATA
+ nvram_user
+ 8
+ 0x1ee000
+ false
+ false
+ false
+ false
+ false
+
+
+
+ 0x1F0000
+ 0x12000
+ DATA
+ user_rw
+ 9
+ 0x1F0000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0x202000
+ 0x4000
+ DATA
+ logbuf
+ 251
+ 0x202000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0x206000
+ 0x2000
+ DATA
+ evtbuf
+ 252
+ 0x206000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0x208000
+ 0xa000
+ DATA
+ coredump
+ 253
+ 0x208000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+
+ 0x212000
+ 0x200000
+ DATA
+ res_a
+ 10
+ res.bin
+ 0x212000
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x412000
+ 0x600000
+ DATA
+ font
+ 12
+ fonts.bin
+ 0x412000
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0xa12000
+ 0x2E000
+ DATA
+ res_b
+ 11
+ 0xa12000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0xa40000
+ 0x80000
+ DATA
+ sdfs_k
+ 20
+ sdfs_k.bin
+ 0xa40000
+ false
+ false
+ false
+ false
+ true
+ 0
+ 0
+
+
+
+ 0xac0000
+ 0x100000
+ TEMP
+ fw0_temp
+ 254
+ 0xac0000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0xbc0000
+ 0x10000
+ DATA
+ runtimelog
+ 250
+ 0xbc0000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0xbd0000
+ 0x430000
+ DATA
+ udisk
+ 40
+ udisk.bin
+ 0xbd0000
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
diff --git a/action_technology_sdk/hello_world/boards/ats3085s4_dev_watch_ext_nor/fwimage.cfg b/action_technology_sdk/hello_world/boards/ats3085s4_dev_watch_ext_nor/fwimage.cfg
new file mode 100644
index 00000000..3c11aefa
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3085s4_dev_watch_ext_nor/fwimage.cfg
@@ -0,0 +1,2 @@
+
+CHIP_NAME = "ATS3085S";
diff --git a/action_technology_sdk/hello_world/boards/ats3085s4_dev_watch_ext_nor/sdfs_k/adMUSIC.dsp b/action_technology_sdk/hello_world/boards/ats3085s4_dev_watch_ext_nor/sdfs_k/adMUSIC.dsp
new file mode 100644
index 00000000..b07682fd
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3085s4_dev_watch_ext_nor/sdfs_k/adMUSIC.dsp differ
diff --git a/action_technology_sdk/hello_world/boards/ats3085s4_dev_watch_ext_nor/sdfs_k/logo.res b/action_technology_sdk/hello_world/boards/ats3085s4_dev_watch_ext_nor/sdfs_k/logo.res
new file mode 100644
index 00000000..791784fa
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3085s4_dev_watch_ext_nor/sdfs_k/logo.res differ
diff --git a/action_technology_sdk/hello_world/boards/ats3085s4_dev_watch_ext_nor/sdfs_k/logo.sty b/action_technology_sdk/hello_world/boards/ats3085s4_dev_watch_ext_nor/sdfs_k/logo.sty
new file mode 100644
index 00000000..02faf7c1
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3085s4_dev_watch_ext_nor/sdfs_k/logo.sty differ
diff --git a/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor.conf b/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor.conf
new file mode 100644
index 00000000..b4b18949
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor.conf
@@ -0,0 +1,31 @@
+CONFIG_LV_VDB_SIZE=108608
+CONFIG_UI_GUI_MEM_POOL_SIZE=98304
+CONFIG_UI_RES_MEM_POOL_SIZE=3000000
+CONFIG_BITMAP_PER_FONT_CACHE_SIZE=98304
+CONFIG_BITMAP_FONT_CACHE_POOL_SIZE=380000
+CONFIG_FREETYPE_FONT_BITMAP_BPP=2
+CONFIG_FREETYPE_PER_FONT_CACHE_SIZE=40960
+CONFIG_FREETYPE_FONT_ENABLE_MEMORY_FACE=y
+CONFIG_FREETYPE_FONT_MAX_FACES=2
+CONFIG_FREETYPE_FONT_MAX_SIZES=3
+CONFIG_FREETYPE_SHAPE_INFO_CACHE_SIZE=3072
+CONFIG_FREETYPE_FONT_SHAPE_CACHE_SIZE=120000
+
+
+CONFIG_SPINAND_ACTS=n
+CONFIG_SPINAND_LIB=n
+CONFIG_DISK_ACCESS_NOR=y
+CONFIG_VG_LITE=y
+CONFIG_VG_LITE_K_MEM_POOL_SIZE=172032
+
+
+CONFIG_IPMSG_BTC_FCC_NAME="/NOR:K/fcc.bin"
+
+CONFIG_USER_WORK_Q=y
+CONFIG_USER_WORK_Q_PRIORITY=8
+
+
+CONFIG_DVFS=y
+CONFIG_ACTS_DVFS_DYNAMIC_LEVEL=y
+CONFIG_HAVE_CUSTOM_LINKER_SCRIPT=y
+CONFIG_CUSTOM_LINKER_SCRIPT="linker.ld"
diff --git a/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor/fcc/mp_btc.bin b/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor/fcc/mp_btc.bin
new file mode 100644
index 00000000..ca86ac92
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor/fcc/mp_btc.bin differ
diff --git a/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor/firmware.xml b/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor/firmware.xml
new file mode 100644
index 00000000..ff2e67b5
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor/firmware.xml
@@ -0,0 +1,356 @@
+
+
+ Firmware layout for leopard
+ 0x2000000
+
+
+ 0x10000
+ 0x10000
+ 1.00_$(build_time)
+
+
+
+
+
+ 0x0
+ 0x1000
+ BOOT
+ fw0_boot
+ 1
+ mbrec.bin
+ 0x0
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x1000
+ 0x1000
+ SYS_PARAM
+ fw0_param
+ 2
+ param.bin
+ 0x1000
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x2000
+ 0x1000
+ BOOT
+ fw1_boot
+ 1
+ 0x2000
+ false
+ false
+ false
+ false
+ false
+ 1
+
+
+
+ 0x3000
+ 0x1000
+ SYS_PARAM
+ fw1_param
+ 2
+ 0x3000
+ false
+ false
+ false
+ false
+ false
+ 1
+
+
+
+ 0x4000
+ 0x20000
+ RECOVERY
+ fw0_rec
+ 3
+ recovery.bin
+ 0x4000
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x24000
+ 0x1B7000
+ SYSTEM
+ fw0_sys
+ 4
+ app.bin
+ 0x24000
+ false
+ false
+ true
+ true
+ true
+ TEMP
+ 0
+ 0
+
+
+
+ 0x1db000
+ 0x10000
+ DATA
+ fw0_sdfs
+ 5
+ sdfs.bin
+ 0x1db000
+ false
+ false
+ true
+ true
+ true
+ TEMP
+ 0
+ 0
+
+
+
+ 0x1eb000
+ 0x1000
+ DATA
+ nvram_factory
+ 6
+ nvram.bin
+ 0x1eb000
+ false
+ false
+ false
+ true
+ true
+ 0
+
+
+
+ 0x1ec000
+ 0x2000
+ DATA
+ nvram_factory_rw
+ 7
+ 0x1ec000
+ false
+ false
+ false
+ false
+ false
+ 0
+
+
+ 0x1ee000
+ 0x2000
+ DATA
+ nvram_user
+ 8
+ 0x1ee000
+ false
+ false
+ false
+ false
+ false
+
+
+
+ 0x1F0000
+ 0x12000
+ DATA
+ user_rw
+ 9
+ 0x1F0000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0x202000
+ 0x4000
+ DATA
+ logbuf
+ 251
+ 0x202000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0x206000
+ 0x2000
+ DATA
+ evtbuf
+ 252
+ 0x206000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0x208000
+ 0xa000
+ DATA
+ coredump
+ 253
+ 0x208000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+
+ 0x212000
+ 0x200000
+ DATA
+ res_a
+ 10
+ res.bin
+ 0x212000
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x412000
+ 0x600000
+ DATA
+ font
+ 12
+ fonts.bin
+ 0x412000
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0xa12000
+ 0x2E000
+ DATA
+ res_b
+ 11
+ 0xa12000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0xa40000
+ 0x80000
+ DATA
+ sdfs_k
+ 20
+ sdfs_k.bin
+ 0xa40000
+ false
+ false
+ false
+ false
+ true
+ 0
+ 0
+
+
+
+ 0xac0000
+ 0x100000
+ TEMP
+ fw0_temp
+ 254
+ 0xac0000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0xbc0000
+ 0x10000
+ DATA
+ runtimelog
+ 250
+ 0xbc0000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0xbd0000
+ 0x430000
+ DATA
+ udisk
+ 40
+ udisk.bin
+ 0xbd0000
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
diff --git a/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor/fwimage.cfg b/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor/fwimage.cfg
new file mode 100644
index 00000000..3c11aefa
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor/fwimage.cfg
@@ -0,0 +1,2 @@
+
+CHIP_NAME = "ATS3085S";
diff --git a/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor/sdfs_k/adMUSIC.dsp b/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor/sdfs_k/adMUSIC.dsp
new file mode 100644
index 00000000..b07682fd
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor/sdfs_k/adMUSIC.dsp differ
diff --git a/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor/sdfs_k/fcc.bin b/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor/sdfs_k/fcc.bin
new file mode 100644
index 00000000..6eace206
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor/sdfs_k/fcc.bin differ
diff --git a/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor/sdfs_k/logo.res b/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor/sdfs_k/logo.res
new file mode 100644
index 00000000..791784fa
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor/sdfs_k/logo.res differ
diff --git a/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor/sdfs_k/logo.sty b/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor/sdfs_k/logo.sty
new file mode 100644
index 00000000..02faf7c1
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3085s_dev_watch_ext_nor/sdfs_k/logo.sty differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089_dev_watch.conf b/action_technology_sdk/hello_world/boards/ats3089_dev_watch.conf
new file mode 100644
index 00000000..e914678b
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3089_dev_watch.conf
@@ -0,0 +1,33 @@
+# Set auto size decided by shared surface buffer size
+CONFIG_LV_VDB_SIZE=108608
+CONFIG_UI_GUI_MEM_POOL_SIZE=98304
+CONFIG_UI_RES_MEM_POOL_SIZE=3000000
+CONFIG_BITMAP_PER_FONT_CACHE_SIZE=98304
+CONFIG_BITMAP_FONT_CACHE_POOL_SIZE=380000
+CONFIG_FREETYPE_FONT_BITMAP_BPP=2
+CONFIG_FREETYPE_PER_FONT_CACHE_SIZE=40960
+CONFIG_FREETYPE_FONT_ENABLE_MEMORY_FACE=y
+CONFIG_FREETYPE_FONT_MAX_FACES=2
+CONFIG_FREETYPE_FONT_MAX_SIZES=3
+CONFIG_FREETYPE_SHAPE_INFO_CACHE_SIZE=3072
+CONFIG_FREETYPE_FONT_SHAPE_CACHE_SIZE=120000
+
+
+CONFIG_DISK_ACCESS_SPINAND=y
+CONFIG_VG_LITE=y
+CONFIG_VG_LITE_K_MEM_POOL_SIZE=172032
+
+
+CONFIG_IPMSG_BTC_FCC_NAME="/NAND:K/fcc.bin"
+
+CONFIG_USER_WORK_Q=y
+CONFIG_USER_WORK_Q_PRIORITY=8
+
+
+CONFIG_DVFS=y
+CONFIG_ACTS_DVFS_DYNAMIC_LEVEL=y
+
+
+CONFIG_HAVE_CUSTOM_LINKER_SCRIPT=y
+CONFIG_CUSTOM_LINKER_SCRIPT="linker.ld"
+
diff --git a/action_technology_sdk/hello_world/boards/ats3089_dev_watch/fcc/mp_btc.bin b/action_technology_sdk/hello_world/boards/ats3089_dev_watch/fcc/mp_btc.bin
new file mode 100644
index 00000000..7f83cc62
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089_dev_watch/fcc/mp_btc.bin differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089_dev_watch/firmware.xml b/action_technology_sdk/hello_world/boards/ats3089_dev_watch/firmware.xml
new file mode 100644
index 00000000..23f13316
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3089_dev_watch/firmware.xml
@@ -0,0 +1,355 @@
+
+
+ Firmware layout for leopard
+ 0x1000000
+
+
+ 0x10000
+ 0x10000
+ 1.00_$(build_time)
+
+
+
+
+
+ 0x0
+ 0x1000
+ BOOT
+ fw0_boot
+ 1
+ mbrec.bin
+ 0x0
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x1000
+ 0x1000
+ SYS_PARAM
+ fw0_param
+ 2
+ param.bin
+ 0x1000
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x2000
+ 0x1000
+ BOOT
+ fw1_boot
+ 1
+ 0x2000
+ false
+ false
+ false
+ false
+ false
+ 1
+
+
+
+ 0x3000
+ 0x1000
+ SYS_PARAM
+ fw1_param
+ 2
+ 0x3000
+ false
+ false
+ false
+ false
+ false
+ 1
+
+
+
+ 0x4000
+ 0x20000
+ RECOVERY
+ fw0_rec
+ 3
+ recovery.bin
+ 0x4000
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x24000
+ 0x6B7000
+ SYSTEM
+ fw0_sys
+ 4
+ app.bin
+ 0x24000
+ false
+ false
+ true
+ true
+ true
+ TEMP
+ 0
+ 0
+
+
+
+ 0x6db000
+ 0x10000
+ DATA
+ fw0_sdfs
+ 5
+ sdfs.bin
+ 0x6db000
+ false
+ false
+ true
+ true
+ true
+ TEMP
+ 0
+ 0
+
+
+
+ 0x6eb000
+ 0x1000
+ DATA
+ nvram_factory
+ 6
+ nvram.bin
+ 0x6eb000
+ false
+ false
+ false
+ true
+ true
+ 0
+
+
+
+ 0x6ec000
+ 0x2000
+ DATA
+ nvram_factory_rw
+ 7
+ 0x6ec000
+ false
+ false
+ false
+ false
+ false
+ 0
+
+
+ 0x6ee000
+ 0x2000
+ DATA
+ nvram_user
+ 8
+ 0x6ee000
+ false
+ false
+ false
+ false
+ false
+
+
+
+ 0x6F0000
+ 0x10000
+ DATA
+ user_rw
+ 9
+ 0x6F0000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+ 0x700000
+ 0x4000
+ DATA
+ logbuf
+ 251
+ 0x700000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0x704000
+ 0x2000
+ DATA
+ evtbuf
+ 252
+ 0x704000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0x706000
+ 0xa000
+ DATA
+ coredump
+ 253
+ 0x706000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+
+ 0x0
+ 0x1000000
+ DATA
+ res_a
+ 10
+ res.bin
+ 0x0
+ false
+ false
+ false
+ true
+ true
+ 2
+ 0
+
+
+
+ 0x1000000
+ 0x3000000
+ DATA
+ font
+ 12
+ fonts.bin
+ 0x1000000
+ false
+ false
+ false
+ true
+ true
+ 2
+ 0
+
+
+ 0x4000000
+ 0x790000
+ DATA
+ res_b
+ 11
+ 0x4000000
+ false
+ false
+ false
+ false
+ false
+ 2
+ 0
+
+
+
+ 0x4790000
+ 0x80000
+ DATA
+ fw0_sdfs
+ 20
+ sdfs_k.bin
+ 0x4790000
+ false
+ false
+ false
+ false
+ true
+ 2
+ 0
+
+
+
+ 0x4810000
+ 0x4F0000
+ TEMP
+ fw0_temp
+ 254
+ 0x4810000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 2
+
+
+
+ 0x4D00000
+ 0x100000
+ DATA
+ runtimelog
+ 250
+ 0x4D00000
+ false
+ false
+ false
+ false
+ false
+ 2
+ 0
+
+
+
+
+ 0x4E00000
+ 0x7D00000
+ DATA
+ udisk
+ 40
+ udisk.bin
+ 0x4E00000
+ false
+ false
+ false
+ false
+ true
+ 2
+ 0
+
+
+
diff --git a/action_technology_sdk/hello_world/boards/ats3089_dev_watch/fwimage.cfg b/action_technology_sdk/hello_world/boards/ats3089_dev_watch/fwimage.cfg
new file mode 100644
index 00000000..a5b59027
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3089_dev_watch/fwimage.cfg
@@ -0,0 +1,2 @@
+
+CHIP_NAME = "ATS3089";
diff --git a/action_technology_sdk/hello_world/boards/ats3089_dev_watch/sdfs_k/adMUSIC.dsp b/action_technology_sdk/hello_world/boards/ats3089_dev_watch/sdfs_k/adMUSIC.dsp
new file mode 100644
index 00000000..b07682fd
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089_dev_watch/sdfs_k/adMUSIC.dsp differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089_dev_watch/sdfs_k/fcc.bin b/action_technology_sdk/hello_world/boards/ats3089_dev_watch/sdfs_k/fcc.bin
new file mode 100644
index 00000000..6eace206
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089_dev_watch/sdfs_k/fcc.bin differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089_dev_watch/sdfs_k/logo.res b/action_technology_sdk/hello_world/boards/ats3089_dev_watch/sdfs_k/logo.res
new file mode 100644
index 00000000..791784fa
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089_dev_watch/sdfs_k/logo.res differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089_dev_watch/sdfs_k/logo.sty b/action_technology_sdk/hello_world/boards/ats3089_dev_watch/sdfs_k/logo.sty
new file mode 100644
index 00000000..02faf7c1
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089_dev_watch/sdfs_k/logo.sty differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089c_dev_watch.conf b/action_technology_sdk/hello_world/boards/ats3089c_dev_watch.conf
new file mode 100644
index 00000000..bd3d0c28
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3089c_dev_watch.conf
@@ -0,0 +1,32 @@
+CONFIG_LV_VDB_SIZE=108608
+CONFIG_UI_GUI_MEM_POOL_SIZE=98304
+CONFIG_UI_RES_MEM_POOL_SIZE=3000000
+CONFIG_BITMAP_PER_FONT_CACHE_SIZE=98304
+CONFIG_BITMAP_FONT_CACHE_POOL_SIZE=380000
+CONFIG_FREETYPE_FONT_BITMAP_BPP=2
+CONFIG_FREETYPE_PER_FONT_CACHE_SIZE=40960
+CONFIG_FREETYPE_FONT_ENABLE_MEMORY_FACE=y
+CONFIG_FREETYPE_FONT_MAX_FACES=2
+CONFIG_FREETYPE_FONT_MAX_SIZES=3
+CONFIG_FREETYPE_SHAPE_INFO_CACHE_SIZE=3072
+CONFIG_FREETYPE_FONT_SHAPE_CACHE_SIZE=120000
+
+
+CONFIG_DISK_ACCESS_SPINAND=y
+CONFIG_VG_LITE=y
+CONFIG_VG_LITE_K_MEM_POOL_SIZE=172032
+
+
+CONFIG_IPMSG_BTC_FCC_NAME="/NAND:K/fcc.bin"
+
+CONFIG_USER_WORK_Q=y
+CONFIG_USER_WORK_Q_PRIORITY=8
+
+
+CONFIG_DVFS=y
+CONFIG_ACTS_DVFS_DYNAMIC_LEVEL=y
+
+
+CONFIG_HAVE_CUSTOM_LINKER_SCRIPT=y
+CONFIG_CUSTOM_LINKER_SCRIPT="linker.ld"
+
diff --git a/action_technology_sdk/hello_world/boards/ats3089c_dev_watch/fcc/mp_btc.bin b/action_technology_sdk/hello_world/boards/ats3089c_dev_watch/fcc/mp_btc.bin
new file mode 100644
index 00000000..d95eb7ab
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089c_dev_watch/fcc/mp_btc.bin differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089c_dev_watch/firmware.xml b/action_technology_sdk/hello_world/boards/ats3089c_dev_watch/firmware.xml
new file mode 100644
index 00000000..8d98b03f
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3089c_dev_watch/firmware.xml
@@ -0,0 +1,355 @@
+
+
+ Firmware layout for leopard
+ 0x1000000
+
+
+ 0x10000
+ 0x10000
+ 1.00_$(build_time)
+
+
+
+
+
+ 0x0
+ 0x1000
+ BOOT
+ fw0_boot
+ 1
+ mbrec.bin
+ 0x0
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x1000
+ 0x1000
+ SYS_PARAM
+ fw0_param
+ 2
+ param.bin
+ 0x1000
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x2000
+ 0x1000
+ BOOT
+ fw1_boot
+ 1
+ 0x2000
+ false
+ false
+ false
+ false
+ false
+ 1
+
+
+
+ 0x3000
+ 0x1000
+ SYS_PARAM
+ fw1_param
+ 2
+ 0x3000
+ false
+ false
+ false
+ false
+ false
+ 1
+
+
+
+ 0x4000
+ 0x20000
+ RECOVERY
+ fw0_rec
+ 3
+ recovery.bin
+ 0x4000
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x24000
+ 0x2B7000
+ SYSTEM
+ fw0_sys
+ 4
+ app.bin
+ 0x24000
+ false
+ false
+ true
+ true
+ true
+ TEMP
+ 0
+ 0
+
+
+
+ 0x2db000
+ 0x10000
+ DATA
+ fw0_sdfs
+ 5
+ sdfs.bin
+ 0x2db000
+ false
+ false
+ true
+ true
+ true
+ TEMP
+ 0
+ 0
+
+
+
+ 0x2eb000
+ 0x1000
+ DATA
+ nvram_factory
+ 6
+ nvram.bin
+ 0x2eb000
+ false
+ false
+ false
+ true
+ true
+ 0
+
+
+
+ 0x2ec000
+ 0x2000
+ DATA
+ nvram_factory_rw
+ 7
+ 0x2ec000
+ false
+ false
+ false
+ false
+ false
+ 0
+
+
+ 0x2ee000
+ 0x2000
+ DATA
+ nvram_user
+ 8
+ 0x2ee000
+ false
+ false
+ false
+ false
+ false
+
+
+
+ 0x2F0000
+ 0x10000
+ DATA
+ user_rw
+ 9
+ 0x2F0000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+ 0x300000
+ 0x4000
+ DATA
+ logbuf
+ 251
+ 0x300000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0x304000
+ 0x2000
+ DATA
+ evtbuf
+ 252
+ 0x304000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0x306000
+ 0xa000
+ DATA
+ coredump
+ 253
+ 0x306000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+
+ 0x0
+ 0x1000000
+ DATA
+ res_a
+ 10
+ res.bin
+ 0x0
+ false
+ false
+ false
+ true
+ true
+ 2
+ 0
+
+
+
+ 0x1000000
+ 0x3000000
+ DATA
+ font
+ 12
+ fonts.bin
+ 0x1000000
+ false
+ false
+ false
+ true
+ true
+ 2
+ 0
+
+
+ 0x4000000
+ 0x790000
+ DATA
+ res_b
+ 11
+ 0x4000000
+ false
+ false
+ false
+ false
+ false
+ 2
+ 0
+
+
+
+ 0x4790000
+ 0x80000
+ DATA
+ fw0_sdfs
+ 20
+ sdfs_k.bin
+ 0x4790000
+ false
+ false
+ false
+ false
+ true
+ 2
+ 0
+
+
+
+ 0x4810000
+ 0x1F0000
+ TEMP
+ fw0_temp
+ 254
+ 0x4810000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 2
+
+
+
+ 0x4a00000
+ 0x100000
+ DATA
+ runtimelog
+ 250
+ 0x4a00000
+ false
+ false
+ false
+ false
+ false
+ 2
+ 0
+
+
+
+
+ 0x4b00000
+ 0x8000000
+ DATA
+ udisk
+ 40
+ udisk.bin
+ 0x4b00000
+ false
+ false
+ false
+ false
+ true
+ 2
+ 0
+
+
+
diff --git a/action_technology_sdk/hello_world/boards/ats3089c_dev_watch/fwimage.cfg b/action_technology_sdk/hello_world/boards/ats3089c_dev_watch/fwimage.cfg
new file mode 100644
index 00000000..a5b59027
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3089c_dev_watch/fwimage.cfg
@@ -0,0 +1,2 @@
+
+CHIP_NAME = "ATS3089";
diff --git a/action_technology_sdk/hello_world/boards/ats3089c_dev_watch/sdfs_k/adMUSIC.dsp b/action_technology_sdk/hello_world/boards/ats3089c_dev_watch/sdfs_k/adMUSIC.dsp
new file mode 100644
index 00000000..b07682fd
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089c_dev_watch/sdfs_k/adMUSIC.dsp differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089c_dev_watch/sdfs_k/fcc.bin b/action_technology_sdk/hello_world/boards/ats3089c_dev_watch/sdfs_k/fcc.bin
new file mode 100644
index 00000000..1e1d94f7
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089c_dev_watch/sdfs_k/fcc.bin differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089c_dev_watch/sdfs_k/logo.res b/action_technology_sdk/hello_world/boards/ats3089c_dev_watch/sdfs_k/logo.res
new file mode 100644
index 00000000..791784fa
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089c_dev_watch/sdfs_k/logo.res differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089c_dev_watch/sdfs_k/logo.sty b/action_technology_sdk/hello_world/boards/ats3089c_dev_watch/sdfs_k/logo.sty
new file mode 100644
index 00000000..02faf7c1
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089c_dev_watch/sdfs_k/logo.sty differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch.conf b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch.conf
new file mode 100644
index 00000000..bd3d0c28
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch.conf
@@ -0,0 +1,32 @@
+CONFIG_LV_VDB_SIZE=108608
+CONFIG_UI_GUI_MEM_POOL_SIZE=98304
+CONFIG_UI_RES_MEM_POOL_SIZE=3000000
+CONFIG_BITMAP_PER_FONT_CACHE_SIZE=98304
+CONFIG_BITMAP_FONT_CACHE_POOL_SIZE=380000
+CONFIG_FREETYPE_FONT_BITMAP_BPP=2
+CONFIG_FREETYPE_PER_FONT_CACHE_SIZE=40960
+CONFIG_FREETYPE_FONT_ENABLE_MEMORY_FACE=y
+CONFIG_FREETYPE_FONT_MAX_FACES=2
+CONFIG_FREETYPE_FONT_MAX_SIZES=3
+CONFIG_FREETYPE_SHAPE_INFO_CACHE_SIZE=3072
+CONFIG_FREETYPE_FONT_SHAPE_CACHE_SIZE=120000
+
+
+CONFIG_DISK_ACCESS_SPINAND=y
+CONFIG_VG_LITE=y
+CONFIG_VG_LITE_K_MEM_POOL_SIZE=172032
+
+
+CONFIG_IPMSG_BTC_FCC_NAME="/NAND:K/fcc.bin"
+
+CONFIG_USER_WORK_Q=y
+CONFIG_USER_WORK_Q_PRIORITY=8
+
+
+CONFIG_DVFS=y
+CONFIG_ACTS_DVFS_DYNAMIC_LEVEL=y
+
+
+CONFIG_HAVE_CUSTOM_LINKER_SCRIPT=y
+CONFIG_CUSTOM_LINKER_SCRIPT="linker.ld"
+
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch/fcc/mp_btc.bin b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch/fcc/mp_btc.bin
new file mode 100644
index 00000000..d95eb7ab
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch/fcc/mp_btc.bin differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch/firmware.xml b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch/firmware.xml
new file mode 100644
index 00000000..23f13316
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch/firmware.xml
@@ -0,0 +1,355 @@
+
+
+ Firmware layout for leopard
+ 0x1000000
+
+
+ 0x10000
+ 0x10000
+ 1.00_$(build_time)
+
+
+
+
+
+ 0x0
+ 0x1000
+ BOOT
+ fw0_boot
+ 1
+ mbrec.bin
+ 0x0
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x1000
+ 0x1000
+ SYS_PARAM
+ fw0_param
+ 2
+ param.bin
+ 0x1000
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x2000
+ 0x1000
+ BOOT
+ fw1_boot
+ 1
+ 0x2000
+ false
+ false
+ false
+ false
+ false
+ 1
+
+
+
+ 0x3000
+ 0x1000
+ SYS_PARAM
+ fw1_param
+ 2
+ 0x3000
+ false
+ false
+ false
+ false
+ false
+ 1
+
+
+
+ 0x4000
+ 0x20000
+ RECOVERY
+ fw0_rec
+ 3
+ recovery.bin
+ 0x4000
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x24000
+ 0x6B7000
+ SYSTEM
+ fw0_sys
+ 4
+ app.bin
+ 0x24000
+ false
+ false
+ true
+ true
+ true
+ TEMP
+ 0
+ 0
+
+
+
+ 0x6db000
+ 0x10000
+ DATA
+ fw0_sdfs
+ 5
+ sdfs.bin
+ 0x6db000
+ false
+ false
+ true
+ true
+ true
+ TEMP
+ 0
+ 0
+
+
+
+ 0x6eb000
+ 0x1000
+ DATA
+ nvram_factory
+ 6
+ nvram.bin
+ 0x6eb000
+ false
+ false
+ false
+ true
+ true
+ 0
+
+
+
+ 0x6ec000
+ 0x2000
+ DATA
+ nvram_factory_rw
+ 7
+ 0x6ec000
+ false
+ false
+ false
+ false
+ false
+ 0
+
+
+ 0x6ee000
+ 0x2000
+ DATA
+ nvram_user
+ 8
+ 0x6ee000
+ false
+ false
+ false
+ false
+ false
+
+
+
+ 0x6F0000
+ 0x10000
+ DATA
+ user_rw
+ 9
+ 0x6F0000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+ 0x700000
+ 0x4000
+ DATA
+ logbuf
+ 251
+ 0x700000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0x704000
+ 0x2000
+ DATA
+ evtbuf
+ 252
+ 0x704000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0x706000
+ 0xa000
+ DATA
+ coredump
+ 253
+ 0x706000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+
+ 0x0
+ 0x1000000
+ DATA
+ res_a
+ 10
+ res.bin
+ 0x0
+ false
+ false
+ false
+ true
+ true
+ 2
+ 0
+
+
+
+ 0x1000000
+ 0x3000000
+ DATA
+ font
+ 12
+ fonts.bin
+ 0x1000000
+ false
+ false
+ false
+ true
+ true
+ 2
+ 0
+
+
+ 0x4000000
+ 0x790000
+ DATA
+ res_b
+ 11
+ 0x4000000
+ false
+ false
+ false
+ false
+ false
+ 2
+ 0
+
+
+
+ 0x4790000
+ 0x80000
+ DATA
+ fw0_sdfs
+ 20
+ sdfs_k.bin
+ 0x4790000
+ false
+ false
+ false
+ false
+ true
+ 2
+ 0
+
+
+
+ 0x4810000
+ 0x4F0000
+ TEMP
+ fw0_temp
+ 254
+ 0x4810000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 2
+
+
+
+ 0x4D00000
+ 0x100000
+ DATA
+ runtimelog
+ 250
+ 0x4D00000
+ false
+ false
+ false
+ false
+ false
+ 2
+ 0
+
+
+
+
+ 0x4E00000
+ 0x7D00000
+ DATA
+ udisk
+ 40
+ udisk.bin
+ 0x4E00000
+ false
+ false
+ false
+ false
+ true
+ 2
+ 0
+
+
+
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch/fwimage.cfg b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch/fwimage.cfg
new file mode 100644
index 00000000..a5b59027
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch/fwimage.cfg
@@ -0,0 +1,2 @@
+
+CHIP_NAME = "ATS3089";
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch/sdfs_k/adMUSIC.dsp b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch/sdfs_k/adMUSIC.dsp
new file mode 100644
index 00000000..b07682fd
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch/sdfs_k/adMUSIC.dsp differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch/sdfs_k/fcc.bin b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch/sdfs_k/fcc.bin
new file mode 100644
index 00000000..1e1d94f7
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch/sdfs_k/fcc.bin differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch/sdfs_k/logo.res b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch/sdfs_k/logo.res
new file mode 100644
index 00000000..791784fa
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch/sdfs_k/logo.res differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch/sdfs_k/logo.sty b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch/sdfs_k/logo.sty
new file mode 100644
index 00000000..02faf7c1
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch/sdfs_k/logo.sty differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand.conf b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand.conf
new file mode 100644
index 00000000..00611f20
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand.conf
@@ -0,0 +1,36 @@
+CONFIG_LV_VDB_SIZE=108608
+CONFIG_UI_GUI_MEM_POOL_SIZE=98304
+CONFIG_UI_RES_MEM_POOL_SIZE=3000000
+CONFIG_BITMAP_PER_FONT_CACHE_SIZE=98304
+CONFIG_BITMAP_FONT_CACHE_POOL_SIZE=380000
+CONFIG_FREETYPE_FONT_BITMAP_BPP=2
+CONFIG_FREETYPE_PER_FONT_CACHE_SIZE=40960
+CONFIG_FREETYPE_FONT_ENABLE_MEMORY_FACE=y
+CONFIG_FREETYPE_FONT_MAX_FACES=2
+CONFIG_FREETYPE_FONT_MAX_SIZES=3
+CONFIG_FREETYPE_SHAPE_INFO_CACHE_SIZE=3072
+CONFIG_FREETYPE_FONT_SHAPE_CACHE_SIZE=120000
+
+#usb mass storage config
+CONFIG_MMC=y
+CONFIG_MMC_ACTS=y
+CONFIG_MMC_SDCARD=y
+CONFIG_DISK_ACCESS_SD=y
+
+CONFIG_VG_LITE=y
+CONFIG_VG_LITE_K_MEM_POOL_SIZE=172032
+
+
+CONFIG_IPMSG_BTC_FCC_NAME="/SD:K/fcc.bin"
+
+CONFIG_USER_WORK_Q=y
+CONFIG_USER_WORK_Q_PRIORITY=8
+
+
+CONFIG_DVFS=y
+CONFIG_ACTS_DVFS_DYNAMIC_LEVEL=y
+
+
+CONFIG_HAVE_CUSTOM_LINKER_SCRIPT=y
+CONFIG_CUSTOM_LINKER_SCRIPT="linker.ld"
+
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand/fcc/mp_btc.bin b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand/fcc/mp_btc.bin
new file mode 100644
index 00000000..d95eb7ab
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand/fcc/mp_btc.bin differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand/firmware.xml b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand/firmware.xml
new file mode 100644
index 00000000..c85c3aa7
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand/firmware.xml
@@ -0,0 +1,372 @@
+
+
+ Firmware layout for leopard
+ 0x1000000
+
+
+ 0x10000
+ 0x10000
+ 1.00_$(build_time)
+
+
+
+
+
+ 0x0
+ 0x1000
+ BOOT
+ fw0_boot
+ 1
+ mbrec.bin
+ 0x0
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x1000
+ 0x1000
+ SYS_PARAM
+ fw0_param
+ 2
+ param.bin
+ 0x1000
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x2000
+ 0x1000
+ BOOT
+ fw1_boot
+ 1
+ 0x2000
+ false
+ false
+ false
+ false
+ false
+ 1
+
+
+
+ 0x3000
+ 0x1000
+ SYS_PARAM
+ fw1_param
+ 2
+ 0x3000
+ false
+ false
+ false
+ false
+ false
+ 1
+
+
+
+ 0x4000
+ 0x20000
+ RECOVERY
+ fw0_rec
+ 3
+ recovery.bin
+ 0x4000
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x24000
+ 0x6B7000
+ SYSTEM
+ fw0_sys
+ 4
+ app.bin
+ 0x24000
+ false
+ false
+ true
+ true
+ true
+ TEMP
+ 0
+ 0
+
+
+
+ 0x6db000
+ 0x10000
+ DATA
+ fw0_sdfs
+ 5
+ sdfs.bin
+ 0x6db000
+ false
+ false
+ true
+ true
+ true
+ TEMP
+ 0
+ 0
+
+
+
+ 0x6eb000
+ 0x1000
+ DATA
+ nvram_factory
+ 6
+ nvram.bin
+ 0x6eb000
+ false
+ false
+ false
+ true
+ true
+ 0
+
+
+
+ 0x6ec000
+ 0x2000
+ DATA
+ nvram_factory_rw
+ 7
+ 0x6ec000
+ false
+ false
+ false
+ false
+ false
+ 0
+
+
+ 0x6ee000
+ 0x2000
+ DATA
+ nvram_user
+ 8
+ 0x6ee000
+ false
+ false
+ false
+ false
+ false
+
+
+
+ 0x6F0000
+ 0x10000
+ DATA
+ user_rw
+ 9
+ 0x6F0000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+ 0x700000
+ 0x4000
+ DATA
+ logbuf
+ 251
+ 0x700000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0x704000
+ 0x2000
+ DATA
+ evtbuf
+ 252
+ 0x704000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0x706000
+ 0xa000
+ DATA
+ coredump
+ 253
+ 0x706000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0x0
+ 0x8000
+ BOOT
+ mbr
+ 1
+ u_mbr.bin
+ 0x0
+ false
+ false
+ false
+ true
+ true
+ 1
+ 0
+
+
+
+ 0x8000
+ 0x1f8000
+ DATA
+ res_a
+ 10
+ res.bin
+ 0x8000
+ false
+ false
+ false
+ true
+ true
+ 1
+ 0
+
+
+
+ 0x1000000
+ 0x3000000
+ DATA
+ font
+ 12
+ fonts.bin
+ 0x1000000
+ false
+ false
+ false
+ true
+ true
+ 1
+ 0
+
+
+ 0x4000000
+ 0x790000
+ DATA
+ res_b
+ 11
+ 0x4000000
+ false
+ false
+ false
+ false
+ false
+ 1
+ 0
+
+
+
+ 0x4790000
+ 0x100000
+ DATA
+ fw0_sdfs
+ 20
+ sdfs_k.bin
+ 0x4790000
+ false
+ false
+ false
+ false
+ true
+ 1
+ 0
+
+
+
+ 0x4890000
+ 0x470000
+ TEMP
+ fw0_temp
+ 254
+ 0x4890000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 1
+
+
+
+ 0x4D00000
+ 0x100000
+ DATA
+ runtimelog
+ 250
+ 0x4D00000
+ false
+ false
+ false
+ false
+ false
+ 1
+ 0
+
+
+
+
+ 0x4E00000
+ 0x7D00000
+ DATA
+ udisk
+ 40
+ udisk.bin
+ 0x4E00000
+ false
+ false
+ false
+ false
+ true
+ true
+ 1
+ 0
+
+
+
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand/fwimage.cfg b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand/fwimage.cfg
new file mode 100644
index 00000000..a5b59027
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand/fwimage.cfg
@@ -0,0 +1,2 @@
+
+CHIP_NAME = "ATS3089";
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand/sdfs_k/adMUSIC.dsp b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand/sdfs_k/adMUSIC.dsp
new file mode 100644
index 00000000..b07682fd
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand/sdfs_k/adMUSIC.dsp differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand/sdfs_k/fcc.bin b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand/sdfs_k/fcc.bin
new file mode 100644
index 00000000..1e1d94f7
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand/sdfs_k/fcc.bin differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand/sdfs_k/logo.res b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand/sdfs_k/logo.res
new file mode 100644
index 00000000..791784fa
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand/sdfs_k/logo.res differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand/sdfs_k/logo.sty b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand/sdfs_k/logo.sty
new file mode 100644
index 00000000..02faf7c1
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand/sdfs_k/logo.sty differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b.conf b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b.conf
new file mode 100644
index 00000000..00611f20
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b.conf
@@ -0,0 +1,36 @@
+CONFIG_LV_VDB_SIZE=108608
+CONFIG_UI_GUI_MEM_POOL_SIZE=98304
+CONFIG_UI_RES_MEM_POOL_SIZE=3000000
+CONFIG_BITMAP_PER_FONT_CACHE_SIZE=98304
+CONFIG_BITMAP_FONT_CACHE_POOL_SIZE=380000
+CONFIG_FREETYPE_FONT_BITMAP_BPP=2
+CONFIG_FREETYPE_PER_FONT_CACHE_SIZE=40960
+CONFIG_FREETYPE_FONT_ENABLE_MEMORY_FACE=y
+CONFIG_FREETYPE_FONT_MAX_FACES=2
+CONFIG_FREETYPE_FONT_MAX_SIZES=3
+CONFIG_FREETYPE_SHAPE_INFO_CACHE_SIZE=3072
+CONFIG_FREETYPE_FONT_SHAPE_CACHE_SIZE=120000
+
+#usb mass storage config
+CONFIG_MMC=y
+CONFIG_MMC_ACTS=y
+CONFIG_MMC_SDCARD=y
+CONFIG_DISK_ACCESS_SD=y
+
+CONFIG_VG_LITE=y
+CONFIG_VG_LITE_K_MEM_POOL_SIZE=172032
+
+
+CONFIG_IPMSG_BTC_FCC_NAME="/SD:K/fcc.bin"
+
+CONFIG_USER_WORK_Q=y
+CONFIG_USER_WORK_Q_PRIORITY=8
+
+
+CONFIG_DVFS=y
+CONFIG_ACTS_DVFS_DYNAMIC_LEVEL=y
+
+
+CONFIG_HAVE_CUSTOM_LINKER_SCRIPT=y
+CONFIG_CUSTOM_LINKER_SCRIPT="linker.ld"
+
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b/fcc/mp_btc.bin b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b/fcc/mp_btc.bin
new file mode 100644
index 00000000..d95eb7ab
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b/fcc/mp_btc.bin differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b/firmware.xml b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b/firmware.xml
new file mode 100644
index 00000000..c85c3aa7
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b/firmware.xml
@@ -0,0 +1,372 @@
+
+
+ Firmware layout for leopard
+ 0x1000000
+
+
+ 0x10000
+ 0x10000
+ 1.00_$(build_time)
+
+
+
+
+
+ 0x0
+ 0x1000
+ BOOT
+ fw0_boot
+ 1
+ mbrec.bin
+ 0x0
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x1000
+ 0x1000
+ SYS_PARAM
+ fw0_param
+ 2
+ param.bin
+ 0x1000
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x2000
+ 0x1000
+ BOOT
+ fw1_boot
+ 1
+ 0x2000
+ false
+ false
+ false
+ false
+ false
+ 1
+
+
+
+ 0x3000
+ 0x1000
+ SYS_PARAM
+ fw1_param
+ 2
+ 0x3000
+ false
+ false
+ false
+ false
+ false
+ 1
+
+
+
+ 0x4000
+ 0x20000
+ RECOVERY
+ fw0_rec
+ 3
+ recovery.bin
+ 0x4000
+ false
+ false
+ false
+ true
+ true
+ 0
+ 0
+
+
+
+ 0x24000
+ 0x6B7000
+ SYSTEM
+ fw0_sys
+ 4
+ app.bin
+ 0x24000
+ false
+ false
+ true
+ true
+ true
+ TEMP
+ 0
+ 0
+
+
+
+ 0x6db000
+ 0x10000
+ DATA
+ fw0_sdfs
+ 5
+ sdfs.bin
+ 0x6db000
+ false
+ false
+ true
+ true
+ true
+ TEMP
+ 0
+ 0
+
+
+
+ 0x6eb000
+ 0x1000
+ DATA
+ nvram_factory
+ 6
+ nvram.bin
+ 0x6eb000
+ false
+ false
+ false
+ true
+ true
+ 0
+
+
+
+ 0x6ec000
+ 0x2000
+ DATA
+ nvram_factory_rw
+ 7
+ 0x6ec000
+ false
+ false
+ false
+ false
+ false
+ 0
+
+
+ 0x6ee000
+ 0x2000
+ DATA
+ nvram_user
+ 8
+ 0x6ee000
+ false
+ false
+ false
+ false
+ false
+
+
+
+ 0x6F0000
+ 0x10000
+ DATA
+ user_rw
+ 9
+ 0x6F0000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+ 0x700000
+ 0x4000
+ DATA
+ logbuf
+ 251
+ 0x700000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0x704000
+ 0x2000
+ DATA
+ evtbuf
+ 252
+ 0x704000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0x706000
+ 0xa000
+ DATA
+ coredump
+ 253
+ 0x706000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 0
+
+
+
+ 0x0
+ 0x8000
+ BOOT
+ mbr
+ 1
+ u_mbr.bin
+ 0x0
+ false
+ false
+ false
+ true
+ true
+ 1
+ 0
+
+
+
+ 0x8000
+ 0x1f8000
+ DATA
+ res_a
+ 10
+ res.bin
+ 0x8000
+ false
+ false
+ false
+ true
+ true
+ 1
+ 0
+
+
+
+ 0x1000000
+ 0x3000000
+ DATA
+ font
+ 12
+ fonts.bin
+ 0x1000000
+ false
+ false
+ false
+ true
+ true
+ 1
+ 0
+
+
+ 0x4000000
+ 0x790000
+ DATA
+ res_b
+ 11
+ 0x4000000
+ false
+ false
+ false
+ false
+ false
+ 1
+ 0
+
+
+
+ 0x4790000
+ 0x100000
+ DATA
+ fw0_sdfs
+ 20
+ sdfs_k.bin
+ 0x4790000
+ false
+ false
+ false
+ false
+ true
+ 1
+ 0
+
+
+
+ 0x4890000
+ 0x470000
+ TEMP
+ fw0_temp
+ 254
+ 0x4890000
+ false
+ false
+ false
+ false
+ false
+ 0
+ 1
+
+
+
+ 0x4D00000
+ 0x100000
+ DATA
+ runtimelog
+ 250
+ 0x4D00000
+ false
+ false
+ false
+ false
+ false
+ 1
+ 0
+
+
+
+
+ 0x4E00000
+ 0x7D00000
+ DATA
+ udisk
+ 40
+ udisk.bin
+ 0x4E00000
+ false
+ false
+ false
+ false
+ true
+ true
+ 1
+ 0
+
+
+
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b/fwimage.cfg b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b/fwimage.cfg
new file mode 100644
index 00000000..a5b59027
--- /dev/null
+++ b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b/fwimage.cfg
@@ -0,0 +1,2 @@
+
+CHIP_NAME = "ATS3089";
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b/sdfs_k/adMUSIC.dsp b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b/sdfs_k/adMUSIC.dsp
new file mode 100644
index 00000000..b07682fd
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b/sdfs_k/adMUSIC.dsp differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b/sdfs_k/fcc.bin b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b/sdfs_k/fcc.bin
new file mode 100644
index 00000000..1e1d94f7
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b/sdfs_k/fcc.bin differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b/sdfs_k/logo.res b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b/sdfs_k/logo.res
new file mode 100644
index 00000000..791784fa
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b/sdfs_k/logo.res differ
diff --git a/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b/sdfs_k/logo.sty b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b/sdfs_k/logo.sty
new file mode 100644
index 00000000..02faf7c1
Binary files /dev/null and b/action_technology_sdk/hello_world/boards/ats3089p_dev_watch_sdnand_8b/sdfs_k/logo.sty differ
diff --git a/action_technology_sdk/hello_world/linker.ld b/action_technology_sdk/hello_world/linker.ld
new file mode 100644
index 00000000..6cd6513b
--- /dev/null
+++ b/action_technology_sdk/hello_world/linker.ld
@@ -0,0 +1,608 @@
+/*
+ * Copyright (c) 2013-2014 Wind River Systems, Inc.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/**
+ * @file
+ * @brief Linker command/script file
+ *
+ * Linker script for the Cortex-M platforms.
+ */
+
+#include
+#include
+#include
+
+#include
+#include
+
+#ifdef CONFIG_SECTION_OVERLAY
+#include
+#endif
+
+/* physical address of RAM */
+#define ROMABLE_REGION FLASH
+#define RAMABLE_REGION PSRAM
+
+#define ROM_ADDR (CONFIG_FLASH_BASE_ADDRESS + CONFIG_FLASH_LOAD_OFFSET)
+#define ROM_SIZE (CONFIG_FLASH_SIZE*1K - CONFIG_FLASH_LOAD_OFFSET)
+
+#define RAM_SIZE (CONFIG_SRAM_SIZE * 1K)
+#define RAM_ADDR CONFIG_SRAM_BASE_ADDRESS
+
+/* Set alignment to CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE
+ * to make linker section alignment comply with MPU granularity.
+ */
+#if defined(CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE)
+_region_min_align = CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE;
+#else
+/* If building without MPU support, use default 4-byte alignment. */
+_region_min_align = 4;
+#endif
+
+#define MPU_ALIGN(region_size) . = ALIGN(_region_min_align)
+
+MEMORY
+{
+ FLASH (rx) : ORIGIN = ROM_ADDR, LENGTH = ROM_SIZE
+ SRAM (wx) : ORIGIN = CONFIG_SRAM_BASE_ADDRESS, LENGTH = RAM_SIZE
+ PSRAM (wx) : ORIGIN = CONFIG_PSRAM_BASE_ADDRESS, LENGTH = CONFIG_PSRAM_SIZE * 1K
+ SHARE_RAM (wx) : ORIGIN = 0x2FF1AE00, LENGTH = 0x51FF
+ DSP_SRAM (wx) : ORIGIN = 0x30044000, LENGTH = 0x14000
+
+ /* Used by and documented in include/linker/intlist.ld */
+ IDT_LIST (wx) : ORIGIN = (RAM_ADDR + RAM_SIZE), LENGTH = 2K
+}
+
+ENTRY(CONFIG_KERNEL_ENTRY)
+
+SECTIONS
+{
+
+#include
+
+ /*
+ * .plt and .iplt are here according to 'arm-zephyr-elf-ld --verbose',
+ * before text section.
+ */
+ /DISCARD/ :
+ {
+ *(.plt)
+ }
+
+ /DISCARD/ :
+ {
+ *(.iplt)
+ }
+
+ GROUP_START(ROMABLE_REGION)
+
+ __rom_region_start = ROM_ADDR;
+
+ SECTION_PROLOGUE(rom_start,,)
+ {
+
+/* Located in generated directory. This file is populated by calling
+ * zephyr_linker_sources(ROM_START ...). This typically contains the vector
+ * table and debug information.
+ */
+#include
+
+ } GROUP_LINK_IN(ROMABLE_REGION)
+
+ SECTION_PROLOGUE(img_head,(ROM_ADDR+0x200),) AT (ROM_ADDR+0x200)
+ {
+ KEEP(*(.img_head*))
+ } GROUP_LINK_IN(ROMABLE_REGION)
+
+ SECTION_PROLOGUE(_ACTIONS_RODATA_SECTION_NAME,,)
+ {
+ . = ALIGN(4);
+ __app_entry_table = .;
+ KEEP(*(.app_entry))
+ __app_entry_end = .;
+
+ . = ALIGN(4);
+ __service_entry_table = .;
+ KEEP(*(.service_entry))
+ __service_entry_end = .;
+
+ . = ALIGN(4);
+ __view_entry_table = .;
+ KEEP(*(.view_entry))
+ __view_entry_end = .;
+
+ } GROUP_LINK_IN(ROMABLE_REGION)
+
+#ifdef CONFIG_SENSOR_ALGO
+
+#include
+
+#endif
+
+ SECTION_PROLOGUE(_TEXT_SECTION_NAME,,)
+ {
+ __text_region_start = .;
+
+#include
+
+ *(.text)
+ *(".text.*")
+ *(.gnu.linkonce.t.*)
+ /*
+ * These are here according to 'arm-zephyr-elf-ld --verbose',
+ * after .gnu.linkonce.t.*
+ */
+ *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+
+ } GROUP_LINK_IN(ROMABLE_REGION)
+
+ __text_region_end = .;
+
+/*#if defined (CONFIG_CPLUSPLUS)*/
+ SECTION_PROLOGUE(.ARM.extab,,)
+ {
+ /*
+ * .ARM.extab section containing exception unwinding information.
+ */
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ } GROUP_LINK_IN(ROMABLE_REGION)
+/*#endif*/
+
+ SECTION_PROLOGUE(.ARM.exidx,,)
+ {
+ /*
+ * This section, related to stack and exception unwinding, is placed
+ * explicitly to prevent it from being shared between multiple regions.
+ * It must be defined for gcc to support 64-bit math and avoid
+ * section overlap.
+ */
+ __start_unwind_idx = .;
+ __exidx_start = .;
+ #if defined (__GCC_LINKER_CMD__)
+ *(.ARM.exidx* gnu.linkonce.armexidx.*)
+ #endif
+ __exidx_end = .;
+ __stop_unwind_idx = .;
+ } GROUP_LINK_IN(ROMABLE_REGION)
+
+ __rodata_region_start = .;
+
+#include
+#include
+
+ SECTION_PROLOGUE(_RODATA_SECTION_NAME,,)
+ {
+ *(.rodata)
+ *(".rodata.*")
+ *(.gnu.linkonce.r.*)
+
+/* Located in generated directory. This file is populated by the
+ * zephyr_linker_sources() Cmake function.
+ */
+#include
+
+#ifdef CONFIG_SECTION_OVERLAY
+ . = ALIGN(4);
+ __overlay_table = .;
+ LONG(OVERLAY_TABLE_MAGIC)
+ /* overlay items count */
+ LONG(7)
+
+ /* for a1_wav_p.a */
+ LONG(OVERLAY_ID_LIBAPWAV)
+ LONG(0);
+ LONG(0);
+ LONG(0);
+ LONG(ABSOLUTE(ADDR(.overlay.data.apwav)));
+ LONG(SIZEOF(.overlay.data.apwav));
+ LONG(LOADADDR(.overlay.data.apwav));
+ LONG(ABSOLUTE(ADDR(.overlay.bss.apwav)));
+ LONG(SIZEOF(.overlay.bss.apwav));
+
+ /* for a1_mp3_p.a */
+ LONG(OVERLAY_ID_LIBAPMP3)
+ LONG(0);
+ LONG(0);
+ LONG(0);
+ LONG(ABSOLUTE(ADDR(.overlay.data.apmp3)));
+ LONG(SIZEOF(.overlay.data.apmp3));
+ LONG(LOADADDR(.overlay.data.apmp3));
+ LONG(ABSOLUTE(ADDR(.overlay.bss.apmp3)));
+ LONG(SIZEOF(.overlay.bss.apmp3));
+
+ /* for a1_ape_p.a */
+ LONG(OVERLAY_ID_LIBAPAPE)
+ LONG(0);
+ LONG(0);
+ LONG(0);
+ LONG(ABSOLUTE(ADDR(.overlay.data.apape)));
+ LONG(SIZEOF(.overlay.data.apape));
+ LONG(LOADADDR(.overlay.data.apape));
+ LONG(ABSOLUTE(ADDR(.overlay.bss.apape)));
+ LONG(SIZEOF(.overlay.bss.apape));
+
+ /* for a1_w13_p.a */
+ LONG(OVERLAY_ID_LIBAPWMA)
+ LONG(0);
+ LONG(0);
+ LONG(0);
+ LONG(ABSOLUTE(ADDR(.overlay.data.apwma)));
+ LONG(SIZEOF(.overlay.data.apwma));
+ LONG(LOADADDR(.overlay.data.apwma));
+ LONG(ABSOLUTE(ADDR(.overlay.bss.apwma)));
+ LONG(SIZEOF(.overlay.bss.apwma));
+
+ /* for a1_fla_p.a */
+ LONG(OVERLAY_ID_LIBADFLA)
+ LONG(0);
+ LONG(0);
+ LONG(0);
+ LONG(ABSOLUTE(ADDR(.overlay.data.apfla)));
+ LONG(SIZEOF(.overlay.data.apfla));
+ LONG(LOADADDR(.overlay.data.apfla));
+ LONG(ABSOLUTE(ADDR(.overlay.bss.apfla)));
+ LONG(SIZEOF(.overlay.bss.apfla));
+
+ /* for a1_a23_p.a */
+ LONG(OVERLAY_ID_LIBAPAAC)
+ LONG(0);
+ LONG(0);
+ LONG(0);
+ LONG(ABSOLUTE(ADDR(.overlay.data.apaac)));
+ LONG(SIZEOF(.overlay.data.apaac));
+ LONG(LOADADDR(.overlay.data.apaac));
+ LONG(ABSOLUTE(ADDR(.overlay.bss.apaac)));
+ LONG(SIZEOF(.overlay.bss.apaac));
+
+ . = ALIGN(4);
+#endif
+
+#include
+
+ /*
+ * For XIP images, in order to avoid the situation when __data_rom_start
+ * is 32-bit aligned, but the actual data is placed right after rodata
+ * section, which may not end exactly at 32-bit border, pad rodata
+ * section, so __data_rom_start points at data and it is 32-bit aligned.
+ *
+ * On non-XIP images this may enlarge image size up to 3 bytes. This
+ * generally is not an issue, since modern ROM and FLASH memory is
+ * usually 4k aligned.
+ */
+ . = ALIGN(4);
+ } GROUP_LINK_IN(ROMABLE_REGION)
+
+#include
+
+ __rodata_region_end = .;
+ MPU_ALIGN(__rodata_region_end -__rom_region_start);
+ __rom_region_end = .;
+ __rom_region_size = __rom_region_end - __rom_region_start;
+
+ GROUP_END(ROMABLE_REGION)
+
+
+ /*
+ * These are here according to 'arm-zephyr-elf-ld --verbose',
+ * before data section.
+ */
+ /DISCARD/ : {
+ *(.got.plt)
+ *(.igot.plt)
+ *(.got)
+ *(.igot)
+ }
+
+ . = RAM_ADDR;
+ __ramdump_sram_start = .;
+
+ /* Align the start of image SRAM with the
+ * minimum granularity required by MPU.
+ */
+ . = ALIGN(_region_min_align);
+ _image_ram_start = .;
+
+ /* ================================= sram data =================================*/
+ SECTION_DATA_PROLOGUE(_SRAM_CODE_SECTION_NAME,,)
+ {
+ . = ALIGN(4);
+ _sram_data_start = .;
+ _sram_func_start = .;
+ *(.sleepfunc)
+ *(".sleepfunc.*")
+ *(.defunc)
+ *(.lvglfunc)
+ *(.vglite.func)
+ _sram_func_end = .;
+ }GROUP_DATA_LINK_IN(SRAM, ROMABLE_REGION)
+ _sram_func_ram_size = _sram_func_end - _sram_func_start;
+ _sram_func_rom_start = LOADADDR(_SRAM_CODE_SECTION_NAME);
+
+ SECTION_DATA_PROLOGUE(_SRAM_DATA_SECTION_NAME,,)
+ {
+ . = ALIGN(4);
+ *(.sleep.data*)
+ }GROUP_DATA_LINK_IN(SRAM, ROMABLE_REGION)
+ _sram_data_end = .;
+ _sram_data_ram_size = _sram_data_end - _sram_data_start;
+ _sram_data_rom_start = LOADADDR(_SRAM_CODE_SECTION_NAME);
+
+ /* ================================= psram data =================================*/
+ OVERLAY : NOCROSSREFS
+ {
+ .overlay.data.apfla {
+ *a1_fla_p.a:*(.data .data.*)
+ }
+
+ .overlay.data.apwma {
+ *a1_w13_p.a:*(.data .data.*)
+ }
+
+ .overlay.data.apape {
+ *a1_ape_p.a:*(.data .data.*)
+ }
+
+ .overlay.data.apmp3 {
+ *a1_mp3_p.a:*(.data .data.*)
+ }
+
+ .overlay.data.apwav {
+ *a1_wav_p.a:*(.data .data.*)
+ }
+
+ .overlay.data.apaac {
+ *a1_a13_p.a:*(.data .data.*)
+ }
+ } GROUP_DATA_LINK_IN(PSRAM, ROMABLE_REGION)
+
+ __ramdump_psram_start = ALIGN(4);
+
+ /* Located in generated directory. This file is populated by the
+ * zephyr_linker_sources() Cmake function.
+ */
+ #include
+ SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,)
+ {
+ __data_region_start = .;
+ __data_start = .;
+ *(.data)
+ *(".data.*")
+ *(".kernel.*")
+
+ /* Located in generated directory. This file is populated by the
+ * zephyr_linker_sources() Cmake function.
+ */
+ #include
+ __data_end = .;
+
+ } GROUP_DATA_LINK_IN(PSRAM, ROMABLE_REGION)
+ __data_size = __data_end - __data_start;
+ __data_load_start = LOADADDR(_DATA_SECTION_NAME);
+
+ __data_region_load_start = LOADADDR(_DATA_SECTION_NAME);
+
+ #include
+ #include
+ #include
+
+ __data_region_end = .;
+
+ /* ================================= sram bss =================================*/
+ SECTION_PROLOGUE(_SRAM_BSS_SECTION_NAME,(NOLOAD),)
+ {
+ __sram_bss_start = .;
+ *(.lvgl.bss*)
+ *(.vglite.bss*)
+ __sram_bss_end = .;
+ } GROUP_LINK_IN(SRAM)
+
+ /* ================================= psram bss ================================= */
+ OVERLAY : NOCROSSREFS
+ {
+ .overlay.bss.apfla {
+ *a1_fla_p.a:*(.bss .bss.* .scommon COMMON)
+ }
+
+ .overlay.bss.apwma {
+ *a1_w13_p.a:*(.bss .bss.* .scommon COMMON)
+ }
+
+ .overlay.bss.apape {
+ *a1_ape_p.a:*(.bss .bss.* .scommon COMMON)
+ }
+
+ .overlay.bss.apmp3 {
+ *a1_mp3_p.a:*(.bss .bss.* .scommon COMMON)
+ }
+
+ .overlay.bss.apwav {
+ *a1_wav_p.a:*(.bss .bss.* .scommon COMMON)
+ }
+
+ .overlay.bss.apaac {
+ *a1_a13_p.a:*(.bss .bss.* .scommon COMMON)
+ }
+ } GROUP_LINK_IN(PSRAM)
+
+ __psram_bss_start = .;
+ __bss_start = .;
+ SECTION_PROLOGUE(_BSS_SECTION_NAME,(NOLOAD),)
+ {
+ /*
+ * For performance, BSS section is assumed to be 4 byte aligned and
+ * a multiple of 4 bytes
+ */
+ . = ALIGN(4);
+ *(.bss)
+ *(.bss.*)
+ *(.scommon)
+ *(COMMON)
+ /*
+ * As memory is cleared in words only, it is simpler to ensure the BSS
+ * section ends on a 4 byte boundary. This wastes a maximum of 3 bytes.
+ */
+
+ } GROUP_LINK_IN(PSRAM)
+
+ SECTION_PROLOGUE(_PSRAM_BSS_SECTION_NAME,(NOLOAD),)
+ {
+ /*
+ * For performance, BSS section is assumed to be 4 byte aligned and
+ * a multiple of 4 bytes
+ */
+ . = ALIGN(4);
+ *(".kernel_bss.*")
+ *(.bthost_bss*)
+ *(.btsrv_bss*)
+ } GROUP_LINK_IN(PSRAM)
+
+ __bss_end = ALIGN(4);
+ __psram_bss_end = ALIGN(4);
+
+ /* ================================= sram noinit ================================= */
+ SECTION_PROLOGUE(_SRAM_NOINIT_SECTION_NAME,(NOLOAD),)
+ {
+ . = ALIGN(512);
+ __kernel_ram_start = .;
+ *(.srm_irq_vector*)
+ *(.interrupt.noinit.stack*)
+ *(.main.noinit.stack*)
+ *(.uisrv.noinit.stack*)
+ *(.lvgl.noinit.gpu*)
+ *(.spinand.bss.BLK_ARRAY*)
+ *(.spinand.bss.PAGE_CACHE_BUF*)
+ *(.system.bss.sdfs_cache*)
+ *(.diskio.cache.pool*)
+ *(.jpeg.bss.temp_buffer*)
+ *(.ram.noinit*)
+ *(.decompress.bss.cache*)
+ *(.ram.noinit.stack*)
+ *(.audio.bss.ouput_pcm*)
+ *(.audio.bss.input_pcm*)
+ *(.act_s2_not_save_mem*)
+
+ __ramdump_sram_end = ALIGN(4);
+
+ *(.lvgl.noinit.vdb*)
+ __kernel_ram_save_end = .;
+
+ }GROUP_LINK_IN(SRAM)
+
+ SECTION_PROLOGUE(_SRAM_SLEEP_SHUTDOWN_SECTION_NAME,(NOLOAD),)
+ {
+ . = ALIGN(512);
+ _sleep_shutdown_ram_start = .;
+ *(.sram.noinit.sufacebuffer*)
+ _sleep_shutdown_ram_end = .;
+ }GROUP_LINK_IN(SRAM)
+
+#ifdef CONFIG_SIM_FLASH_ACTS
+ SECTION_PROLOGUE(SIM_ACTLOG,(NOLOAD),)
+ {
+ . = ALIGN(4);
+ __sim_flash_ram_start = .;
+ *(.sram.noinit.actlog*)
+ __sim_flash_ram_end = .;
+ }GROUP_LINK_IN(SRAM)
+#endif
+
+ /* ================================= psram noinit ================================= */
+ SECTION_PROLOGUE(_NOINIT_SECTION_NAME,(NOLOAD),)
+ {
+ /*
+ * This section is used for non-initialized objects that
+ * will not be cleared during the boot process.
+ */
+ *(.noinit)
+ *(".noinit.*")
+ *(".kernel_noinit.*")
+
+ /* Located in generated directory. This file is populated by the
+ * zephyr_linker_sources() Cmake function.
+ */
+#include
+#ifdef CONFIG_SOC_NOINIT_LD
+#include
+#endif
+
+ } GROUP_LINK_IN(PSRAM)
+
+ SECTION_PROLOGUE(_PRAM_NOINIT_SECTION_NAME, (NOLOAD),SUBALIGN(64))
+ {
+ *(.lvgl.noinit.malloc*)
+ *(.vglite.noinit.mem_pool*)
+ *(.vglite.noinit.malloc*)
+#ifdef CONFIG_VIDEO_PLAYER
+ *(.VIDEO_PSRAM_REGION*)
+#endif
+ __ramdump_psram_end = ALIGN(4);
+
+ *(.UI_PSRAM_REGION*)
+ *(.RES_PSRAM_REGION*)
+ *(.BMPFONT_PSRAM_REGION*)
+ *(.font.bss.cache*)
+ *(.tile.bss.cache*)
+ } GROUP_LINK_IN(PSRAM)
+
+#ifdef CONFIG_DEBUG_TRACEDUMP
+ SECTION_PROLOGUE(_TRACEDUMP_SECTION_NAME,(NOLOAD),)
+ {
+ __tracedump_ram_start = .;
+ . = . + 0x10000;
+ __tracedump_ram_end = .;
+ } GROUP_LINK_IN(PSRAM)
+#endif
+
+ /* Define linker symbols */
+ _image_ram_end = .;
+ __kernel_ram_end = RAM_ADDR + RAM_SIZE;
+ __kernel_ram_size = __kernel_ram_end - __kernel_ram_start;
+
+ SECTION_PROLOGUE(_ATT_RUNTIME_DATA_SECTION_NAME,(NOLOAD),)
+ {
+ /*
+ * For att runtime data
+ */
+ . = ALIGN(4);
+ KEEP(*(.attruntimedata*))
+ }GROUP_LINK_IN(DSP_SRAM)
+
+ /* ================================= share ram noinit ================================= */
+ SECTION_DATA_PROLOGUE(_SHARE_RAM_BSS_SECTION_NAME, (NOLOAD),SUBALIGN(4))
+ {
+ __share_ram_start = .;
+ *(.DSP_SHARE_RAM*)
+ } GROUP_LINK_IN(SHARE_RAM)
+ __share_ram_end = .;
+
+ _end = .; /* end of image */
+
+ /* Located in generated directory. This file is populated by the
+ * zephyr_linker_sources() Cmake function.
+ */
+#include
+
+#include
+
+ /DISCARD/ : { *(.note.GNU-stack) }
+
+ SECTION_PROLOGUE(.ARM.attributes, 0,)
+ {
+ KEEP(*(.ARM.attributes))
+ KEEP(*(.gnu.attributes))
+ }
+
+ /* Must be last in romable region */
+ SECTION_PROLOGUE(.last_section,(NOLOAD),)
+ {
+
+ } GROUP_LINK_IN(ROMABLE_REGION)
+
+ /* To provide the image size as a const expression,
+ * calculate this value here. */
+ _flash_used = LOADADDR(.last_section) - __rom_region_start;
+
+}
diff --git a/action_technology_sdk/hello_world/linker_no_psram.ld b/action_technology_sdk/hello_world/linker_no_psram.ld
new file mode 100644
index 00000000..c34ed8ef
--- /dev/null
+++ b/action_technology_sdk/hello_world/linker_no_psram.ld
@@ -0,0 +1,575 @@
+/*
+ * Copyright (c) 2013-2014 Wind River Systems, Inc.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/**
+ * @file
+ * @brief Linker command/script file
+ *
+ * Linker script for the Cortex-M platforms.
+ */
+
+#include
+#include
+#include
+
+#include
+#include
+
+#ifdef CONFIG_SECTION_OVERLAY
+#include
+#endif
+
+/* physical address of RAM */
+#define ROMABLE_REGION FLASH
+#define RAMABLE_REGION SRAM
+
+#define ROM_ADDR (CONFIG_FLASH_BASE_ADDRESS + CONFIG_FLASH_LOAD_OFFSET)
+#define ROM_SIZE (CONFIG_FLASH_SIZE*1K - CONFIG_FLASH_LOAD_OFFSET)
+
+#define RAM_SIZE (CONFIG_SRAM_SIZE * 1K)
+#define RAM_ADDR CONFIG_SRAM_BASE_ADDRESS
+
+/* Set alignment to CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE
+ * to make linker section alignment comply with MPU granularity.
+ */
+#if defined(CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE)
+_region_min_align = CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE;
+#else
+/* If building without MPU support, use default 4-byte alignment. */
+_region_min_align = 4;
+#endif
+
+#define MPU_ALIGN(region_size) . = ALIGN(_region_min_align)
+
+MEMORY
+{
+ FLASH (rx) : ORIGIN = ROM_ADDR, LENGTH = ROM_SIZE
+ SRAM (wx) : ORIGIN = CONFIG_SRAM_BASE_ADDRESS, LENGTH = RAM_SIZE
+ SPI_CACHE (wx) : ORIGIN = 0x2FF58000, LENGTH = 0x8000
+ SHARE_RAM (wx) : ORIGIN = 0x2FF1AE00, LENGTH = 0x51FF
+ DSP_SRAM (wx) : ORIGIN = 0x30044000, LENGTH = 0x14000
+
+ /* Used by and documented in include/linker/intlist.ld */
+ IDT_LIST (wx) : ORIGIN = (RAM_ADDR + RAM_SIZE), LENGTH = 2K
+}
+
+ENTRY(CONFIG_KERNEL_ENTRY)
+
+SECTIONS
+{
+
+#include
+
+ /*
+ * .plt and .iplt are here according to 'arm-zephyr-elf-ld --verbose',
+ * before text section.
+ */
+ /DISCARD/ :
+ {
+ *(.plt)
+ }
+
+ /DISCARD/ :
+ {
+ *(.iplt)
+ }
+
+ GROUP_START(ROMABLE_REGION)
+
+ __rom_region_start = ROM_ADDR;
+
+ SECTION_PROLOGUE(rom_start,,)
+ {
+
+/* Located in generated directory. This file is populated by calling
+ * zephyr_linker_sources(ROM_START ...). This typically contains the vector
+ * table and debug information.
+ */
+#include
+
+ } GROUP_LINK_IN(ROMABLE_REGION)
+
+ SECTION_PROLOGUE(img_head,(ROM_ADDR+0x200),) AT (ROM_ADDR+0x200)
+ {
+ KEEP(*(.img_head*))
+ } GROUP_LINK_IN(ROMABLE_REGION)
+
+ SECTION_PROLOGUE(_ACTIONS_RODATA_SECTION_NAME,,)
+ {
+ . = ALIGN(4);
+ __app_entry_table = .;
+ KEEP(*(.app_entry))
+ __app_entry_end = .;
+
+ . = ALIGN(4);
+ __service_entry_table = .;
+ KEEP(*(.service_entry))
+ __service_entry_end = .;
+
+ . = ALIGN(4);
+ __view_entry_table = .;
+ KEEP(*(.view_entry))
+ __view_entry_end = .;
+
+ } GROUP_LINK_IN(ROMABLE_REGION)
+
+#ifdef CONFIG_SENSOR_ALGO
+
+#include
+
+#endif
+
+ SECTION_PROLOGUE(_TEXT_SECTION_NAME,,)
+ {
+ __text_region_start = .;
+
+#include
+
+ *(.text)
+ *(".text.*")
+ *(.gnu.linkonce.t.*)
+ /*
+ * These are here according to 'arm-zephyr-elf-ld --verbose',
+ * after .gnu.linkonce.t.*
+ */
+ *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+
+ } GROUP_LINK_IN(ROMABLE_REGION)
+
+ __text_region_end = .;
+
+/*#if defined (CONFIG_CPLUSPLUS)*/
+ SECTION_PROLOGUE(.ARM.extab,,)
+ {
+ /*
+ * .ARM.extab section containing exception unwinding information.
+ */
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ } GROUP_LINK_IN(ROMABLE_REGION)
+/*#endif*/
+
+ SECTION_PROLOGUE(.ARM.exidx,,)
+ {
+ /*
+ * This section, related to stack and exception unwinding, is placed
+ * explicitly to prevent it from being shared between multiple regions.
+ * It must be defined for gcc to support 64-bit math and avoid
+ * section overlap.
+ */
+ __start_unwind_idx = .;
+ __exidx_start = .;
+ #if defined (__GCC_LINKER_CMD__)
+ *(.ARM.exidx* gnu.linkonce.armexidx.*)
+ #endif
+ __exidx_end = .;
+ __stop_unwind_idx = .;
+ } GROUP_LINK_IN(ROMABLE_REGION)
+
+ __rodata_region_start = .;
+
+#include
+#include
+
+ SECTION_PROLOGUE(_RODATA_SECTION_NAME,,)
+ {
+ *(.rodata)
+ *(".rodata.*")
+ *(.gnu.linkonce.r.*)
+
+/* Located in generated directory. This file is populated by the
+ * zephyr_linker_sources() Cmake function.
+ */
+#include
+
+#ifdef CONFIG_SECTION_OVERLAY
+ . = ALIGN(4);
+ __overlay_table = .;
+ LONG(OVERLAY_TABLE_MAGIC)
+ /* overlay items count */
+ LONG(7)
+
+ /* for a1_wav_p.a */
+ LONG(OVERLAY_ID_LIBAPWAV)
+ LONG(0);
+ LONG(0);
+ LONG(0);
+ LONG(ABSOLUTE(ADDR(.overlay.data.apwav)));
+ LONG(SIZEOF(.overlay.data.apwav));
+ LONG(LOADADDR(.overlay.data.apwav));
+ LONG(ABSOLUTE(ADDR(.overlay.bss.apwav)));
+ LONG(SIZEOF(.overlay.bss.apwav));
+
+ /* for a1_mp3_p.a */
+ LONG(OVERLAY_ID_LIBAPMP3)
+ LONG(0);
+ LONG(0);
+ LONG(0);
+ LONG(ABSOLUTE(ADDR(.overlay.data.apmp3)));
+ LONG(SIZEOF(.overlay.data.apmp3));
+ LONG(LOADADDR(.overlay.data.apmp3));
+ LONG(ABSOLUTE(ADDR(.overlay.bss.apmp3)));
+ LONG(SIZEOF(.overlay.bss.apmp3));
+
+ /* for a1_ape_p.a */
+ LONG(OVERLAY_ID_LIBAPAPE)
+ LONG(0);
+ LONG(0);
+ LONG(0);
+ LONG(ABSOLUTE(ADDR(.overlay.data.apape)));
+ LONG(SIZEOF(.overlay.data.apape));
+ LONG(LOADADDR(.overlay.data.apape));
+ LONG(ABSOLUTE(ADDR(.overlay.bss.apape)));
+ LONG(SIZEOF(.overlay.bss.apape));
+
+ /* for a1_w13_p.a */
+ LONG(OVERLAY_ID_LIBAPWMA)
+ LONG(0);
+ LONG(0);
+ LONG(0);
+ LONG(ABSOLUTE(ADDR(.overlay.data.apwma)));
+ LONG(SIZEOF(.overlay.data.apwma));
+ LONG(LOADADDR(.overlay.data.apwma));
+ LONG(ABSOLUTE(ADDR(.overlay.bss.apwma)));
+ LONG(SIZEOF(.overlay.bss.apwma));
+
+ /* for a1_fla_p.a */
+ LONG(OVERLAY_ID_LIBADFLA)
+ LONG(0);
+ LONG(0);
+ LONG(0);
+ LONG(ABSOLUTE(ADDR(.overlay.data.apfla)));
+ LONG(SIZEOF(.overlay.data.apfla));
+ LONG(LOADADDR(.overlay.data.apfla));
+ LONG(ABSOLUTE(ADDR(.overlay.bss.apfla)));
+ LONG(SIZEOF(.overlay.bss.apfla));
+
+ /* for a1_a23_p.a */
+ LONG(OVERLAY_ID_LIBAPAAC)
+ LONG(0);
+ LONG(0);
+ LONG(0);
+ LONG(ABSOLUTE(ADDR(.overlay.data.apaac)));
+ LONG(SIZEOF(.overlay.data.apaac));
+ LONG(LOADADDR(.overlay.data.apaac));
+ LONG(ABSOLUTE(ADDR(.overlay.bss.apaac)));
+ LONG(SIZEOF(.overlay.bss.apaac));
+
+ . = ALIGN(4);
+#endif
+
+#include
+
+ /*
+ * For XIP images, in order to avoid the situation when __data_rom_start
+ * is 32-bit aligned, but the actual data is placed right after rodata
+ * section, which may not end exactly at 32-bit border, pad rodata
+ * section, so __data_rom_start points at data and it is 32-bit aligned.
+ *
+ * On non-XIP images this may enlarge image size up to 3 bytes. This
+ * generally is not an issue, since modern ROM and FLASH memory is
+ * usually 4k aligned.
+ */
+ . = ALIGN(4);
+ } GROUP_LINK_IN(ROMABLE_REGION)
+
+#include
+
+ __rodata_region_end = .;
+ MPU_ALIGN(__rodata_region_end -__rom_region_start);
+ __rom_region_end = .;
+ __rom_region_size = __rom_region_end - __rom_region_start;
+
+ GROUP_END(ROMABLE_REGION)
+
+
+ /*
+ * These are here according to 'arm-zephyr-elf-ld --verbose',
+ * before data section.
+ */
+ /DISCARD/ : {
+ *(.got.plt)
+ *(.igot.plt)
+ *(.got)
+ *(.igot)
+ }
+
+
+ /* Align the start of image SRAM with the
+ * minimum granularity required by MPU.
+ */
+ . = ALIGN(_region_min_align);
+ _image_ram_start = .;
+ SECTION_PROLOGUE(_SRAM_SLEEP_SHUTDOWN_SECTION_NAME,(NOLOAD),)
+ {
+ . = ALIGN(512);
+ _sleep_shutdown_ram_start = .;
+ *(".bss.parser_chuck_buffer*")
+ *(".bss.Decoder*")
+ *(".bss.g_tmpbuf*")
+ *(".bss.parser_stack")
+ *(".bss.codec_stack")
+ *(".bss.storage_block_buff*")
+ *(.audio.bss.ouput_pcm*)
+ *(.audio.bss.input_pcm*)
+ *(.trace.printk_buffer.noinit*)
+ _sleep_shutdown_ram_end = .;
+ . = ALIGN(32 * 1024);
+ }GROUP_LINK_IN(SPI_CACHE)
+
+ . = RAM_ADDR;
+ __ramdump_sram_start = .;
+
+ SECTION_DATA_PROLOGUE(_SRAM_CODE_SECTION_NAME,,)
+ {
+ _sram_data_start = .;
+ _sram_func_start = .;
+ *(.sleepfunc)
+ *(".sleepfunc.*")
+ *(.defunc)
+ *(.lvglfunc)
+ *(.vglite.func)
+ _sram_func_end = .;
+ }GROUP_DATA_LINK_IN(SRAM, ROMABLE_REGION)
+ _sram_func_ram_size = _sram_func_end - _sram_func_start;
+ _sram_func_rom_start = LOADADDR(_SRAM_CODE_SECTION_NAME);
+
+ SECTION_DATA_PROLOGUE(_SRAM_DATA_SECTION_NAME,,)
+ {
+ . = ALIGN(4);
+ *(.sleep.data*)
+ }GROUP_DATA_LINK_IN(SRAM, ROMABLE_REGION)
+ _sram_data_end = .;
+ _sram_data_ram_size = _sram_data_end - _sram_data_start;
+ _sram_data_rom_start = LOADADDR(_SRAM_CODE_SECTION_NAME);
+
+ OVERLAY : NOCROSSREFS
+ {
+ .overlay.data.apfla {
+ *a1_fla_p.a:*(.data .data.*)
+ }
+
+ .overlay.data.apwma {
+ *a1_w13_p.a:*(.data .data.*)
+ }
+
+ .overlay.data.apape {
+ *a1_ape_p.a:*(.data .data.*)
+ }
+
+ .overlay.data.apmp3 {
+ *a1_mp3_p.a:*(.data .data.*)
+ }
+
+ .overlay.data.apwav {
+ *a1_wav_p.a:*(.data .data.*)
+ }
+
+ .overlay.data.apaac {
+ *a1_a13_p.a:*(.data .data.*)
+ }
+ } GROUP_DATA_LINK_IN(SRAM, ROMABLE_REGION)
+
+
+ /* Located in generated directory. This file is populated by the
+ * zephyr_linker_sources() Cmake function.
+ */
+ #include
+ SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,)
+ {
+ __data_region_start = .;
+ __data_start = .;
+ *(.data)
+ *(".data.*")
+ *(".kernel.*")
+
+ /* Located in generated directory. This file is populated by the
+ * zephyr_linker_sources() Cmake function.
+ */
+ #include
+ __data_end = .;
+
+ } GROUP_DATA_LINK_IN(SRAM, ROMABLE_REGION)
+ __data_size = __data_end - __data_start;
+ __data_load_start = LOADADDR(_DATA_SECTION_NAME);
+
+ __data_region_load_start = LOADADDR(_DATA_SECTION_NAME);
+
+ #include
+ #include
+ #include
+
+ __data_region_end = .;
+
+ OVERLAY : NOCROSSREFS
+ {
+ .overlay.bss.apfla {
+ *a1_fla_p.a:*(.bss .bss.* .scommon COMMON)
+ }
+
+ .overlay.bss.apwma {
+ *a1_w13_p.a:*(.bss .bss.* .scommon COMMON)
+ }
+
+ .overlay.bss.apape {
+ *a1_ape_p.a:*(.bss .bss.* .scommon COMMON)
+ }
+
+ .overlay.bss.apmp3 {
+ *a1_mp3_p.a:*(.bss .bss.* .scommon COMMON)
+ }
+
+ .overlay.bss.apwav {
+ *a1_wav_p.a:*(.bss .bss.* .scommon COMMON)
+ }
+
+ .overlay.bss.apaac {
+ *a1_a13_p.a:*(.bss .bss.* .scommon COMMON)
+ }
+ } GROUP_LINK_IN(SRAM)
+
+ SECTION_PROLOGUE(_BSS_SECTION_NAME,(NOLOAD),)
+ {
+ /*
+ * For performance, BSS section is assumed to be 4 byte aligned and
+ * a multiple of 4 bytes
+ */
+ . = ALIGN(4);
+ __bss_start = .;
+ *(".kernel_bss.*")
+ *(.scommon)
+ *(.bss)
+ *(".bss.*")
+ *(COMMON)
+ *(.bthost_bss*)
+ *(.btsrv_bss*)
+ *(".bss.format_check_buf*")
+ *(.spinand.bss.BLK_ARRAY*)
+ *(.spinand.bss.PAGE_CACHE_BUF*)
+ *(.lvgl.bss*)
+ *(.vglite.bss*)
+ /*
+ * As memory is cleared in words only, it is simpler to ensure the BSS
+ * section ends on a 4 byte boundary. This wastes a maximum of 3 bytes.
+ */
+ __bss_end = ALIGN(4);
+ } GROUP_LINK_IN(SRAM)
+
+
+ SECTION_PROLOGUE(_ATT_RUNTIME_DATA_SECTION_NAME,(NOLOAD),)
+ {
+ /*
+ * For att runtime data
+ */
+ . = ALIGN(4);
+ KEEP(*(.attruntimedata*))
+ }GROUP_LINK_IN(DSP_SRAM)
+
+ SECTION_PROLOGUE(_NOINIT_SECTION_NAME,(NOLOAD),)
+ {
+ /*
+ * This section is used for non-initialized objects that
+ * will not be cleared during the boot process.
+ */
+#ifdef CONFIG_IRQ_VECTOR_IN_SRAM
+ *(.srm_irq_vector*)
+#endif
+ *(.noinit)
+ *(".noinit.*")
+ *(".kernel_noinit.*")
+ *(.lvgl.noinit.gpu*)
+ *(.vglite.noinit.mem_pool*)
+ *(.sys.noinit.heap*)
+ *(.interrupt.noinit.stack*)
+ *(.main.noinit.stack*)
+ *(.bat_work_queue.noinit.stack*)
+ *(.app.noinit.stack*)
+ *(.diskio.noinit.stack*)
+ *(.ram.noinit*)
+ *(.media.noinit.stack*)
+ *(.media.noinit.heap*)
+ *(.bthost.noinit.stack*)
+ *(.uisrv.noinit.stack*)
+ *(.diskio.cache.pool*)
+ *(.diskio.noinit.cache_pool*)
+ *(.osal.noinit.msg_pool*)
+ *(.sdfs.cache.pool*)
+ *(.trace.g_bk_trace.noinit*)
+ *(.ui.noinit.font_cache*)
+ *(.system.bss.sdfs_cache*)
+ *(.lvgl.noinit.malloc*)
+ *(.act_s2_not_save_mem*)
+
+ __ramdump_sram_end = ALIGN(4);
+
+ *(.lvgl.noinit.vdb*)
+ *(.UI_PSRAM_REGION*)
+ *(.RES_PSRAM_REGION*)
+ *(.BMPFONT_PSRAM_REGION*)
+ *(.decompress.bss.cache*)
+ *(.font.bss.cache*)
+ *(.tile.bss.cache*)
+
+ /* Located in generated directory. This file is populated by the
+ * zephyr_linker_sources() Cmake function.
+ */
+ #include
+ } GROUP_LINK_IN(SRAM)
+
+#ifdef CONFIG_DEBUG_TRACEDUMP
+ SECTION_PROLOGUE(_TRACEDUMP_SECTION_NAME,(NOLOAD),)
+ {
+ __tracedump_ram_start = .;
+ . = . + 0x8000;
+ __tracedump_ram_end = .;
+ } GROUP_LINK_IN(SRAM)
+#endif
+
+ SECTION_PROLOGUE(SIM_ACTLOG,(NOLOAD),)
+ {
+ __sim_flash_ram_start = .;
+ *(.sram.noinit.actlog*)
+ __sim_flash_ram_end = .;
+ }GROUP_LINK_IN(SRAM)
+
+ /* Define linker symbols */
+
+ _image_ram_end = .;
+
+ SECTION_DATA_PROLOGUE(_SHARE_RAM_BSS_SECTION_NAME, (NOLOAD),SUBALIGN(4))
+ {
+ __share_ram_start = .;
+ *(.DSP_SHARE_RAM*)
+ } GROUP_LINK_IN(SHARE_RAM)
+ __share_ram_end = .;
+
+ _end = .; /* end of image */
+
+ /* Located in generated directory. This file is populated by the
+ * zephyr_linker_sources() Cmake function.
+ */
+#include
+
+#include
+
+ /DISCARD/ : { *(.note.GNU-stack) }
+
+ SECTION_PROLOGUE(.ARM.attributes, 0,)
+ {
+ KEEP(*(.ARM.attributes))
+ KEEP(*(.gnu.attributes))
+ }
+
+ /* Must be last in romable region */
+ SECTION_PROLOGUE(.last_section,(NOLOAD),)
+ {
+
+ } GROUP_LINK_IN(ROMABLE_REGION)
+
+ /* To provide the image size as a const expression,
+ * calculate this value here. */
+ _flash_used = LOADADDR(.last_section) - __rom_region_start;
+
+}
diff --git a/action_technology_sdk/hello_world/linker_psram_4m.ld b/action_technology_sdk/hello_world/linker_psram_4m.ld
new file mode 100644
index 00000000..0d8a61a7
--- /dev/null
+++ b/action_technology_sdk/hello_world/linker_psram_4m.ld
@@ -0,0 +1,620 @@
+/*
+ * Copyright (c) 2013-2014 Wind River Systems, Inc.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/**
+ * @file
+ * @brief Linker command/script file
+ *
+ * Linker script for the Cortex-M platforms.
+ */
+
+#include
+#include
+#include
+
+#include
+#include
+
+#ifdef CONFIG_SECTION_OVERLAY
+#include
+#endif
+
+/* physical address of RAM */
+#define ROMABLE_REGION FLASH
+#define RAMABLE_REGION PSRAM
+
+#define ROM_ADDR (CONFIG_FLASH_BASE_ADDRESS + CONFIG_FLASH_LOAD_OFFSET)
+#define ROM_SIZE (CONFIG_FLASH_SIZE*1K - CONFIG_FLASH_LOAD_OFFSET)
+
+#define RAM_SIZE (CONFIG_SRAM_SIZE * 1K)
+#define RAM_ADDR CONFIG_SRAM_BASE_ADDRESS
+
+/* Set alignment to CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE
+ * to make linker section alignment comply with MPU granularity.
+ */
+#if defined(CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE)
+_region_min_align = CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE;
+#else
+/* If building without MPU support, use default 4-byte alignment. */
+_region_min_align = 4;
+#endif
+
+#define MPU_ALIGN(region_size) . = ALIGN(_region_min_align)
+
+MEMORY
+{
+ FLASH (rx) : ORIGIN = ROM_ADDR, LENGTH = ROM_SIZE
+ SRAM (wx) : ORIGIN = CONFIG_SRAM_BASE_ADDRESS, LENGTH = RAM_SIZE
+ PSRAM (wx) : ORIGIN = CONFIG_PSRAM_BASE_ADDRESS, LENGTH = CONFIG_PSRAM_SIZE * 1K
+ SHARE_RAM (wx) : ORIGIN = 0x2FF1AE00, LENGTH = 0x51FF
+ DSP_SRAM (wx) : ORIGIN = 0x30044000, LENGTH = 0x14000
+
+ /* Used by and documented in include/linker/intlist.ld */
+ IDT_LIST (wx) : ORIGIN = (RAM_ADDR + RAM_SIZE), LENGTH = 2K
+}
+
+ENTRY(CONFIG_KERNEL_ENTRY)
+
+SECTIONS
+{
+
+#include
+
+ /*
+ * .plt and .iplt are here according to 'arm-zephyr-elf-ld --verbose',
+ * before text section.
+ */
+ /DISCARD/ :
+ {
+ *(.plt)
+ }
+
+ /DISCARD/ :
+ {
+ *(.iplt)
+ }
+
+ GROUP_START(ROMABLE_REGION)
+
+ __rom_region_start = ROM_ADDR;
+
+ SECTION_PROLOGUE(rom_start,,)
+ {
+
+/* Located in generated directory. This file is populated by calling
+ * zephyr_linker_sources(ROM_START ...). This typically contains the vector
+ * table and debug information.
+ */
+#include
+
+ } GROUP_LINK_IN(ROMABLE_REGION)
+
+ SECTION_PROLOGUE(img_head,(ROM_ADDR+0x200),) AT (ROM_ADDR+0x200)
+ {
+ KEEP(*(.img_head*))
+ } GROUP_LINK_IN(ROMABLE_REGION)
+
+ SECTION_PROLOGUE(_ACTIONS_RODATA_SECTION_NAME,,)
+ {
+ . = ALIGN(4);
+ __app_entry_table = .;
+ KEEP(*(.app_entry))
+ __app_entry_end = .;
+
+ . = ALIGN(4);
+ __service_entry_table = .;
+ KEEP(*(.service_entry))
+ __service_entry_end = .;
+
+ . = ALIGN(4);
+ __view_entry_table = .;
+ KEEP(*(.view_entry))
+ __view_entry_end = .;
+
+ } GROUP_LINK_IN(ROMABLE_REGION)
+
+#ifdef CONFIG_SENSOR_ALGO
+
+#include
+
+#endif
+
+ SECTION_PROLOGUE(_TEXT_SECTION_NAME,,)
+ {
+ __text_region_start = .;
+
+#include
+
+ *(.text)
+ *(".text.*")
+ *(.gnu.linkonce.t.*)
+ /*
+ * These are here according to 'arm-zephyr-elf-ld --verbose',
+ * after .gnu.linkonce.t.*
+ */
+ *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+
+ } GROUP_LINK_IN(ROMABLE_REGION)
+
+ __text_region_end = .;
+
+/*#if defined (CONFIG_CPLUSPLUS)*/
+ SECTION_PROLOGUE(.ARM.extab,,)
+ {
+ /*
+ * .ARM.extab section containing exception unwinding information.
+ */
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ } GROUP_LINK_IN(ROMABLE_REGION)
+/*#endif*/
+
+ SECTION_PROLOGUE(.ARM.exidx,,)
+ {
+ /*
+ * This section, related to stack and exception unwinding, is placed
+ * explicitly to prevent it from being shared between multiple regions.
+ * It must be defined for gcc to support 64-bit math and avoid
+ * section overlap.
+ */
+ __start_unwind_idx = .;
+ __exidx_start = .;
+ #if defined (__GCC_LINKER_CMD__)
+ *(.ARM.exidx* gnu.linkonce.armexidx.*)
+ #endif
+ __exidx_end = .;
+ __stop_unwind_idx = .;
+ } GROUP_LINK_IN(ROMABLE_REGION)
+
+ __rodata_region_start = .;
+
+#include
+#include
+
+ SECTION_PROLOGUE(_RODATA_SECTION_NAME,,)
+ {
+ *(.rodata)
+ *(".rodata.*")
+ *(.gnu.linkonce.r.*)
+
+/* Located in generated directory. This file is populated by the
+ * zephyr_linker_sources() Cmake function.
+ */
+#include
+
+#ifdef CONFIG_SECTION_OVERLAY
+ . = ALIGN(4);
+ __overlay_table = .;
+ LONG(OVERLAY_TABLE_MAGIC)
+ /* overlay items count */
+ LONG(7)
+
+ /* for a1_wav_p.a */
+ LONG(OVERLAY_ID_LIBAPWAV)
+ LONG(0);
+ LONG(0);
+ LONG(0);
+ LONG(ABSOLUTE(ADDR(.overlay.data.apwav)));
+ LONG(SIZEOF(.overlay.data.apwav));
+ LONG(LOADADDR(.overlay.data.apwav));
+ LONG(ABSOLUTE(ADDR(.overlay.bss.apwav)));
+ LONG(SIZEOF(.overlay.bss.apwav));
+
+ /* for a1_mp3_p.a */
+ LONG(OVERLAY_ID_LIBAPMP3)
+ LONG(0);
+ LONG(0);
+ LONG(0);
+ LONG(ABSOLUTE(ADDR(.overlay.data.apmp3)));
+ LONG(SIZEOF(.overlay.data.apmp3));
+ LONG(LOADADDR(.overlay.data.apmp3));
+ LONG(ABSOLUTE(ADDR(.overlay.bss.apmp3)));
+ LONG(SIZEOF(.overlay.bss.apmp3));
+
+ /* for a1_ape_p.a */
+ LONG(OVERLAY_ID_LIBAPAPE)
+ LONG(0);
+ LONG(0);
+ LONG(0);
+ LONG(ABSOLUTE(ADDR(.overlay.data.apape)));
+ LONG(SIZEOF(.overlay.data.apape));
+ LONG(LOADADDR(.overlay.data.apape));
+ LONG(ABSOLUTE(ADDR(.overlay.bss.apape)));
+ LONG(SIZEOF(.overlay.bss.apape));
+
+ /* for a1_w13_p.a */
+ LONG(OVERLAY_ID_LIBAPWMA)
+ LONG(0);
+ LONG(0);
+ LONG(0);
+ LONG(ABSOLUTE(ADDR(.overlay.data.apwma)));
+ LONG(SIZEOF(.overlay.data.apwma));
+ LONG(LOADADDR(.overlay.data.apwma));
+ LONG(ABSOLUTE(ADDR(.overlay.bss.apwma)));
+ LONG(SIZEOF(.overlay.bss.apwma));
+
+ /* for a1_fla_p.a */
+ LONG(OVERLAY_ID_LIBADFLA)
+ LONG(0);
+ LONG(0);
+ LONG(0);
+ LONG(ABSOLUTE(ADDR(.overlay.data.apfla)));
+ LONG(SIZEOF(.overlay.data.apfla));
+ LONG(LOADADDR(.overlay.data.apfla));
+ LONG(ABSOLUTE(ADDR(.overlay.bss.apfla)));
+ LONG(SIZEOF(.overlay.bss.apfla));
+
+ /* for a1_a23_p.a */
+ LONG(OVERLAY_ID_LIBAPAAC)
+ LONG(0);
+ LONG(0);
+ LONG(0);
+ LONG(ABSOLUTE(ADDR(.overlay.data.apaac)));
+ LONG(SIZEOF(.overlay.data.apaac));
+ LONG(LOADADDR(.overlay.data.apaac));
+ LONG(ABSOLUTE(ADDR(.overlay.bss.apaac)));
+ LONG(SIZEOF(.overlay.bss.apaac));
+
+ . = ALIGN(4);
+#endif
+
+#include
+
+ /*
+ * For XIP images, in order to avoid the situation when __data_rom_start
+ * is 32-bit aligned, but the actual data is placed right after rodata
+ * section, which may not end exactly at 32-bit border, pad rodata
+ * section, so __data_rom_start points at data and it is 32-bit aligned.
+ *
+ * On non-XIP images this may enlarge image size up to 3 bytes. This
+ * generally is not an issue, since modern ROM and FLASH memory is
+ * usually 4k aligned.
+ */
+ . = ALIGN(4);
+ } GROUP_LINK_IN(ROMABLE_REGION)
+
+#include
+
+ __rodata_region_end = .;
+ MPU_ALIGN(__rodata_region_end -__rom_region_start);
+ __rom_region_end = .;
+ __rom_region_size = __rom_region_end - __rom_region_start;
+
+ GROUP_END(ROMABLE_REGION)
+
+
+ /*
+ * These are here according to 'arm-zephyr-elf-ld --verbose',
+ * before data section.
+ */
+ /DISCARD/ : {
+ *(.got.plt)
+ *(.igot.plt)
+ *(.got)
+ *(.igot)
+ }
+
+ . = RAM_ADDR;
+ __ramdump_sram_start = .;
+
+ /* Align the start of image SRAM with the
+ * minimum granularity required by MPU.
+ */
+ . = ALIGN(_region_min_align);
+ _image_ram_start = .;
+
+ /* ================================= sram data =================================*/
+ SECTION_DATA_PROLOGUE(_SRAM_CODE_SECTION_NAME,,)
+ {
+ . = ALIGN(4);
+ _sram_data_start = .;
+ _sram_func_start = .;
+ *(.sleepfunc)
+ *(".sleepfunc.*")
+ *(.defunc)
+ *(.lvglfunc)
+ *(.vglite.func)
+ _sram_func_end = .;
+ }GROUP_DATA_LINK_IN(SRAM, ROMABLE_REGION)
+ _sram_func_ram_size = _sram_func_end - _sram_func_start;
+ _sram_func_rom_start = LOADADDR(_SRAM_CODE_SECTION_NAME);
+
+ SECTION_DATA_PROLOGUE(_SRAM_DATA_SECTION_NAME,,)
+ {
+ . = ALIGN(4);
+ *(.sleep.data*)
+ }GROUP_DATA_LINK_IN(SRAM, ROMABLE_REGION)
+ _sram_data_end = .;
+ _sram_data_ram_size = _sram_data_end - _sram_data_start;
+ _sram_data_rom_start = LOADADDR(_SRAM_CODE_SECTION_NAME);
+
+ /* ================================= psram data =================================*/
+ OVERLAY : NOCROSSREFS
+ {
+ .overlay.data.apfla {
+ *a1_fla_p.a:*(.data .data.*)
+ }
+
+ .overlay.data.apwma {
+ *a1_w13_p.a:*(.data .data.*)
+ }
+
+ .overlay.data.apape {
+ *a1_ape_p.a:*(.data .data.*)
+ }
+
+ .overlay.data.apmp3 {
+ *a1_mp3_p.a:*(.data .data.*)
+ }
+
+ .overlay.data.apwav {
+ *a1_wav_p.a:*(.data .data.*)
+ }
+
+ .overlay.data.apaac {
+ *a1_a13_p.a:*(.data .data.*)
+ }
+ } GROUP_DATA_LINK_IN(PSRAM, ROMABLE_REGION)
+
+ __ramdump_psram_start = ALIGN(4);
+
+ /* Located in generated directory. This file is populated by the
+ * zephyr_linker_sources() Cmake function.
+ */
+ #include
+ SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,)
+ {
+ __data_region_start = .;
+ __data_start = .;
+ *(.data)
+ *(".data.*")
+ *(".kernel.*")
+
+ /* Located in generated directory. This file is populated by the
+ * zephyr_linker_sources() Cmake function.
+ */
+ #include
+ __data_end = .;
+
+ } GROUP_DATA_LINK_IN(PSRAM, ROMABLE_REGION)
+ __data_size = __data_end - __data_start;
+ __data_load_start = LOADADDR(_DATA_SECTION_NAME);
+
+ __data_region_load_start = LOADADDR(_DATA_SECTION_NAME);
+
+ #include
+ #include
+ #include
+
+ __data_region_end = .;
+ /* ================================= sram bss =================================*/
+ SECTION_PROLOGUE(_SRAM_BSS_SECTION_NAME,(NOLOAD),)
+ {
+ __sram_bss_start = .;
+ *(.bss.sys_pool_buffer*)
+ *(.bss.share_stack_area*)
+ *(.bss.btsrv_stack_area*)
+ *(.bss.meidasrv_stack_area*)
+ *(.bss.sensorsrv_stack_area*)
+ *(.bss.logsrv_stack*)
+ *(.bss.bat_work_stack*)
+ *(.bss.cache_buf*)
+ *(.bss.nor_cache_data*)
+ *(.bss.logsrv_svc_buf*)
+ *(.bss.heap_base*)
+ *(.bss.diskio_cache*)
+ *(.bss.state_map_table*)
+ *(.bss.Decoder*)
+ *(.bss.bt_mem_buffer*)
+ *(".kernel_bss.*")
+ *(.bthost_bss*)
+ *(.btsrv_bss*)
+ *(.lvgl.bss*)
+ *(.vglite.bss*)
+ __sram_bss_end = .;
+ } GROUP_LINK_IN(SRAM)
+ /* ================================= psram bss ================================= */
+ OVERLAY : NOCROSSREFS
+ {
+ .overlay.bss.apfla {
+ *a1_fla_p.a:*(.bss .bss.* .scommon COMMON)
+ }
+
+ .overlay.bss.apwma {
+ *a1_w13_p.a:*(.bss .bss.* .scommon COMMON)
+ }
+
+ .overlay.bss.apape {
+ *a1_ape_p.a:*(.bss .bss.* .scommon COMMON)
+ }
+
+ .overlay.bss.apmp3 {
+ *a1_mp3_p.a:*(.bss .bss.* .scommon COMMON)
+ }
+
+ .overlay.bss.apwav {
+ *a1_wav_p.a:*(.bss .bss.* .scommon COMMON)
+ }
+
+ .overlay.bss.apaac {
+ *a1_a13_p.a:*(.bss .bss.* .scommon COMMON)
+ }
+ } GROUP_LINK_IN(PSRAM)
+
+ __psram_bss_start = .;
+ __bss_start = .;
+ SECTION_PROLOGUE(_BSS_SECTION_NAME,(NOLOAD),)
+ {
+ /*
+ * For performance, BSS section is assumed to be 4 byte aligned and
+ * a multiple of 4 bytes
+ */
+ . = ALIGN(4);
+ *(.bss)
+ *(.bss.*)
+ *(.scommon)
+ *(COMMON)
+ /*
+ * As memory is cleared in words only, it is simpler to ensure the BSS
+ * section ends on a 4 byte boundary. This wastes a maximum of 3 bytes.
+ */
+
+ } GROUP_LINK_IN(PSRAM)
+
+ SECTION_PROLOGUE(_PSRAM_BSS_SECTION_NAME,(NOLOAD),)
+ {
+ /*
+ * For performance, BSS section is assumed to be 4 byte aligned and
+ * a multiple of 4 bytes
+ */
+ . = ALIGN(4);
+ } GROUP_LINK_IN(PSRAM)
+
+ __bss_end = ALIGN(4);
+ __psram_bss_end = ALIGN(4);
+
+ /* ================================= sram noinit ================================= */
+ SECTION_PROLOGUE(_SRAM_NOINIT_SECTION_NAME,(NOLOAD),)
+ {
+ . = ALIGN(512);
+ __kernel_ram_start = .;
+ *(.srm_irq_vector*)
+ *(.interrupt.noinit.stack*)
+ *(.main.noinit.stack*)
+ *(.uisrv.noinit.stack*)
+ *(.lvgl.noinit.gpu*)
+ *(.spinand.bss.BLK_ARRAY*)
+ *(.spinand.bss.PAGE_CACHE_BUF*)
+ *(.system.bss.sdfs_cache*)
+ *(.diskio.cache.pool*)
+ *(.jpeg.bss.temp_buffer*)
+ *(.ram.noinit*)
+ *(.decompress.bss.cache*)
+ *(.ram.noinit.stack*)
+ *(.audio.bss.ouput_pcm*)
+ *(.audio.bss.input_pcm*)
+ *(.act_s2_not_save_mem*)
+ *(.lvgl.noinit.malloc*)
+ *(.vglite.noinit.mem_pool*)
+ *(.vglite.noinit.malloc*)
+
+ __ramdump_sram_end = ALIGN(4);
+
+ *(.lvgl.noinit.vdb*)
+ __kernel_ram_save_end = .;
+
+ }GROUP_LINK_IN(SRAM)
+
+ SECTION_PROLOGUE(_SRAM_SLEEP_SHUTDOWN_SECTION_NAME,(NOLOAD),)
+ {
+ . = ALIGN(512);
+ _sleep_shutdown_ram_start = .;
+ *(.sram.noinit.sufacebuffer*)
+ _sleep_shutdown_ram_end = .;
+ }GROUP_LINK_IN(SRAM)
+
+#ifdef CONFIG_SIM_FLASH_ACTS
+ SECTION_PROLOGUE(SIM_ACTLOG,(NOLOAD),)
+ {
+ . = ALIGN(4);
+ __sim_flash_ram_start = .;
+ *(.sram.noinit.actlog*)
+ __sim_flash_ram_end = .;
+ }GROUP_LINK_IN(SRAM)
+#endif
+
+ /* ================================= psram noinit ================================= */
+ SECTION_PROLOGUE(_NOINIT_SECTION_NAME,(NOLOAD),)
+ {
+ /*
+ * This section is used for non-initialized objects that
+ * will not be cleared during the boot process.
+ */
+ *(.noinit)
+ *(".noinit.*")
+ *(".kernel_noinit.*")
+
+ /* Located in generated directory. This file is populated by the
+ * zephyr_linker_sources() Cmake function.
+ */
+#include
+#ifdef CONFIG_SOC_NOINIT_LD
+#include
+#endif
+
+ } GROUP_LINK_IN(SRAM)
+
+ SECTION_PROLOGUE(_PRAM_NOINIT_SECTION_NAME, (NOLOAD),SUBALIGN(64))
+ {
+ __ramdump_psram_end = ALIGN(4);
+
+ *(.UI_PSRAM_REGION*)
+ *(.RES_PSRAM_REGION*)
+ *(.BMPFONT_PSRAM_REGION*)
+ *(.font.bss.cache*)
+
+ *(.tile.bss.cache*)
+
+ } GROUP_LINK_IN(PSRAM)
+
+#ifdef CONFIG_DEBUG_TRACEDUMP
+ SECTION_PROLOGUE(_TRACEDUMP_SECTION_NAME,(NOLOAD),)
+ {
+ __tracedump_ram_start = .;
+ . = . + 0x8000;
+ __tracedump_ram_end = .;
+ } GROUP_LINK_IN(PSRAM)
+#endif
+
+ /* Define linker symbols */
+ _image_ram_end = .;
+ __kernel_ram_end = RAM_ADDR + RAM_SIZE;
+ __kernel_ram_size = __kernel_ram_end - __kernel_ram_start;
+
+ SECTION_PROLOGUE(_ATT_RUNTIME_DATA_SECTION_NAME,(NOLOAD),)
+ {
+ /*
+ * For att runtime data
+ */
+ . = ALIGN(4);
+ KEEP(*(.attruntimedata*))
+ }GROUP_LINK_IN(DSP_SRAM)
+
+ /* ================================= share ram noinit ================================= */
+ SECTION_DATA_PROLOGUE(_SHARE_RAM_BSS_SECTION_NAME, (NOLOAD),SUBALIGN(4))
+ {
+ __share_ram_start = .;
+ *(.DSP_SHARE_RAM*)
+ } GROUP_LINK_IN(SHARE_RAM)
+ __share_ram_end = .;
+
+ _end = .; /* end of image */
+
+ /* Located in generated directory. This file is populated by the
+ * zephyr_linker_sources() Cmake function.
+ */
+#include
+
+#include
+
+ /DISCARD/ : { *(.note.GNU-stack) }
+
+ SECTION_PROLOGUE(.ARM.attributes, 0,)
+ {
+ KEEP(*(.ARM.attributes))
+ KEEP(*(.gnu.attributes))
+ }
+
+ /* Must be last in romable region */
+ SECTION_PROLOGUE(.last_section,(NOLOAD),)
+ {
+
+ } GROUP_LINK_IN(ROMABLE_REGION)
+
+ /* To provide the image size as a const expression,
+ * calculate this value here. */
+ _flash_used = LOADADDR(.last_section) - __rom_region_start;
+
+}
diff --git a/action_technology_sdk/hello_world/nvram.prop b/action_technology_sdk/hello_world/nvram.prop
new file mode 100644
index 00000000..4209f5fd
--- /dev/null
+++ b/action_technology_sdk/hello_world/nvram.prop
@@ -0,0 +1,27 @@
+#
+# APPLICATION PROPERTIES
+#
+
+# volume config
+TONE_VOLUME=8
+TTS_MIN_VOLUME=2
+TTS_MAX_VOLUME=15
+BTPLAY_VOLUME=15
+BTCALL_VOLUME=15
+LOCALPLAY_VOLUME=15
+
+# poweroff
+AUTO_POWERDOWN=true
+MAX_SILIENT_TIME=300000
+
+# bluetooth
+BT_PRE_NAME=LEOPARD_
+#BT_NAME=LARK_F44EFD001122
+#BT_MAC=F44EFD001122
+#BT_LE_NAME=LARK_F44EFD00038A
+#BT_TEST_MODE=1
+
+# end of APPLICATION PROPERTIES
+
+# USB UART
+#USB_UART_MODE=true
diff --git a/action_technology_sdk/hello_world/prebuild/ATT/SutPatch.bin b/action_technology_sdk/hello_world/prebuild/ATT/SutPatch.bin
new file mode 100644
index 00000000..7b4d68d7
--- /dev/null
+++ b/action_technology_sdk/hello_world/prebuild/ATT/SutPatch.bin
@@ -0,0 +1 @@
+empty
\ No newline at end of file
diff --git a/action_technology_sdk/hello_world/prebuild/ATT/acttest.ap b/action_technology_sdk/hello_world/prebuild/ATT/acttest.ap
new file mode 100644
index 00000000..7b4d68d7
--- /dev/null
+++ b/action_technology_sdk/hello_world/prebuild/ATT/acttest.ap
@@ -0,0 +1 @@
+empty
\ No newline at end of file
diff --git a/action_technology_sdk/hello_world/prebuild/ATT/att_adfu.bin b/action_technology_sdk/hello_world/prebuild/ATT/att_adfu.bin
new file mode 100644
index 00000000..59260ec9
Binary files /dev/null and b/action_technology_sdk/hello_world/prebuild/ATT/att_adfu.bin differ
diff --git a/action_technology_sdk/hello_world/prebuild/ATT/atttest.bin b/action_technology_sdk/hello_world/prebuild/ATT/atttest.bin
new file mode 100644
index 00000000..76bd67ff
Binary files /dev/null and b/action_technology_sdk/hello_world/prebuild/ATT/atttest.bin differ
diff --git a/action_technology_sdk/hello_world/prebuild/ATT/config.txt b/action_technology_sdk/hello_world/prebuild/ATT/config.txt
new file mode 100644
index 00000000..991a50a5
Binary files /dev/null and b/action_technology_sdk/hello_world/prebuild/ATT/config.txt differ
diff --git a/action_technology_sdk/hello_world/prebuild/ATT/config.xml b/action_technology_sdk/hello_world/prebuild/ATT/config.xml
new file mode 100644
index 00000000..9c04cbcd
--- /dev/null
+++ b/action_technology_sdk/hello_world/prebuild/ATT/config.xml
@@ -0,0 +1,577 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/action_technology_sdk/hello_world/prebuild/ATT/resource.zip b/action_technology_sdk/hello_world/prebuild/ATT/resource.zip
new file mode 100644
index 00000000..9aa79543
Binary files /dev/null and b/action_technology_sdk/hello_world/prebuild/ATT/resource.zip differ
diff --git a/action_technology_sdk/hello_world/prebuild/config/alcfg.bin b/action_technology_sdk/hello_world/prebuild/config/alcfg.bin
new file mode 100644
index 00000000..a810f911
Binary files /dev/null and b/action_technology_sdk/hello_world/prebuild/config/alcfg.bin differ
diff --git a/action_technology_sdk/hello_world/prebuild/config/cfg_mic.bin b/action_technology_sdk/hello_world/prebuild/config/cfg_mic.bin
new file mode 100644
index 00000000..35301906
Binary files /dev/null and b/action_technology_sdk/hello_world/prebuild/config/cfg_mic.bin differ
diff --git a/action_technology_sdk/hello_world/prebuild/config/config.xml b/action_technology_sdk/hello_world/prebuild/config/config.xml
new file mode 100644
index 00000000..ee65499c
--- /dev/null
+++ b/action_technology_sdk/hello_world/prebuild/config/config.xml
@@ -0,0 +1,268 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/action_technology_sdk/hello_world/prebuild/config/config_al.h b/action_technology_sdk/hello_world/prebuild/config/config_al.h
new file mode 100644
index 00000000..51aef359
--- /dev/null
+++ b/action_technology_sdk/hello_world/prebuild/config/config_al.h
@@ -0,0 +1,18 @@
+
+#ifndef __CONFIG_AL_H__
+#define __CONFIG_AL_H__
+
+
+#define CFG_ID_BT_MUSIC_DAE_AL 0x60
+#define CFG_SIZE_BT_MUSIC_DAE_AL 1024
+
+#define CFG_ID_BT_CALL_DAE_AL 0x61
+#define CFG_SIZE_BT_CALL_DAE_AL 512
+
+#define CFG_ID_BT_CALL_QUALITY_AL 0x62
+#define CFG_SIZE_BT_CALL_QUALITY_AL 296
+
+
+#endif // __CONFIG_AL_H__
+
+
diff --git a/action_technology_sdk/hello_world/prebuild/config/config_ext.xml b/action_technology_sdk/hello_world/prebuild/config/config_ext.xml
new file mode 100644
index 00000000..4fa99c84
--- /dev/null
+++ b/action_technology_sdk/hello_world/prebuild/config/config_ext.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/action_technology_sdk/hello_world/prebuild/config/config_factory.xml b/action_technology_sdk/hello_world/prebuild/config/config_factory.xml
new file mode 100644
index 00000000..de3ed16e
--- /dev/null
+++ b/action_technology_sdk/hello_world/prebuild/config/config_factory.xml
@@ -0,0 +1,265 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/action_technology_sdk/hello_world/prebuild/config/configal.bin b/action_technology_sdk/hello_world/prebuild/config/configal.bin
new file mode 100644
index 00000000..570696e0
Binary files /dev/null and b/action_technology_sdk/hello_world/prebuild/config/configal.bin differ
diff --git a/action_technology_sdk/hello_world/prebuild/config/defcfg.bin b/action_technology_sdk/hello_world/prebuild/config/defcfg.bin
new file mode 100644
index 00000000..16d64991
Binary files /dev/null and b/action_technology_sdk/hello_world/prebuild/config/defcfg.bin differ
diff --git a/action_technology_sdk/hello_world/prebuild/config/extcfg.bin b/action_technology_sdk/hello_world/prebuild/config/extcfg.bin
new file mode 100644
index 00000000..ad152657
Binary files /dev/null and b/action_technology_sdk/hello_world/prebuild/config/extcfg.bin differ
diff --git a/action_technology_sdk/hello_world/prebuild/config/syscfg.bin b/action_technology_sdk/hello_world/prebuild/config/syscfg.bin
new file mode 100644
index 00000000..ad152657
Binary files /dev/null and b/action_technology_sdk/hello_world/prebuild/config/syscfg.bin differ
diff --git a/action_technology_sdk/hello_world/prebuild/config/usrcfg.bin b/action_technology_sdk/hello_world/prebuild/config/usrcfg.bin
new file mode 100644
index 00000000..ad152657
Binary files /dev/null and b/action_technology_sdk/hello_world/prebuild/config/usrcfg.bin differ
diff --git a/action_technology_sdk/hello_world/prebuild/fw_configuration.cfg b/action_technology_sdk/hello_world/prebuild/fw_configuration.cfg
new file mode 100644
index 00000000..16a14078
--- /dev/null
+++ b/action_technology_sdk/hello_world/prebuild/fw_configuration.cfg
@@ -0,0 +1,36 @@
+
+
+//configuration
+CONFIG_XML = "config.xml";
+CONFIG_COMPACT_XML = "config_factory.xml";
+CONFIG_EXT_XML = "config_ext.xml";
+CONFIG_AL_XML = "configal.bin";
+
+//default configuration file
+CONFIG_DEFAULT = "defcfg.bin";
+
+//new modified configuration file
+CONFIG_SYS = "syscfg.bin";
+
+//new modified configuration file
+CONFIG_NEW = "usrcfg.bin";
+
+CFG_AL_PARA = "extcfg.bin";
+CFG_AL_PARA = "alcfg.bin";
+
+// mic configuration file
+CFG_MIC = "cfg_mic.bin";
+
+// tone file name extension
+TONE_FILE_KEY = "ACT, PCM, MP3";
+
+// config file name keyword, config file may in temp folder or in FW
+CFG_FILE_KEY = "CONFIG_DEFAULT, CONFIG_NEW, CONFIG_EXT_NEW, CFG_MIC, CFG_AL_PARA, TONE_SDFS";
+
+//配置项说明,每个配置项以分号(';')分隔: 配置项名, ID, offset, length
+CONFIG_PATTERN = "KEEP_USER_DATA, 0x03, 0, 1; KEEP_FACTORY_DATA, 0x03, 1, 1";
+CONFIG_PATTERN = "ERASE_ENTIRE_STORAGE, 0x03, 2, 1";
+
+// OTA binary include file name
+OTA_FILE_KEY = "ota.xml, app.bin, mbrec.bin, param.bin";
+
diff --git a/action_technology_sdk/hello_world/prj.conf b/action_technology_sdk/hello_world/prj.conf
new file mode 100644
index 00000000..457e08d6
--- /dev/null
+++ b/action_technology_sdk/hello_world/prj.conf
@@ -0,0 +1,149 @@
+#=========== GUI config ===========
+CONFIG_SURFACE_ZERO_BUFFER=y
+CONFIG_UI_MEMORY_MANAGER=y
+CONFIG_UI_MEMORY_DEBUG=n
+CONFIG_MEM_GUARD=n
+
+#actions RES manager
+CONFIG_RES_MANAGER=y
+CONFIG_RES_MANAGER_USE_STYLE_MMAP=y
+CONFIG_RES_MANAGER_SKIP_PRELOAD=n
+
+#actions freetype font
+CONFIG_FREETYPE_FONT=y
+
+#actions Bitmap font
+CONFIG_BITMAP_FONT=y
+CONFIG_BITMAP_FONT_SUPPORT_EMOJI=y
+CONFIG_EMOJI_FONT_USE_MMAP=y
+
+#lvgl config
+CONFIG_LVGL=y
+CONFIG_LVGL_USE_BITMAP_FONT=y
+CONFIG_LVGL_USE_FREETYPE_FONT=y
+CONFIG_LVGL_USE_RES_MANAGER=y
+CONFIG_LV_VDB_NUM=2
+CONFIG_LV_CONF_MINIMAL=y
+CONFIG_LV_COLOR_DEPTH_16=y
+CONFIG_LV_USE_PRIVATE_API=n
+CONFIG_LV_DRAW_BUF_ALIGN=64
+CONFIG_LV_USE_DRAW_CUSTOM_GPU_INIT=y
+CONFIG_LV_USE_DRAW_ACTS_DMA2D=y
+CONFIG_LV_USE_DRAW_VG_LITE=y
+CONFIG_LV_VG_LITE_USE_GPU_INIT=y
+CONFIG_LV_VG_LITE_COMMAND_BUFFER_SIZE=32
+CONFIG_LV_VG_LITE_FLUSH_MAX_COUNT=0
+CONFIG_LV_VG_LITE_GRAD_CACHE_CNT=2
+CONFIG_LV_VG_LITE_STROKE_CACHE_CNT=1
+CONFIG_LV_USE_VECTOR_GRAPHIC=y
+CONFIG_LV_BIN_DECODER_RAM_LOAD=y
+CONFIG_LV_USE_ETC2=y
+CONFIG_LV_USE_IMGFONT=y
+CONFIG_LV_USE_SNAPSHOT=y
+CONFIG_LV_FONT_DEFAULT_MONTSERRAT_48=y
+CONFIG_LV_TXT_ENC_UTF8=y
+CONFIG_LV_TXT_BREAK_CHARS=""
+CONFIG_LV_USE_LOG=y
+CONFIG_LV_USE_ASSERT_NULL=y
+CONFIG_LV_USE_ASSERT_MALLOC=y
+CONFIG_LV_USE_STRACE=y
+CONFIG_LV_USE_STRACE_OBJ_DRAW=n
+CONFIG_LV_USE_STRACE_TASK_DRAW=n
+CONFIG_LV_USE_FLEX=y
+CONFIG_LV_USE_GRID=y
+CONFIG_LV_USE_ARC=y
+CONFIG_LV_USE_BUTTON=y
+CONFIG_LV_USE_BARCODE=y
+CONFIG_LV_USE_CANVAS=y
+CONFIG_LV_USE_CHART=y
+CONFIG_LV_USE_IMAGE=y
+CONFIG_LV_USE_IMAGEBUTTON=y
+CONFIG_LV_USE_LABEL=y
+CONFIG_LV_USE_SLIDER=y
+CONFIG_LV_USE_TILEVIEW=y
+CONFIG_LV_USE_QRCODE=y
+
+#=========== system base config ===========
+CONFIG_ACTIONS_FRAMEWORK=y
+CONFIG_ACTIONS_FRAMEWORK_DISPLAY=y
+CONFIG_THREAD_TIMER=y
+CONFIG_ACTIONS_UTILS=y
+CONFIG_CORE=y
+CONFIG_SYSTEM=y
+CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000
+CONFIG_PRINTK_TIME_FREFIX=n
+CONFIG_DMA_PRINTK_BUF_SIZE=4096
+CONFIG_SLEEP_SENSOR_RUN_ON_NOR=y
+CONFIG_SLEEP_COPY_SRAM_FOR_SENSOR=n
+CONFIG_SLEEP_MEMORY_CHECK_INTEGRITY=n
+CONFIG_THREAD_RUNTIME_STATS=y
+CONFIG_SYSTEM_SHELL=y
+CONFIG_TASK_WDT=y
+CONFIG_TASK_WDT_TIMEOUT=5000
+
+#power config
+CONFIG_POWER=y
+
+#input config
+CONFIG_INPUT=y
+CONFIG_INPUT_POINTER=y
+CONFIG_INPUT_KEYPAD=y
+CONFIG_ACTS_RING_BUFFER=y
+
+#standby config
+CONFIG_SYS_STANDBY=y
+CONFIG_AUTO_STANDBY_TIME_SEC=10
+CONFIG_SYS_WAKELOCK=y
+
+#system message config
+CONFIG_NUM_MBOX_ASYNC_MSGS=35
+CONFIG_MESSAGE_DEBUG=n
+
+#property config
+CONFIG_PROPERTY=y
+CONFIG_PROPERTY_CACHE=y
+
+#watchdog config
+CONFIG_WATCHDOG=n
+CONFIG_WDOG_ACTS=n
+CONFIG_WDT_MODE_RESET=n
+
+#dvfs config
+CONFIG_DVFS=y
+CONFIG_ACTS_DVFS_DYNAMIC_LEVEL=y
+
+#memory config
+CONFIG_MEMORY=y
+CONFIG_SYS_MEMORY_DEBUG=n
+CONFIG_APP_USED_MEM_POOL=y
+CONFIG_RAM_POOL_PAGE_NUM=9
+CONFIG_HEAP_MEM_POOL_SIZE=2560
+
+#system stack config
+CONFIG_MAIN_STACK_SIZE=4096
+CONFIG_IDLE_STACK_SIZE=4096
+CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048
+
+# sdfs config
+CONFIG_SD_FS=y
+CONFIG_SDFS_MANAGER=y
+CONFIG_MUTIPLE_VOLUME_MANAGER=y
+CONFIG_SD_FILE_MAX=24
+CONFIG_DISKIO_CACHE=n
+
+#=========== display config ===========
+CONFIG_DISPLAY=y
+CONFIG_DISPLAY_LOG_LEVEL_INF=y
+CONFIG_DISPLAY_CONTROLLER=y
+CONFIG_DISPLAY_ENGINE=y
+CONFIG_DISPLAY_ENGINE_INSTANCE_NUM=4
+CONFIG_DMA2D_HAL=y
+CONFIG_DMA2D_LITE=y
+CONFIG_DISPLAY_WORK_Q=y
+CONFIG_DISPLAY_WORK_Q_STACK_SIZE=1536
+
+#=========== libc config ===========
+CONFIG_NEWLIB_LIBC=y
+CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y
+CONFIG_NEWLIB_LIBC_NANO=y
+CONFIG_COMPILER_OPT="-Wno-attributes -Wno-array-bounds -Wno-uninitialized"
diff --git a/action_technology_sdk/hello_world/src/CMakeLists.txt b/action_technology_sdk/hello_world/src/CMakeLists.txt
new file mode 100644
index 00000000..fbbdc6f7
--- /dev/null
+++ b/action_technology_sdk/hello_world/src/CMakeLists.txt
@@ -0,0 +1,10 @@
+# SPDX-License-Identifier: Apache-2.0
+
+zephyr_include_directories(
+ .
+)
+
+target_sources(app PRIVATE
+ main.c
+ app_msg.c
+)
diff --git a/action_technology_sdk/hello_world/src/app_msg.c b/action_technology_sdk/hello_world/src/app_msg.c
new file mode 100644
index 00000000..f9b1bbda
--- /dev/null
+++ b/action_technology_sdk/hello_world/src/app_msg.c
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2019 Actions Semiconductor Co, Inc.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include
+#include "app_msg.h"
+
+int app_msg_init(void)
+{
+ bool ret;
+ const char *name = k_thread_name_get(os_current_get());
+
+ ret = msg_manager_add_listener((char*)name, os_current_get());
+
+ return (ret ? 0 : -1);
+}
+
+int app_msg_send(const char* receiver, uint8_t type, uint8_t cmd)
+{
+ bool ret;
+ struct app_msg msg;
+
+ memset(&msg, 0, sizeof(msg));
+ msg.type = type;
+ msg.cmd = cmd;
+ ret = send_async_msg((char*)receiver, &msg);
+
+ return (ret ? 0 : -1);
+}
+
diff --git a/action_technology_sdk/hello_world/src/app_msg.h b/action_technology_sdk/hello_world/src/app_msg.h
new file mode 100644
index 00000000..21e48747
--- /dev/null
+++ b/action_technology_sdk/hello_world/src/app_msg.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2019 Actions Semiconductor Co., Ltd
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/**
+ * @file
+ * @brief application message interface
+ */
+
+#ifndef __APP_MSG_H__
+#define __APP_MSG_H__
+
+#include
+
+// app name
+#define APP_NAME "main"
+
+// app message type
+enum APP_MSG_TYPE {
+ MSG_UI = MSG_APP_MESSAGE_START,
+ MSG_OTA,
+};
+
+// app message cmd
+enum APP_MSG_CMD {
+ CMD_NULL = 0,
+ CMD_SCREEN_OFF,
+ CMD_SCREEN_ON,
+};
+
+int app_msg_init(void);
+int app_msg_send(const char* receiver, uint8_t type, uint8_t cmd);
+
+#endif /* __APP_MSG_H__ */
+
diff --git a/action_technology_sdk/hello_world/src/main.c b/action_technology_sdk/hello_world/src/main.c
new file mode 100644
index 00000000..a6d25671
--- /dev/null
+++ b/action_technology_sdk/hello_world/src/main.c
@@ -0,0 +1,237 @@
+/*
+ * Copyright (c) 2020 Actions Technology Co., Ltd
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*********************
+ * INCLUDES
+ *********************/
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#ifdef CONFIG_DVFS
+#include
+#endif
+#include "app_msg.h"
+
+/**********************
+ * STATIC PROTOTYPES
+ **********************/
+
+static void _disp_vsync_cb(const lvx_display_observer_t * observer, uint32_t timestamp);
+static void _disp_state_cb(const lvx_display_observer_t * observer, uint32_t state);
+
+/**********************
+ * STATIC VARIABLES
+ **********************/
+
+static const lvx_display_observer_t g_disp_observer = {
+ .vsync_cb = _disp_vsync_cb,
+ .state_cb = _disp_state_cb,
+};
+
+static uint8_t g_disp_active = 1;
+
+static K_SEM_DEFINE(g_disp_vsync_sem, 0, 1);
+
+/**********************
+ * STATIC FUNCTIONS
+ **********************/
+
+static void _disp_vsync_cb(const lvx_display_observer_t *observer, uint32_t timestamp)
+{
+ k_sem_give(&g_disp_vsync_sem);
+}
+
+static void _disp_state_cb(const lvx_display_observer_t *observer, uint32_t state)
+{
+ switch (state) {
+ case LVX_DISPLAY_STATE_OFF:
+ app_msg_send(APP_NAME, MSG_UI, CMD_SCREEN_OFF);
+ break;
+ case LVX_DISPLAY_STATE_ON:
+ app_msg_send(APP_NAME, MSG_UI, CMD_SCREEN_ON);
+ break;
+ default:
+ break;
+ }
+}
+
+static void _keypad_callback(struct device *dev, struct input_value *val)
+{
+ static uint32_t last_value = 0;
+
+ SYS_LOG_INF("type: %d, code:%d, value:%d\n",
+ val->keypad.type, val->keypad.code, val->keypad.value);
+
+ if (last_value != val->keypad.value) {
+ // screen on
+ sys_wake_lock(FULL_WAKE_LOCK);
+ sys_wake_unlock(FULL_WAKE_LOCK);
+
+ last_value = val->keypad.value;
+ }
+}
+
+static void _keypad_init(void)
+{
+ struct device *onoff_dev;
+
+ onoff_dev = (struct device *)device_get_binding(CONFIG_INPUT_DEV_ACTS_ONOFF_KEY_NAME);
+ if (!onoff_dev) {
+ SYS_LOG_ERR("cannot found key dev %s", CONFIG_INPUT_DEV_ACTS_ONOFF_KEY_NAME);
+ return;
+ }
+
+ input_dev_enable(onoff_dev);
+ input_dev_register_notify(onoff_dev, _keypad_callback);
+}
+
+static void _lvgl_init(void)
+{
+ /* LVGL initialize */
+ lvx_port_init();
+ lvx_display_add_observer(&g_disp_observer);
+ lvx_refr_set_manual(NULL);
+
+ /* Set background color */
+ lv_obj_set_style_bg_color(lv_screen_active(), lv_color_black(), 0);
+ lv_obj_set_style_bg_opa(lv_screen_active(), LV_OPA_COVER, 0);
+
+ // init font
+ lvgl_bitmap_font_init(NULL);
+ lvgl_freetype_font_init();
+}
+
+static void _lvgl_set_y_anim_cb(void *label, int32_t val)
+{
+ static const lv_color_t test_colors[] = {
+ LV_COLOR_MAKE(100, 0, 50), LV_COLOR_MAKE(21, 10, 37),
+ LV_COLOR_MAKE(0, 100, 100), LV_COLOR_MAKE(123, 87, 199),
+ LV_COLOR_MAKE(100, 0, 50), LV_COLOR_MAKE(21, 10, 37),
+ LV_COLOR_MAKE(0, 100, 100), LV_COLOR_MAKE(123, 87, 199),
+ };
+ static uint8_t color_idx = 0;
+
+ if (val == 0) {
+ lv_obj_set_style_text_color(label, test_colors[color_idx], LV_PART_MAIN);
+ if (++color_idx >= ARRAY_SIZE(test_colors))
+ color_idx = 0;
+ }
+
+ lv_obj_set_y(label, val);
+}
+
+static void _lvgl_anim_demo(const char* text)
+{
+ const lv_font_t *font = lv_font_default();
+
+ lv_obj_t * label = lv_label_create(lv_screen_active());
+ lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 0);
+ lv_obj_set_style_text_font(label, font, LV_PART_MAIN);
+ lv_obj_set_style_text_color(label, lv_color_black(), LV_PART_MAIN);
+ lv_label_set_text(label, text);
+
+ lv_anim_t anim;
+ lv_anim_init(&anim);
+ lv_anim_set_time(&anim, 2000);
+ lv_anim_set_playback_time(&anim, 2000);
+ lv_anim_set_repeat_count(&anim, LV_ANIM_REPEAT_INFINITE);
+ lv_anim_set_var(&anim, label);
+ lv_anim_set_exec_cb(&anim, _lvgl_set_y_anim_cb);
+ lv_anim_set_values(&anim, 0, lv_obj_get_height(lv_screen_active()) - lv_font_get_line_height(font));
+ lv_anim_start(&anim);
+}
+
+static void _process_ui_msg(struct app_msg *msg)
+{
+ switch (msg->cmd) {
+ case CMD_SCREEN_OFF:
+ g_disp_active = 0;
+ break;
+ case CMD_SCREEN_ON:
+ g_disp_active = 1;
+ lv_obj_invalidate(lv_screen_active());
+ break;
+ default:
+ break;
+ }
+}
+
+/**********************
+ * GLOBAL FUNCTIONS
+ **********************/
+
+int main(void)
+{
+ // init system
+ mem_manager_init();
+ system_init();
+
+ // init app msg
+ app_msg_init();
+
+ // init lvgl
+ _lvgl_init();
+
+ _lvgl_anim_demo("Hello world!");
+
+ // init key device
+ _keypad_init();
+
+ system_ready();
+
+#ifdef CONFIG_ACTS_DVFS_DYNAMIC_LEVEL
+ dvfs_unset_level(DVFS_LEVEL_HIGH_PERFORMANCE, "init");
+ dvfs_set_level(DVFS_LEVEL_NORMAL, "launcher");
+#endif
+
+ while (1) {
+ struct app_msg msg;
+
+ os_strace_void(SYS_TRACE_ID_GUI_TASK);
+ uint32_t lv_timeout = lv_task_handler();
+ os_strace_end_call(SYS_TRACE_ID_GUI_TASK);
+
+ uint32_t tt_timeout = thread_timer_next_timeout();
+ uint32_t timeout = MIN(lv_timeout, tt_timeout);
+
+ int rc = poll_msg(&msg, &g_disp_vsync_sem, timeout);
+ switch (rc) {
+ case OS_POLL_MSG:
+ SYS_LOG_INF("msg type=0x%x, cmd=0x%x", msg.type, msg.cmd);
+ switch (msg.type) {
+ case MSG_UI:
+ _process_ui_msg(&msg);
+ break;
+ }
+ if (msg.callback != NULL) {
+ msg.callback(&msg, 0, NULL);
+ }
+ break;
+
+ case OS_POLL_SEM:
+ if (g_disp_active) {
+ lvx_refr_all();
+ }
+ break;
+ }
+
+ thread_timer_handle_expired();
+ }
+
+ return 0;
+}