묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 2부 저자 직강 (2024년 버전)
vbar register
안녕하세요,vbar_el1 이 random 하게 부팅 때마다 정해진다고 하셨는데,Armv8 만의 특징인가요? Armv7 은 0xFFFF0000 이런 주소였던 것 같아요보안 이슈 때문에 매번 다르게 하는 건가요?
-
미해결ARM Cortex-M 프로세서 프로그래밍
학습 진행 시, 사용하는 Board에 대한 문의 드립니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님! 이번에 ARM Cortex-M 강의를 수강하고자 합니다.수업에 들어가기에 앞서 한가지 궁금한 점이 있어 문의 드립니다.제가 현재 가지고 있는 STM32 보드는, STM32F769I - Discovery Board 인데,선생님께서 강의해서 사용하시는 보드는 STM32F429I-DISCOVERY Board와 종류가 다른데,혹시 수업 진도를 따라가는데 큰 제약이 있을까 해서 여쭤봅니다.제가 가지고 있는 769I Board로 그대로 진행해도 괜찮을까요?
-
미해결시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 2부 저자 직강 (2024년 버전)
System call register
system call register 로 쓰인다는 x8 의 경우는 arm architecture 호출 규약에 나와 있는 것인가요 아니면리눅스 커널에서 임의로 그렇게 정한 것인가요?
-
미해결시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 2부 저자 직강 (2024년 버전)
GIC programmer model
안녕하세요,memory mapped i/o 라는 것이msr 명령어를 통해 core 에서 특정 주소 값을 변경하면해당 gic 나 interface register 값을 변경할 수 있다는 뜻인가요?그리고 memory mapped 라는 것은 hardware 적으로 메모리 스토어만 하면 알아서 주변 gic 나 cpu interface 의 레지스터가 자동으로 바뀌게 되는 회로(메모리와 연결되는)가 있는 것인가요? (그리고 바뀌는 타이밍은 즉시 바뀌나요?)감사합니다.
-
미해결시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 2부 저자 직강 (2024년 버전)
exception handler code
안녕하세요0xffffff8008082580: d53201f nop...이런 식의 exception handler 코드는 어디서 볼 수 있나요? 코딩-> 컴파일을 해서 나온 결과 인가요 아니면 저렇게 일일이 주소: 명령어 다 넣게 된 것인가요?
-
미해결시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 2부 저자 직강 (2024년 버전)
arm mode
안녕하세요ARM 에서 sys mode 나 undef 모드나 이런 것들은virtual memory 를 사용하지 못할 것 같은데, (kernel 이 virtual memory를 지원할 것 같아서요)그러면 다른 모드는 physical memory 기반 assembly code 로 작성이 되나요?감사합니다
-
미해결시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 2부 저자 직강 (2024년 버전)
exception vector table
exception vector table 에서 명시된 주소 값은실제 physical memory 주소 인가요?그런데 physical memory 주소면 커널이 그 메모리에 들어간 함수를 어떻게 구현하게 되나요..?
-
미해결시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 2부 저자 직강 (2024년 버전)
exception 문제
같은 exception level 이나, exception 종류가 계속 연속해서 들어오게 되면 어떻게 처리가 되나요? spsr_mode 가 계속 덮어 씌워질 것 같아요
-
미해결시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 1부 저자 직강 (2024년 버전)
리눅스 커널 동작 모드별 스택 포인터 초기화
동작 모드를 변경하는 어셈블리 명령어 부분에서sp를 모드 별로 초기화 해 주는 데요, 이게 부트 로딩 과정에서 모드 별로 실제 physical memory를 모드별 스택으로 나누는 과정인가요?그리고 모드별로 아예 physical memory를 따로 쓰게 되는 것인가요? 그리고 모드별로 #0 #12 .. 이렇게 작게 스택을 지정하는 것 같은데.. 너무 작지 않나 하는 생각이 듭니다. 뭔가 잘못 이해하고 있는 것 같습니다. 정정 부탁드립니다
-
미해결시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 2부 저자 직강 (2024년 버전)
exception handler 구현
exception handler 는 소프트웨어 적으로 어떻게 구현이 이루어 지나요? exception vector 에 써진 주소값에 handler 를 넣어 주어야 할 것 같은데, 주소를 직접 넣어서 프로그래밍 할 수 있는 것인가요?
-
해결됨한국에서 제일 쉬운 리눅스 커널 강의
라즈베리파이 메모리 사이즈 큰거 사도 될까요?
안녕하세요.당근에 중고로 사려는데 저희동네엔 4기가 하나있어서 그런데 라즈베리파이 메모리만 큰거 사려는데 CPU는 두기종 동일한것 같던데 괜찮을까요?
-
미해결Arm 아키텍처: 트러스트존(TrustZone) [저자직강 3부-1]
실제 활용 예시 코드 요청 합니다
안드로이드 어플리케이션 수준에서 직접 시큐어 모니터를 활욜한 apk을 작성하여 직접 디버깅하고, 유저 권한에서 어디까지 커널에 대한 활용이나 모니터 사용, 보호수준에 대해서 활용을 확인해 보고 싶습니다. 사용가능한 코드나 링크를 제공해주시면 학습에 더 큰 도움이 될거 같은데 자료가 있으면 제공해 주시면 감사하겠습니다.
-
미해결한국에서 제일 쉬운 리눅스 커널 강의
set_ftrace 질문
안녕하세요. 커널 강의 잘 듣고있습니다. set_ftrace.sh 스크립트 실행하다가 오류가 발생했는데21 번째 줄 ttw_do_wakeup 이 available_filter_functions에 없는 것으로 판단 됩니다. do_wakeup 대신 do_activate로 바뀐 거 같은데 맞는 걸까요? 커널 버전은 6.6 입니다!
-
해결됨한국에서 제일 쉬운 리눅스 커널 강의
강의자료
안녕하세요.이 강의 수강신청 전 강의자료 문의 올렸었는데 답변 달아주신 거 보았습니다.^^물론 실습 위주고, 머릿속에 다 넣는 것이 가장 중요하지만추후에 어떤 형태라도 강의 자료 올려주신다면 더 도움이 될 것 같아 조심스럽게 요청드려봅니다.!최선 다해 들어보겠습니다.감사합니다.
-
미해결ARM Cortex-M 프로세서 프로그래밍
push pop 질문
안녕하세요 강사님 강의 듣다가 궁금한 점이 있습니다.push {lr}bl F11POP {pc} 이렇게 동작할 때, lr값을 스택에 저장을 하고 나면 sp가 하나 증가하지 않나요? pop {pc}를 하면 스택메모리에서 현재 스택포인터가 가리키고 있는 아무것도 없는 쪽을 읽어서 pc에 저장해야되는게 아닌가요?
-
해결됨한국에서 제일 쉬운 리눅스 커널 강의
재 빌드시 변경파일만 반영하지 않고 처음부터 빌드 됩니다.
실수 방지 드라이버 만들기에서 debugfs 파일을 추가하고 Makefile 수정 후 build.sh 스크립트로 재빌드 하였는데, 처음부터 다시 빌드가 되어서 시간이 너무 오래걸리는 것 같아 질문 드립니다. 강의 영상에서는 변경 부분만 빌드 되는것으로 보입니다. 빌드 환경 점검 방법이 있을까요?감사합니다.
-
미해결리눅스 커널의 구조와 원리: 인터럽트 [저자 직강 1부-5]
preemption 체크 관련 질문
커널 코드 실행 중 인터럽트가 발생한 경우에는 thread_info 구조체의 preemption_count 값을 통해 preemptive schedule 가능 여부를 판단하고, 유저 코드 실행 중에 발생한 경우에는 flags 값을 통해 preemptive schedule 가능 여부를 판단하는 것을 이해했는데, 둘이 왜 확인 방법이 다른지 궁금합니다
-
해결됨한국에서 제일 쉬운 리눅스 커널 강의
kernel build 오류
root@raspberrypi:/project/linuxSrc # ./build.sh .. CC kernel/bounds.s CHKSHA1 /project/linuxSrc/linux/include/linux/atomic/atomic-arch-fallback.h DTCO arch/arm64/boot/dts/overlays/spi-rtc.dtbo DTCO arch/arm64/boot/dts/overlays/spi0-0cs.dtbo CHKSHA1 /project/linuxSrc/linux/include/linux/atomic/atomic-instrumented.h CHKSHA1 /project/linuxSrc/linux/include/linux/atomic/atomic-long.h DTCO arch/arm64/boot/dts/overlays/spi0-1cs.dtbo DTCO arch/arm64/boot/dts/overlays/spi0-2cs.dtbo DTCO arch/arm64/boot/dts/overlays/spi1-1cs.dtbo DTCO arch/arm64/boot/dts/overlays/spi1-2cs.dtbo DTCO arch/arm64/boot/dts/overlays/spi1-3cs.dtboIn file included from /project/linuxSrc/linux/arch/arm64/include/asm/lse.h:5, from /project/linuxSrc/linux/arch/arm64/include/asm/cmpxchg.h:14, from /project/linuxSrc/linux/arch/arm64/include/asm/atomic.h:16, from /project/linuxSrc/linux/include/linux/atomic.h:7, from /project/linuxSrc/linux/include/asm-generic/bitops/atomic.h:5, from /project/linuxSrc/linux/arch/arm64/include/asm/bitops.h:25, from /project/linuxSrc/linux/include/linux/bitops.h:68, from /project/linuxSrc/linux/include/linux/log2.h:12, from /project/linuxSrc/linux/kernel/bounds.c:13:/project/linuxSrc/linux/arch/arm64/include/asm/atomic_ll_sc.h:298:9: error: unknown type name ‘u128’ 298 | u128 full; | ^~~~/project/linuxSrc/linux/arch/arm64/include/asm/atomic_ll_sc.h:305:24: error: unknown type name ‘u128’ 305 | static __always_inline u128 \ | ^~~~/project/linuxSrc/linux/arch/arm64/include/asm/atomic_ll_sc.h:332:1: note: in expansion of macro ‘__CMPXCHG128’ 332 | __CMPXCHG128( , , ) | ^~~~~~~~~~~~/project/linuxSrc/linux/arch/arm64/include/asm/atomic_ll_sc.h:306:36: error: unknown type name ‘u128’ 306 | __ll_sc__cmpxchg128##name(volatile u128 *ptr, u128 old, u128 new) \ | ^~~~/project/linuxSrc/linux/arch/arm64/include/asm/atomic_ll_sc.h:332:1: note: in expansion of macro ‘__CMPXCHG128’ 332 | __CMPXCHG128( , , ) | ^~~~~~~~~~~~/project/linuxSrc/linux/arch/arm64/include/asm/atomic_ll_sc.h:306:47: error: unknown type name ‘u128’ 306 | __ll_sc__cmpxchg128##name(volatile u128 *ptr, u128 old, u128 new) \ | ^~~~/project/linuxSrc/linux/arch/arm64/include/asm/atomic_ll_sc.h:332:1: note: in expansion of macro ‘__CMPXCHG128’ 332 | __CMPXCHG128( , , ) | ^~~~~~~~~~~~/project/linuxSrc/linux/arch/arm64/include/asm/atomic_ll_sc.h:306:57: error: unknown type name ‘u128’ 306 | __ll_sc__cmpxchg128##name(volatile u128 *ptr, u128 old, u128 new) \ | ^~~~/project/linuxSrc/linux/arch/arm64/include/asm/atomic_ll_sc.h:332:1: note: in expansion of macro ‘__CMPXCHG128’ 332 | __CMPXCHG128( , , ) | ^~~~~~~~~~~~/project/linuxSrc/linux/arch/arm64/include/asm/atomic_ll_sc.h:305:24: error: unknown type name ‘u128’ 305 | static __always_inline u128 \ | ^~~~/project/linuxSrc/linux/arch/arm64/include/asm/atomic_ll_sc.h:333:1: note: in expansion of macro ‘__CMPXCHG128’ 333 | __CMPXCHG128(_mb, dmb ish, l, "memory") | ^~~~~~~~~~~~/project/linuxSrc/linux/arch/arm64/include/asm/atomic_ll_sc.h:306:36: error: unknown type name ‘u128’ 306 | __ll_sc__cmpxchg128##name(volatile u128 *ptr, u128 old, u128 new) \ | ^~~~/project/linuxSrc/linux/arch/arm64/include/asm/atomic_ll_sc.h:333:1: note: in expansion of macro ‘__CMPXCHG128’ 333 | __CMPXCHG128(_mb, dmb ish, l, "memory") | ^~~~~~~~~~~~/project/linuxSrc/linux/arch/arm64/include/asm/atomic_ll_sc.h:306:47: error: unknown type name ‘u128’ 306 | __ll_sc__cmpxchg128##name(volatile u128 *ptr, u128 old, u128 new) \ | ^~~~/project/linuxSrc/linux/arch/arm64/include/asm/atomic_ll_sc.h:333:1: note: in expansion of macro ‘__CMPXCHG128’ 333 | __CMPXCHG128(_mb, dmb ish, l, "memory") | ^~~~~~~~~~~~/project/linuxSrc/linux/arch/arm64/include/asm/atomic_ll_sc.h:306:57: error: unknown type name ‘u128’ 306 | __ll_sc__cmpxchg128##name(volatile u128 *ptr, u128 old, u128 new) \ | ^~~~/project/linuxSrc/linux/arch/arm64/include/asm/atomic_ll_sc.h:333:1: note: in expansion of macro ‘__CMPXCHG128’ 333 | __CMPXCHG128(_mb, dmb ish, l, "memory") | ^~~~~~~~~~~~ DTCO arch/arm64/boot/dts/overlays/spi2-1cs.dtbo/project/linuxSrc/linux/arch/arm64/include/asm/cmpxchg.h:134:15: error: unknown type name ‘u128’ 134 | static inline u128 __cmpxchg128##name(volatile u128 *ptr, \ | ^~~~/project/linuxSrc/linux/arch/arm64/include/asm/cmpxchg.h:141:1: note: in expansion of macro ‘__CMPXCHG128’ 141 | __CMPXCHG128( ) | ^~~~~~~~~~~~/project/linuxSrc/linux/arch/arm64/include/asm/cmpxchg.h:134:48: error: unknown type name ‘u128’ 134 | static inline u128 __cmpxchg128##name(volatile u128 *ptr, \ | ^~~~/project/linuxSrc/linux/arch/arm64/include/asm/cmpxchg.h:141:1: note: in expansion of macro ‘__CMPXCHG128’ 141 | __CMPXCHG128( ) | ^~~~~~~~~~~~/project/linuxSrc/linux/arch/arm64/include/asm/cmpxchg.h:135:39: error: unknown type name ‘u128’ 135 | u128 old, u128 new) \ | ^~~~/project/linuxSrc/linux/arch/arm64/include/asm/cmpxchg.h:141:1: note: in expansion of macro ‘__CMPXCHG128’ 141 | __CMPXCHG128( ) | ^~~~~~~~~~~~/project/linuxSrc/linux/arch/arm64/include/asm/cmpxchg.h:135:49: error: unknown type name ‘u128’ 135 | u128 old, u128 new) \ | ^~~~/project/linuxSrc/linux/arch/arm64/include/asm/cmpxchg.h:141:1: note: in expansion of macro ‘__CMPXCHG128’ 141 | __CMPXCHG128( ) | ^~~~~~~~~~~~/project/linuxSrc/linux/arch/arm64/include/asm/cmpxchg.h:134:15: error: unknown type name ‘u128’ 134 | static inline u128 __cmpxchg128##name(volatile u128 *ptr, \ | ^~~~/project/linuxSrc/linux/arch/arm64/include/asm/cmpxchg.h:142:1: note: in expansion of macro ‘__CMPXCHG128’ 142 | __CMPXCHG128(_mb) | ^~~~~~~~~~~~/project/linuxSrc/linux/arch/arm64/include/asm/cmpxchg.h:134:48: error: unknown type name ‘u128’ 134 | static inline u128 __cmpxchg128##name(volatile u128 *ptr, \ | ^~~~/project/linuxSrc/linux/arch/arm64/include/asm/cmpxchg.h:142:1: note: in expansion of macro ‘__CMPXCHG128’ 142 | __CMPXCHG128(_mb) | ^~~~~~~~~~~~/project/linuxSrc/linux/arch/arm64/include/asm/cmpxchg.h:135:39: error: unknown type name ‘u128’ 135 | u128 old, u128 new) \ | ^~~~/project/linuxSrc/linux/arch/arm64/include/asm/cmpxchg.h:142:1: note: in expansion of macro ‘__CMPXCHG128’ 142 | __CMPXCHG128(_mb) | ^~~~~~~~~~~~/project/linuxSrc/linux/arch/arm64/include/asm/cmpxchg.h:135:49: error: unknown type name ‘u128’ 135 | u128 old, u128 new) \ | ^~~~/project/linuxSrc/linux/arch/arm64/include/asm/cmpxchg.h:142:1: note: in expansion of macro ‘__CMPXCHG128’ 142 | __CMPXCHG128(_mb) | ^~~~~~~~~~~~ DTCO arch/arm64/boot/dts/overlays/spi2-1cs-pi5.dtbo DTCO arch/arm64/boot/dts/overlays/spi2-2cs.dtbo DTCO arch/arm64/boot/dts/overlays/spi2-2cs-pi5.dtbo DTCO arch/arm64/boot/dts/overlays/spi2-3cs.dtbo DTCO arch/arm64/boot/dts/overlays/spi3-1cs.dtbo DTCO arch/arm64/boot/dts/overlays/spi3-1cs-pi5.dtbo DTCO arch/arm64/boot/dts/overlays/spi3-2cs.dtbo DTCO arch/arm64/boot/dts/overlays/spi3-2cs-pi5.dtbo DTCO arch/arm64/boot/dts/overlays/spi4-1cs.dtbomake[3]: *** [/project/linuxSrc/linux/scripts/Makefile.build:116: kernel/bounds.s] Error 1make[2]: *** [/project/linuxSrc/linux/Makefile:1201: prepare0] Error 2make[2]: *** Waiting for unfinished jobs.... DTCO arch/arm64/boot/dts/overlays/spi4-2cs.dtbo DTCO arch/arm64/boot/dts/overlays/spi5-1cs.dtbo DTCO arch/arm64/boot/dts/overlays/spi5-1cs-pi5.dtbo DTCO arch/arm64/boot/dts/overlays/spi5-2cs.dtbo.. DTCO arch/arm64/boot/dts/overlays/vc4-kms-v3d-pi5.dtbo DTCO arch/arm64/boot/dts/overlays/vc4-kms-vga666.dtbo DTCO arch/arm64/boot/dts/overlays/vga666.dtbo DTCO arch/arm64/boot/dts/overlays/vl805.dtbo DTCO arch/arm64/boot/dts/overlays/w1-gpio.dtbo DTCO arch/arm64/boot/dts/overlays/w1-gpio-pi5.dtbo DTCO arch/arm64/boot/dts/overlays/w1-gpio-pullup.dtbo DTCO arch/arm64/boot/dts/overlays/w1-gpio-pullup-pi5.dtbo DTCO arch/arm64/boot/dts/overlays/w5500.dtbo DTCO arch/arm64/boot/dts/overlays/watterott-display.dtbo DTCO arch/arm64/boot/dts/overlays/waveshare-can-fd-hat-mode-a.dtbo DTCO arch/arm64/boot/dts/overlays/waveshare-can-fd-hat-mode-b.dtbo DTCO arch/arm64/boot/dts/overlays/wittypi.dtbo DTCO arch/arm64/boot/dts/overlays/wm8960-soundcard.dtbo DTC arch/arm64/boot/dts/overlays/overlay_map.dtb DTC arch/arm64/boot/dts/overlays/hat_map.dtbmake[1]: *** [/project/linuxSrc/linux/Makefile:234: __sub-make] Error 2make[1]: Leaving directory '/project/linuxSrc/out'make: *** [Makefile:234: __sub-make] Error 2
-
미해결시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 2부 저자 직강 (2024년 버전)
Exception Level 설정 관련 질문
안녕하세요! Exception Level 관련 질문이 있습니다. 질문) Exception Level을 프로그래머가 직접 설정하는 것인가요?Exception 발생하는 경우를 예시로H/W설계자가 결정 한 것VBAR 레지스터에 설정된 주소 + Offset 위치로 분기하도록 설계Exception 유발 직전 상태의 PSTATE값 백업PSATE 값 변경 : 현재 EL0인 경우 EL1로 변경ELR, ESR 업데이트 프로그래머가 설정하는 부분VBAR 레지스터의 값은 프로그래머가 미리 초기화Exception Vector 주소로 분기 한 경우, 어떻게 동작할지 코드 작성 → Exception Handler 작성결국 프로그래머가 Exception Handler를 작성하는 것으로 이해했는데, 프로그래머가 자신이 작성하는 코드의 Exception Level을 설정할 수 있나요?프로그래머가 작성하는 코드의 Exception Level이 어떻게 결정되는지 궁금합니다.
-
미해결시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 2부 저자 직강 (2024년 버전)
Current EL 관련 질문
안녕하세요! 우선 너무 좋은 강의 잘 보고 있습니다. 질문Current Exception Level 정의를 어떻게 내리는지 질문드립니다. 제가 처음에 이해하기로는 리눅스OS 위에서 User App이 실행 중 Exception이 발생했다면 Current El = EL0 라고 생각했습니다.하지만 강의를 듣다보니 Exception handler가 어느 EL에 정의 되어있는지에 따라 Current EL을 정의해야하는 것이라고 이해했는데,위와 같이 이해하면 문제가 없을까요?