리눅스커널
Posts
154 posts[리눅스커널][가상파일시스템] 파일 객체: write 연산 세부 동작 분석
파일 객체: write 연산 세부 동작 분석 유저 공간에서 write() 함수를 호출할 때 가상 파일시스템에서 어떤 흐름으로 파일 별 write 오퍼레이션을 수행하는지 살펴보겠습니다. 유저 공간에서 리눅스 저수준 함수로 write() 함수를 호출하면 시스템 콜을 발생시켜 커널 공간으로 실행 흐름을 스위칭합니다. 이 후 write()에 해당하는 시스템 콜 핸들러인 sys_write() 함수를 호출합니다. 먼저 sys_write() 함수 선언부와 인자와 반환값을 확인하겠습니다.[https://elixir.bootlin.com/linux/v4.19.30/source/include/linux/syscalls.h]asmlinkage long sys_write(unsigned int fd, const char _
[리눅스커널][디버깅] 임베디드 디버거 전설 Trace32
임베디드 디버거 전설 Trace32 Trace32(T32)는 임베디드 소프트웨어에서 많이 쓰고 있는 전설적인 디버깅 프로그램입니다.다른 RTOS 개발에도 Trace32를 많이 쓰고 있으며 대부분 임베디드 개발자는 Trace32를 다룰 줄 압니다. 실전 개발에서는 너무나 유명하고 인기 있는 디버깅 프로그램이니 신입 개발자들은 잘 숙지하도록 합시다. Trace32는 여러 가지 강력한 디버깅 기능과 다양한 명령어를 지원합니다.세부 내용은 이 책의 범위를 넘어서므로 다루지 않습니다. 실전 개발에 적용할 수 있는 Trace32 사용법(커널 크래시 디버깅)은 저의 개인 Youtube 채널로 방문하면 됩니다. 이 책에서는 Trace32 시뮬레이터 기능을 활용해 커널 자료 구조를 소개합니다. 신입 개발자가 참고할만
[라즈베리파이] 특정 브랜치(rpi-4.14.y)로 소스 코드 내려받기
라즈베리파이에서 가장 많이 쓰는 라즈비안은 꾸준히 최신 커널 버전을 지원합니다. 최신 라즈비안 커널 소스 코드 내려받기 먼저 다음 명령어를 입력해 라즈비안 최신 커널 소스를 내려 받겠습니다."git clone --depth=3000" root@raspberrypi:/home/pi/RPi_kernel_src# git clone --depth=3000 into 'linux'...remote: Enumerating objects: 85646, done.remote: Counting objects: 100% (85646/85646), done.remote: Compressing objects: 100% (65774/65774), done.Receiving objects: 33% (28569/85646), 4
[리눅스커널][디버깅] 유저공간 High Memory Zone 페이지 할당 과정
커널 크래시가 발생한 콜스택은 다음과 같습니다.프로세스는 이름은 Debugger인데 유저 프로세스입니다.-001|__dabt_svc(asm)-->|exception-002|__list_del(inline)-002|list_del(inline)-002|buffered_rmqueue(inline)-002|get_page_from_freelist(?, ?, order = 0, ?, high_zoneidx = 0, alloc_flags = 449, pref-003|__alloc_pages_nodemask(gfp_mask = 33685722, order = 0, zonelist = 0xC1731380, nodema-004|__alloc_zeroed_user_highpage(inline)-004|alloc_zer


