리눅스 커널 기여(Contribution) - 패치 작성 및 패치 반영(Contribution) 확인하기
By Guillermo Austin Kim | 2019년 9월 4일 |
이전 시간에는 리눅스 커널 기여(Contribution) 하기 전에 준비해야 할 사항을 소개했습니다.- gmail 계정 생성- mutt 설치 및 설정 이번 시간에는 커널 패치를 작성해보고 패치를 리눅스 매인테이너(Maintainer)에게 보내는 과정을 소개합니다.그리고 업스트림(Upstream)된 패치를 확인하는 방법도 말씀드리겠습니다. 오류 코드 확인하기 먼저 패치를 작성하기 전 커널 코드를 볼까요?참고로 다음 함수는 AMD/PowerPlay 드라이버입니다.[drivers/gpu/drm/amd/powerplay/smumgr/smu8_smumgr.c]01 static int smu8_start_smu(struct pp_hwmgr *hwmgr)02 {03struct amdgpu_device *adev
[리눅스커널] 스핀락 플러그인 함수: spin_lock_irq()/spin_unlock_irq()
By Guillermo Austin Kim | 2019년 6월 10일 |
리눅스 커널 코드를 조금만 분석하면 spin_lock() 함수뿐만 아니라 spin_lock_irq() 함수를 써서 임계 영역을 보호하는 동작을 많이 볼 수 있습니다. 이번 소절에서는 spin_lock() 함수 기능을 확장한 스핀락 플러그인 함수를 소개합니다. - spin_lock_irq()/spin_unlock_irq() 먼저 spin_lock_irq()/spin_unlock_irq() 함수를 리눅스 커널에서 지원하는 이유를 알아보고 세부 코드를 분석하겠습니다. spin_lock_irq()/spin_unlock_irq() 함수가 생겨난 이유는 무엇일까?spin_lock_irq()/spin_unlock_irq() 함수의 원리를 살펴보기 앞서 spin_lock_irq()/spin_unlock_irq()
[라즈베리파이] 시스템 콜 - 유저 공간 시스템 콜 발생 어셈블리 코드 분석
By Guillermo Austin Kim | 2018년 11월 18일 |
아키텍처별로 시스템 콜을 실행하는 동작은 다릅니다. 시스템 콜을 실행하는 동작은 어셈블리 코드로 구현되어 있습니다. 라즈베리파이가 탑재한 ARM(ARM32) 아키텍처에서는 시스템 콜은 다음과 같이 구현돼 있습니다.1. r0 ~ r5 레지스터에 시스템 콜로 전달할 인자 지정2. r7 레지스터에 시스템 콜 번호 저장3. "svc 0x00000000" 명령어 실행 GNU C 라이브러리 파일에서 실제 시스템 콜을 실행하는 어셈블리 코드를 봅시다. write() 함수에 대한 시스템 콜을 실행하는 코드를 소개합니다.00000020 <__libc_write>:1 20: e59fc060 ldr ip, [pc, #96] ; 88 <__libc_write+0x68>2 24: e79fc00c
[리눅스커널] 리눅스소개: 리눅스와 리눅스커널은 왜 배워야 할까?
By Guillermo Austin Kim | 2019년 7월 22일 |
이번 시간에는 리눅스를 왜 배워야 하는지 생각해보는 시간을 갖겠습니다. 저는 리눅스 세미나에서 다음 질문을 종종 받곤 합니다. 리눅스를 배워야 하는 이유가 무엇인가요? 특히 리눅스를 처음 접하는 분들이 많이 던지는 질문이었습니다. 이런 질문을 받고는 리눅스를 과연 왜 배워야 할까 곰곰히 생각해봤습니다. 여러 생각 끝에 내린 필자인 저는 다음과 같은 결론을 내리게 됐습니다. 여러분들이 소프트웨어 개발을 하려고 한다면 리눅스는 반드시 알아야 합니다. 이번에 먼저 리눅스를 왜 배워야 하는지 설명하는 시간을 갖겠습니다. 리눅스는 왜 배워야 할까? 요즘에 학부 과정에서 리눅스 시스템 프로그램을 배울 수 있습니다. 또한 대학원 프로젝트 과제도 리눅스 환경에서 수행하고 있습니다. 이번에는