added gupje
This commit is contained in:
parent
0176439498
commit
8fac85afd5
0
source/gupje_device/.gitignore
vendored
Normal file
0
source/gupje_device/.gitignore
vendored
Normal file
17
source/gupje_device/Makefile
Normal file
17
source/gupje_device/Makefile
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
ifeq ($(ANDROID_NDK_ROOT),)
|
||||||
|
$(error Error : Set the env variable 'ANDROID_NDK_ROOT' with the path of the Android NDK (version 20))
|
||||||
|
endif
|
||||||
|
|
||||||
|
CC := $(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android27-clang
|
||||||
|
AR := $(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar
|
||||||
|
OBJCOPY := $(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-objcopy
|
||||||
|
LD := $(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-ld.bfd
|
||||||
|
|
||||||
|
#==================Target Samsung S7 (8890)==================
|
||||||
|
CFLAGS_SAMSUNGS7 = -Os -Idevices/samsung_s7/
|
||||||
|
samsung_s7:
|
||||||
|
[ -d bin/samsung_s7 ] || mkdir -p bin/samsung_s7/
|
||||||
|
$(CC) arm64_stub.S -c -o bin/samsung_s7/entry.o $(CFLAGS_SAMSUNGS7)
|
||||||
|
$(CC) debugger.c -c -o bin/samsung_s7/debugger.o $(CFLAGS_SAMSUNGS7)
|
||||||
|
$(LD) -T devices/samsung_s7/linkscript.ld bin/samsung_s7/entry.o bin/samsung_s7/debugger.o -o bin/samsung_s7/debugger.elf --just-symbols=devices/samsung_s7/symbols.txt
|
||||||
|
$(OBJCOPY) -O binary bin/samsung_s7/debugger.elf bin/samsung_s7/debugger.bin
|
7
source/gupje_device/Readme.md
Normal file
7
source/gupje_device/Readme.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# Gupje
|
||||||
|
Current memory map:
|
||||||
|
|
||||||
|
![memory map](memory_map.drawio.svg)
|
||||||
|
|
||||||
|
## Usage:
|
||||||
|
Copy this folder to <gupje>/devices/samsung_s7 and run ``make``
|
86
source/gupje_device/device.h
Normal file
86
source/gupje_device/device.h
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
// Create external function at 0x00006f88
|
||||||
|
extern void maybe_usb_setup_read(char endpoint,void *fun,uint32_t target_buffer);
|
||||||
|
extern void dwc3_ep0_start_trans(char endpoint,uint32_t target_buf, uint32_t len);
|
||||||
|
extern int usb_event_handler(void);
|
||||||
|
extern uint32_t get_endpoint_recv_buffer(char endpoint);
|
||||||
|
extern void exynos_sleep(int endpoint,uint32_t timeout);
|
||||||
|
extern void usb_send(uint32_t address,uint32_t size);
|
||||||
|
|
||||||
|
int mystrlen(char *data) {
|
||||||
|
int i=0;
|
||||||
|
while(1) {
|
||||||
|
if(data[i++] == '\0'){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return i-1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define recv_buffer 0x206fe00 //0x02021800 + 0x3000
|
||||||
|
#define data_received 0x206fd00
|
||||||
|
|
||||||
|
void recv_data_cb(uint32_t endpoint, uint32_t len){
|
||||||
|
char *dest_buf = (char *)recv_buffer;
|
||||||
|
volatile void *dref = (void *)data_received;
|
||||||
|
|
||||||
|
void *rbuf = get_endpoint_recv_buffer(endpoint);
|
||||||
|
for(int i= 0; i < len; i++){
|
||||||
|
dest_buf[i] = *(char *)(void *)((int)rbuf + i);
|
||||||
|
}
|
||||||
|
*(uint8_t *)dref = 1; // Mark as ready
|
||||||
|
}
|
||||||
|
|
||||||
|
void recv_data(void *address, uint32_t size){
|
||||||
|
//
|
||||||
|
volatile void *dref = (void *)data_received;
|
||||||
|
*(uint8_t *)dref = 0;
|
||||||
|
|
||||||
|
maybe_usb_setup_read(2, recv_data_cb, size);
|
||||||
|
uint32_t rbuf = get_endpoint_recv_buffer(2);
|
||||||
|
dwc3_ep0_start_trans(2, rbuf, size);
|
||||||
|
while(1){
|
||||||
|
usb_event_handler();
|
||||||
|
if(*(uint8_t *)dref == 1){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// exynos_sleep(2, 1000);
|
||||||
|
}
|
||||||
|
// Copy to destination location
|
||||||
|
char *dest_buf = (uint64_t)address;
|
||||||
|
for(int i= 0; i < size; i++){
|
||||||
|
dest_buf[i] = *(char *)(void *)((int)recv_buffer + i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void send_data_cb(uint32_t endpoint, uint32_t len){
|
||||||
|
// Tell event handler that the data was received
|
||||||
|
volatile void *dref = (void *)data_received;
|
||||||
|
*(uint8_t *)dref = 1; // Mark as ready
|
||||||
|
}
|
||||||
|
|
||||||
|
void send(void *address, uint32_t size, uint32_t *error){
|
||||||
|
volatile void *dref = (void *)data_received;
|
||||||
|
*(uint8_t *)dref = 0;
|
||||||
|
maybe_usb_setup_read(0x1, send_data_cb, size);
|
||||||
|
// uint32_t rbuf = get_endpoint_recv_buffer(1);
|
||||||
|
dwc3_ep0_start_trans(1, (uint64_t)address, size);
|
||||||
|
while(1){
|
||||||
|
usb_event_handler();
|
||||||
|
if(*(uint8_t *)dref == 1){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// exynos_sleep(1, 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void usb_log(char * msg, uint32_t * error){
|
||||||
|
send(msg, mystrlen(msg), error);
|
||||||
|
}
|
||||||
|
|
||||||
|
void concrete_main(uint64_t debugger){
|
||||||
|
|
||||||
|
}
|
14
source/gupje_device/linkscript.ld
Normal file
14
source/gupje_device/linkscript.ld
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
MEMORY {
|
||||||
|
ROM (rwx): ORIGIN = 0x2069000, LENGTH = 0x1000
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
. = 0x2069000;
|
||||||
|
.text . : {
|
||||||
|
*(.text*)
|
||||||
|
*(.data*)
|
||||||
|
*(.rodata*)
|
||||||
|
} >ROM
|
||||||
|
|
||||||
|
}
|
1
source/gupje_device/memory_map.drawio.svg
Normal file
1
source/gupje_device/memory_map.drawio.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 9.7 KiB |
9
source/gupje_device/symbols.txt
Normal file
9
source/gupje_device/symbols.txt
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
debugger_storage = 0x206d000;
|
||||||
|
debugger_stack = 0x206b000;
|
||||||
|
debugger_entry = 0x2069000;
|
||||||
|
|
||||||
|
maybe_usb_setup_read = 0x00006f88;
|
||||||
|
dwc3_ep0_start_trans = 0x0000791c;
|
||||||
|
usb_event_handler = 0x00007bac;
|
||||||
|
get_endpoint_recv_buffer = 0x00007a7c;
|
||||||
|
exynos_sleep = 0x000027c8;
|
Loading…
Reference in New Issue
Block a user