[RISC-V] RISC-V 툴체인으로 리눅스 커널 빌드하기
By Guillermo Austin Kim | 2020년 9월 28일 |
이번 포스트에서는 RISC-V 툴체인을 설치해 리눅스 커널을 빌드하는 방법을 소개합니다. 먼저 RISC-V 툴체인을 설치하는 명령어를 입력합시다. RISC-V 툴체인 소스를 내려받기 다음 명령어를 입력해 RISC-V 툴체인 소스를 내려받습니다. $ git clone --recursive 아래는 리눅스 터미널에서 위 명령어를 실행한 후 출력 결과입니다. 소스를 내려받는데 1시간 정도 걸리네요. austindh.kim:~/src/risc-v_toolchain$ git clone --recursive into 'riscv-gnu-toolchain'...remote: Enumerating objects: 21, done.remote: Counting objects: 100% (21/21), done.re
[리눅스커널] 시간관리: jiffies와 jiffies_64 변수란
By Guillermo Austin Kim | 2019년 8월 5일 |
![[리눅스커널] 시간관리: jiffies와 jiffies_64 변수란](https://img.zoomtrend.com/2019/08/05/c0246238_5d48560b1c176.png)
jiffies와 jiffies_64 변수란지금까지 커널에서 jiffies 개념에 대해 알아봤습니다. 그렇다면 커널 코드에서 어떤 변수가 jiffies일까요? jiffies와 jiffies_64 변수이다. 뭔가 이상합니다. 어떻게 2개의 변수를 jiffies라고 말할 수 있을까요? 이해를 돕기 위해 한 가지 예를 들겠습니다.[https://github.com/raspberrypi/linux/blob/rpi-4.19.y/drivers/base/power/wakeup.c]1 void pm_wakeup_ws_event(struct wakeup_source *ws, unsigned int msec, bool hard)2 {3unsigned long flags;4unsigned long expires
[리눅스커널] 시그널: ERESTARTSYS 매크로와 signal_pending() 에 대해서
By Guillermo Austin Kim | 2020년 1월 13일 |
-ERESTARTSYS 는 리눅스 커널의 '시그널' 서브 시스템과 연관된 매크로로 시스템 콜을 다시 실행시키려고 할 때 반환하는 매크로이다. ERESTARTSYS 매크로의 의미 보통 커널이 다시 시스템 콜을 재실행을 시키려는 이유는 '어떤 액션의 동기화'를 맞추기 위해서이다. 음, 내가 써도 무슨 소리인지 모르겠네. 나중에 이 글을 읽을 '나 자신'을 위해 이해하기 쉽도록 비유를 하나 들자. * 침대에서 잠을 든 상태이고 난 침대에서 잘 들어 있어야 한다.* 그런데 갑자기 택배가 와서 초인종이 울린다.* 일어나서 택배를 받고 다시 침대에 들어가 잠든 상태에 있어야 한다. 여기서 중요한 사실은 '난 침대에 잠 들어 있어야 한다.'라는 사실이다. 자, 위에서 든 예시를 조금 어려운 용어로 바꿔보자.
[리눅스커널][Arm64] 유저 공간(EL0)에서 시스템 콜 번호는 어떻게 지정할까?
By Guillermo Austin Kim | 2021년 8월 21일 |
이번에는 64비트 기반 리눅스 커널에서 구동되는 라즈비안에서 시스템 콜 번호를 확인해 보겠습니다. 이를 위해 바이너리 유틸리티를 활용해 libc 라이브러리를 어셈블리 명령어로 분석할 필요가 있습니다. root@raspberrypi:/usr# find . -name libc.a./lib/aarch64-linux-gnu/libc.aroot@raspberrypi:/usr# objdump -d ./lib/aarch64-linux-gnu/libc.a > code_libc.c 위 명령어로 '/usr/lib/aarch64-linux-gnu/libc.a' 라이브러리 파일을 어셈블리 코드로 변환하게 됩니다. x8 레지스터에서 시스템 콜 번호를 지정 __libc_write() 함수를 분석하면 x8 레지스터에 시