본문 바로가기

Linux

symbol table 로 code area 에서 함수 위치 찾기 readelf -s library.so 를 치면 symbol table 이 나온다. 9315: 000c3230 28 FUNC LOCAL DEFAULT 11 __GI_delete_module 9316: 00093188 540 FUNC LOCAL DEFAULT 11 __pathconf 9317: 0006ca08 952 FUNC LOCAL DEFAULT 11 __malloc 9318: 00059b88 236 FUNC LOCAL DEFAULT 11 _IO_padn_internal 9319: 000b4614 24 FUNC LOCAL DEFAULT 11 __read_nocancel # cat /proc/1456/maps 을 해서 나온 code 영역에서 40242000-4035b000 r-xp 00000000 8b:.. 더보기
readelf - 섹션 위치 한눈에 보기 readelf 에는 다음과 같은 기능이 있습니다. elf의 각 섹션들을 나열해 주고 크기와 속성을 보여줍니다. > readelf -l core.1455 Elf file type is CORE (Core file) Entry point 0x0 There are 79 program headers, starting at offset 52 Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align NOTE 0x000a14 0x00000000 0x00000000 0x001dc 0x00000 0 LOAD 0x001000 0x2a000000 0x00000000 0x4d000 0x4d000 R E 0x1000 LOAD 0x04e000 0x2a0550.. 더보기
objdump - 실행파일에서 asm code 확인 objdump 의 여러 기능이 있지만 다음과 같은 기능이 있습니다. 바로 실행 파일에서 sam code 를 바로 확인해 볼 수 있는거지요. 옵션을 보면 source 와 매칭을 시킬 수도 있을것 같은데 좀 더 익숙해 지면 업데이트 하겠습니다. >objdump -d a.out | grep -A10 '' 08052cbc : 8052cbc: 0d c0 a0 e1 30 or $0x30e1a0c0,%eax 8052cc1: d8 2d e9 04 b0 4c fsubrs 0x4cb004e9 8052cc7: e2 38 loop 8052d01 8052cc9: 30 90 e5 00 40 a0 xor %dl,0xa04000e5(%eax) 8052ccf: e1 00 loope 8052cd1 8052cd1: 00 53 e3 add.. 더보기
linux mailing list 정리 linux 를 하면 할 수록 깊이있는 정보는 구글에서도 얻기가 힘들어 지고, 결국 mailing list 를 이용할 수 밖에 없더군요 근식이 형에게 메일링 리스트를 문의했더니 유용한 리스트들을 작업해 둔 페이지를 보내주었습니다. http://invain.homeip.net/maintainer.php 앞으로 도움이 많이 될것 같네요. 필요하신분들 참고하시기 바랍니다. 더보기
linux - Heap 은 움직인다(늘어난다). cat /proc/[pid]/maps 를 하면 해당 process 가 메모리를 어떻게 사용하고 있는지 알 수 있습니다. Test 를 할 일이 있어서 malloc 을 계속해서 할당하는 application 을 구현해서 heap size 를 보았습니다. # cat maps 00008000-00009000 r-xp 00000000 8a:09 42521 /opt/make_lock_up 00010000-00011000 rwxp 00000000 8a:09 42521 /opt/make_lock_up 00011000-0a8ad000 rwxp 00011000 00:00 0 [heap] 40000000-4001c000 r-xp 00000000 8b:07 2304052 /lib/ld-2.5.so 4001c000-4001f0.. 더보기
특정 시간 동안 system cpu 사용량 구하기 (linux) 오늘은 특정시간동안의 cpu 사용량 구하는 법에 대해서 알아보고자 합니다. /proc/stat 정보를 조합하면 원하시는 정보를 얻으실 수 있습니다. cat /proc/stat 를 하시면 아래와 같은 정보를 얻을 수 있습니다. # cat /proc/stat cpu 4939 385 2406 38767 313 20 320 0 0 cpu0 4939 385 2406 38767 313 20 320 0 0 intr 102031 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 155 0 190 0 0 0 0 0 1045 0 8147 0 92 0 1286 0 0 0 0 0 0 0 0 2 0 0 0 133 0 0 0 1 0 0 0 1765 0 0 0 0 0 0 2 0 0 70437 0 0 0 0 0 0 0 0 0.. 더보기
Platform_get_irq & struct resource kernel 소스를 보다보면 irq handler 를 등록하는 부분에서 다음과 같은 code 를 볼 수 있다. static int __devinit kp_probe(struct platform_device *pdev) { ... keypad->irq = platform_get_irq(pdev, 0); printk("[KEY] %s() irq = 0x%x\n", __FUNCTION__, keypad->irq); if (keypad->irq irq; goto err_disable_clk; } ... } Platform_get_irq 는 어디서 등록된 irq 정보를 가지고 오는 것일까? probe 에서 가지고 온것을 보니 분명 어딘가에서 register_device 를 한.. 더보기
간단히 system lock up 상황 만들기 여러 방법들이 있겠지만 이방법이 가장 간달할것 같다. sysfs 파일에 다음을 등록해서 호출하면 바로 lock-up 상황이 연출된다. while(1){ printk("lockup count = %d\n", i++); local_irq_disable(); } 참고로 local_irq_disable 함수는 각종 인터럽트들을 disable 시킨다. 더보기
ps u에 나오는 RSS 사이즈는 VSZ 사이즈까지 증가한다. (할 수 있다)| 원문 : http://elenoa.tistory.com/181 좋은 내용이군요. 이론으로는 알고 있는 내용이지만 이렇게 실재로 눈으로 보는것은 참 의미있다고 생각합니다. 헌데 여기서 나오는 rss 는 smaps 에 나오는 rss, pss 와 같은 의미일까요? 결과를 다 써놓고 정리하자니 벌쭘하지만. VSZ와 RSS는 뭘까? man 페이지의 ps 항목에서 설명하는 두 파라미터의 설명은 다음과 같다. VSZ virtual memory size of the process in KiB (1024-byte units). Device mappings are currently excluded; this is subject to change. (alias vsize). RSS resident set size, the .. 더보기
linux proc 정보 원문 : http://www.promsoft.net/main/board/dev.asp?index=33&gotopage=1 linux 의 proc 는 해당 system 과 process 에 대한 상당히 자세한 정보를 제공해 줍니다. proc 를 알면 linux 가 보인다. - 제 생각입니다. ^^; proc/cmdline 부트로더에서 넘어온 command line rootfs정보, 시리얼정보, ram, 파티션정보 /proc/cpuinfo 말그대로 CPU정보 /proc/devices 현재 올라와있는 디바이스정보 /proc/fb frame buffer 정보 /proc/filesystems 지원하는 filesystem /proc/interrupts 등록된 interrupt정보 /proc/iomem Memory .. 더보기
linux 병목현상 분석 : latencytop linux 에는 수많은 디버깅 도구들이 있습니다. 그중 제가 이번에 주목한 녀석은 latencytop 입니다. 이녀석은 동작중에 느려지는 병목현상에서 어떤 프로세서가 문제를 일으키는지 분석해 주는 툴입니다. 무려 arm 에도 포팅이 되어 있다는 사실에 무척 기쁘긴 하지만, linux tool 들의 단점을 이녀석도 가지고 있습니다. 한눈에 파악하기 힘들다는 점인데요. 이러한 visiblity 를 향상하는 작업을 해보려고 합니다. 우선 이녀석은 다음 두가지 config 와 관련되어 있습니다. CONFIG_LATENCYTOP CONFIG_HAVE_LATENCYTOP_SUPPORT 그리고 최소한 다음 파일들에 영향을 미치네요. fs/proc/base.c:377:#ifdef CONFIG_LATENCYTOP fs/.. 더보기
slab cache - 생성과 파괴를 반복하는 커다란 자료구조 관리 리눅스 커널에서 커다란 자료 구조(structer)를 자주 생성/파괴해야 하는 경우라면 slab cache의 사용을 고려해 보자. slab layer 는 프로세서별로 할당되는 객체 캐시를 보존하며, 이 리스트는 객체(데이터)의 할당과 해제 성능을 획기적으로 향상시킨다. (예를 들어 inode 로 slab cache 로 관리한다.) 객체(데이터) slab------------------------- 객체(데이터) 객체들... cache----------------------- 객체(데이터) slab------------------------- 객체들... slab들 .... 각 객체 유형별(struct 별)로 하나의 cache 를 선언한다. 하나의 cache 는 다수의 slab 을 가지고 이 각각의 sla.. 더보기
misc 에 sysfs 등록하기 커널버전 : 2.6.29 misc driver 에 sysfs 를 등록하려 했으나 device object 가 없어서 난감한 상황에 빠졌다. sysfs 를 등록하려면 device 로 등록을 해야 하는데 misc를 사용하는 하위 device들은 register_device 로 등록을 하지 않기 때문이다. 구글링을 해보니 나같은 난감한 상황때문에 고민했던 사람이 있었고, 그 사람이 2003년에 패치를 만든것을 발견하였다. 역시 정식 커널 버전에도 적용되어 있었다. 소스 코드를 뒤져보니 패치로 인해서 misc structer 에 device 구조체가 추가 되었다. struct miscdevice { int minor; const char *name; const struct file_operations *fops.. 더보기
linux 레지스터 맵핑주소 찾기 간혹 virtual address 로 register 를 setting 하는 코드 들이 있다. 일반적으로 linux버전 \ arch \ arm \ plat-칩명 \ plat \ map.h 에 보면 cpu 각 모듈에 대한 register mapping table 이 있다. 예를들면 #define S3C_ADDR_BASE (0xF4000000) #ifndef __ASSEMBLY__ #define S3C_ADDR(x) ((void __iomem __force *)S3C_ADDR_BASE + (x)) #else #define S3C_ADDR(x) (S3C_ADDR_BASE + (x)) #endif #define S3C_VA_IRQ S3C_ADDR(0x00000000) /* irq controller(s) */ .. 더보기
정식 i2c port 에 등록하여 사용하기 mach-모델명.c 파일등에서 i2c_board_info 구조체 형태로 각 포트에 맞게 이름과 slave address 를 저장합니다. static struct i2c_board_info i2c_devs0[] __initdata = { { I2C_BOARD_INFO("KXSD9", 0x18), }, /* accelerator */ { I2C_BOARD_INFO("USBIC", 0x25), }, /* uUSB ic */ { I2C_BOARD_INFO("max17040", 0x36), }, /* max17040 fuel gauge */ }; s3c_i2c0_set_platdata(NULL); i2c_register_board_info(0, i2c0_devs, ARRAY_SIZE(i2c0_devs)); 드라이.. 더보기
Probe 함수의 파라미터로 데이터 전달하기 먼저 module_init 이나 device register 단에서 해당 드라이버에 대한 정보를 등록하며 이때 파라미터로 전달한 데이터를 등록해 놓는다. 이때 다음 함수가 사용된다. platform_set_drvdata static struct ak4671_setup_data smdk6410_ak4671_setup = { .i2c_bus = 3, // id = 3, GPIO_FM_SCL, GPIO_FM_SDA platform device. .i2c_address = (0x24 >> 1), }; static struct snd_soc_device smdk6410_snd_devdata = { .machine = &smdk6410, .platform = &s3c24xx_soc_platfor.. 더보기
linux 압축 관련 명령어 모음 tar xzvf [파일이름] 압축하기 tar -czvf [이름] [폴더명] aa, bb, cc 파일을 zip.tar라는 파일로 묶는다. [root@sense tar]# tar -cf zip.tar aa bb cc [root@sense tar]# ls aa bb cc zip.tar 나) 아카이브를 풀지 않고 내용을 확인할 수 있다. [root@sense tar]# ls aa bb cc zip.tar [root@sense tar]# tar tvf zip.tar -rw-r--r-- root/root 0 2005-03-26 11:16:05 aa -rw-r--r-- root/root 0 2005-03-26 11:16:07 bb -rw-r--r-- root/root 0 2005-03-.. 더보기
linux rpm 관련 명령어 (1) 설명: 새로운 패키지를 설치하거나 업그레이드시 사용한다. (2) 관련옵션 -i : 새로운 패키지를 설치할 때 사용한다. (--install) -U : 기존의 패키지를 새로운 버전의 패키지로 업그레이드할 때 사용하고 설치된 패키지가 없을 경우 패키지를 설치를 한다.( -i 옵션과 같음) -F : 이전 버전이 설치되어 있는 경우에만 설치한다.(--freshen) -v : 메시지를 자세히 보여준다. -h : '#'기호로 표시해 준다. --force : 기존에 설치된 패키지와 관계없이 강제로 설치 한다. --nodeps : 의존성 관계를 무시하고 설치 한다. -vv : 메시지를 아주 자세히 보여준다. --oldpackage : 구버전으로 다운그레이드할 때 사용한다. --rebuilddb : 특정한 패키지.. 더보기
Linux Network proxy setting 방법 Ubuntu 환경에서는 windows 와 다르게 proxy setting 을 여러곳에 각각 해 주어야 하는 번거로움이 있다.크게 3가지 인데 아래에 정리해본다 참고 : http://xmodulo.com/how-to-set-up-proxy-auto-config-on-ubuntu-desktop.html 그래픽 UI 의 setting menu 에서 아래와 같이 설정한다. you have created this PAC file, go to "System Settings" -> "Network" -> "Proxy Settings", and choose "Automatic" method in network proxy. Then type "file://.. 더보기
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/ 파일속성,권한 링크된파일수 소유자 소유그룹 크기 최종수정일 파일이름 └?? 앞에 한자리는 파일의 종류, 다음은 세 자리씩 끊.. 더보기
linux yum 명령어 yum -y update -y 옵션은 질문에 대해 모두 yes로 응답. 설치 팩키지 확인 rpm -qa | grep '패키지명' 패키지 찾기 yum search '패키지명' 패키지 설치 및 update yum install '패키지명' yum update ('패키지명') 서치 경로 변경 /etc/yum.repos.d/* 모든 파일의 경로를 아래와 같이 변경 # vi /etc/yum.repos.d/fedora.repo baseurl=http://download.fedora.redhat.com/pub/fedora/linux/releases/$releasever/Everything/$basearch/os/ #mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?re.. 더보기
linux ftp 명령어 유닉스 콘솔에서 ftp 명령어 mput 사용시 파일 하나 전송할때마다 y/n을 물어 보는 것을 없애는 방법은 . prompt 키워드로 대화식 모드를 off로 해야함 ftp> prompt 하면됨. 한번 더하면 원래 대로 돌아옴. ftp> binary 바이너리 모드로 전송됨. ftp> mput * 모든 파일이 전송됨. 간혹 mget *.* 하면 전송 안되는 파일이 있음. 확장자가 없는 파일이 있기 때문에...... *** 파일 보내기(mput), 파일 가져오기(mget)*** mget * ==> 디렉토리를 제외한 나머지 파일을 모두 가져온다. mget -R BACKUP ==> BACKUP이란 폴더 안에 존재하는 모든 내용을 가져온다. mget -R * ==> 역시 하위 폴더까지 모두 가져온다. get -R .. 더보기
linux 디렉토리및 파일관리 명령어 ##디렉토리및 파일관리 명령어## ls - 파일및 디렉토리 목록 보기 [옵션] -a 숨김파일(.xx) 도모두 출력 -c 변경시간 에 따른 정렬 -C 다중 컬럼 표시 -d 디렉토리만 표시 -F 이름 끝에 파일 형식 표시 -l 롱포맷 으로 표시 (자세히보기) -r 이름 역순 표시 -R 서브디렉토리까지 표시합니다 cd - 경로변경 pwd - 현재 경로 보기 tty - 현재 로그인되어 있는 터미널의 장치 이름 보기 man - 명령어나 파일에 대한 매뉴얼 cat - 파일의 내용을 출력 touch -빈파일 생성및 엑세스시간 변경 mkdir - 디렉토리 를 생성 rmdir - 디렉토리 삭제 route - 인터페이스 정보확인 cp -파일 복사 ex) cp 대상파일 이동파일 [옵션] -a : 소스파일의 구성과 속성도 함.. 더보기
유용한 linux 명령어들 이 문서는 계속해서 업데이트 됩니다. find 폴더경로 -type d -name .svn | xargs rm -rf 예제 : 폴더내 하위폴더들에 해당 문자열이 있는 파일 찾기 grep -snr "IPMC_IOCTL_SET_CPU_MODE" * egrep "UPLOAD|DELETE" *.log >> log.txt : 문자열만 추출해서 파일로 옮기기 grep [옵션][찾을문자][대상파일] -C : 일치되는 내용이 있는 행의 개수를 센다. -V : 문자가 존재하지 않는 행 출력 -i : 대소문자 구분없이 검색 -CV : 문자가 존재하지 않는 행의 갯수 출력 -h : 일치되는 내용을 찾은 파일의 이름을 표시하지 않는다. -n : 일치되는 .. 더보기
리눅스명령어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 뒤에 리눅스 버전을 써 주면 됩니다. 더보기