본문 바로가기

Debug

analyseplugin - log 분석을 위한 notepad++ 의 유용한 plugin analyseplugin 플러그인은, log와 같은 text 문서에서 내가 입력한 string들을 포함하고 있는 모든 line을 특정 color로 extrect해서 순서대로 정렬해 준다. 따라서, 의미있는 로그 문구(panic, error, abort 등)들을 미리 입력해서 xml 형태로 저장해 두면, 매우 빠르게 log file에서 해당 문구가 있는지 확인할 수 있다. 한동안 notepad++에서 잘 사용하던 analyseplugin이 notepad++ update이후 더이상 plugin list에서 보이지 않아 매우 아쉬워하고 있었는데, 여전히 sourceforge에 project가 살아있고 최근(2020.06)까지 update가 된것을 발견하였다. https://sourceforge.net/proj.. 더보기
trace32 - set conditional breakpoint using arm register value UI 창에서는 입력이 어려우나 아래와 같이 command 로 입력하면 된다. Break.Set function_name /Program /CONDition Register(X0)==699 더보기
objdump 실행파일 및 library 의 symbol list 출력하기 objdump 에 T 옵션을 사용하면 symbol 이 strip 된 파일에서도 리스트를 출력할 수 있습니다. # arm-eabi-objdump -T ./libsqlite.so ...00000000 DF *UND*00000000 HMAC_Update00000000 DF *UND*00000000 HMAC_Final00000000 DF *UND*00000000 HMAC_CTX_cleanup0000b4f4 g DF .text00000140 sqlcipher_page_cipher00000000 DF *UND*00000000 EVP_CipherInit00000000 DF *UND*00000000 EVP_CIPHER_CTX_set_padding00000000 DF *UND*00000000 EVP_CipherUpdat.. 더보기
gdb 로 Android nexus5 debugging 하기 - GDB server 를 사용해야 하는 이유.: Android local 에서 gdb 를 직접 실행하면 필요한 symbol 정보 매칭이 안되어서 attach 한 process 가 SIGV error 를 내면서 종료가 됩니다. - cross compile 로 arm 용 gdb / gdb server 구하기 http://searchme.tistory.com/37 ※ 이 디버깅 방법에서 gdb 는 사용하지 않습니다. - adb push 로 PC에서 Android device 에 gdbserver 다운로드 하기 # adb push ./gdbserver /data/local/tmp/ - arm-gnu-eabi toolchain 받기git clone https://android.googlesource.com/pl.. 더보기
class 에 sysfs node 등록하여 사용하기 linux kernel 에서 kernel 단과 user 사이에 통신을 위한 방법중에 sysfs node 를 사용하는 방법이 있다.지원하는 함수는 아래 3가지 함수들이 있다. devclass_create_filedevice_create_file class_create_file 이중 devclass_create_file 은 삭제된 것으로 보인다.class_create_file 의 예제를 첨부한다. #include #include #include #include #include #include #include #include static dev_t first; // Global variable for the first device number static struct cdev c_dev; // Global v.. 더보기
Android Terminal Emulator 을 이용한 linux kernel debugging 기법 오늘은 Android Terminal Emulator App 을 소개하고자 한다. linux kernel 개발을 할때 간혹 디버깅 용도로 sysfs 를 쓰는 경우가 있다. usb 도 연결 안되서 adb shell 도 못쓰고,무언가 kernel 과 간접적으로 read / write 를 할때 이러한 방법을 사용하고 하는데,이때마다 App 을 만들어서 경로와 write data 를 변경하는 것은 매우 번거로운 짓이다. 이때 해당 App 을 이용해서, 화면에서 직접 terminal 을 접근해서 재어 할 수 있다. 단, control 하려는 sysfs node 는 미리 chmod 로 권한을 풀어두는 것이 좋을 것이다. App 은 일단 link 한다. http://www.appsapk.com/android-term.. 더보기
memory mapping 전에 serial print 사용하기 기본적으로 printk 는 buffer 를 사용하기 때문에 memory mapping 이 되기 전에는 puts 정도밖에 사용할 수 없습니다. 따라서 debugging 을 할때 변수값등을 볼 수 없어서 어려움이 있는데요. 2.6.33 kernel 이후 부터는 다음 함수를 사용하면 됩니다. asmlinkage void early_printk(const char *fmt, ...); 더보기
Kprobes를 이용한 커널 디버깅 시간이 될때 꼭 한번 해보고싶다. 하지만 ARM을 지원하지 않는다는거... ㅜ.- http://webdizen.new21.net/blog/2900 더보기
device driver check list (using I2C) I2C 드라이버를 사용하는 디바이스 드라이버를 작성할때 check list 이다. 모든 디버깅은 의심 포인트 리스트를 만들고 테스트 하기 쉬운것 -> 어려운것 순으로 하는것이 좋다. 문제를 해결했을때 처음에 내가 작성한 "의심 리스트"에 해당 문제가 없었다면 아직 경험이 부족하거나 관련 지식이 불충분한 것이다. 0. 모든 device driver 에 check list 0순위는 전원과 enable gpio high 이다. 1. slave address 보통 slave address 는 spec대로 입력하면 I2C 드라이버 내부적으로 1bit 를 왼쪽으로 shift 해서 사용한다. 혹시 I2C 가 계속 ACK fail 이 난다면 slave address 를 더보기
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.. 더보기