본문 바로가기

Programming/Linux_Kernel

linux 에서 GPIO로 I2C Emulation 사용하기 mach-모델명.h code 에서 에뮬레이션 i2c device 등록 #define GPIO_TOUCH_SDA S3C64XX_GPC(5) static struct i2c_gpio_platform_data i2c_touch_platdata = { .sda_pin = GPIO_TOUCH_SDA, // gpio number .scl_pin = GPIO_TOUCH_SCL, .udelay = 2, .sda_is_open_drain = 0, .scl_is_open_drain = 0, .scl_is_output_only = 0 }; static struct platform_device sec_device_i2c_touch = { .name = "i2c-gpio", .id = 4, // adepter number .d.. 더보기
linux kernel update list 정리 (2.6.25 - 2.6.29) - 프로세스 메모리 사용량의 좀 더 정확한 측정을 위한 새로운 인터페이스 도입, - 프로세서 그룹의 메모리 사용을 제어하기 위한 ‘memory resource controller’ 1. Important features (AKA: the cool stuff) 1. Memory Resource Controller : memory resource controller 를 Cgroups 로 통합하였음. 2. Real Time Group scheduling : 2.6.24 에서 사용되었던 group scheduling 에 SCHED_RT type 추가 3. RCU Preemption support 4. FIFO ticket spinlocks in x86 5. Better process memo.. 더보기
linux 초보자를 위한 잡다지식 퍼레이드 출처가 불분명한 글을 얻어서 올립니다. 혹시 문제가 된다면 연락주세요. LINUX 명령어 Option 설 명 비 고 ls 자신이 위치한 디렉토리에 있는 파일들의 이름을 보여줌 LiSt 의 준말 >을 사용해서 출력문을 파일로 저장할 수 있음.. ex> ls > ls.txt = 파일리스트가 화면에 보이지 않고 ls.txt파일로 저장됨. 파일의 종류는 이름 뒤에 붙은 기호로 알 수 있음.. ‘/’가 붙으면 디렉토리 ‘*’가 붙으면 실행파일 -l 파일에 대한 정보를 자세하게 보여줌.. ex>ls -l ?? drwxrwxr-x 1 root root 1024 apr 11 21:20 Mail/ 파일속성,권한 링크된파일수 소유자 소유그룹 크기 최종수정일 파일이름 └?? 앞에 한자리는 파일의 종류, 다음은 세 자리씩 끊.. 더보기
리눅스명령어top 사용법과 설명과 CPU과부하(CPU used 100%) 원본 : http://weezzle.net/1360 top이라고 친 후 h라고 입력 하면 도움말이 나옵니다. 거기에서 보고싶은 걸 입력하면 됩니다. >#top ---------------------------------------------------------------------------- top - 11:35:19 up 44 days, 5:09, 5 users, load average: 0.03, 0.05, 0.05 Tasks: 343 total, 1 running, 342 sleeping, 0 stopped, 0 zombie Cpu(s): 1.2% us, 0.1% sy, 0.0% ni, 96.7% id, 1.9% wa, 0.0% hi, 0.0% si Mem: 2070100k total, 1748.. 더보기
linux 평균 cpu 점유률 구하기 top -d 0.1 -n 10 | grep Cpu 에서 나온 정보중 # top -d 0.1 -n 10 | grep Cpu Unknown HZ value! (2810100) Assume 100. Cpu(s): 0.0% us, 0.0% sy, 0.0% ni, 99.9% id, 0.1% wa, 0.0% hi, 0.0% si, 0.0% st Cpu(s): 11.6% us, 14.5% sy, 0.0% ni, 72.5% id, 0.0% wa, 1.4% hi, 0.0% si, 0.0% st Cpu(s): 25.8% us, 35.5% sy, 0.0% ni, 32.3% id, 0.0% wa, 6.5% hi, 0.0% si, 0.0% st Cpu(s): 10.0% us, 53.3% sy, 0.0% ni, 33.3% id,.. 더보기
oom killer 에 관한 글 OOM killer 에 대해서 좋은글이 있어서 링크를 건다. http://barriosstory.blogspot.com/2009/02/taming-oom-killer.html 헨드셋에서는 linux 기본 OOM 을 사용하기에는 무리가 있다. 모바일특성상 OOM이 발동할 시기는 이미 유저입장에서는 시스템이 한참 전에 뻗어 있은 후이기 때문이다. 따라서 안드로이드의 low memory killer 의 컨샙을 변형하여 일정이상 ram 이 부족하게 되면 현재 실행중인 어플들 리스트중에 원하는 것을 kill 하도록 구현하였다. 더보기
RCU (read-copy update) 에 대한 이해 원문 : http://barriosstory.blogspot.com/2009/01/rcu.html RCU에 대해 이해하기 쉽게 정리한 문서가 있다. RCU에 대한 이해 아래 링크도 그림으로 잘 표현되어 있습니다. http://2005elc.elancer.co.kr/eTimes/page/eTimes_view.html?str=c2VsdW5vPTI5MDM= 더보기
oprofile 관련 유용한 정보들 - oprofile 사용법 HowTo http://linuxspot.tistory.com/34 - oprofile 에 대한 전반적인 내용 http://www.ibm.com/developerworks/kr/library/l-pow-oprofile/index.html 더보기
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; } 더보기
커널에서 파일 오퍼레이션 하기(File operation in Kernel) 원문 : http://blog.naver.com/netohk?Redirect=Log&logNo=80045492480 커널에서 파일 오퍼레이션 하기... (드라이버에서 펌웨어 로딩시 유용) #include #ifndef __KERNEL_SYSCALLS__ #define __KERNEL_SYSCALLS__ #endif #incude //#include function() { int fp; mm_segment_t fs; fs = get_fs(); set_fs(KERNEL_DS); open("file", O_RDONLY, 0); size = lseek(fd, 0, 2); //END lseek(fd, 0, 0); //START read(..); close(fp); set_fs(fs); } [출처] 커널에서 파일 .. 더보기
ARM side irq disable api linux../include/include/irqflags.h local_irq_disable() 더보기
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, 함수.. 더보기
SecureCRT 에서 menuconfig 보기 SecureCRT 에서 menuconfig 가 깨져서 나올때 아래와 같이 셋팅하면 깔끔하게 나온다. [Terminal ->Emulation] Terminal : Xterm ANSI Color : "check" 더보기
frame buffer 이야기(8)(9) 원문 : http://kelp.or.kr/korweblog/stories.php?story=02/12/08/8598141 http://kelp.or.kr/korweblog/stories.php?story=02/12/10/6611366 글쓴이 : holelee (2002년 12월 08일 오후 08:56) 읽은수: 10,893 [ 임베디드강좌/이규명 ] == 시작하기에 앞서 이 글에 있는 모든 내용은 글쓴이가 가지고 있는 ATI mach 64(2MB) 그래픽 카드가 달려있고 RedHat 8.0이 설치된 PC(또는 Permedia2(8MB) 그래픽 카드가 달려 있는 RedHat 7.3이 설치된 PC)에서 제대로 동작하지만 이 글에 있는 모든 내용이 정확하다고 말씀 드릴 수 없습니다. 이 글에 있는 내용을 따라.. 더보기
frame buffer 이야기(6) (7) 원문 : http://kelp.or.kr/korweblog/stories.php?story=02/11/12/3234889 http://kelp.or.kr/korweblog/stories.php?story=02/11/23/8053717 글쓴이 : holelee (2002년 11월 12일 오후 06:27) 읽은수: 8,786 [ 임베디드강좌/이규명 ] == 시작하기에 앞서 이 글에 있는 모든 내용은 글쓴이가 가지고 있는 ATI mach 64(2MB) 그래픽 카드가 달려있고 RedHat 8.0이 설치된 PC(또는 Permedia2(8MB) 그래픽 카드가 달려 있는 RedHat 7.3이 설치된 PC)에서 제대로 동작하지만 이 글에 있는 모든 내용이 정확하다고 말씀 드릴 수 없습니다. 이 글에 있는 내용을 따라 .. 더보기
frame buffer 이야기(4) (5) 원문 : http://kelp.or.kr/korweblog/stories.php?story=02/11/11/1742716 http://kelp.or.kr/korweblog/stories.php?story=02/11/12/3096836 글쓴이 : holelee (2002년 11월 11일 오후 10:35) 읽은수: 17,354 [ 임베디드강좌/이규명 ] == 시작하기에 앞서 이 글에 있는 모든 내용은 글쓴이가 가지고 있는 ATI mach 64(2MB) 그래픽 카드가 달려있고 RedHat 8.0이 설치된 PC(또는 Permedia2(8MB) 그래픽 카드가 달려 있는 RedHat 7.3이 설치된 PC)에서 제대로 동작하지만 이 글에 있는 모든 내용이 정확하다고 말씀 드릴 수 없습니다. 이 글에 있는 내용을 따라.. 더보기
frame buffer 이야기 (3) 원문 : http://kelp.or.kr/korweblog/stories.php?story=02/11/11/4997781 글쓴이 : holelee (2002년 11월 11일 오후 05:56) 읽은수: 11,169 [ 임베디드강좌/이규명 ] == 시작하기에 앞서 이 글에 있는 모든 내용은 글쓴이가 가지고 있는 ATI mach 64(2MB) 그래픽 카드가 달려있고 RedHat 8.0이 설치된 PC(또는 Permedia2(8MB) 그래픽 카드가 달려 있는 RedHat 7.3이 설치된 PC)에서 제대로 동작하지만 이 글에 있는 모든 내용이 정확하다고 말씀 드릴 수 없습니다. 이 글에 있는 내용을 따라 했을 때 혹 생길 지 모르는 모든 문제에 대해서 글쓴이는 책임을 지지 않습니다. 글의 내용 중에 잘못된 내용이 .. 더보기
frame buffer 이야기 (2) 원문 : http://kelp.or.kr/korweblog/stories.php?story=02/11/09/8670820 글쓴이 : holelee (2002년 11월 09일 오후 10:31) 읽은수: 13,703 [ 임베디드강좌/이규명 ] == 시작하기에 앞서 이 글에 있는 모든 내용은 글쓴이가 가지고 있는 ATI mach 64(2MB) 그래픽 카드가 달려있고 RedHat 8.0이 설치된 PC(또는 Permedia2(8MB) 그래픽 카드가 달려 있는 RedHat 7.3이 설치된 PC)에서 제대로 동작하지만 이 글에 있는 모든 내용이 정확하다고 말씀 드릴 수 없습니다. 이 글에 있는 내용을 따라 했을 때 혹 생길 지 모르는 모든 문제에 대해서 글쓴이는 책임을 지지 않습니다. 글의 내용 중에 잘못된 내용이 .. 더보기
frame buffer 이야기 (1) 요즘 touch device 에 이어서 display module인 v4l2와 frame buffer 등의 업무를 담당하고 있다. 공부를 해 나아가며 찾은 자료들을 이곳에 keeping 하려 한다. 좋은 자료를 만들어 주신분께 먼저 감사를 드린다. 원문 : http://kelp.or.kr/korweblog/stories.php?story=02/11/09/8557035 글쓴이 : holelee (2002년 11월 09일 오후 10:29) 읽은수: 22,783 [ 임베디드강좌/이규명 ] == 시작하기에 앞서 이 글에 있는 모든 내용은 글쓴이가 가지고 있는 ATI mach 64(2MB) 그래픽 카드가 달려있고 RedHat 8.0이 설치된 PC(또는 Permedia2(8MB) 그래픽 카드가 달려 있는 RedHa.. 더보기
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.. 더보기
arm 에서 system call 을 호출할때 4개 이상의 파라미터를 어떻게 처리하는가? 다음과 같이 arm 컴파일러를 지정해 주면 arm 용으로 컴파일이 가능하다. /opt/toolchains/arm-linux-4.1.1/bin/arm-linux-gcc -o test test.c 이때 -S 옵션을 주면 어셈형태의 파일이 나와서 직접 asm 파일을 볼 수 있다. /opt/toolchains/arm-linux-4.1.1/bin/arm-linux-gcc -S test.c 다음과 같이 파라미터가 6개인 sendto system call 에 가상으로 파라미터들을 넣어서 추적해 보았다. #include #include #include int main() { int _s=0x11; void *_msg = (void*)0x22; size_t _len = 0x33; int _flags = 0x44; str.. 더보기
fallocate system call 원문 : http://lwn.net/Articles/239738/ fallocate 는 일련된 메모리 블럭을 예약할 수 있는 시스템 콜이다. 이 system call 은 파일시스템 단위에서 지원되어야 사용할 수 있으며 현재 Ext4와 XFS에서 지원하고 있다고 한다. 향후 다양한 플렛폼 및 파일시스템에 이식 되어 널리 사용될 것이라고 한다. 현재는 이러한 기능을 사용하기 위해서는 posix_fallocate 를 사용해야 하는데 이 syscall은 메모리 블럭을 잡은후 fregmantaion 을 막기위해 0으로 체워둔다고 한다. 이러한 낭비를 막기 위해서 fallocate syscall 에 대한 필요성이 대두되고 있다. root@onegun-ubuntu:~/2_hdisk/Project/Mobibench/s.. 더보기
wait 를 이용한 프로세스 종료 상태 원문 : http://database.sarang.net/study/glibc/23.htm 23. 6 프로세스 종료 이 절에서 설명하고 있는 함수들은 자식 프로세스가 종료하거나 멈추도록 기다리는데 사용되고, 그러한 상황인지의 여부를 알아보는데 사용된다. 그들 함수들은 헤더파일 `sys/wait. h'에 선언되어 있다. 함수 : pid_t waitpid (pid_t pid, int *status_ptr, int options) waitpid 함수는 프로세스 ID를 pid로 가진 자식 프로세스로 부터 상황 정보를 요청하는데 사용된다. 일반적으로, 호출된 프로세스는 자식 프로세스가 종료됨으로써 유용한 상황정보를 만들 때까지 잠시 중지되어 있다. pid 인수를 위한 다른 값들은 특별한 뜻을 갖는다. -1의 값이.. 더보기
wati(), wait4(), waitpid() 함수의 status 반환값 원문 : http://forum.falinux.com/zbxe/?mid=C_LIB&page=4&document_srl=408551 안그래도 strace 소스 분석하는데 status 에 따라 상당히 많은 분기문이 있어서 정확한 의미를 파악해야 했다. 이 문서가 상당히 많은 도움이 된다. wati()나 waitpid()에서 자식 프로세스의 종료 상태를 확인하기 위해서 인수로 전달했던 변수 status 값을 직접 확인해야 했습니다. 이값은 아래와 같이 값이 구성된다고 했지만 앞으로 시스템이 발전하면, 이와 같은 내용이 바뀌지 않는다는 보장이 없습니다. 즉, 8비트 2개에서 16비트 2개로 늘려질 수 있다는 것이죠. 8비트 8비트 정상 종료 프로세스 반환 값 0 비정상 종료 0 종료 시킨 시그널 번호 또한 직접.. 더보기