일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Android
- Network
- slub
- Kernel
- kafka
- pmap
- Linux
- allocator
- vm_area_struct
- buddy_system
- devicedriver
- Apache
- multiqueue
- mm_struct
- kmalloc
- slowpath
- lruvec
- BLOCK
- blk-mq
- proc
- fastpath
- 카프카
- strex
- NDK
- vmalloc
- memory
- commit
- spinlock
- page
- slab
- Today
- Total
목록Linux (29)
Art of Pr0gr4m
Character Device Driver는 유저 프로세스로부터 직접 (버퍼 캐시 등을 사용하지 않고) 데이터를 읽고 쓰는 디바이스 드라이버다. 이 외에 블록 디바이스, 네트워크 디바이스 드라이버는 추후 포스팅 예정 리눅스는 VFS를 통해 디바이스를 파일로 다루고 있다 /dev 아래 있는 디바이스 파일(노드)들은 디바이스와 커널 및 응용프로그램간 인터페이스를 제공한다 디바이스의 major number는 디바이스들을 구분하기 위해 사용하며 minor number는 동일한 디바이스가 여러 개 있을 때, 이들을 구분하기 위해 사용한다 1. struct file_operations struct file_oeprations 구조체는 드라이버와 유저 프로세스간의 인터페이스로, 함수 포인터로 선언되어있는 멤버들을 구..
1. Hello 모듈 작성 모듈이 초기화 될 때의 엔트리 포인트를 module_init에 등록, 모듈이 제거 될 때의 엔트리 포인트를 module_eixt에 등록 MODULE_LICENSE에 라이센스 기재 이 후 빌드를 위한 Makefile 작성 make 명령으로 빌드 성공 시 hello.ko 커널 오브젝트가 생성됨 insmod로 모듈 삽입, rmmod로 모듈 제거 2. 모듈 참조 작성한 함수를 외부에 커널 심볼로 공개하기 위해서는 EXPORT_SYMBOL 매크로 사용 참고로 커널 영역에서 공개되는 심볼 리스트는 /proc/kallsyms에서 볼 수 있음 심볼 타입은 링크 참고 이 후 Makefile 오브젝트 목록에 callee.o와 caller.o를 추가하여 빌드하면 callee.ko와 caller.k..
1. 리눅스 환경에서 분석 vi + ctags + cscope + taglist를 이용해서 분석 2. 윈도우 환경에서 분석 source insight 를 이용하여 분석 3. 웹 환경에서 분석 엘릭서 사이트 이용 https://elixir.bootlin.com/linux/latest/source
1. systemcall table에 시스템콜 추가하기 vi /arch/x86/entry/syscalls/syscall_64.tbl 마지막 라인에 새로운 시스템 콜 추가 548 64 mycall __x64_sys_mycall 549 64 get_cpu_info __x64_sys_get_cpu_info 2. 헤더 파일에 선언 추가하기 vi include/linux/syscalls.h 함수 선언 추가 (편의를 위해 예시에선 syscalls.h 파일 안에 구조체도 함께 정의) struct cpu_info { char vendor_id[16]; char model_id[64]; unsigned int cache_size; }; asmlinkage long sys_mycall(void); asmlinkage lo..