IT/Linux Kernel
-
linked list API에 대해서IT/Linux Kernel 2015. 5. 19.
항상 alpha, beta로 개발된 기능은 그 자체로 simple하게 정상 동작하지만, release가 되면 문제가 손쉽게 발생하는 것 같다. 또한 이렇게 발생한 문제점은 특정 조건이라는 전제가 붙기 때문에 원인 분석에 어려움을 겪기 마련이다. 특히 재현이 잘 안되기 때문이다. 그런 의미에서 오늘은 원인을 찾기 위해 힘든 하루를 보냈다. 데이터가 일부 누락되는 상황이 간헐적으로 발생하는 현상이었데, 무엇이 문제였을까. 문제는 linked list 사용방법의 차이점에서부터 시작했다. list_head, list_for_each_safekernel에서 linked list 사용할 때와 list_for 시리즈를 사용할 때랑 조금 차이가 있다. struct list_head{ struct list_head *n..
-
jiffiesIT/Linux Kernel 2013. 5. 21.
커널에서는 전역적인 system timer(jiffies counter)를 가지고 있다. 이 timer를 이해하기 위해서는 Kernel HZ(jiffies per second)와 jiffies에 대한 이야기를 해야 한다. HZ란 1초에 동일한 주기를 반복하는 횟수이다. jiffies란 시스템 내의 전역적인 변수로써 초당 HZ값만큼 숫자가 증가하게 된다. 즉, 시스템에서는 HZ 값만큼 1초에 인터럽트가 호출(정확함을 위해 타이머 하드웨어로 부터 인터럽트 호출)되고 jiffies의 값이 그 인터럽트를 통하여 증가하게 된다. 자 아래의 간단한 예제를 보면 HZ의 값(초당 반복 횟수)이 1000이라고 가정하고 현재 jiffies가 400이라 할 때 , jiffies의 값이 1400이 되면 1초가 지났음을 알 수..
-
안드로이드 커널의 통합IT/Linux Kernel 2013. 3. 2.
안드로이드는 Linux-base 운영체제를 사용하는 타블릿과 스마트폰과 같은 터치스크린 모바일 장비이다. 커널은 리눅스 커널을 사용한다. 하지만 모바일 최적화>를 위하여 커널에 driver를 추가해서 사용한다. 그렇기 때문에 리눅스 커널 코드를 복사하여 필요한 드라이버를 포팅한 커널을 따로 관리하고 있었는데, 리눅스 커널 3.3 버전부터 안드로이드 커널에 필요한 드라이버 코드들이 통합되기 시작했다. 앞으로도 계속 통합될 예정이라고도 한다. 아래는 LInux 3.3 버전 릴리즈노트에 표기되어 있는 안드로이드 통합에 대한 이야기이다. 1.1. Android mergeRecommended LWN article: Bringing Android closer to the mainlineThe Android proj..
-
Ubuntu Kenrel BuildIT/Linux Kernel 2013. 2. 26.
linux kernel을 다운받고 코드를 살펴보는 것은 쉽다. 인터넷만 빠르면 바로 받아서 볼수가 있다. 하지만 빌드하고 테스트하는 것은 linux 배포판마다 차이가 있어서 준비가 간단하지 않다. 보통은 커뮤니티에서 확인할 수 있는데 이 글에서는 Ubuntu 환경에서 커널 모듈을 작성하고 빌드 하는 방법을 정리하는 글이다. Ubuntu 커널 컴파일 가이드https://help.ubuntu.com/community/Kernel/Compile 개발 도구 설치 sudo apt-get install fakeroot build-essential crash kexec-tools makedumpfile kernel-wedge sudo apt-get build-dep linux sudo apt-get install g..
-
kernel macro, container_ofIT/Linux Kernel 2013. 1. 11.
container_of 란?#define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );}) container_of는 커널 매크로로써, 구조체의 멤버변수의 주소값만 알고 있다면 그 구조체 주소를 얻어 올 수 있는 방법입니다. 세가지 인자를 갖습니다.1. 멤버변수의 주소값(ptr)2. 구조체 type(struct)3. 멤버변수 이름(member) 이 세가지 정보를 가지고 구조체에 해당하는 주소를 가져오는데요. 원리는 간단합니다.일단, 해당 멤버변수가 구조체 시작 위치에서 어디에 위치하는지 offset..
-
ubuntu 데스크탑과 서버 커널의 차이점은?IT/Linux Kernel 2013. 1. 8.
서버와 데스크탑의 차이점이란?일반적으로 서버와 데스크탑은 사용 용도가 다르다. 데스탑은 문서작성, 게임, 웹, 그래픽등 다양한 환경과 같이 범용적인 PC 환경을 사용할 수 있음을 의미하지만 서버용은 서비스에 최적화됨을 의미합니다. 백그라운드 프로세스들을 주로 사용하여 서비스와 데이터처리, 네트워크 처리에 최적화되어야 한다. 하드웨어 자원이 일을 많이 하도록 GUI를 사용하지 않는 것도 그 이유이다. Ubuntu에서의 커널 차이점데스크탑에서는 genric이란 키워드를 사용하는 커널을 사용한다. 서버용을 확인하기 위해서 12.10 버전 Ubuntu 서버를 설치해보았다. morenice@ubuntu-morenice:~/linux-3.5.0$ uname -aLinux ubuntu-morenice 3.5.0-17..
-
어떻게 Linux kernel 공부를 시작하죠?IT/Linux Kernel 2013. 1. 1.
linux kernel에 대해서 공부를 시작하게 되었다면, 일단 어려움을 직면한 것이다. 어떻게 공부를 시작할 것인가? 무엇을 토대로 공부를 할 것인가? 등등으로 구글님을 만나서 질문을 하기 시작할 것이다. kernel 자체는 간단한 내용이 아니고 구글님이 말해주는 방대한 자료 때문에 어지럽기 시작할 것이기 때문이다. 일단, 추상화된 개념부터 디테일하게 공부하는 Top-Down 방식을 권장한다. 큰 개념을 이해하지 못한다면 디테일한 정보들에 대한 이해가 떨어지고 어떤 경우에는 코드를 봐도 이해할 수 없는 지경에 이르게 될 것이기 때문이다. 물론 가장 좋은 방법은 멘토를 만드는 것이다.하지만 멘토가 없다면?? 멘토가 없을 수 있다. kernel을 공부하시는 사람을 오프라인에서 만날 수 있는 것은 쉽지 않다..
-
pthread, timer, regex,... posix?? 알고 사용하자!IT/Linux Kernel 2012. 1. 23.
posix란 무엇일까?? thread를 만들고 컨트롤 할 수 있게 해주는 API인 pthread도 posix thread의 약자이다. 그 외에도 주기적인 작업을 위한 timer 함수 그리고 정규식을 사용할 수 있는 regex등 man 명령어를 통하여 해당 함수들의 설명을 읽어보면 항상 posix라는 단어를 보게 된다. posix란?? Portable Operating System Interface 이식 가능한 운영체제의 인터페이스(특정 운영체제에 종속적이지 않은 이라고 해석할 수 있다)를 의미한다. Posix는 IEEE에서 표준으로 명시되어 있으며, Unix와 like-Unix, 그외 기타 운영체제에서 개발에 필요한 API와 쉘 유틸리티 명령어, 기술등을 정의한다. 표준으로 명시되어 있다보니 POSIX를..