본문 바로가기

Kernel

linux kernel 버전별 변경사항 check linux kernel 이 버전별로 어떠한 기능이 적용되었는지 한눈에 볼 수 있는 웹 사이트 입니다. 이런게 꼭 필요했었는데, 역시 있었네요. http://kernelnewbies.org/Linux_2_6_29 뒤에 리눅스 버전을 써 주면 됩니다. 더보기
linux kernel 에서 i2c slave address 등록 위치 커널 버전 : 2.6.24.* 드라이버 코드들을 보다보면 다음과 같이 probe 함수에서 i2c_client 정보를 받아와서 사용하는 경우가 있다. static struct i2c_driver P_i2c_driver = { .driver = { .name = "P_driver", }, .probe = P_probe, ... }; static int P_probe (struct i2c_client *client) { ... if( strcmp(client->name, PROX_DEVICE_NAME) != 0 ) ... else if( (ret = P_dev_init(client)) < 0 ) ... P_dev.client = client; } 이러한 경우에 어느 곳에서 이것을 등록시켜 주어야 할지 난감한 .. 더보기
linux kernel 에서 file 유무 확인하기 여러 방법이 있겠지만, 다음 방법을 사용하였다. int check_exist_file(char* file_path) { int ret = 0; struct file *temp_file; temp_file = filp_open(file_path, O_RDONLY, 0); if (IS_ERR(temp_file)) ret = -1; else { filp_close(temp_file, NULL); ret = 0; } return ret; } 더보기
Branch Prediction 비록 우리 과제에서는 disable 하기는 했지만, 이런기능도 있다는 것이 흥미롭다. 하지만, enable 했을경우 LCD에서 buffer under run 현상이 발견되어서 임베디드 과제에는 적용이 힘들지도 모르겠다.(혹은 ARM 계열에서만 발생하는 문제일 수 있다.) 원문 : http://minjang.egloos.com/503419 (2008년 6월 21일에 수정) 대부분의 고성능 CPU들은 거의 모두 Out-of-Order Execution이라고 불리는 비순차 실행을 지원하고 있다. Out-of-Order(OOO)의 목적은 하나의 스레드 내에서 최대의 병렬성을 찾는 것이다. 당연한 이야기겠지만 프로그램 코드는 프로그래머가 의도한 대로 위에서 아래로 순차적으로 실행된다. 중간에 if, for, 함수.. 더보기
udev debuging 방법 udev 에서 파일 호출하는 녀석이 갑자기 동작이 안되어서 재대로 호출되는지 알고 싶었다. 구글링중 다음과 같이 setting 하면 로그를 볼 수 있다고 한다. 하지만 사실 원인은 파일 호출 권한 문제 였다능.. # udevd --daemon --debug-trace --verbose &>udevd-debug.log # udevcontrol log_priority=debug # udevcontrol env STARTUP=1 # udevmonitor --env 더보기
Linux kernel compile 시 stdio.h / stdlib.h 애러 얼마전 커널에서 동작하는 간단한 프로그램을 만들었다. 컴파일 하는데..앵.. 왠걸.. 엄청난 애러가 났다. kernel/syscall_interpret/auditex_string.c:1:20: error: stdlib.h: No such file or directory 결론부터 말하면 kernel 에서는 stdlib 들을 사용할 수 없다. standard library 는 glibc 에 연동되어서 돌아가는데, kernel 에서는 이를 이용할 수 없기 때문이다. 따라서 kernel 쪽에서는 이를 대비한 간단한 lib들을 따로 재공 하고 있는데 그 위치는 컴파일 환경마다 다르겠지만 보통 다음과 같다. linux-버전명\lib 더보기
Linux Kernel 의 spin lock spin_lock 에 대해서 깔끔하게 정리해 놓았다. Lcd 에 control data 를 보내기 위해서 spin_lock_irqsave() 를 사용해 보았다. 보통은 저 함수가 인터럽트를 disable 해주기 때문에 인터럽트 핸들러에서 주로 사용된다고 한다. 그렇다면 disable 된 인터럽트들은 어떻게 되는 것일까? 누구 아는 사람?!! 원문 : http://blog.naver.com/ryswin?Redirect=Log&logNo=140043664262 * spin_lock_irqsave()와 spin_lock_irq() 둘다 interrupt를 disable 시킨 이후에 spin lock을 획득하는 것은 동일하지만, spin_lock_irqsave()는 CPU의 flag 레지스터를 보관했다가 spi.. 더보기
kernel 에서 ntoa 사용하기 kernel 에 user 쪽에서 사용하던 코드를 포팅하다 난감한 상황이 발생했다. 바로 inet_ntoa 함수가 kernel 쪽에 없는것. 한시간 가량 구글링을 한끝에 해법을 찾았다. define 문은 kernel.h 파일에 있다. #ifndef __SAMSUNG_AUDIT_LOGGING_PARAM__ tprintf("inet_addr(\"%s\")", inet_ntoa(sinp->sin_addr)); #else tprintf("inet_addr(\"" NIPQUAD_FMT "\")", NIPQUAD(sinp->sin_addr)); #endif 더보기
[Linux][kernel] __user 키워드 kernel 코드를 보다보니 다음과 같이 생소한 키워드가 보였다. void __user *sival_ptr; 따라가 보니 다음과 같다.. 이것은 뭥미? ㅁ_ㅁ # define __user __attribute__((noderef, address_space(1))) 일단.. noderef 에 대해서 http://lkml.org/lkml/2004/9/12/230 의 글 타래를 읽어보니까, noderef는 no dereference라는 뜻이더군요. address_space에 대한 얘기는 없고... address_space는 뭐, 유저 스페이스 커널 스페이스등등 나눠놓고... 몇번째에 해당한다는 것 같은데요...(제 생각) 맞나요? 아시는 분? no dereference로 선언된 포인터 변수는 dereferen.. 더보기
paper on debugging kernel oops or hang 출처 : http://mail.nl.linux.org/kernelnewbies/2003-08/msg00347.html To: "'kernelnewbies@nl.linux.org'" Subject: paper on debugging kernel oops or hang From: "HABBINGA,ERIK (HP-Loveland,ex1)" Date: Mon, 25 Aug 2003 14:30:10 -0700 List-archive: List-help: List-owner: List-post: List-software: Listar version 1.0.0 List-subscribe: List-unsubscribe: Original-Recipient: rfc822;kernelnewbies-archive@nl.l.. 더보기
diff 를 이용한 kernel patch 만들기 - 또다른 문서 원문 : http://wiki.kldp.org/wiki.php/SubmittingPatches How to Get Your Change Into the Linux Kernel or Care And Operation Of Your Linus Torvalds 리눅스 커널에 여러분의 패치(역자주:원본에는 change를 사용하였으나 문맥상 patch로 번역함)를 반영하는 법 혹은 여러분의 Linux Torvalds를 치료하고 수술하는 법 For a person or company who wishes to submit a change to the Linux kernel, the process can sometimes be daunting if you're not familiar with "the system." .. 더보기
diff를 이용한 kernel patch 만들기 원문 : http://kltp.kldp.org/stories.php?story=02/06/23/4844278 [ 패치파일 만들어 적용하기 ] 작성자 : 정택진 (nveteran@netian.com) 작성일 : 2002. 6. 23. 1. 패치파일 만들기 (diff 이용) - diff 의 쓰임 : 두 대상간의 차이점만을 모아 파일로 저장한다. - 확장자 : .diff or .patch - 만들기 전에는 make clean, make distclean, make mrproper 등을 수행하여, 컴파일된 파일을 모두 삭제한 뒤 만듭니다. - 아래 설명들은 pwd 를 항상 생각하면서 도움이 됩니다. * 실제 소스 코드를 통한 테스트를 합시다. - 대상 : wu-ftpd-2.6.2.tar.gz # cd /usr/.. 더보기
Linux Kernel 에 대한 문서들 여기 있는 내용들만 알아도 Linux Kernel 에 대해서 전반적인 지식은 습득할 수 있을 것이다. 이렇게 방대한 내용이 한글로 작업되어있다는 것만으로도 얼마나 감사한 일인지 모른다. 번역해 주신 분들에게 감사함을 표한다. 원문 : http://katalog.egloos.com/3191241 1 일반 문서 ¶ Unreliable Guide To Hacking The Linux Kernel (김남형) 리눅스 커널 해커들을 위한 입문서 Kernel Analysis HOWTO (김남형) 리눅스 커널을 구성하는 각 부분을 정의하고 그 부분을 수행하는 주된 함수와 자료 구조, 그리고 이들이 어떻게 동작하는지에 대한 설명 임베디드 시스템 개발자를 위한 리눅스 커널 (남상규) 리눅스 커널을 임베디드 시스템에 포팅하.. 더보기
HOWTO do Linux kernel development 리눅스 커널 개발자가 되는 일은 정말 길고도 힘든 길일것 같다. 하지만, 그렇기에 정말 멋진 일이 아닐까.. 나는 지금 그 길의 첫발을 딛고 있다. 원문 : http://wiki.kldp.org/wiki.php/HOWTO_do_Linux_kernel_development FrontPage › LinuxdocSgml/Majordomo-KLDP › HOWTO_do_Linux_kernel_development 원문: "HOWTO do Linux kernel development" 저자: Greg Kroah-Hartman 번역: 조수형 HOWTO do Linux kernel development 이 문서는 이 주제에 대한 가장 중요한 문서로 어떻게 리눅스 커널 개발자가 되고 어떻게 리눅스 커널 개발 커뮤니티와 .. 더보기