[리눅스커널][공유] 퀄컴의 리눅스 커널 코드오로라- codeaurora 사이트(환상의 디버깅 자료)
By Guillermo Austin Kim | 2020년 5월 15일 |
SoC(System-on-Chip) 업계의 최강자이며 Top-of-the-food-chain인 퀄컴(Qualcomm)은 꾸준히 자신이 개발하고 있는리눅스 커널 소스를 특정 사이트에 올리고 있습니다. 최신 퀄컴(Qualcomm)이 개발하고 있는 리눅스 커널 소스를 볼 수 있는 코드 오로라(codeaurora) 사이트는 다음과 같습니다. 이 사이트에 가면 환상의 솔류션(크래시/성능 개선) 패치와 디버깅 용 패치를 감상할 수 있습니다.패치를 보면 마치 예전 마이클 조던이 더블 클러치와 같은 묘기를 보는 듯한 느낌입니다. 오히려 리눅스 커널 커뮤니티보다 훨씬 개발에 유용한 디버깅 패치를 더 많이 볼 수 있습니다. 그래서 틈나는 데로 코드 오로라(codeaurora) 사이트에서 패치 코드를 분석하곤 합니다
[리눅스커널][시스템콜] SYSCALL_DEFINEx 매크로로 시스템콜 핸들러 선언
By Guillermo Austin Kim | 2019년 2월 21일 |
시스템 콜 관련 리눅스 커널 코드를 분석하려고 할 때 만나는 걸림돌은 어느 소스 코드를 봐야할 지 모르겠다는 것입니다. 시스템콜 핸들러 함수는 구현부를 찾기 어렵습니다. 한 가지 예를 들어 봅시다.리눅스 저수준 함수인 write() 와 read() 함수에 대한 시스템 콜 핸들러 함수는 sys_read()와 sys_read() 라고 합니다. 아무리 소스 코드에서 sys_read()와 sys_read() 함수를 검색해도 코드 위치를 찾기 어렵습니다. 그 이유는 시스템 콜 핸들러 함수는 리눅스 커널에서 제공하는 SYSCALL_DEFINE1과 같은 매크로 함수로 선언되어 있기 때문입니다. 시스템 콜 핸들러는 처리하는 인자 갯수에 따라 다음과 같이 선언합니다.SYSCALL_DEFINEx(시스템콜 번호, 1번째
[리눅스커널] 스케줄링: 선점 스케줄링(Preemptive Scheduling)이란 무엇일까?
By Guillermo Austin Kim | 2019년 9월 15일 |
선점 스케줄링은 다음과 같이 정의내릴 수 있습니다. CPU에서 실행 중인 프로세스를 비우고 새로운 프로세스를 CPU에서 실행시킴 선점 스케줄링에 대한 이해를 돕기 위해 야구에서 투수 교체를 하는 과정을 예를 들겠습니다. 마운드에 A란 투수가 있다고 가정합시다. A란 투수는 열심히 공을 던지고 있습니다. 감독은 투수가 마운드에서 제대로 공을 던지고 있는지 계속 관찰합니다. 제구는 좋은지 구속은 제대로 나오고 있는지 점검합니다. 그런데 시간이 흘러 B, C와 D란 투수가 자신이 공을 던지고 싶다는 의사와 함께 불펜에서 몸을 풀기 시작했습니다. B, C와 D란 투수도 A와 같은 기량의 투수입니다. 감독은 A와 B, C, D 투수를 비교합니다. 만약 B, C, D 투수 중에 A보다 잘 던진다고(
[리눅스커널] GCC 지시어
By Guillermo Austin Kim | 2019년 12월 21일 |
[부록-A] GCC 지시어 리눅스 커널 코드를 읽다 보면 낯선 구문을 만날 가능성이 높습니다. 이 중 하나가 GCC 컴파일러 지시어입니다. 이번 시간에는 리눅스 커널에서 자주 쓰는 GCC 지시어를 소개합니다. 1. __init과 __section() __init 키워드가 함수 선언부에 있으면 해당 함수는 init.text 섹션에 위치합니다. 이해를 돕기 위해 __init 키워드로 선언된 함수를 봅시다. void __init lockup_detector_init(void)02 {03 set_sample_period(); 01번째 줄과 같이 lockup_detector_init() 함수 옆에 보이는 __init 구문입니다. 함수 선언부에 __init 키워드가 보이면 부팅 과정에서 1번 호출되는 함수라고