Q1) system/core/init/init.c의 main()에 보면, /dev, /dev/pts, /proc, /sys 등의 디렉토리를 생성하고 마운트하는데, 마운트 대상이 되는 실제 (물리적인) directory는 어디에서 오는가? (kernel이 부팅되면 filesystem을 구성하는 과정을 알고 싶은것?)
A)

Q2) /proc/cmdline, /proc/cpuinfo 등은 언제, 누가 생성하는가? 내용은 어디로부터 가져오는가? 기 입력된 고정된 데이터?
A)

Q3) system/core/init/init.c의 main()에서, property_set() 함수를 이용하여 몇몇 프로퍼티를 초기화하는 부분이 있는데, "부트로더로부터 커널로 전달된 부팅옵션의 내용"을 분석 import_kernel_nv() 해서 ro.factorytest ro.serialno ro.bootmode등을 초기화 한다. "부트로더로부터 커널로 전달"은 어떻게 이루어 지는가?
A)

Q4) SIGCHLD signal handling을 위해 socketpair() 함수를 통해 생성되는 2개의 socket을 이용하는 이유는?
(하나는 sigchld_handler에서 사용하고 다른 하나는 이벤트 핸들러(?)에서 사용된다.)
[참고] socketpair() 함수는 소켓 쌍을 생성한다. 생성된 소켓 쌍은 서로 구별할 수 없다. 보통 부모 자식 프로세스간 내부 통신(IPC)를 위해서 사용한다.
A)

Q5) dmesg를 이용하여 kmsg를 확인해 보면, start_kernel() 함수에서 출력하는 printk msg도 출력된다. stdout을 /dev/kmsg로 redirection하는 코드는 init process에서 실행되는데, 어떻게 그 전에 실행되는 start_kernel()의 printk msg도 보일까? /dev/kmsg로 redirection 되기 이전의 stdout도 buffering 되어 있다는 의미인가?
A)

Q6) 왜 android root file system image에는 "/dev" directory가 존재하지 않는가?
A)

Q7) android에서 사용하는 property service는 각 property 별로 사용자권한을 uid로 관리한다. "실제 구현하려는 시스템이 동작 중에 프로퍼티 설정을 변경할 필요가 있다면 각 프로퍼티에 대한 접근 권한을 고려하여 구현해야 한다"라고 되어 있는데, 어떤 프로세스에서 특정 property를 수정해야 할 필요성이 있다면, 어떻게 해당 프로세스를 특정(필요한) uid로 실행할 수 있는가? application level에서도 가능한 것인가?
A)

Q8) 위 Q7에 추가적으로, 만약 다른 uid를 필요로하는 property를 변경할 필요성이 있는 경우에는 어떻게 dynamic하게 uid를 변경하여 해당 property를 변경할 것인가?
A)

Q)
A)

Q)
A)

Posted by 세월의돌