2013-07-12 1 views
3

최근 kobjects 및 sysfs에서 커널을 조사했습니다. 어쩌면 kobjects의 계층하지만 아무것도 (userspace가 sysfs에 어떻게 쓸 수 있습니까?

가 나는 알고있다/다음 ..

  • 모든 커널 개체> 0x80000000에
  • kobjects이 규칙에
  • sysfs를 예외 없어야 주소를 사용하는 것을 이해하지 확인 ksets 및 기타 케이 *의 stuff..not)이 정보 감안할 때

을 포함, 나는 정확히 어 이해 확실하지 않다 언제 실행합니까? echo ondemand >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

이 cpufreq 모듈에는이 '파일'에 대한 쓰기를 처리하는 store_scaling_governor이라는 기능이 있습니다.이 간단한 에코를 사용하면 usermode가 어떻게 초월합니까?

답변

6

echo ondemand >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 명령을 실행하면 쉘이 write 시스템 호출을 호출 한 다음 커널이 해당 처리기를 위해 커널을 디스패치합니다.

cpufreq 설정 struct kobj_type ktype_cpufreqsysfs_ops입니다. 그런 다음 cpufreq cpufreq_add_dev_interface()에 등록하십시오. 그 후 커널은 write syscall에서 실행될 해당 핸들러를 얻을 수 있습니다.

+3

정확하게 말해서 쉘은/sys/devices/system/cpu/cpufreq/scaling_governor를 실행 한 다음 하위 프로세스를 포크하고 파일 설명자를 stdout (1)로 이동 한 다음 "ech o "프로그램은 write() 시스템 호출을 호출하여"ondemand \ n "을 stdout (드라이버 코드로 전달됨)에 씁니다. – jtchitty

0

나는 sysfs (쉘 프롬프트의 사용자 공간)에서 커널 공간 변수에 액세스하는 데 사용한 하나의 구현을 말할 수 있습니다. 기본적으로 sys 파일 시스템의 사용자 공간에 노출 된 각 변수 세트는 별도의 쉘 프롬프트 (사용자 영역)에서 echo 값>/sys/file-path를 출력 할 때 /sys/에있는 파일. .store 메소드의 커널 공간에서 호출되는 각각의 메소드. cat/sys/file-path를 실행하십시오. 호출되는 각각의 메소드는 커널에서 보여줍니다. 여기에 대한 자세한 정보는 다음에서 볼 수 있습니다 : http://lwn.net/Articles/31220/