본문 바로가기

시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리

(155)
ARM32- 스택 푸쉬(Stack Push) Userspace -> Kernel Space 리눅스 드라이버 및 리눅스 커널 코드가 실제 실행되는 공간은 어디일까요? 커널에서 어떤 코드던 프로세스가 실행되는 운동장은 스택이에요. 프로그램이 실행되면서 스택에 Push/Pop 동작을 엄청나게 자주하는데요. 예전 실리콘 벨리에서 어떤 스타트업 회사가 기획했던 아이디어라고 하는데요. 리눅스 커널 API를 하드웨어로 처리하는 아이디어를 구현하려고 했다고 하네요. 그 아이디어의 근거는 리눅스 커널에서 자주 사용하는 API는 몇 개로 한정되어 있다는 거에요. 그럼 너무 자주 실행되는 함수면 어떤 동작을 자주 할까요? 스택 Push/Pop이 겠죠. 그래서 inline을 함수를 쓰는 거에요. inline 함수는 컴파일러가 호출되는 함수 내에 inline 함수를 추가하기 때문에 스택 Push/Pop 동작을 줄 일..
[Linux][ARM] char buf[32]; vs char buf[32]={0}; Quite interesting patch was released under the following url. https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?h=rel/msm-3.18&id=a0039b1e721b7b3ee1cbe7f7f9d44d451ac74543 The detailed patch is to initialize the stack array with a different way as below. usb : dwc3: Initialize kernel stack variables properly If kernel stack variables are not initialized properly, there is a chance of ..
[T32] Cortex A53: 프로세스 별 Call Stack 복원하는 방법 커널 디버깅을 하다 보면 T32 simulator를 많이 쓰게 된다. 디버깅 과정에서 콜 스택을 보고 싶을 경우가 많다. 이번에 ARM Cortex A53 Call Stack 복원 방법을 정리하도록 하자. T32 시뮬레이터의 가장 큰 장점은 각 프로세스 별로 Call Stack을 이쁘게 볼 수 있다는 점이다. 그런데 current process는 Call Stack을 제대로 볼 수 없다. 그 이유는 실행 도중 프로세스이기 때문에 Context(Register)정보를 Task Descriptor에 제대로 저장을 할 수 없기 때문이다. magic___________|command_________|state_____|uid___|pid___|spaceid|tty_|flags___|cpu| FFFFFFC0016..