
memory alias가 헷갈려서 한번 테스트해봤다 일단 normal world에서 QSIZE 레지스터에 0x1235460이라고 적고 secure partition에서 secure alias의 QSIZE를 출력해보았다static void alias_test(psa_msg_t*msg){ void* s_alias=ETHOS_U55_APB_BASE_S; //uint32_t test_ns=(((volatile struct NPU_REG*)ns_alias)->ID.word); uint32_t test_s=(((volatile struct NPU_REG*)s_alias)->QSIZE.word); //psa_write(msg->handle,0,&test_ns,msg->out_size[0]);//log psa_writ..
진짜 개빡친다 진짜 이해가 안가게 out_vec 몇개를 추가해서 secure partition에 넘겼더니 계속 psa call이 programmer error로 실수해서 몇시간을 날렸는데,보니까ㅋㅋ invec, outvec 포함해서 4개만 보낼 수 있다고 한다... 그걸 제가 어케 아냐고요...진짜 우연히 헤더파일 하나하나 보다가 발견함 ㄸ PSA_MAX_IOVEC이게 4로 설정되어있다 이거를 그래서 10으로 바꿨더니 해결~!^^

NPU의 레지스터들 ethos NPU 레지스터는 MMIO 영역으로 접근할 수 있다그리고 아래 목차에 나와있는 것처럼, 각 페이지 별로 레지스터들이 구분되어서 저장되어있다 예를 들어 아래처럼 오프셋으로 접근할 수 있다 PROT 레지스터 NPU의 레지스터를 접근하기 위해서는 프로세서의 상태와 NPU의 PROT 레지스터의 값들과 비교하게 된다.PPROT[0]>=CPL && PPROT[1]프로세서가 NPU에게 요청할 때 APB 버스로 신호를 보내게 되는데, 그 중에서 PPROT signal이라는 걸 실어서 보내게 된다이때 PPROT 시그널 안에 현재 프로세서(NPU 아님)의 security/privilege state를 같이 보내게 된다 이 값과 NPU 내 PROT 레지스터의 값들과 비교하는 것이다. 아래는 P..
tee_shm: 리눅스 커널에서 쓸 수 있는 nwsw 공유 메모리 구조체 /** * struct tee_shm - shared memory object * @ctx: context using the object * @paddr: physical address of the shared memory * @kaddr: virtual address of the shared memory * @size: size of shared memory * @offset: offset of buffer in user space * @pages: locked pages from userspace * @num_pages: number of locked pages * @refcount: reference counter * @fla..
https://github.com/OP-TEE/optee_os/issues/2933 Access normal world memory from OPTEE core - translation fault · Issue #2933 · OP-TEE/optee_osHi all, I'm trying to copy a large memory buffer in the normal world to a buffer allocated in TA (using Tee_Malloc) at OPTEE kernel but it crashed with this error: E/TC:6 0 Core data-abort at addre...github.com https://github.com/OP-TEE/optee_os/issues/4430..
비연속적인 메모리 슬랩 할당, 버디 할당 등 커널 메모리 할당 방식 때문에 큰 연속 영역을 늘 확보할 수는 없음결과적으로 하나의 논리적 버퍼가 여러 개의 물리 페이지로 나뉠 수 있음논리적 버퍼: [━━━━━━━ 16KB ━━━━━━━] 물리 메모리: [4KB][4KB][…할당 불가능…][4KB][4KB] -> 이런식으로 !! 그래서 scatterlist는 여러 물리 페이지(조각)들을 리스트로 묶어서 하나의 논리적 버퍼처럼 취급할 수 있게 해줌 예를 들어 하드웨어(DMA 컨트롤러, 암호화 엔진 등)는 “물리주소 0x1234abcd” 이런 식의 실제 메모리 위치를 알아야 데이터를 읽거나 쓸 수 있음연속된 물리메모리라면 “0x1000부터 0x1fff까지” 한 번에 처리할 수 있지만,흩어진(page A, ..