[질문] kernel level에서 HDIO_DRIVE_CMD 보내려면 어찌해야 할까요?

gandarf의 이미지

안녕하세요?

linux kernel 2.6.18에서 HDD 온도를 읽어오는 device driver를 만들고 있는데 시작부터 좀 막막하네요.
application으로 구현은 미리 해 뒀는데 이걸 device driver로 다시 구현해야 하는 상황입니다.
첨엔 단순하게 생각했는데, kernel level에서 사용하지 못하는 함수들이 있어서 고민입니다.

단순화 한 application code입니다.

void read_temp(void)
{
  __u8 data[4+512] = {WM_SMART, 0xE0, 0xD5, 1, };
  int fd = open("/dev/sda/", O_RDONLY);
  ioctl(fd, HDIO_DRIVE_CMD, &data);
  printf("HDD temperature is %d\n", data[204]);
  close(fp);
}

이걸 device driver로 구현을 해야 하는데 당장 open부터 걸리네요.
open이야 filp_open으로 처리한다고 해도 그 뒷단이 너무 지저분하게 될것 같습니다.

어떻게 해야 잘 했다고 소문이 날까요? ^^
따듯한 도움의 손길을 바랍니다~

bushi의 이미지

libata 쪽에 특별한 설비도 없고...
built-in 으로만 사용하실 거라면 vfs_ioctl() 계열이 있지만 module 로 하실거라면 이것도 못쓰고...

계속 모니터 해야한다면 procfs 를 통해 유저모드 데몬이 주기적으로 입력하게 만들 수 있고,
필요할 때 알아내기만 하면 된다면 call_usermodehelper() 로 어플리케이션을 실행시켜서 procfs 로 입력받도록 만들 수 있고요.

OTL