[리눅스커널][가상파일시스템] 파일 객체: write 연산 세부 동작 분석
By Guillermo Austin Kim | 2019년 3월 21일 |
파일 객체: 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 _
리눅스 민트에서 시스템 전체에 적용되는 bash 설정(bashrc) 수정
By 반달가면 | 2018년 7월 4일 |
각 계정에 따른 bash shell 설정은 ~/.bashrc에 추가해 주면 되겠지만, 시스템 전체에 적용하고 싶은 설정이 있을 경우가 있다. 이 경우, 리눅스 민트(Linux Mint)에서는 /etc/bash.bashrc 파일을 편집해 주면 된다. 리눅스 민트가 우분투 계열이므로 데비안/우분투 또는 다른 데비안/우분투 계열 배포판도 아마 같을 것이라 생각된다. 레드햇 등 다른 배포판은 다를 수도 있겠다. # /etc/bash.bashrc 파일 편집 sudo vi /etc/bash.bashrc 시스템 전체에서 공통적으로 export해서 사용하고 싶은 변수가 있다거나, 명령어를 alias로 지정하고 싶을 때 이 파일을 편집하면 된다.
[라즈베리파이] 시스템 콜 - 매개 변수 점검(시스템 콜 핸들러)
By Guillermo Austin Kim | 2018년 11월 26일 |
리눅스 커널 시스템 콜 핸들러 인터페이스 함수를 열어 보면 수 많은 예외 처리 코드를 볼 수 있습니다. 유저 모드에서 시스템 콜을 호출할 때 잘못된 인자(스트링 갯수, 메모리 주소)를 전달할 수 있기 때문입니다. 먼저 write() 이라는 리눅스 시스템 저수준 함수를 살펴보겠습니다. write() 함수를 호출할 때는 다음 6번 째 줄 코드와 같이 세 가지 인자를 전달해야 합니다.[https://android.googlesource.com/platform/system/core/+/master/init/uevent_listener.cpp]1 ListenerAction UeventListener::RegenerateUeventsForDir(DIR* d,2
[라즈베리파이] 커널 타이머 -동적 타이머는 누가 언제 호출하나? (3)
By Guillermo Austin Kim | 2018년 8월 29일 |
커널 시스템 타이머 전체 흐름에서 4단계를 분석할 차례입니다. [그림 ] 커널 타이머 전체 흐름도 4단계마지막 4단계인 커널 시스템 타이머가 동적 타이머를 종료하고 동적 타이머 핸들러 함수를 호출하는 동작을 살펴보겠습니다. 주석문을 지우고 본 run_timer_softirq() 함수 구현부는 다음과 같습니다. 1 static __latent_entropy void run_timer_softirq(struct softirq_action *h)2 {3struct timer_base *base = this_cpu_ptr(&timer_bases[BASE_STD]);4base->must_forward_clk = false;56__run_timers(base);7if (IS_ENABLED(